blob: d60f3dc7abd2bffd8c9e91e47e30f0c13e0fc506 (
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
|
# 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
### 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/).
Angenommen, in `~/.ssh/config` ist Folgendes eingetragen:
```
Host tharos
ForwardAgent yes
HostName 81.169.239.254
IdentityFile /home/user/.ssh/tharos
```
Dann kann man sich mit dem 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).
Nutzernamen von Administratoren und ihre SSH-Keys sind unter [`keys`](./keys) organisiert.
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.
|