blob: 018ba092de78afc6d4dfb925e5c7d389dd2d6348 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# IT-Infrastruktur für den Stadtteilbeirat Heimfeld
Dieses Git-Repository enthält den Quellcode für Konfiguration und Verwaltung von Rechnern, welche Dienste unter der DNS-Domain `heimfeld.hamburg` bereitstellen.
## Vorbereitung
Um mit dem Code zu arbeiten, zunächst Nix installieren:
- Debian/Ubuntu
```bash
apt install --yes curl git jq nix
```
- Arch
```bash
pacman --sync --refresh --noconfirm curl git jq nix
```
Anschließend Flakes aktivieren:
```bash
echo extra-experimental-features = nix-command flakes >> /etc/nix/nix.conf
```
Beim ersten Aufruf von `nix run` oder `nix flake check` werden Abhängigkeiten geladen oder gebaut, was eine Weile dauern kann.
Spätere Aufrufe sind viel schneller, da nur Änderungen verarbeitet werden müssen.
## Abläufe
### SSH einrichten
Folgendes in `~/.ssh/config` eintragen:
```
Host tharos
ForwardAgent yes
HostName 81.169.239.254
IdentityFile /home/<user>/.ssh/tharos
```
wobei `<user>` das eigene lokale Linux-Benutzerkonto ist.
### Administrator hinzufügen
Nutzernamen von Administratoren und ihre SSH-Keys sind unter [`keys`](./keys) organisiert.
Das Format des Ordners ist in [`keys.nix`](./keys.nix) dokumentiert.
Sich selbst als Administrator mit genau einem SSH-Schlüssel hinzuzufügen:
```bash
cat ~/.ssh/foo.pub > ./keys/$USER
```
Sich selbst als Administrator mit mehreren Schlüsseln hinzuzufügen:
```bash
mkdir .keys/$USER
cp ~/.ssh/foo.pub > ./keys/$USER/
cp ~/.ssh/bar.pub > ./keys/$USER/
```
### Tests durchführen
```bash
nix flake check
```
### Konfiguration lokal ausprobieren
```bash
nix run .#vm-tharos
```
Dieser Befehl startet eine virtuelle Maschine mit der exakten Konfiguration des Produktionssystems.
Anschließend kann man sich über SSH mit dem auf der Maschine eingerichteten Nutzer und dem entsprechenden SSH-Key verbinden:
```bash
ssh localhost -p 10022 -o ForwardAgent=yes -i ~/.ssh/tharos
```
Der SSH-Port ist entsprechend der VM-Konfiguration versetzt um Konflikte mit möglicherweise bestehenden Diensten auf dem Host zu vermeiten.
`ForwardAgent=yes` ist erforderlich, um Befehle mit `sudo` auszuführen, wobei die Authentifizierung über direkt SSH statt einem Passwort erfolgt.
### Eine neue Maschine aufsetzen
**ACHTUNG: Alle Daten auf dem Zielsystem werden dabei gelöscht!**
```bash
nix run .#infect-tharos
```
Die NixOS-Installation erfolgt mit [`nixos-anywhere`](https://nix-community.github.io/nixos-anywhere/).
Mit dem laufenden Produktionssystem über SSH verbinden:
```bash
ssh tharos
```
### Geänderte Konfiguration anwenden
```bash
nix run .#deploy-tharos -- switch
```
## Architektur
Die Systeme laufen auf NixOS und werden mit Nix verwaltet.
Dokumentation zu beiden ist zu finden unter <https://nix.dev>.
Die wesentlichen Aspekte sind dort die [Nix-Sprache](https://nix.dev/tutorials/nix-language) und das [Modulsystem](https://nix.dev/tutorials/module-system/).
Der Code hier ist modular organisiert mit Flake Parts, was es einfacher macht isolierte Änderungen vorzunehmen und die Lesbarkeit verbessern hilft.
Flake Parts sind dokumentiert unter <https://flake.parts>.
Zusätzlich wird mit `flakes.machines` eine eigene Abstraktion verwendet um Systeme und entsprechende Hilfswerkzeuge zu konfigurieren.
Dies ist momentan nur im Quellcode dokumentiert in [`machines.nix`](./machines.nix).
Zur Zeit ist genau eine Maschine in Betrieb, die in [`tharos.nix`](./tharos.nix) spezifiziert ist.
Der Server läuft bei [STRATO](https://www.strato.de) unter Kundennummer 73292174, Auftragsnummer 7709638.
|