xinionos/abbild/bauen.sh
Thomas Reitz d9ed1bc2ff XinionOS als eigenes Erzeugnis herausgeloest
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>
2026-08-20 08:02:55 +02:00

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