gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 188Rust 55Shell 30Markdown 281211 Definitions

⎇ c5a27d9b4c8d4f53a5562e11df7102121da77a20 recipes/busybox.toml TOML · 66 lines · 5.4 KB History raw

busybox recortado: 401 -> 277 applets, con vigía y cinco indultos medidos c5a27d9b4 · Sergio ·

1# busybox 1.36.1 — coreutils + shell + init del userland mínimo del Stage 1 (SDD 11 §3).
2#
3# Es la "balsa desechable" (ADR 0008): se sustituye por el userland multi-call nativo en
4# Rust/Zig más adelante; mientras tanto da `sh`, las utilidades de manipulación de texto que el
5# pipeline asume, y su propio `init` (PID 1 provisional, vía /etc/inittab que ensambla Stage 1).
6#
7# Estático con `zig cc` cross al target: el binario es autocontenido, sin loader del host. El
8# `install` de busybox crea los symlinks de applets (sh, mount, init, …) bajo CONFIG_PREFIX, que
9# el ensamblado del rootfs hidrata tal cual.
10
11name    = "busybox"
12version = "1.36.1"
13license = "GPL-2.0-only"
14
15[source]
16tarball = "https://busybox.net/downloads/busybox-1.36.1.tar.bz2"
17sha256  = "b8cc24c9574d809e7279c3be349795c5d5ceb6fdf19ca709f80cde50e47de314"
18
19[build]
20compiler = "zig-cc"
21target   = "x86_64-linux-musl"
22link     = "static"
23
24[deps]
25build = ["make"]
26
27[build.phases]
28# busybox usa Kconfig, no autotools: arrancamos de `defconfig` y forzamos CONFIG_STATIC=y. `tc`
29# no compila contra musl (gcc-ismos de red), así que lo desactivamos — es el ajuste mínimo
30# conocido para un build estático limpio con musl.
31#
32# CC='zig cc -mcpu=baseline' HOSTCC='zig cc -mcpu=baseline' EN LÍNEA DE COMANDO: el Kbuild de busybox fija `CC = gcc` y
33# `HOSTCC = gcc` con `=` (hard), que ignora el env `CC` del sandbox; sólo un override de línea de
34# comando gana. Apunta target (CC) y herramientas host (HOSTCC, p.ej. fixdep/gcc-version.sh) a
35# `zig cc`, manteniendo la hermeticidad zig-only (ADR 0003) sin meter gcc al rootfs.
36# El link final asume GNU ld y pasa flags que `zig cc` valida y rechaza (`--warn-common`, `-Map`,
37# `--verbose`); los quitamos de scripts/trylink. Es la incompatibilidad GNU-ld↔zig/lld esperada.
38#
39# ── EL RECORTE (docs/plan-botar-busybox.md, paso 1) ──────────────────────────────────────────────
40# `RETIRADOS` apaga 124 de los 401 applets que `defconfig` instala. No es adelgazar por adelgazar:
41# cada uno o NO SE REEMPLAZA (dpkg, rpm, httpd, telnetd, ubi*, nand*, i2c*: 105) o su función ya la
42# hace otro componente del producto (init/runit -> arje-zero, syslogd/klogd/logread -> hammerd: 19).
43#
44# ⚠ Y 5 se INDULTARON a propósito, porque arje-zero y hammerd reemplazan la FUNCIÓN pero no instalan
45# un COMANDO con ese nombre — son un binario cada uno:
46#   setuidgid    la card de gitea hace `setuidgid gitea` (recipes/gitea.toml:89)
47#   switch_root  el /init del instalador lo ejecuta (scripts/takana-live-install.sh:375)
48#   poweroff/halt/reboot   nada más en el corpus apaga la máquina: arje-zero es PID 1, no una CLI
49#
50# El mapa applet->símbolo sale de las líneas `//applet:` del fuente, NO de poner el nombre en
51# mayúsculas: eso falla en 6 casos medidos (`[`->TEST1, `[[`->TEST2, arch->BB_ARCH, sh->SH_IS_ASH…).
52# Está en la columna `simbolo_kconfig` de docs/state/busybox-applets.tsv.
53#
54# ⚠ Tocar esta lista RE-HASHEA busybox, y con él las 24 recetas que lo declaran build-dep.
55# `scripts/busybox-vigia.py` falla si alguien invoca un applet retirado — sin él esto se deshace
56# solo, porque quitar un applet no rompe nada hasta que arranca una máquina, semanas después.
57#
58# `yes '' | make oldconfig` tras editar .config: sin esto, el compile corre `silentoldconfig`, que
59# al ver opciones NEW (p.ej. WERROR) **prompea interactivamente** leyendo stdin — build
60# no-determinista y flaky (lo destapó la verificación de reproducibilidad de Stage 2). `yes ''`
61# acepta el default de cada NEW ⇒ config resuelta y determinista (busybox 1.36.1 no tiene el target
62# `olddefconfig`, así que usamos `oldconfig` alimentado por `yes`).
63configure = "make CC='zig cc -mcpu=baseline' HOSTCC='zig cc -mcpu=baseline' defconfig && sed -i -e 's/^# CONFIG_STATIC is not set/CONFIG_STATIC=y/' -e 's/^CONFIG_TC=y/# CONFIG_TC is not set/' -e 's/^CONFIG_FEATURE_TC_INGRESS=y/# CONFIG_FEATURE_TC_INGRESS is not set/' .config && RETIRADOS='ACPID ADJTIMEX ASCII BEEP BOOTCHARTD CHAT CHPST CONSPY CRC32 DEVMEM DHCPRELAY DNSD DNSDOMAINNAME DOS2UNIX DPKG DPKG_DEB ED ENVDIR ENVUIDGID ETHER_WAKE FAKEIDENTD FATATTR FBSET FBSPLASH FDFLUSH FDFORMAT FREERAMDISK FSYNC FTPD FTPGET FTPPUT HDPARM HEXEDIT HTTPD I2CDETECT I2CDUMP I2CGET I2CSET I2CTRANSFER IFPLUGD INETD INIT IOSTAT IPCALC KLOGD LINUXRC LOGGER LOGREAD LPD LPQ LPR LSSCSI LZOP MAKEMIME MICROCOM MIM MPSTAT MT NANDDUMP NANDWRITE NBDCLIENT NMETER PIPE_PROGRESS POPMAILDIR POWERTOP PSCAN RAIDAUTORUN RDEV READAHEAD REFORMIME RESIZE RESUME RPM RPM2CPIO RUNLEVEL RUNSV RUNSVDIR RUN_INIT RX SEEDRNG SENDMAIL SETCONSOLE SETFATTR SETLOGCONS SETSERIAL SHA3SUM SMEMCAP SOFTLIMIT SSL_CLIENT START_STOP_DAEMON SV SVC SVLOGD SVOK SYSLOGD TCPSVD TELNET TELNETD TEST2 TFTP TFTPD TIME TREE TS TTYSIZE UBIATTACH UBIDETACH UBIMKVOL UBIRENAME UBIRMVOL UBIRSVOL UBIUPDATEVOL UDHCPD UDPSVD UNIX2DOS UNZIP USLEEP UUDECODE UUENCODE VOLNAME WATCHDOG WHICH WHOIS ZCIP' && for s in $RETIRADOS; do sed -i \"s/^CONFIG_$s=y$/# CONFIG_$s is not set/\" .config; done && yes '' | make CC='zig cc -mcpu=baseline' HOSTCC='zig cc -mcpu=baseline' oldconfig && sed -i -e 's/-Wl,--warn-common//g' -e 's/-Wl,-Map,[^ ]*//g' -e 's/-Wl,--verbose//g' scripts/trylink"
64compile   = "make -j\"$(nproc)\" CC='zig cc -mcpu=baseline' HOSTCC='zig cc -mcpu=baseline'"
65# busybox instala en CONFIG_PREFIX (no DESTDIR): bin/busybox + symlinks de cada applet.
66install   = "make CC='zig cc -mcpu=baseline' HOSTCC='zig cc -mcpu=baseline' CONFIG_PREFIX=/out install"