Ein modulares Bash-System zum automatisierten Aufbau einer eigenen Debian-Installation auf Basis von debootstrap.
Das Projekt baut zunächst ein minimales Debian-System auf und erweitert dieses anschließend Schritt für Schritt über konfigurierbare Installationsmodule. Dadurch lassen sich unterschiedliche Installationen aus derselben Basis reproduzierbar aufbauen – von einer schlanken CLI-Installation bis zu einem Desktop-System.
- Debian-Basis mit
debootstrap --variant=minbase - modularer Installationsablauf über
INSTALL_STEPS - Installation und Konfiguration innerhalb eines Chroots
- frei konfigurierbare Paketlisten
- optionaler GRUB-Bootloader für BIOS oder UEFI
- optionale MATE-Desktop-Umgebung
- Benutzeranlage und Gruppenverwaltung
- optionales automatisches Login über LightDM
- zusätzliche Installer für ausgewählte Desktop-Anwendungen
- optionaler Folding@Home-Client
- Unterstützung für eigene Erweiterungsmodule
- Hilfsskripte für weitere Installations-/Image-Workflows
Der grundlegende Ablauf sieht vereinfacht so aus:
Host
│
├─ debootstrap
│ │
│ ▼
│ minimale Debian-Basis
│ │
│ ▼
│ /debootstrap/install.sh
│ │
│ ├─ base
│ ├─ Netzwerk / System
│ ├─ Desktop
│ ├─ Benutzer
│ ├─ Bootloader
│ └─ weitere Module
│
▼
fertig konfiguriertes Debian-System
Der eigentliche modulare Teil befindet sich unter:
template/debootstrap/
template/debootstrap/install.sh liest INSTALL_STEPS aus der Konfiguration. Für jeden angegebenen Step werden die vorhandenen Shell-Skripte aus dem entsprechenden Verzeichnis in Dateinamen-Reihenfolge ausgeführt.
Beispiel:
INSTALL_STEPS=base,pkg-foldingAtHome,desktop,user,bootloaderDamit entscheidet die Konfiguration, welche Teile des Systems aufgebaut werden.
Auf dem Host werden unter anderem benötigt:
- Debian/Linux
- Root-Rechte bzw.
sudo - Internetzugang
debootstrap- ein geeignetes Ziel für die Installation
Debootstrap kann beispielsweise über APT installiert werden:
sudo apt install debootstrapgit clone https://github.com/LFF5644/debootstrap.git
cd debootstrapDie zentrale Konfiguration befindet sich in:
config.env
Dort werden unter anderem Installationsschritte, Zielpfade, Bootloader und Benutzeroptionen festgelegt.
Danach kann der Builder gestartet werden:
sudo ./debootstrap.shWichtig: Das Skript kann abhängig von der Konfiguration auf reale Zielgeräte bzw. Dateisysteme zugreifen. Prüfe config.env daher vor dem Start sorgfältig.
Die wichtigste Datei ist:
config.env
Ein zentraler Schalter ist INSTALL_STEPS.
Beispiel:
INSTALL_STEPS=base,desktop,user,bootloaderDadurch können Installationsprofile zusammengestellt werden, ohne den eigentlichen Installer umzuschreiben.
Weitere Konfigurationsbereiche umfassen unter anderem:
| Bereich | Beispiele |
|---|---|
| Zielsystem | Arbeits-/Installationspfade |
| Installation | INSTALL_STEPS, Chroot-Modus |
| Bootloader | none, grub-efi, grub-pc |
| Hostname | neuer System-Hostname |
| Benutzer | Benutzername, Gruppen |
| Root | optionales Root-Passwort |
| Desktop | MATE / Desktop-Pakete |
| Autologin | LightDM-Autologin |
| Folding@Home | Client, Autostart, Konfiguration |
Die konkrete Konfiguration kann sich mit der Weiterentwicklung des Projekts ändern. Maßgeblich ist daher immer die aktuelle config.env.
Die wichtigsten Bestandteile:
.
├── debootstrap.sh
├── config.env
├── copy_to_real.sh
├── squashfs.sh
├── prompt.sh
├── packages-include.txt
├── packages-exclude.txt
├── IDEAS.md
│
└── template/
└── debootstrap/
├── install.sh
├── base/
├── bootloader/
├── desktop/
├── user/
├── pkg-foldingAtHome/
└── ...
Der Einstiegspunkt auf dem Host.
Er bereitet die Debian-Basis vor, verarbeitet die Paketlisten und startet anschließend den eigentlichen Installationsablauf im vorbereiteten System.
Zentrale Konfiguration des Builders.
Der zentrale Dispatcher innerhalb des Chroots.
Er liest INSTALL_STEPS und führt die zugehörigen Module aus.
Hier liegen die eigentlichen Installationsmodule.
Neue Funktionen können dadurch als eigene Steps ergänzt werden.
Hilfsskript für das Übertragen bzw. Weiterverarbeiten des erzeugten Systems auf ein reales Ziel.
Zusätzliches Hilfsskript für einen SquashFS-/Live-System-orientierten Workflow.
Paketlisten liegen sowohl im Projektroot als auch innerhalb der jeweiligen Module.
Beispiele:
packages-include.txt
packages-exclude.txt
template/debootstrap/base/
template/debootstrap/desktop/
Dadurch können Basispakete und optionale Komponenten getrennt gepflegt werden.
Das Projekt verwendet mehrere Paketlisten, statt sämtliche Pakete direkt in die Bash-Skripte zu schreiben.
Dadurch können Installationen relativ einfach angepasst werden.
Beispielsweise gibt es Listen für:
- Basis-Pakete
- CLI-/Systemwerkzeuge
- Netzwerkwerkzeuge
- Desktop-/MATE-Pakete
- GTK-Anwendungen
- GRUB BIOS
- GRUB EFI
- optionale Zusatzsoftware
Einige Pakete sind bewusst auskommentiert und können bei Bedarf aktiviert werden.
Zusätzlich können mit den globalen Include-/Exclude-Listen Pakete zur Installation hinzugefügt oder ausgeschlossen werden.
Das Projekt kann optional eine MATE-Umgebung aufbauen.
Dazu gehören unter anderem:
- MATE Desktop
- LightDM
- Xorg
- MATE Panel
- MATE Terminal
- MATE System Monitor
- MATE Power Management
- passende Themes/Icon-Pakete
Zusätzliche Desktop-Anwendungen werden über eigene Module installiert.
Beispiele im Projekt sind:
- Firefox ESR
- VLC
- Audacity
- Git
- GParted
- Remmina
- Mixxx
- Discord
- Signal Desktop
- Spotify
- Sublime Text
- Redshift
Nicht jede Anwendung ist standardmäßig aktiviert. Welche Komponenten tatsächlich installiert werden, hängt von der Konfiguration und den Paketlisten ab.
Das Benutzer-Modul kann einen normalen Benutzer anlegen und ihn mehreren konfigurierten Gruppen hinzufügen.
Zusätzlich kann optional:
- ein Root-Passwort gesetzt werden
- ein automatisches Login über LightDM eingerichtet werden
Das Autologin-Modul verwendet dafür eine LightDM-Konfiguration und setzt die MATE-Session als Sitzung.
Unterstützt werden konfigurierbar:
none
grub-pc
grub-efi
Damit kann der Builder sowohl für klassische BIOS-Systeme als auch für UEFI-Installationen verwendet werden.
Die genaue Partitionierung und die verwendeten Geräte hängen von der jeweiligen config.env und dem Zielsystem ab.
Achtung: Bootloader- und Partitionsoperationen sind potentiell destruktiv. Vor einer Installation unbedingt die Zielgeräte und Konfiguration kontrollieren.
Eine der wichtigsten Eigenschaften des Projekts ist die modulare Struktur.
Ein neuer Installationsschritt kann grundsätzlich als eigenes Verzeichnis unter:
template/debootstrap/
angelegt werden.
Beispiel:
template/debootstrap/
└── my-feature/
├── 00-install.sh
├── 10-config.sh
└── 20-service.sh
Anschließend wird der Step in INSTALL_STEPS aufgenommen:
INSTALL_STEPS=base,my-feature,user,bootloaderDie Nummerierung der Dateien kann genutzt werden, um die Reihenfolge innerhalb eines Moduls festzulegen.
Dadurch lässt sich der Builder erweitern, ohne den zentralen Installer mit immer mehr Sonderfällen zu füllen.
Das Projekt enthält außerdem ein optionales Modul für Folding@Home.
Das Modul kann unter anderem:
- den Client nach
/opt/fah-clientinstallieren - einen eigenen Systembenutzer anlegen
- einen systemd-Service erzeugen
- den Dienst optional automatisch starten
- die Client-Konfiguration mit Benutzer-/Teamdaten vorbereiten
Die Zugangsdaten bzw. Tokens gehören in die lokale Konfiguration und sollten niemals in das öffentliche Repository committed werden.
Das Projekt verwendet zusätzlich eine lokale secrets.env.
Dort können sensible Werte abgelegt werden, die nicht Bestandteil der öffentlichen Projektdateien sein sollten.
Keine Passwörter, Tokens oder andere Zugangsdaten in Git committen.
Vor dem Veröffentlichen oder Pushen sollte insbesondere geprüft werden, ob lokale Konfigurationsdateien persönliche oder infrastrukturelle Informationen enthalten.
Dieses Repository ist kein universeller Debian-Installer wie der Debian-Installer selbst.
Es ist vielmehr ein persönlicher, modularer System-Builder, der darauf ausgelegt ist, eine definierte Debian-Umgebung automatisiert aus einer minimalen Basis aufzubauen.
Der Schwerpunkt liegt auf:
- reproduzierbaren Installationen
- persönlicher Systemkonfiguration
- modularen Bash-Skripten
- schneller Anpassbarkeit
- kleinen/minimalen Debian-Basen
- Experimentieren mit eigenen Installationsworkflows
Einige Hilfsskripte und Module befinden sich entsprechend im Entwicklungs-/Experimentierstadium.
Einige Debian-Pakete können interaktive Konfigurationen auslösen. Besonders bei keyboard-configuration oder ähnlichen Paketen kann dies relevant sein.
Prüfe in diesem Fall die Paketinstallation und die verwendeten Debconf-/APT-Einstellungen.
Prüfe:
- korrektes Zielgerät
- BIOS vs. UEFI
- gemountete EFI-Partition bei UEFI
- vorhandene
/dev,/procund/sysBind-Mounts im Chroot - verwendete GRUB-Pakete
Der Installationsablauf benötigt innerhalb des Chroots Zugriff auf die für die Installation notwendigen virtuellen Dateisysteme.
Der Host-seitige Installer kümmert sich entsprechend um die benötigten Mounts.
Der modulare Aufbau eignet sich auch dafür, verschiedene Profile zu definieren.
Beispielsweise:
INSTALL_STEPS=base,userINSTALL_STEPS=base,desktop,user,bootloaderINSTALL_STEPS=base,pkg-foldingAtHome,desktop,user,bootloaderWelche Kombination sinnvoll ist, hängt vom Zielsystem ab.
Wenn du das Projekt erweitern möchtest:
- vorhandene Module ansehen
- einen eigenen Step unter
template/debootstrap/erstellen - die Shell-Skripte nummerieren
- benötigte Pakete in einer Paketliste definieren
- den neuen Step in
INSTALL_STEPSaufnehmen - auf einer Testinstallation prüfen
Dabei sollten Module möglichst eigenständig bleiben und keine unnötigen Änderungen am zentralen install.sh benötigen.
Dieses Projekt arbeitet mit Root-Rechten und kann abhängig von der Konfiguration Dateisysteme, Partitionen, Bootloader und Systemdateien verändern.
Nicht auf einem produktiven System testen, ohne die Konfiguration und Zielgeräte vorher zu überprüfen.
Backups wichtiger Daten werden ausdrücklich empfohlen.
Eine verbindliche Lizenz sollte im Repository separat als LICENSE hinterlegt werden. Solange keine entsprechende Lizenzdatei vorhanden ist, gelten die normalen urheberrechtlichen Schutzbestimmungen.
LFF5644
Persönlicher Debian-/Linux-System-Builder mit Fokus auf Bash, Automatisierung und modularen Installationsabläufen.
Repository: