"Wenn du einen Apfelkuchen von Grund auf selbst machen willst, musst du zuerst das Universum erschaffen." – Carl Sagan
Festplattenlayout
Das Image verwendet eine GPT-Partitionstabelle:
| Partition | Größe | Dateisystem | Bezeichnung |
|---|---|---|---|
| p1 | 10G | F2FS | Fleur_de_Lys_Root |
| p2 | 20G | bcachefs | Fleur_de_Lys_Sources |
| p3 | 10G | bcachefs | Fleur_de_Lys_Home |
Voraussetzungen
Ein Linux-Host mit folgenden Komponenten:
losetup,mount,chroot(util-linux)- F2FS- und bcachefs-Dateisystemunterstützung (
f2fs-tools,bcachefs-tools) - Standard-Entwicklungswerkzeugkette (gcc, g++, make, binutils, usw.)
Führen Sie bash tests/version-check.sh aus, um zu überprüfen, ob Ihr Host über die erforderlichen Werkzeuge verfügt.
Verwendung
Alle Befehle erfordern Root-Rechte.
sudo make mount # Image einbinden und Partitionen in mnt_image/ einhängen
sudo make run # Einhängen + virtuelle Dateisysteme binden + chroot-Shell öffnen
sudo make umount # Alles aushängen und Loop-Gerät trennen
Erstellen des Images von Grund auf
Um ein neues leeres Festplattenimage (20 GB) mit Partitionstabelle und formatierten Dateisystemen zu erstellen:
sudo bash scripts/build_os.sh
Projektstruktur
Fleur_de_Lys.img # Das Festplattenimage
mnt_image/ # Einhängepunkt (erstellt von make mount)
Makefile # Ziele zum Einhängen, Ausführen und Aushängen
docker/ # Mehrstufige Docker-Build-Umgebung
Dockerfile # Build-Ebenen Stufe 1 und 2
engine/ # Build-Skripte (fleur-build.sh, usw.)
recipes/ # Software-Build-Anleitungen nach Stufe
etc/
os-release # Distributionskennung
scripts/
build_os.sh # Neues Festplattenimage erstellen und partitionieren
build_img.sh # Hilfsskript zur Image-Erstellung
mount.sh # Legacy-Einhängeskript
tests/
version-check.sh # Überprüfung der Host-Werkzeugkettenanforderungen
Docker-Werkzeugkettenumgebung
Die Werkzeugkette und die Zwischensystemwerkzeuge werden mit einem mehrstufigen Docker-Build erstellt:
- Stufe 1 (toolchain-builder): Bootstrap des Compilers (gcc/clang), binutils und glibc.
- Stufe 2 (temp-tools-builder): Erstellt alle cross-kompilierten Dienstprogramme (bash, coreutils, python, meson, ninja, usw.) in
/tools.
So erstellen Sie die Werkzeugkettenumgebung:
cd docker
make build
