aboutsummaryrefslogtreecommitdiff
path: root/README.md
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.