Die Geraeteschicht — Abbild, zwei Wurzeln, Selbstprueflauf, Ruecksprung — verlaesst die Ablage der ersten Appliance und wird ein eigenes Erzeugnis mit eigenem Takt und eigenem Nachweis. Drei Gruende, nach Gewicht: Der Cyber Resilience Act verpflichtet fuer das gesamte Produkt einschliesslich der Betriebssystemschicht — vier gewachsene Basissysteme waeren vier Stuecklisten und vier Schwachstellenprozesse, eine gemeinsame Basis ist ein Dossier. Der Ruecksprung wird nur einmal richtig gebaut, weil er nur geprueft wird wenn ihn jemand braucht. Und eine abgegrenzte Aufgabe laesst sich ausschreiben, was unmittelbar auf das groesste benannte Risiko des Hauses einzahlt. Der Einwand der Vertraeglichkeitsmatrix wird durch den Nutzlast-Vertrag entkraeftet statt weggeredet: Die Nutzlast liegt in der Wurzel und wird mit ihr getauscht. Eine Fassung, ein Rueckweg, keine Matrix. Das OS kennt kein Produkt — Regel 1. Alle Namen sind entkoppelt, die Statusseite ist auf die Standardbibliothek umgestellt, weil jede Abhaengigkeit im Grund-OS eine Verpflichtung ueber die Produktlebensdauer ist. Nichts davon ist gelaufen. Der Inhalt gilt als Bauplan. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
77 lines
3.7 KiB
Bash
Executable file
77 lines
3.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Baut das Grund-Abbild der Appliance als eigenstaendiges Installationsmedium.
|
|
#
|
|
# GRUNDSATZ: Wir bauen kein Betriebssystem von Grund auf, sondern schreiben das offizielle
|
|
# Ubuntu-Server-Abbild um. Der Grund steht in ADR-0004 — Ubuntu wurde gewaehlt, WEIL die
|
|
# Serverhersteller dagegen zertifizieren und weil die signierte Startkette von Canonical
|
|
# kommt. Ein selbstgebautes System waere kein zertifiziertes Ubuntu mehr, und damit waere
|
|
# genau das Argument weg, aus dem die Wahl getroffen wurde.
|
|
#
|
|
# Aufruf: ./bauen.sh <ubuntu-server.iso> [ausgabe.iso]
|
|
set -euo pipefail
|
|
|
|
hier=$(cd "$(dirname "$0")" && pwd)
|
|
quelle=${1:?Pfad zum offiziellen Ubuntu-Server-Abbild angeben}
|
|
ziel=${2:-$hier/xinionos.iso}
|
|
kennung=XINIONOS
|
|
|
|
meldung() { printf '\033[1m==>\033[0m %s\n' "$*"; }
|
|
abbruch() { printf '\033[1;31mAbbruch:\033[0m %s\n' "$*" >&2; exit 1; }
|
|
|
|
# --- Voraussetzungen ------------------------------------------------------------------
|
|
[ "$(uname -s)" = Linux ] || abbruch "Der Bau laeuft nur auf Linux. macOS kann kein Ubuntu-Abbild erzeugen."
|
|
for werkzeug in xorriso rsync; do
|
|
command -v "$werkzeug" >/dev/null || abbruch "$werkzeug fehlt. Nachinstallieren: apt-get install xorriso rsync"
|
|
done
|
|
[ -r "$quelle" ] || abbruch "Quellabbild nicht lesbar: $quelle"
|
|
|
|
arbeit=$(mktemp -d)
|
|
trap 'rm -rf "$arbeit"' EXIT
|
|
inhalt=$arbeit/inhalt
|
|
|
|
# --- Quellabbild auspacken ------------------------------------------------------------
|
|
meldung "Quellabbild auspacken"
|
|
xorriso -osirrox on -indev "$quelle" -extract / "$inhalt" >/dev/null 2>&1
|
|
chmod -R u+w "$inhalt"
|
|
|
|
# --- Ersteinrichtung und Wurzel-Auflage beilegen ---------------------------------------
|
|
meldung "Ersteinrichtung und Wurzel-Auflage beilegen"
|
|
mkdir -p "$inhalt/xinionos"
|
|
cp "$hier/autoinstall/user-data" "$inhalt/xinionos/user-data"
|
|
: > "$inhalt/xinionos/meta-data"
|
|
rsync -a "$hier/../wurzel/" "$inhalt/xinionos/wurzel/"
|
|
|
|
# --- Startvorgang auf unbeaufsichtigte Einrichtung stellen ------------------------------
|
|
# Der Techniker legt das Medium ein und geht. Rueckfragen bei der Ersteinrichtung sind bei
|
|
# einem Geraet, das beim Kunden aufgestellt wird, kein Komfortthema, sondern eine Fehlerquelle.
|
|
meldung "Startvorgang auf unbeaufsichtigte Einrichtung stellen"
|
|
zusatz='autoinstall ds=nocloud\;s=/cdrom/xinionos/'
|
|
for datei in "$inhalt/boot/grub/grub.cfg" "$inhalt/EFI/boot/grub.cfg"; do
|
|
[ -f "$datei" ] || continue
|
|
sed -i "s|\(linux.*vmlinuz\)|\1 ${zusatz}|" "$datei"
|
|
sed -i 's/^\(set timeout=\).*/\11/' "$datei"
|
|
done
|
|
[ -f "$inhalt/isolinux/txt.cfg" ] && sed -i "s|\(append.*initrd=[^ ]*\)|\1 ${zusatz}|" "$inhalt/isolinux/txt.cfg" || true
|
|
|
|
# --- Neu zusammensetzen -----------------------------------------------------------------
|
|
# Die Startbilder eines Ubuntu-Abbilds aendern sich zwischen Fassungen. Statt Schalter fest
|
|
# einzutragen und bei der naechsten Fassung stillschweigend ein nicht startendes Medium zu
|
|
# erzeugen, fragen wir das Quellabbild, wie es selbst gebaut wurde.
|
|
meldung "Abbild neu zusammensetzen"
|
|
schalter=$(xorriso -indev "$quelle" -report_el_torito as_mkisofs 2>/dev/null \
|
|
| grep -v '^-V' | tr '\n' ' ')
|
|
[ -n "$schalter" ] || abbruch "Startbilder des Quellabbilds nicht auslesbar — Abbild vermutlich beschaedigt."
|
|
|
|
( cd "$inhalt" && eval xorriso -as mkisofs -V "$kennung" $schalter -o "$ziel" . ) >/dev/null 2>&1
|
|
|
|
# --- Nachweis ---------------------------------------------------------------------------
|
|
summe=$(sha256sum "$ziel" | cut -d' ' -f1)
|
|
printf '%s %s\n' "$summe" "$(basename "$ziel")" > "$ziel.sha256"
|
|
|
|
meldung "Fertig"
|
|
printf ' Abbild: %s\n Pruefsumme: %s\n' "$ziel" "$summe"
|
|
cat <<'HINWEIS'
|
|
|
|
Dieses Abbild ist NICHT signiert. Die Signaturpruefung vor dem Umschalten
|
|
(ADR-0004) gehoert in den naechsten Schnitt, zusammen mit dem Fassungswechsel.
|
|
HINWEIS
|