diff --git a/autoinstall/README.md b/autoinstall/README.md index f16d917..07d3fb7 100644 --- a/autoinstall/README.md +++ b/autoinstall/README.md @@ -1,20 +1,19 @@ # Autoinstall-Seed für die EspoCRM-Kunden-VM `user-data` und `meta-data` bilden eine NoCloud-Quelle. Das Verzeichnis ist öffentlich abrufbar – es enthält deshalb -**keine Geheimnisse** (kein benutzbares Passwort, kein RMM-Token; siehe [ADR 0004](../docs/decisions/0004-bootstrap-der-kunden-vm.md)). +**keine Geheimnisse** (kein benutzbares Passwort, kein RMM-Token; siehe ADR 0004 im internen Repository `espoCRM/espo-fleet-ops`). ## Ablageort -**Für den Testbetrieb (Entscheidung 22.09.2026, Variante 1):** Der Seed liegt zusätzlich in -`gordon.zimm/ubuntu-autoinstall` unter `espocrm/`, weil der Installer ohne Anmeldung abruft und die Organisation -`espoCRM` anonym nicht lesbar ist. Boot-Zeile: +**Entschieden am 23.09.2026 (O-26):** Der Installer ruft ohne Anmeldung ab; dieses Repo ist deshalb der +Ablageort des Seeds. Boot-Zeile: ``` autoinstall ds=nocloud-net\;s=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main/autoinstall/ ``` -**Dieses Verzeichnis ist die Quelle.** Änderungen hier vornehmen und anschließend nach `ubuntu-autoinstall/espocrm/` -kopieren (`user-data`, `meta-data`). Der endgültige Ablageort bleibt offen → O-26. +**Dieses Verzeichnis ist die Kopie, die der Installer abruft.** Geändert wird im internen Repository +`espoCRM/espo-fleet-ops` unter `autoinstall/`; `user-data` ist hier byteidentisch. ## Hintergrund zur Wahl (O-26) @@ -46,29 +45,10 @@ sonst startet die Installation erneut. ## Nach dem ersten Start (einmal je VM) -Die Schritte liegen auch als `/root/ERSTINBETRIEBNAHME.txt` auf der VM: - -1. An der Hyper-V-Konsole anmelden. Das **Initialpasswort** steht über dem Login-Prompt (`/etc/issue`); der Wechsel wird - erzwungen. Neues Passwort im Secure Information Store der Site hinterlegen. -2. RMM-Agent installieren – Token aus *Endpoints → Devices → Manage → Download Agent*: - - ```bash - cd /tmp && curl -fsSLOJ "" && chmod +x *_ITSPlatform_TKN*.run && sudo ./*_ITSPlatform_TKN*.run; rm -f *_ITSPlatform_TKN*.run - ``` - - `-O -J` behält den vom Server vorgegebenen Dateinamen samt `_TKN` – daraus liest der Installer den Token. - Das abschließende `rm` hängt an `;`, damit die Datei mit dem Token auch nach einem Abbruch verschwindet. - - Der Token steckt im Dateinamen; der Installer liest ihn aus seiner eigenen Aufrufzeile. Wird die Datei umbenannt - (`-o name.run`) oder nur mit `-O` geladen (dann heißt sie `setup`), fehlt der Token und muss gesetzt werden: - `sudo env TOKEN= ./datei.run`. - - Prüfen: `systemctl status ITSPlatform` und `tail /var/log/ITSPlatform-install.log`; das Gerät erscheint nach - wenigen Minuten in der Site. Einzelheiten zur Token-Übergabe: - [../docs/quellen/connectwise-rmm-notizen.md](../docs/quellen/connectwise-rmm-notizen.md) - -3. Hinweiszeile mit dem Initialpasswort aus `/etc/issue` entfernen. -4. Prüfen, dass das Gerät binnen weniger Minuten in der richtigen Site erscheint. +Die Handgriffe von der leeren VM bis zur laufenden Instanz stehen im Runbook des internen Repositorys +`espoCRM/espo-fleet-ops`, Datei `docs/runbooks/erstinbetriebnahme-kunden-vm.md` – Passwortwechsel, +Agent-Installation samt Token-Übergabe, Einstellungen am Gerät, die drei Tasks, Abschlussprüfung. +Der Seed legt dazu **keine Datei auf der VM** ab: gepflegt wird an einer Stelle, nicht auf jeder Maschine. ## Was der Seed einrichtet @@ -77,9 +57,9 @@ Die Schritte liegen auch als `/root/ERSTINBETRIEBNAHME.txt` auf der VM: | Sprache/Tastatur/Zeitzone | de_DE.UTF-8, de, Europe/Berlin | | Netz | erste Ethernet-Schnittstelle (`match: e*`), DHCPv4, kein DHCPv6 | | Konto | `administrator`, Passwort je VM zufällig, Wechsel beim ersten Anmelden erzwungen | -| SSH | Server installiert, Passwortanmeldung erlaubt ([ADR 0003](../docs/decisions/0003-zugangsmodell-ssh.md)) | +| SSH | Server installiert, Passwortanmeldung erlaubt (ADR 0003) | | Pakete | `linux-cloud-tools-virtual` (Hyper-V-Integrationsdienste), `curl`, `bzip2` | | Platten | `/` 20 GiB, swap 4 GiB, `/var/lib/docker` 20 GiB, `/srv` der gesamte Rest minus 10 GiB; die 10 GiB bleiben in der VG frei als Platz für einen LVM-Snapshot vor einem Update | | Zum Schluss | vollständiges `apt full-upgrade`, `autoremove`, `clean`, dann `poweroff` | -Hintergrund zur Aufteilung: [plattenlayout-erlaeuterung.md](../docs/entwuerfe/plattenlayout-erlaeuterung.md). +Hintergrund zur Aufteilung: `docs/entwuerfe/plattenlayout-erlaeuterung.md` im internen Repository. diff --git a/autoinstall/user-data b/autoinstall/user-data index e9db6fb..167d293 100644 --- a/autoinstall/user-data +++ b/autoinstall/user-data @@ -8,6 +8,8 @@ # -> er enthält KEIN Geheimnis: kein benutzbares Passwort, kein RMM-Token. # * Die ISO richtet nur das Minimum ein. Docker, Härtung, Logrotation, Firewall, Hostname und # Instanz kommen reproduzierbar über RMM-Tasks ("alles Weitere erfolgt über ConnectWise RMM"). +# * Der Seed legt keine Anleitung auf der VM ab. Die Handgriffe nach dem ersten Start stehen im +# Runbook espo-fleet-ops/docs/runbooks/erstinbetriebnahme-kunden-vm.md. autoinstall: version: 1 @@ -109,30 +111,7 @@ autoinstall: # 3. Hyper-V-Integrationsdienste (Zeit/IP-Meldung, Dateisystem-Quiesce für Veeam). # Normalerweise startet udev sie selbst; enable schadet nicht und darf fehlschlagen. - curtin in-target -- systemctl enable hv-kvp-daemon.service hv-vss-daemon.service || true - # 4. Kurze Anleitung für den einen Handgriff nach dem ersten Start (Passwort + RMM-Agent). - - >- - printf '%s\n' - '# Erstinbetriebnahme dieser VM - Registrierung im RMM von Hand (ADR 0004)' - '#' - '# 1. Initialpasswort steht am Konsolen-Login (/etc/issue), der Wechsel wird erzwungen.' - '# Neues Passwort im Secure Information Store der Site hinterlegen.' - '# 2. RMM-Agent installieren (Token aus: Endpoints > Devices > Manage > Download Agent):' - '# cd /tmp && curl -fsSLOJ "" && chmod +x *_ITSPlatform_TKN*.run && sudo ./*_ITSPlatform_TKN*.run; rm -f *_ITSPlatform_TKN*.run' - '# Pruefen: systemctl status ITSPlatform ; tail /var/log/ITSPlatform-install.log' - '# 3. Im RMM am Geraet einstellen, BEVOR ein Task laeuft:' - '# - Company Unique Id der Company gesetzt (liefert den Hostnamen espo-)' - '# - Geraet der richtigen Site und der Device Group EspoCRM zugeordnet' - '# - Friendly Name setzen (folgt dem Hostnamen nicht von selbst)' - '# - Custom Fields: espo_fqdn, espo_ring (0 intern, 1 Pilotkunde, 2 Produktivkunde), espo_zustand = NEU' - '# 4. Tasks in dieser Reihenfolge von Hand starten:' - '# ESPO-01-Grundeinrichtung -> Hostname, SSH-Haertung, Journal, Zeitzone' - '# ESPO-02-Docker -> Docker in gepinnter Version, Logrotation, DOCKER-USER' - '# ESPO-03-First-Deploy -> Geheimnisse, Compose aus dem Ring, EspoCRM starten' - '# ESPO-01 entfernt die Zeile mit dem Initialpasswort aus /etc/issue selbst.' - '# 5. Nach ESPO-03: Admin-Passwort in EspoCRM aendern (admin/admin) und im Safe ablegen.' - '# ERST DANACH DNS-Eintrag und Portfreigabe an der OPNsense setzen.' - > /target/root/ERSTINBETRIEBNAHME.txt - # 5. Zum Schluss alles auf den neuesten Stand bringen. `updates: all` deckt den Stand zu Beginn der + # 4. Zum Schluss alles auf den neuesten Stand bringen. `updates: all` deckt den Stand zu Beginn der # Installation ab; dieser Durchgang holt, was währenddessen dazugekommen ist, und räumt auf. # NEEDRESTART_SUSPEND verhindert Dienst-Neustarts im chroot. - curtin in-target -- sh -c 'DEBIAN_FRONTEND=noninteractive NEEDRESTART_SUSPEND=1 apt-get update'