Compilando MiniOS
Esta guía cubre el proceso completo para compilar MiniOS, incluyendo la construcción del sistema, el desarrollo de módulos y opciones avanzadas de configuración.
Descripción general
MiniOS utiliza un sistema de compilación modular donde el sistema operativo se construye a partir de módulos individuales en formato SquashFS. Cada módulo contiene paquetes de software o componentes específicos, y se cargan en orden secuencial para formar el sistema completo.
Primeros pasos
Requisitos previos
- Última versión de Debian o Ubuntu para compilar
- Espacio suficiente en disco (recomendado: más de 20GB libres)
- Conexión a Internet para descargar paquetes
- Paquetes requeridos listados en
linux-live/prerequisites.list
Instalación de requisitos previos
El archivo prerequisites.list utiliza el formato condinapt con marcadores condicionales. Instala los paquetes necesarios manualmente:
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-binAlternativamente, puedes usar condinapt para procesar la lista de requisitos si está disponible en tu sistema.
Herramientas de compilación
MiniOS proporciona dos herramientas principales para la construcción:
minios-cmd (Recomendado)
Una utilidad de línea de comandos que simplifica la configuración e inicio de las compilaciones. Ofrece una interfaz amigable para establecer varios parámetros de compilación:
- Distribución objetivo (buster, bookworm, trixie, etc.)
- Arquitectura (amd64, i386)
- Entorno de escritorio (core, flux, xfce, lxqt)
- Variante de paquetes (minimum, standard, toolbox, ultra)
- Opciones del kernel
- Configuración de idioma y zona horaria
Uso:
# 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"Para información detallada sobre el uso, consulta la documentación de minios-cmd.
minios-live (Avanzado)
El script principal que orquesta el proceso de compilación paso a paso:
- Preparación del entorno de compilación
- Instalación del sistema base
- Integración del entorno de escritorio elegido
- Creación del sistema de archivos SquashFS
- Configuración del proceso de arranque
- Generación de la imagen ISO booteable
Uso:
# Complete build
./minios-live -
# Specific stages
./minios-live build-bootstrap
./minios-live build-chroot - build-livePara información detallada sobre el uso, consulta la documentación de minios-live.
Estructura del proyecto
El sistema de compilación de MiniOS está organizado de la siguiente manera:
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 MiniOSProceso de compilación
El proceso de compilación sigue una secuencia estructurada de etapas:
Explicación de las etapas de compilación
build-bootstrap- Crea el sistema base mínimo usando debootstrapbuild-chroot- Instala paquetes y configura el sistema en un entorno chrootbuild-live- Crea la imagen principal SquashFS con el sistema basebuild-modules- Construye módulos SquashFS adicionales para software extrabuild-boot- Prepara los archivos del gestor de arranque y kernelbuild-config- Genera los archivos de configuración de arranquebuild-iso- Crea la imagen ISO final booteable
Opciones de compilación
Compilación completa del sistema
# Full automated build
./minios-live -
# or
./minios-live build-bootstrap - build-isoCompilaciones incrementales
# 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-isoSistema de configuración
Archivos de configuración de compilación
Configuración principal: linux-live/build.conf
Este es el archivo principal de configuración que define:
- Configuración de distribución: Distribución objetivo (buster, bookworm, trixie, sid)
- Arquitectura: amd64, i386, i386-pae (solo bookworm y anteriores; trixie y sid solo soportan amd64)
- Entorno de escritorio: core, flux, xfce, lxqt
- Variante de paquetes: minimum, standard, toolbox, ultra
- Compresión: xz, lzo, gz, lz4, zstd
- Configuración del kernel: tipo, soporte AUFS, compilación DKMS
- Configuración regional: idioma, zona horaria, distribución del teclado
Configuración en tiempo de ejecución: minios_build.conf
Se genera automáticamente durante el proceso de compilación y contiene configuraciones específicas de ejecución para el entorno chroot.
Variantes de paquetes
MiniOS soporta diferentes variantes de paquetes que determinan qué software se incluye:
- minimum: Solo paquetes esenciales
- standard: Aplicaciones de escritorio estándar
- toolbox: Herramientas de desarrollo y utilidades avanzadas
- ultra: Suite completa de software con aplicaciones adicionales
La selección de paquetes se controla usando marcadores condicionales en los archivos packages.list:
# Install only in toolbox and ultra variants
firefox +pv=toolbox +pv=ultra
# Install only in minimum variant
basic-tool +pv=minimumSistema de módulos
Estructura de los módulos
El sistema de compilación utiliza una estructura de módulos numerados ubicada en 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 templateComponentes del módulo
Cada directorio de módulo contiene:
packages.list: Lista de paquetes a instalar con marcadores condicionalesinstall: Script Bash que se ejecuta durante la compilación del módulorootcopy-install/: Archivos copiados al sistema durante la compilaciónrootcopy-postinstall/: Archivos copiados después de la instalación de paquetesskip_conditions.conf: Condiciones para omitir la compilación del módulopatches/: Parches aplicados antes de compilar (no disponible para 00-core)
Plantilla de módulo de ejemplo
El módulo 10-example/ sirve como plantilla para crear nuevos módulos. Contiene:
- Un
packages.listcompleto con ejemplos de marcadores condicionales - Un script
installbásico mostrando el uso correcto de condinapt - Ejemplo de directorios
rootcopy-install/yrootcopy-postinstall/ - Comentarios de documentación explicando cada componente
Para crear un nuevo módulo: Copia el directorio 10-example y modifícalo según tus necesidades:
cp -r linux-live/scripts/10-example linux-live/scripts/06-my-moduleEsta plantilla se utiliza a lo largo de esta documentación y es el mejor punto de partida para módulos personalizados.
Carga de módulos basada en entornos
El sistema de módulos funciona mediante configuraciones de entorno en linux-live/environments/. Cada directorio de entorno contiene enlaces simbólicos a los módulos que deben incluirse para ese entorno de escritorio y variante de paquetes específica.
Entornos disponibles
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 modulesCada directorio de entorno contiene enlaces simbólicos a los directorios de módulos en 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-firefoxCompilación de módulos
Para compilar módulos, utiliza el comando 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)Scripts de instalación de módulos
El script install en cada módulo:
- Fuente
/minioslibpara funciones comunes - Fuente
/minios_build.confpara la configuración de compilación - Configura selecciones de debconf para la configuración automática de paquetes
- Realiza configuraciones personalizadas y modificaciones de archivos
- Utiliza colores en consola para el formato de salida
Estructura de ejemplo:
#!/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
# ...Gestión de paquetes con CondinAPT
CondinAPT es el sistema de instalación condicional de paquetes de MiniOS que gestiona la selección de paquetes según parámetros de compilación como entorno de escritorio, distribución y variante de paquetes.
Uso básico
Cada módulo contiene un archivo packages.list con especificaciones condicionales de paquetes:
# 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 unavailableUso de CondinAPT en scripts de módulos
Uso estándar en los scripts de instalación de módulos:
# 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.mapDocumentación completa
Para la documentación completa de CondinAPT, incluyendo sintaxis avanzada, filtros, colas de prioridad, modos de depuración y ejemplos reales, consulta: CondinAPT.md
Filtros de condición comunes
+pv=variant- Variante de paquete (minimum, standard, toolbox, ultra)+d=distribution- Distribución (bookworm, trixie, jammy, noble)+de=desktop- Entorno de escritorio (core, flux, xfce, lxqt)+da=architecture- Arquitectura (amd64, i386)+dt=type- Tipo de distribución (debian, ubuntu)
Compilando tu primera ISO
Inicio rápido
- Clona el repositorio y prepárate:
git clone https://github.com/minios-linux/minios-live.git
cd minios-live- Instala los requisitos previos:
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- Compila con minios-cmd (recomendado):
./minios-cmd -d bookworm -a amd64 -de xfce -pv standard- O compila con minios-live:
./minios-live -Personalizando tu compilación
- Copia y edita la configuración:
cp linux-live/build.conf linux-live/build-custom.conf
# Edit build-custom.conf with your preferences- Compila con la configuración personalizada:
BUILD_CONF=linux-live/build-custom.conf ./minios-live -Personalización avanzada
Creación de entornos personalizados
Puedes crear entornos de escritorio completamente nuevos creando un nuevo directorio de entorno y configurando los módulos apropiados. Aquí tienes cómo crear un entorno GNOME como ejemplo:
- Crea el directorio del entorno:
mkdir -p linux-live/environments/gnome- Crea el módulo base de escritorio (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- Crea el módulo de aplicaciones 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- Enlaza los módulos al entorno 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- Configura la compilación para el entorno 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 -Mejores prácticas para la estructura de entornos
Al crear entornos personalizados:
- Módulos base (01-03): Normalmente los mismos para todos los entornos
- Módulo de escritorio (04): Contiene los paquetes y configuración principal del entorno de escritorio
- Módulo de aplicaciones (05): Aplicaciones específicas del escritorio
- Módulos opcionales (06+): Paquetes de software adicionales
Convención de nombres de módulos:
- Usa el formato
04-{desktop}-desktoppara el módulo principal de escritorio - Usa
05-{desktop}-appso05-appspara aplicaciones - Numera los módulos adicionales secuencialmente (06, 07, 08, etc.)
Consideraciones de configuración:
- Cada entorno necesita condiciones de omisión apropiadas en los módulos
- Los paquetes específicos de escritorio deben usar condiciones
+de={environment} - Prueba exhaustivamente con diferentes variantes de paquetes (minimum, standard, toolbox, ultra)
Añadir módulos personalizados
- Crea un nuevo módulo usando la plantilla:
cp -r linux-live/scripts/10-example linux-live/scripts/06-custom-module- Edita el packages.list:
# Edit linux-live/scripts/06-custom-module/packages.list
# Add your packages with appropriate conditional markers- Personaliza el script de instalación:
# Edit linux-live/scripts/06-custom-module/install
# Add custom configuration and setup commands- Enlaza el módulo a tu entorno:
ln -s ../../scripts/06-custom-module linux-live/environments/xfce/06-custom-module- Compila los módulos:
./minios-live build-modulesResolución de problemas
Problemas comunes
La compilación no inicia - Se requiere conectividad a Internet:
- Problema:
minios-liverealiza una verificación obligatoria de conexión a Internet al iniciar - Solución: Asegúrate de tener una conexión a Internet estable antes de iniciar la compilación
- Comprobación: Verifica la resolución DNS:
nslookup deb.debian.org - Proxy: Configura los ajustes de proxy si estás detrás de un firewall corporativo
- Nota: La compilación no puede continuar sin acceso a Internet
- Problema:
La compilación falla durante el bootstrap:
- Verifica que los repositorios de la distribución de destino estén disponibles
- Asegúrate de que los prerrequisitos estén instalados
- Prueba:
wget -q --spider http://deb.debian.org
Errores al compilar módulos:
- Revisa la disponibilidad de los paquetes en la distribución de destino
- Verifica la sintaxis de los marcadores condicionales
- Revisa el script de instalación en busca de errores
Paquetes faltantes:
- Revisa las condiciones de condinapt
- Verifica los nombres de los paquetes para la distribución de destino
- Revisa la configuración de variantes de paquetes
Problemas de arranque:
- Revisa la configuración de GRUB
- Verifica la generación del kernel y del initramfs
- Revisa los archivos del gestor de arranque
Modo de depuración
Activa la salida de depuración configurando el nivel de verbosidad en tu archivo de compilación:
Opción 1: Edita 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 outputOpción 2: Crea una configuración personalizada con ajustes de depuración
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 -Niveles de verbosidad:
0: Salida mínima - solo mensajes esenciales1: Salida detallada - información estándar de compilación (por defecto)2: Salida muy detallada - trazado completo con depuración de bash activada
Archivos de registro
Los registros de compilación se almacenan en:
build/log/- Registros generales de compilación
Obtener ayuda
- Consulta la wiki oficial
- Revisa los issues existentes en GitHub
- Únete a los foros de la comunidad en minios.dev
Documentación relacionada
- Creación de módulos - Aprende a crear módulos SquashFS personalizados con software adicional
- Reconstrucción de ISO - Empaqueta tu sistema live en ejecución en una ISO booteable usando
sb2iso - CondinAPT - Comprende el sistema de gestión condicional de paquetes utilizado en las compilaciones