Skip to content

Script que genera una initramfs minimalista usando un kernel de Linux compilado con Alpine, incluyendo doas, sbase, ubase y sinit. Ideal para crear imágenes de arranque pequeñas y auditables para sistemas embebidos o contenedores.

Notifications You must be signed in to change notification settings

nicolasdanelon/script-vmlinuz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini-distro Linux con sinit + sbase/ubase + doas

Este proyecto es el resultado de una charla con ChatGPT donde planteé lo siguiente:

Prompt original:
"dame un script que arme una distro con sbase y con sinit. muslc si es necesario para glibc. estaría piola tener doas y un usuario mitre con acceso a root, dale? la idea es correrlo con qemu en mi mac"


🚀 Solución planteada

La propuesta es armar un sistema Linux ultra-minimalista que bootea solo con:

  • Kernel Alpine LTS (vmlinuz-lts, x86_64 o aarch64)
  • sinit como PID 1 (init minimalista de suckless)
  • sbase y ubase (alternativa ligera a GNU coreutils + util-linux)
  • OpenDoas (alternativa a sudo)
  • Usuario mitre con acceso a root vía doas

Todo se empaqueta en un initramfs estático con musl, sin rootfs persistente. El sistema arranca, levanta proc, sysfs, devtmpfs y un getty en la consola serie (ttyS0) y en tty1.

Ideal para probar en QEMU desde macOS, sin instalar nada en disco.


📦 Requisitos en el host

  • Docker
  • QEMU (qemu-system-x86_64 en Intel, qemu-system-aarch64 en Apple Silicon)
  • curl, gzip, cpio

🛠️ Cómo funciona el build

  1. El script crea un WORKDIR limpio (mini-sinit/).
  2. Descarga el kernel LTS de Alpine.
  3. Usa un contenedor alpine:3.20 para compilar estáticos con musl:
    • sinit
    • sbase
    • ubase
    • OpenDoas
  4. Copia los binarios a un rootfs mínimo.
  5. Crea configs básicos:
    • /etc/rc.init (arranca mounts + getty)
    • /etc/doas.conf (permite a mitre ser root sin password)
    • /etc/passwd, /etc/group, /etc/shadow
    • MOTD con credenciales
  6. Empaqueta todo en initramfs.img.
  7. Lanza QEMU con kernel + initramfs.

📜 Script principal

El script build-minidistro.sh está pensado para correr de una.

Ejecutar

chmod +x build-minidistro.sh
./build-minidistro.sh

Login dentro de QEMU

login: mitre
password: mitre

# Ejemplos de uso
```bash
# Identidad actual
id

# Elevar a root con doas
doas id
doas sh

# Ver qué binarios tenés
ls /bin

🖥️ QEMU en macOS

El script ya invoca QEMU con:

qemu-system-x86_64 \
  -nodefaults -no-reboot -serial mon:stdio -nographic \
  -machine accel=tcg,type=pc \
  -cpu max -smp 2 -m 512M \
  -kernel vmlinuz-lts \
  -initrd initramfs.img \
  -append "console=ttyS0,115200 earlyprintk init=/sbin/sinit"

En Apple Silicon (ARM64)

Podés cambiar dos líneas en el script:

ARCH="aarch64"
QEMU="qemu-system-aarch64"

About

Script que genera una initramfs minimalista usando un kernel de Linux compilado con Alpine, incluyendo doas, sbase, ubase y sinit. Ideal para crear imágenes de arranque pequeñas y auditables para sistemas embebidos o contenedores.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published