Lewati ke konten

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:

bash
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-bin

Sebagai 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:

bash
# 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:

bash
# Complete build
./minios-live -

# Specific stages
./minios-live build-bootstrap
./minios-live build-chroot - build-live

Untuk informasi penggunaan lebih detail, lihat dokumentasi minios-live.

Struktur Proyek

Sistem build MiniOS diorganisasikan sebagai berikut:

plaintext
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 MiniOS

Proses Build

Proses build mengikuti urutan tahapan yang terstruktur:

Penjelasan Tahapan Build

  1. build-bootstrap - Membuat sistem dasar minimal menggunakan debootstrap
  2. build-chroot - Menginstal paket dan mengkonfigurasi sistem dalam lingkungan chroot
  3. build-live - Membuat image SquashFS utama dengan sistem inti
  4. build-modules - Membangun modul SquashFS tambahan untuk perangkat lunak ekstra
  5. build-boot - Menyiapkan bootloader dan file kernel
  6. build-config - Menghasilkan file konfigurasi boot
  7. build-iso - Membuat image ISO bootable final

Opsi Build

Build Sistem Lengkap

bash
# Full automated build
./minios-live -
# or
./minios-live build-bootstrap - build-iso

Build Inkremental

bash
# 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-iso

Sistem 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=minimum

Sistem 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 template

Komponen Modul

Setiap direktori modul berisi:

  • packages.list: Daftar paket yang akan diinstal dengan penanda kondisi
  • install: Skrip Bash yang dijalankan saat build modul
  • rootcopy-install/: File yang disalin ke sistem saat build
  • rootcopy-postinstall/: File yang disalin setelah instalasi paket
  • skip_conditions.conf: Kondisi untuk melewati build modul
  • patches/: 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.list lengkap dengan contoh penanda kondisi
  • Skrip install dasar yang menunjukkan penggunaan condinapt dengan benar
  • Contoh direktori rootcopy-install/ dan rootcopy-postinstall/
  • Komentar dokumentasi yang menjelaskan setiap komponen

Untuk membuat modul baru: Salin direktori 10-example dan modifikasi sesuai kebutuhan Anda:

bash
cp -r linux-live/scripts/10-example linux-live/scripts/06-my-module

Template 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

bash
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 modules

Setiap direktori lingkungan berisi symbolic link ke direktori modul di linux-live/scripts/:

bash
# 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-firefox

Membangun Modul

Untuk membangun modul, gunakan perintah build-modules:

bash
# 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 /minioslib untuk fungsi umum
  • Melakukan source /minios_build.conf untuk konfigurasi build
  • Menyiapkan pilihan debconf untuk konfigurasi paket otomatis
  • Melakukan konfigurasi kustom dan modifikasi file
  • Menggunakan warna konsol untuk format output

Contoh struktur:

bash
#!/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:

bash
# 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 unavailable

Menggunakan CondinAPT di Skrip Modul

Penggunaan standar pada skrip instalasi modul:

bash
# 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.map

Dokumentasi 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

  1. Clone repositori dan persiapkan:
bash
git clone https://github.com/minios-linux/minios-live.git
cd minios-live
  1. Instal prasyarat:
bash
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
  1. Build dengan minios-cmd (direkomendasikan):
bash
./minios-cmd -d bookworm -a amd64 -de xfce -pv standard
  1. Atau build dengan minios-live:
bash
./minios-live -

Kustomisasi Build Anda

  1. Salin dan edit konfigurasi:
bash
cp linux-live/build.conf linux-live/build-custom.conf
# Edit build-custom.conf with your preferences
  1. Build dengan konfigurasi kustom:
bash
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:

  1. Buat direktori lingkungan:
bash
mkdir -p linux-live/environments/gnome
  1. Buat modul desktop dasar (04-gnome-desktop):
bash
# 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
  1. Buat modul aplikasi GNOME (05-gnome-apps):
bash
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
  1. Link modul ke lingkungan GNOME:
bash
# 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
  1. Konfigurasi build untuk lingkungan GNOME:
bash
# 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}-desktop untuk modul desktop utama
  • Gunakan 05-{desktop}-apps atau 05-apps untuk 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

  1. Buat modul baru menggunakan template:
bash
cp -r linux-live/scripts/10-example linux-live/scripts/06-custom-module
  1. Edit packages.list:
bash
# Edit linux-live/scripts/06-custom-module/packages.list
# Add your packages with appropriate conditional markers
  1. Kustomisasi skrip install:
bash
# Edit linux-live/scripts/06-custom-module/install
# Add custom configuration and setup commands
  1. Link modul ke lingkungan Anda:
bash
ln -s ../../scripts/06-custom-module linux-live/environments/xfce/06-custom-module
  1. Build modul-modul:
bash
./minios-live build-modules

Pemecahan Masalah

Masalah Umum

  1. Build gagal dimulai - Koneksi internet diperlukan:

    • Masalah: minios-live melakukan 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
  2. Build gagal saat bootstrap:

    • Pastikan repository distribusi target tersedia
    • Pastikan prasyarat sudah terpasang
    • Tes: wget -q --spider http://deb.debian.org
  3. Error saat build modul:

    • Cek ketersediaan paket di distribusi target
    • Verifikasi sintaks marker kondisional
    • Tinjau skrip instalasi untuk mencari error
  4. Paket hilang:

    • Periksa kondisi condinapt
    • Verifikasi nama paket untuk distribusi target
    • Tinjau pengaturan varian paket
  5. 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

bash
# 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 output

Opsi 2: Buat konfigurasi kustom dengan pengaturan debug

bash
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 penting
  • 1: 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

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