MiniOS erstellen
Diese Anleitung beschreibt den vollständigen Prozess zum Erstellen von MiniOS, einschließlich System-Builds, Modulentwicklung und erweiterten Konfigurationsoptionen.
Übersicht
MiniOS verwendet ein modulares Build-System, bei dem das Betriebssystem aus einzelnen Modulen im SquashFS-Format zusammengesetzt wird. Jedes Modul enthält spezifische Softwarepakete oder Komponenten und wird in einer festgelegten Reihenfolge geladen, um das vollständige System zu bilden.
Erste Schritte
Voraussetzungen
- Neueste Version von Debian oder Ubuntu zum Erstellen
- Ausreichend freier Speicherplatz (empfohlen: 20GB+)
- Internetverbindung zum Herunterladen von Paketen
- Benötigte Pakete, aufgelistet in
linux-live/prerequisites.list
Installation der Voraussetzungen
Die Datei prerequisites.list verwendet das condinapt-Format mit bedingten Markierungen. Installieren Sie die benötigten Pakete manuell:
sudo apt-get update
sudo apt-get install sudo binutils debootstrap squashfs-tools xz-utils lz4 zstd xorriso mtools rsync curl
sudo apt-get install grub-efi-amd64-bin grub-pc-binAlternativ können Sie condinapt verwenden, um die Voraussetzungenliste zu verarbeiten, falls dies auf Ihrem System verfügbar ist.
Build-Tools
MiniOS stellt zwei Hauptwerkzeuge für den Build-Prozess bereit:
minios-cmd (Empfohlen)
Ein Kommandozeilen-Tool, das die Konfiguration und den Start des Build-Prozesses vereinfacht. Es bietet eine benutzerfreundliche Oberfläche zur Einstellung verschiedener Build-Parameter:
- Ziel-Distribution (buster, bookworm, trixie, etc.)
- Architektur (amd64, i386)
- Desktop-Umgebung (core, flux, xfce, lxqt)
- Paketvariante (minimum, standard, toolbox, ultra)
- Kernel-Optionen
- Locale- und Zeitzoneneinstellungen
Verwendung:
# Build with default configuration
minios-cmd -d bookworm -a amd64 -de xfce -pv standard
# Build with custom options
minios-cmd -d bookworm -a amd64 -de xfce -pv toolbox -c zstd -l en_US -tz "Europe/Prague"Detaillierte Informationen zur Nutzung finden Sie in der minios-cmd Dokumentation.
minios-live (Fortgeschritten)
Das zentrale Build-Skript, das den schrittweisen Build-Prozess steuert:
- Aufbau der Build-Umgebung
- Installation des Basissystems
- Integration der gewählten Desktop-Umgebung
- Erstellung des SquashFS-Dateisystems
- Konfiguration des Boot-Prozesses
- Generierung des bootfähigen ISO-Abbilds
Verwendung:
# Complete build
./minios-live -
# Specific stages
./minios-live build-bootstrap
./minios-live build-chroot - build-liveDetaillierte Informationen zur Nutzung finden Sie in der minios-live Dokumentation.
Projektstruktur
Das MiniOS-Build-System ist wie folgt organisiert:
minios-live/
├── linux-live/ # Core scripts and build libraries
│ ├── bootfiles/ # Files and templates for booting (GRUB, ISOLINUX, EFI, etc.)
│ ├── environments/ # Environment descriptions and settings
│ ├── initramfs/ # Scripts for creating initramfs
│ ├── scripts/ # Module scripts and templates
│ ├── build-initramfs # Script for separate initramfs build
│ ├── build.conf # Main build configuration file
│ ├── condinapt # Script/tool for working with package lists
│ ├── install-chroot # Script for installing into the chroot environment
│ ├── minioslib # Core Bash function library
│ └── prerequisites.list # List of required packages for installation on the host for building
├── tools/ # Auxiliary build scripts
├── minios-cmd # CLI utility for setting build parameters
└── minios-live # Main script for building MiniOSBuild-Prozess
Der Build-Prozess folgt einer strukturierten Abfolge von Phasen:
Erklärung der Build-Phasen
build-bootstrap– Erstellt das minimale Basissystem mit debootstrapbuild-chroot– Installiert Pakete und konfiguriert das System in der chroot-Umgebungbuild-live– Erstellt das Haupt-SquashFS-Image mit dem Kernsystembuild-modules– Baut zusätzliche SquashFS-Module für weitere Softwarebuild-boot– Bereitet Bootloader- und Kernel-Dateien vorbuild-config– Generiert Boot-Konfigurationsdateienbuild-iso– Erstellt das finale bootfähige ISO-Abbild
Build-Optionen
Komplettes System-Build
# Full automated build
./minios-live -
# or
./minios-live build-bootstrap - build-isoInkrementelle Builds
# Run only bootstrap stage
./minios-live build-bootstrap
# Run from chroot to live stages
./minios-live build-chroot - build-live
# Run from modules to completion
./minios-live build-modules -
# Build only ISO from existing data
./minios-live build-isoKonfigurationssystem
Build-Konfigurationsdateien
Hauptkonfiguration: linux-live/build.conf
Dies ist die primäre Konfigurationsdatei, die Folgendes definiert:
- Distributions-Einstellungen: Ziel-Distribution (buster, bookworm, trixie, sid)
- Architektur: amd64, i386, i386-pae (nur bookworm und älter; trixie und sid unterstützen nur amd64)
- Desktop-Umgebung: core, flux, xfce, lxqt
- Paketvariante: minimum, standard, toolbox, ultra
- Kompression: xz, lzo, gz, lz4, zstd
- Kernel-Einstellungen: Typ, AUFS-Unterstützung, DKMS-Kompilierung
- Locale-Einstellungen: Sprache, Zeitzone, Tastaturbelegung
Laufzeitkonfiguration: minios_build.conf
Wird während des Build-Prozesses automatisch generiert und enthält laufzeitspezifische Einstellungen für die chroot-Umgebung.
Paketvarianten
MiniOS unterstützt verschiedene Paketvarianten, die bestimmen, welche Software enthalten ist:
- minimum: Nur essentielle Pakete
- standard: Standard-Desktop-Anwendungen
- toolbox: Entwicklungswerkzeuge und erweiterte Utilities
- ultra: Vollständige Software-Suite mit zusätzlichen Anwendungen
Die Paketauswahl wird mithilfe von bedingten Markierungen in den packages.list-Dateien gesteuert:
# Install only in toolbox and ultra variants
firefox +pv=toolbox +pv=ultra
# Install only in minimum variant
basic-tool +pv=minimumModulsystem
Modulstruktur
Das Build-System verwendet eine nummerierte Modulstruktur, die sich in linux-live/scripts/ befindet:
00-core/ # Base system packages
01-kernel/ # Linux kernel
02-firmware/ # Hardware firmware
03-gui-base/ # Basic GUI libraries
04-xfce-desktop/ # Desktop environment
05-apps/ # Desktop applications
10-example/ # Example module templateModulkomponenten
Jedes Modulverzeichnis enthält:
packages.list: Liste der zu installierenden Pakete mit bedingten Markierungeninstall: Bash-Skript, das während des Modul-Builds ausgeführt wirdrootcopy-install/: Dateien, die während des Builds ins System kopiert werdenrootcopy-postinstall/: Dateien, die nach der Paketinstallation kopiert werdenskip_conditions.conf: Bedingungen zum Überspringen des Modul-Buildspatches/: Vor dem Build angewendete Patches (nicht verfügbar für 00-core)
Beispiel-Modulvorlage
Das 10-example/ Modul dient als Vorlage zur Erstellung neuer Module. Es enthält:
- Eine vollständige
packages.listmit Beispielen für bedingte Markierungen - Ein einfaches
install-Skript, das die korrekte Verwendung von condinapt zeigt - Beispielverzeichnisse
rootcopy-install/undrootcopy-postinstall/ - Dokumentationskommentare, die jede Komponente erklären
Um ein neues Modul zu erstellen: Kopieren Sie das Verzeichnis 10-example und passen Sie es nach Ihren Bedürfnissen an:
cp -r linux-live/scripts/10-example linux-live/scripts/06-my-moduleDiese Vorlage wird in dieser Dokumentation verwendet und bietet den besten Ausgangspunkt für eigene Module.
Modul-Laden basierend auf Umgebungen
Das Modulsystem funktioniert über Umgebungskonfigurationen in linux-live/environments/. Jedes Umgebungsverzeichnis enthält symbolische Links zu den Modulen, die für die jeweilige Desktop-Umgebung und Paketvariante eingebunden werden sollen.
Verfügbare Umgebungen
linux-live/environments/
├── core/ # Core system (no desktop)
├── flux/ # Flux desktop environment
├── lxqt/ # LXQt desktop environment
├── xfce/ # XFCE desktop environment
└── xfce-debug/ # XFCE with debug modulesJedes Umgebungsverzeichnis enthält symbolische Links zu Modulverzeichnissen in linux-live/scripts/:
# Example: XFCE environment
linux-live/environments/xfce/
├── 01-kernel -> ../../scripts/01-kernel
├── 02-firmware -> ../../scripts/02-firmware
├── 03-gui-base -> ../../scripts/03-gui-base
├── 04-xfce-desktop -> ../../scripts/04-xfce-desktop
├── 05-apps -> ../../scripts/05-apps
└── 06-firefox -> ../../scripts/10-firefoxModule bauen
Um Module zu bauen, verwenden Sie den Befehl build-modules:
# Build all unbuilt modules for the current environment
./minios-live build-modules
# This will build all modules that:
# 1. Are linked in the current environment directory
# 2. Haven't been built yet
# 3. Meet the skip conditions (if any)Modul-Installationsskripte
Das install-Skript in jedem Modul:
- Lädt
/minioslibfür gemeinsame Funktionen - Lädt
/minios_build.conffür die Build-Konfiguration - Setzt debconf-Auswahlen für die automatisierte Paketkonfiguration
- Führt individuelle Konfigurationen und Dateianpassungen durch
- Verwendet Konsolenfarben für die Ausgabeformatierung
Beispielstruktur:
#!/bin/bash
set -e # exit on error
set -o pipefail # exit on pipeline error
set -u # treat unset variable as error
. /minioslib
. /minios_build.conf
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
console_colors
# Debconf pre-configurations
DEBCONF_SETTINGS=(
"package-name package-name/option boolean true"
)
# Apply debconf settings
for SETTING in "${DEBCONF_SETTINGS[@]}"; do
echo "${SETTING}" | debconf-set-selections -v
done
# Custom installation and configuration logic
# ...Paketverwaltung mit CondinAPT
CondinAPT ist das System von MiniOS für die bedingte Paketinstallation und steuert die Paketauswahl basierend auf Build-Parametern wie Desktop-Umgebung, Distribution und Paketvariante.
Grundlegende Verwendung
Jedes Modul enthält eine packages.list-Datei mit bedingten Paketspezifikationen:
# Basic syntax examples
package-name # Always install
package-name +pv=toolbox # Install only for toolbox variant
package-name +de=xfce # Install only for XFCE desktop
package-name -pv=minimum # Install except for minimum variant
preferred-pkg || fallback-pkg # Try first, use second if unavailableVerwendung von CondinAPT in Modulskripten
Standardmäßige Nutzung in Modul-Installationsskripten:
# Load MiniOS library and install packages
. /minioslib || exit 1
/linux-live/condinapt \
-l "$CWD/packages.list" \
-c /linux-live/build.conf \
-m /linux-live/condinapt.mapVollständige Dokumentation
Umfassende CondinAPT-Dokumentation inklusive erweiterter Syntax, Filter, Prioritätswarteschlangen, Debug-Modi und Praxisbeispielen finden Sie unter: CondinAPT.md
Häufige Bedingungsfilter
+pv=variant– Paketvariante (minimum, standard, toolbox, ultra)+d=distribution– Distribution (bookworm, trixie, jammy, noble)+de=desktop– Desktop-Umgebung (core, flux, xfce, lxqt)+da=architecture– Architektur (amd64, i386)+dt=type– Distributionstyp (debian, ubuntu)
Erstes ISO erstellen
Schnellstart
- Repository klonen und vorbereiten:
git clone https://github.com/minios-linux/minios-live.git
cd minios-live- Voraussetzungen installieren:
sudo apt-get update
sudo apt-get install sudo binutils debootstrap squashfs-tools xz-utils lz4 zstd xorriso mtools rsync grub-efi-amd64-bin grub-pc-bin- Build mit minios-cmd (empfohlen):
./minios-cmd -d bookworm -a amd64 -de xfce -pv standard- Oder Build mit minios-live:
./minios-live -Build anpassen
- Konfiguration kopieren und bearbeiten:
cp linux-live/build.conf linux-live/build-custom.conf
# Edit build-custom.conf with your preferences- Build mit eigener Konfiguration:
BUILD_CONF=linux-live/build-custom.conf ./minios-live -Erweiterte Anpassung
Eigene Umgebungen erstellen
Sie können komplett neue Desktop-Umgebungen erstellen, indem Sie ein neues Umgebungsverzeichnis anlegen und die passenden Module konfigurieren. Beispiel für die Erstellung einer GNOME-Umgebung:
- Umgebungsverzeichnis erstellen:
mkdir -p linux-live/environments/gnome- Basis-Desktop-Modul erstellen (04-gnome-desktop):
# Start with the example template for a clean base
cp -r linux-live/scripts/10-example linux-live/scripts/04-gnome-desktop
# Configure GNOME-specific packages
cat > linux-live/scripts/04-gnome-desktop/packages.list << EOF
# Base GNOME desktop packages
gdm3
gnome-shell
gnome-session
gnome-settings-daemon
gnome-control-center
nautilus
gnome-terminal
# Standard GNOME applications
gnome-calculator +pv=standard +pv=toolbox +pv=ultra
gnome-text-editor +pv=standard +pv=toolbox +pv=ultra
eog +pv=standard +pv=toolbox +pv=ultra
evince +pv=standard +pv=toolbox +pv=ultra
# Additional GNOME tools
gnome-tweaks +pv=toolbox +pv=ultra
gnome-extensions-app +pv=toolbox +pv=ultra
dconf-editor +pv=toolbox +pv=ultra
EOF
# Create a custom install script for GNOME-specific configuration
cat > linux-live/scripts/04-gnome-desktop/install << 'EOF'
#!/bin/bash
set -e
set -o pipefail
set -u
. /minioslib
. /minios_build.conf
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# Install packages using condinapt
/condinapt -l "${SCRIPT_DIR}/packages.list" -c "${SCRIPT_DIR}/minios_build.conf" -m "${SCRIPT_DIR}/condinapt.conf"
if [ $? -ne 0 ]; then
echo "Failed to install packages."
exit 1
fi
# Set GNOME as default session
echo 'gnome' > /etc/skel/.dmrc
echo '[Desktop]' > /etc/skel/.dmrc
echo 'Session=gnome' >> /etc/skel/.dmrc
EOF
chmod +x linux-live/scripts/04-gnome-desktop/install- GNOME-Anwendungsmodul erstellen (05-gnome-apps):
cp -r linux-live/scripts/10-example linux-live/scripts/05-gnome-apps
cat > linux-live/scripts/05-gnome-apps/packages.list << EOF
# GNOME Applications
gnome-software +pv=standard +pv=toolbox +pv=ultra
gnome-system-monitor +pv=standard +pv=toolbox +pv=ultra
gnome-disk-utility +pv=standard +pv=toolbox +pv=ultra
gnome-screenshot +pv=standard +pv=toolbox +pv=ultra
gnome-calendar +pv=toolbox +pv=ultra
gnome-weather +pv=toolbox +pv=ultra
gnome-maps +pv=ultra
rhythmbox +pv=toolbox +pv=ultra
totem +pv=toolbox +pv=ultra
EOF
# Create a custom install script for GNOME applications
cat > linux-live/scripts/05-gnome-apps/install << 'EOF'
#!/bin/bash
set -e
set -o pipefail
set -u
. /minioslib
. /minios_build.conf
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# Install packages using condinapt
/condinapt -l "${SCRIPT_DIR}/packages.list" -c "${SCRIPT_DIR}/minios_build.conf" -m "${SCRIPT_DIR}/condinapt.conf"
if [ $? -ne 0 ]; then
echo "Failed to install packages."
exit 1
fi
# Configure default applications for GNOME
mkdir -p /etc/skel/.config
# Set default applications
cat > /etc/skel/.config/mimeapps.list << 'MIME_EOF'
[Default Applications]
text/plain=gnome-text-editor.desktop
image/jpeg=eog.desktop
image/png=eog.desktop
application/pdf=evince.desktop
video/mp4=totem.desktop
audio/mpeg=rhythmbox.desktop
MIME_EOF
EOF
chmod +x linux-live/scripts/05-gnome-apps/install- Module mit der GNOME-Umgebung verknüpfen:
# Link base system modules (same for all environments)
ln -s ../../scripts/01-kernel linux-live/environments/gnome/01-kernel
ln -s ../../scripts/02-firmware linux-live/environments/gnome/02-firmware
ln -s ../../scripts/03-gui-base linux-live/environments/gnome/03-gui-base
# Link GNOME-specific modules
ln -s ../../scripts/04-gnome-desktop linux-live/environments/gnome/04-gnome-desktop
ln -s ../../scripts/05-gnome-apps linux-live/environments/gnome/05-gnome-apps
# Link additional modules as needed
ln -s ../../scripts/10-firefox linux-live/environments/gnome/06-firefox- Build für GNOME-Umgebung konfigurieren:
# Copy and modify build configuration
cp linux-live/build.conf linux-live/build-gnome.conf
sed -i 's/DESKTOP_ENVIRONMENT=".*"/DESKTOP_ENVIRONMENT="gnome"/' linux-live/build-gnome.conf
sed -i 's/PACKAGE_VARIANT=".*"/PACKAGE_VARIANT="standard"/' linux-live/build-gnome.conf
# Build the GNOME system
BUILD_CONF=linux-live/build-gnome.conf ./minios-live -Best Practices für die Umgebungsstruktur
Beim Erstellen eigener Umgebungen gilt:
- Basismodule (01–03): In der Regel in allen Umgebungen identisch
- Desktop-Modul (04): Enthält die Kernpakete und Konfiguration der Desktop-Umgebung
- Apps-Modul (05): Desktop-spezifische Anwendungen
- Optionale Module (06+): Zusätzliche Softwarepakete
Namenskonvention für Module:
- Verwenden Sie das Format
04-{desktop}-desktopfür das Haupt-Desktop-Modul - Verwenden Sie
05-{desktop}-appsoder05-appsfür Anwendungen - Nummerieren Sie weitere Module fortlaufend (06, 07, 08, usw.)
Konfigurationshinweise:
- Jede Umgebung benötigt passende Skip-Bedingungen in den Modulen
- Desktop-spezifische Pakete sollten
+de={environment}-Bedingungen nutzen - Testen Sie gründlich mit verschiedenen Paketvarianten (minimum, standard, toolbox, ultra)
Eigene Module hinzufügen
- Neues Modul mit der Vorlage erstellen:
cp -r linux-live/scripts/10-example linux-live/scripts/06-custom-module- Die packages.list bearbeiten:
# Edit linux-live/scripts/06-custom-module/packages.list
# Add your packages with appropriate conditional markers- Das Installationsskript anpassen:
# Edit linux-live/scripts/06-custom-module/install
# Add custom configuration and setup commands- Das Modul mit Ihrer Umgebung verknüpfen:
ln -s ../../scripts/06-custom-module linux-live/environments/xfce/06-custom-module- Module bauen:
./minios-live build-modulesFehlerbehebung
Häufige Probleme
Build startet nicht – Internetverbindung erforderlich:
- Problem:
minios-liveführt beim Start einen obligatorischen Internetverbindungs-Check durch - Lösung: Stellen Sie vor dem Start des Builds eine stabile Internetverbindung sicher
- Prüfung: DNS-Auflösung testen:
nslookup deb.debian.org - Proxy: Proxy-Einstellungen konfigurieren, falls Sie sich hinter einer Unternehmensfirewall befinden
- Hinweis: Der Build kann ohne Internetzugang nicht fortgesetzt werden
- Problem:
Build schlägt beim Bootstrap fehl:
- Überprüfen, ob die Ziel-Repositorys der Distribution verfügbar sind
- Sicherstellen, dass alle Voraussetzungen installiert sind
- Test:
wget -q --spider http://deb.debian.org
Fehler beim Modul-Build:
- Paketverfügbarkeit in der Ziel-Distribution prüfen
- Syntax der Bedingungsmarker überprüfen
- Installationsskript auf Fehler kontrollieren
Fehlende Pakete:
- Condinapt-Bedingungen prüfen
- Paketnamen für die Ziel-Distribution verifizieren
- Einstellungen der Paketvarianten überprüfen
Boot-Probleme:
- GRUB-Konfiguration prüfen
- Kernel- und initramfs-Erstellung verifizieren
- Bootloader-Dateien kontrollieren
Debug-Modus
Aktivieren Sie die Debug-Ausgabe, indem Sie das Detaillevel in Ihrer Build-Konfiguration einstellen:
Option 1: build.conf bearbeiten
# Edit linux-live/build.conf and set:
VERBOSITY_LEVEL=2 # Very verbose output with detailed tracing
# or
VERBOSITY_LEVEL=1 # Verbose output (default)
# or
VERBOSITY_LEVEL=0 # Minimal outputOption 2: Eigene Konfiguration mit Debug-Einstellungen erstellen
cp linux-live/build.conf linux-live/build-debug.conf
sed -i 's/VERBOSITY_LEVEL=.*/VERBOSITY_LEVEL=2/' linux-live/build-debug.conf
# Enable additional debug options
sed -i 's/DEBUG_SSH_KEYS="false"/DEBUG_SSH_KEYS="true"/' linux-live/build-debug.conf
sed -i 's/DEBUG_SET_ROOT_PASSWORD="false"/DEBUG_SET_ROOT_PASSWORD="true"/' linux-live/build-debug.conf
# Build with debug configuration
BUILD_CONF=linux-live/build-debug.conf ./minios-live -Detailstufen:
0: Minimale Ausgabe – nur essentielle Meldungen1: Ausführliche Ausgabe – Standard-Build-Informationen (Standard)2: Sehr ausführliche Ausgabe – detailliertes Tracing mit aktiviertem Bash-Debugging
Logdateien
Build-Logs werden gespeichert unter:
build/log/– Allgemeine Build-Protokolle
Hilfe erhalten
- Das offizielle Wiki durchsuchen
- Bestehende Issues auf GitHub prüfen
- Der Community im Forum auf minios.dev beitreten
Verwandte Dokumentation
- Module erstellen – Erfahren Sie, wie Sie eigene SquashFS-Module mit zusätzlicher Software erstellen
- ISO neu erstellen – Ihr laufendes Live-System mit
sb2isoin eine bootfähige ISO umwandeln - CondinAPT – Das bedingte Paketmanagementsystem für Builds verstehen