#!/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 [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