Membangun MiniOS
Panduan ini membahas proses lengkap untuk membangun MiniOS, termasuk pembuatan sistem, pengembangan modul, dan opsi konfigurasi lanjutan.
Ringkasan
MiniOS menggunakan sistem build modular di mana sistem operasi dibangun dari modul-modul individual dalam format SquashFS. Setiap modul berisi paket perangkat lunak atau komponen tertentu, dan dimuat secara berurutan untuk membentuk sistem yang lengkap.
Memulai
Prasyarat
- Versi terbaru Debian atau Ubuntu untuk proses build
- Ruang disk yang cukup (disarankan: minimal 20GB ruang kosong)
- Koneksi internet untuk mengunduh paket
- Paket yang diperlukan tercantum di
linux-live/prerequisites.list
Instalasi Prasyarat
File prerequisites.list menggunakan format condinapt dengan penanda kondisi. Instal paket yang diperlukan secara manual:
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-binSebagai alternatif, Anda dapat menggunakan condinapt untuk memproses daftar prasyarat jika tersedia di sistem Anda.
Alat Build
MiniOS menyediakan dua alat utama untuk proses build:
minios-cmd (Direkomendasikan)
Utilitas command-line yang memudahkan konfigurasi dan inisiasi build. Alat ini menyediakan antarmuka yang ramah pengguna untuk mengatur berbagai parameter build:
- Distribusi target (buster, bookworm, trixie, dll.)
- Arsitektur (amd64, i386)
- Lingkungan desktop (core, flux, xfce, lxqt)
- Varian paket (minimum, standard, toolbox, ultra)
- Opsi kernel
- Pengaturan lokal dan zona waktu
Penggunaan:
# 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"Untuk informasi penggunaan lebih detail, lihat dokumentasi minios-cmd.
minios-live (Lanjutan)
Skrip build inti yang mengatur proses build langkah demi langkah:
- Menyiapkan lingkungan build
- Menginstal sistem dasar
- Mengintegrasikan lingkungan desktop yang dipilih
- Membuat filesystem SquashFS
- Mengkonfigurasi proses boot
- Menghasilkan image ISO bootable
Penggunaan:
# Complete build
./minios-live -
# Specific stages
./minios-live build-bootstrap
./minios-live build-chroot - build-liveUntuk informasi penggunaan lebih detail, lihat dokumentasi minios-live.
Struktur Proyek
Sistem build MiniOS diorganisasikan sebagai berikut:
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 MiniOSProses Build
Proses build mengikuti urutan tahapan yang terstruktur:
Penjelasan Tahapan Build
build-bootstrap- Membuat sistem dasar minimal menggunakan debootstrapbuild-chroot- Menginstal paket dan mengkonfigurasi sistem dalam lingkungan chrootbuild-live- Membuat image SquashFS utama dengan sistem intibuild-modules- Membangun modul SquashFS tambahan untuk perangkat lunak ekstrabuild-boot- Menyiapkan bootloader dan file kernelbuild-config- Menghasilkan file konfigurasi bootbuild-iso- Membuat image ISO bootable final
Opsi Build
Build Sistem Lengkap
# Full automated build
./minios-live -
# or
./minios-live build-bootstrap - build-isoBuild Inkremental
# 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-isoSistem Konfigurasi
File Konfigurasi Build
Konfigurasi Utama: linux-live/build.conf
Ini adalah file konfigurasi utama yang menentukan:
- Pengaturan distribusi: Distribusi target (buster, bookworm, trixie, sid)
- Arsitektur: amd64, i386, i386-pae (khusus bookworm dan sebelumnya; trixie dan sid hanya mendukung amd64)
- Lingkungan desktop: core, flux, xfce, lxqt
- Varian paket: minimum, standard, toolbox, ultra
- Kompresi: xz, lzo, gz, lz4, zstd
- Pengaturan kernel: tipe, dukungan AUFS, kompilasi DKMS
- Pengaturan lokal: bahasa, zona waktu, layout keyboard
Konfigurasi Runtime: minios_build.conf
Dibuat secara otomatis selama proses build dan berisi pengaturan runtime khusus untuk lingkungan chroot.
Varian Paket
MiniOS mendukung berbagai varian paket yang menentukan perangkat lunak apa saja yang disertakan:
- minimum: Hanya paket esensial
- standard: Aplikasi desktop standar
- toolbox: Alat pengembangan dan utilitas lanjutan
- ultra: Paket perangkat lunak lengkap dengan aplikasi tambahan
Pemilihan paket dikontrol menggunakan penanda kondisi di file packages.list:
# Install only in toolbox and ultra variants
firefox +pv=toolbox +pv=ultra
# Install only in minimum variant
basic-tool +pv=minimumSistem Modul
Struktur Modul
Sistem build menggunakan struktur modul bernomor yang terletak di linux-live/scripts/:
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 templateKomponen Modul
Setiap direktori modul berisi:
packages.list: Daftar paket yang akan diinstal dengan penanda kondisiinstall: Skrip Bash yang dijalankan saat build modulrootcopy-install/: File yang disalin ke sistem saat buildrootcopy-postinstall/: File yang disalin setelah instalasi paketskip_conditions.conf: Kondisi untuk melewati build modulpatches/: Patch yang diterapkan sebelum build (tidak tersedia untuk 00-core)
Contoh Template Modul
Modul 10-example/ berfungsi sebagai template untuk membuat modul baru. Modul ini berisi:
packages.listlengkap dengan contoh penanda kondisi- Skrip
installdasar yang menunjukkan penggunaan condinapt dengan benar - Contoh direktori
rootcopy-install/danrootcopy-postinstall/ - Komentar dokumentasi yang menjelaskan setiap komponen
Untuk membuat modul baru: Salin direktori 10-example dan modifikasi sesuai kebutuhan Anda:
cp -r linux-live/scripts/10-example linux-live/scripts/06-my-moduleTemplate ini digunakan di seluruh dokumentasi ini dan merupakan titik awal terbaik untuk modul kustom.
Pemuatan Modul Berdasarkan Lingkungan
Sistem modul bekerja melalui konfigurasi lingkungan di linux-live/environments/. Setiap direktori lingkungan berisi symbolic link ke modul-modul yang harus disertakan untuk lingkungan desktop dan varian paket tertentu.
Lingkungan yang Tersedia
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 modulesSetiap direktori lingkungan berisi symbolic link ke direktori modul di 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-firefoxMembangun Modul
Untuk membangun modul, gunakan perintah 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)Skrip Instalasi Modul
Skrip install di setiap modul:
- Melakukan source
/minioslibuntuk fungsi umum - Melakukan source
/minios_build.confuntuk konfigurasi build - Menyiapkan pilihan debconf untuk konfigurasi paket otomatis
- Melakukan konfigurasi kustom dan modifikasi file
- Menggunakan warna konsol untuk format output
Contoh struktur:
#!/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
# ...Manajemen Paket dengan CondinAPT
CondinAPT adalah sistem instalasi paket bersyarat milik MiniOS yang menangani pemilihan paket berdasarkan parameter build seperti lingkungan desktop, distribusi, dan varian paket.
Penggunaan Dasar
Setiap modul berisi file packages.list dengan spesifikasi paket bersyarat:
# 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 unavailableMenggunakan CondinAPT di Skrip Modul
Penggunaan standar pada skrip instalasi modul:
# 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.mapDokumentasi Lengkap
Untuk dokumentasi CondinAPT yang komprehensif termasuk sintaks lanjutan, filter, priority queue, mode debugging, dan contoh nyata, lihat: CondinAPT.md
Filter Kondisi Umum
+pv=variant- Varian paket (minimum, standard, toolbox, ultra)+d=distribution- Distribusi (bookworm, trixie, jammy, noble)+de=desktop- Lingkungan desktop (core, flux, xfce, lxqt)+da=architecture- Arsitektur (amd64, i386)+dt=type- Tipe distribusi (debian, ubuntu)
Membangun ISO Pertama Anda
Mulai Cepat
- Clone repositori dan persiapkan:
git clone https://github.com/minios-linux/minios-live.git
cd minios-live- Instal prasyarat:
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 dengan minios-cmd (direkomendasikan):
./minios-cmd -d bookworm -a amd64 -de xfce -pv standard- Atau build dengan minios-live:
./minios-live -Kustomisasi Build Anda
- Salin dan edit konfigurasi:
cp linux-live/build.conf linux-live/build-custom.conf
# Edit build-custom.conf with your preferences- Build dengan konfigurasi kustom:
BUILD_CONF=linux-live/build-custom.conf ./minios-live -Kustomisasi Lanjutan
Membuat Lingkungan Kustom
Anda dapat membuat lingkungan desktop baru sepenuhnya dengan membuat direktori lingkungan baru dan mengonfigurasi modul yang sesuai. Berikut cara membuat lingkungan GNOME sebagai contoh:
- Buat direktori lingkungan:
mkdir -p linux-live/environments/gnome- Buat modul desktop dasar (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- Buat modul aplikasi GNOME (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- Link modul ke lingkungan GNOME:
# 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- Konfigurasi build untuk lingkungan GNOME:
# 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 -Praktik Terbaik Struktur Lingkungan
Saat membuat lingkungan kustom:
- Modul dasar (01-03): Biasanya sama untuk semua lingkungan
- Modul desktop (04): Berisi paket dan konfigurasi inti desktop environment
- Modul aplikasi (05): Aplikasi khusus desktop
- Modul opsional (06+): Paket perangkat lunak tambahan
Konvensi penamaan modul:
- Gunakan format
04-{desktop}-desktopuntuk modul desktop utama - Gunakan
05-{desktop}-appsatau05-appsuntuk aplikasi - Nomori modul tambahan secara berurutan (06, 07, 08, dst.)
Pertimbangan konfigurasi:
- Setiap lingkungan membutuhkan skip condition yang sesuai di modul
- Paket khusus desktop sebaiknya menggunakan kondisi
+de={environment} - Uji secara menyeluruh dengan berbagai varian paket (minimum, standard, toolbox, ultra)
Menambahkan Modul Kustom
- Buat modul baru menggunakan template:
cp -r linux-live/scripts/10-example linux-live/scripts/06-custom-module- Edit packages.list:
# Edit linux-live/scripts/06-custom-module/packages.list
# Add your packages with appropriate conditional markers- Kustomisasi skrip install:
# Edit linux-live/scripts/06-custom-module/install
# Add custom configuration and setup commands- Link modul ke lingkungan Anda:
ln -s ../../scripts/06-custom-module linux-live/environments/xfce/06-custom-module- Build modul-modul:
./minios-live build-modulesPemecahan Masalah
Masalah Umum
Build gagal dimulai - Koneksi internet diperlukan:
- Masalah:
minios-livemelakukan pengecekan koneksi internet secara wajib saat startup - Solusi: Pastikan koneksi internet stabil sebelum memulai build
- Cek: Verifikasi resolusi DNS:
nslookup deb.debian.org - Proxy: Konfigurasi pengaturan proxy jika berada di belakang firewall perusahaan
- Catatan: Build tidak dapat dilanjutkan tanpa akses internet
- Masalah:
Build gagal saat bootstrap:
- Pastikan repository distribusi target tersedia
- Pastikan prasyarat sudah terpasang
- Tes:
wget -q --spider http://deb.debian.org
Error saat build modul:
- Cek ketersediaan paket di distribusi target
- Verifikasi sintaks marker kondisional
- Tinjau skrip instalasi untuk mencari error
Paket hilang:
- Periksa kondisi condinapt
- Verifikasi nama paket untuk distribusi target
- Tinjau pengaturan varian paket
Masalah booting:
- Periksa konfigurasi GRUB
- Verifikasi pembuatan kernel dan initramfs
- Tinjau file bootloader
Mode Debug
Aktifkan output debug dengan mengatur tingkat verbosity pada konfigurasi build Anda:
Opsi 1: Edit build.conf
# 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 outputOpsi 2: Buat konfigurasi kustom dengan pengaturan debug
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 -Tingkat verbosity:
0: Output minimal - hanya pesan penting1: Output verbose - informasi build standar (default)2: Output sangat verbose - pelacakan detail dengan bash debugging aktif
File Log
Log build disimpan di:
build/log/- Log build umum
Mendapatkan Bantuan
- Cek wiki resmi
- Tinjau isu yang sudah ada di GitHub
- Bergabung dengan forum komunitas di minios.dev
Dokumentasi Terkait
- Membuat Modul - Pelajari cara membuat modul SquashFS kustom dengan software tambahan
- Membangun Ulang ISO - Kemasi ulang sistem live yang sedang berjalan menjadi ISO bootable menggunakan
sb2iso - CondinAPT - Pahami sistem manajemen paket kondisional yang digunakan dalam proses build