# 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 . 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 . 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.