aboutsummaryrefslogtreecommitdiff

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:

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

Quellcode abrufen

git clone https://git.heimfeld.hamburg/infra

Weitere URLs (z.B. für SSH) sind zu finden auf https://git.heimfeld.hamburg/infra/ unter Clone.

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 organisiert. Das Format des Ordners ist in keys.nix dokumentiert.

Sich selbst als Administrator mit genau einem SSH-Schlüssel hinzuzufügen:

cat ~/.ssh/foo.pub > ./keys/$USER

Sich selbst als Administrator mit mehreren Schlüsseln hinzuzufügen:

mkdir .keys/$USER
cp ~/.ssh/foo.pub > ./keys/$USER/
cp ~/.ssh/bar.pub > ./keys/$USER/

Änderungen am Quellcode hochladen

Auf dem Server muss ein SSH Public Key für den hochlandenden Nutzer von einem Administrator eingerichtet worden sein.

Erstmalig wurde der Quellcode über HTTPS abgerufen, daher muss remotes angepasst werden:

git remote set-url origin ssh://heimfeld.hamburg/git/infra

Da mehrere Nutzer Schreibzugriff auf das Repository haben, muss jeder Nutzer explizit den eigenen Zugriff mit safe.directory erlauben:

ssh tharos git config --global --add safe.directory /git/infra

Dann wie üblich:

git push origin main

Tests durchführen

nix flake check

Konfiguration lokal ausprobieren

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:

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!

nix run .#infect-tharos

Die NixOS-Installation erfolgt mit nixos-anywhere.

Mit dem laufenden Produktionssystem über SSH verbinden:

ssh tharos

Geänderte Konfiguration anwenden

nix run .#deploy-tharos -- switch

Systemüberwachung und Statistiken

Alle Metriken werden gesammelt und dargestellt auf https://grafana.heimfeld.hamburg.

Dashboards werden deklarativ verwaltet in tharos/dashboards.

Grafische Bearbeitung ist möglich in der virtuellen Maschine. Danach muss die JSON-Konfiguration exportiert und von Hand auf das Wesentliche reduziert werden.

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 und das Modulsystem.

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.

Zur Zeit ist genau eine Maschine in Betrieb, die in tharos.nix spezifiziert ist. Der Server läuft bei STRATO unter Kundennummer 73292174, Auftragsnummer 7709638.