Saltar al contenido

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:

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

Alternativamente, 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:

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"

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:

bash
# Complete build
./minios-live -

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

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

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

Proceso de compilación

El proceso de compilación sigue una secuencia estructurada de etapas:

Explicación de las etapas de compilación

  1. build-bootstrap - Crea el sistema base mínimo usando debootstrap
  2. build-chroot - Instala paquetes y configura el sistema en un entorno chroot
  3. build-live - Crea la imagen principal SquashFS con el sistema base
  4. build-modules - Construye módulos SquashFS adicionales para software extra
  5. build-boot - Prepara los archivos del gestor de arranque y kernel
  6. build-config - Genera los archivos de configuración de arranque
  7. build-iso - Crea la imagen ISO final booteable

Opciones de compilación

Compilación completa del sistema

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

Compilaciones incrementales

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

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

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

Componentes del módulo

Cada directorio de módulo contiene:

  • packages.list: Lista de paquetes a instalar con marcadores condicionales
  • install: Script Bash que se ejecuta durante la compilación del módulo
  • rootcopy-install/: Archivos copiados al sistema durante la compilación
  • rootcopy-postinstall/: Archivos copiados después de la instalación de paquetes
  • skip_conditions.conf: Condiciones para omitir la compilación del módulo
  • patches/: 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.list completo con ejemplos de marcadores condicionales
  • Un script install básico mostrando el uso correcto de condinapt
  • Ejemplo de directorios rootcopy-install/ y rootcopy-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:

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

Esta 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

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

Cada directorio de entorno contiene enlaces simbólicos a los directorios de módulos en 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

Compilación de módulos

Para compilar módulos, utiliza el comando 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)

Scripts de instalación de módulos

El script install en cada módulo:

  • Fuente /minioslib para funciones comunes
  • Fuente /minios_build.conf para 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:

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

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:

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

Uso de CondinAPT en scripts de módulos

Uso estándar en los scripts de instalación de módulos:

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

Documentació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

  1. Clona el repositorio y prepárate:
bash
git clone https://github.com/minios-linux/minios-live.git
cd minios-live
  1. Instala los requisitos previos:
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. Compila con minios-cmd (recomendado):
bash
./minios-cmd -d bookworm -a amd64 -de xfce -pv standard
  1. O compila con minios-live:
bash
./minios-live -

Personalizando tu compilación

  1. Copia y edita la configuración:
bash
cp linux-live/build.conf linux-live/build-custom.conf
# Edit build-custom.conf with your preferences
  1. Compila con la configuración personalizada:
bash
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:

  1. Crea el directorio del entorno:
bash
mkdir -p linux-live/environments/gnome
  1. Crea el módulo base de escritorio (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. Crea el módulo de aplicaciones 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. Enlaza los módulos al entorno 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. Configura la compilación para el entorno 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 -

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}-desktop para el módulo principal de escritorio
  • Usa 05-{desktop}-apps o 05-apps para 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

  1. Crea un nuevo módulo usando la plantilla:
bash
cp -r linux-live/scripts/10-example linux-live/scripts/06-custom-module
  1. Edita el packages.list:
bash
# Edit linux-live/scripts/06-custom-module/packages.list
# Add your packages with appropriate conditional markers
  1. Personaliza el script de instalación:
bash
# Edit linux-live/scripts/06-custom-module/install
# Add custom configuration and setup commands
  1. Enlaza el módulo a tu entorno:
bash
ln -s ../../scripts/06-custom-module linux-live/environments/xfce/06-custom-module
  1. Compila los módulos:
bash
./minios-live build-modules

Resolución de problemas

Problemas comunes

  1. La compilación no inicia - Se requiere conectividad a Internet:

    • Problema: minios-live realiza 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
  2. 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
  3. 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
  4. 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
  5. 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

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

Opción 2: Crea una configuración personalizada con ajustes de depuración

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 -

Niveles de verbosidad:

  • 0: Salida mínima - solo mensajes esenciales
  • 1: 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