`qorpa pull` de un `.tar.zst` moría imprimiendo **la ayuda de busybox** y un exit 1: ni una palabra sobre `--zstd`, que es la opción que no entiende. El código ya elegía el descompresor por MAGIC y pasaba las flags correctas; lo que faltaba era un `tar` de verdad. Dos arreglos, y el segundo es de una línea: · `untar` comprueba `tar --version` y, si no es GNU, ABORTA nombrando la causa y el arreglo. Diez minutos de diagnóstico se vuelven una línea. · **`tar` (GNU) entra en `perfil.base`.** Estaba sellado desde hace meses y declarado en UN solo perfil (`escritorio-kde`). Es la lección de `foot` otra vez: el paquete existe y no viaja en la imagen que lo necesita. Ya había costado dos veces — la caja tampoco podía desempacar su propio LAB por lo mismo. Y el logo: fastfetch dibujaba **el pingüino genérico de Linux** porque elige por el `ID` de os-release y no conoce `takana`. Ahora la receta `os-release` publica también `/usr/share/takana/logo.txt` (un martillo, que es lo que significa el nombre en quechua) y `/etc/xdg/fastfetch/config.jsonc` — la config GLOBAL por XDG, no la de un usuario. Van en la receta de la IDENTIDAD y no en la de fastfetch a propósito: mañana el que dibuje puede ser otro programa y el logo seguirá siendo el mismo fichero. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016Tf9T4vGzsMoT7eS8YzMFn
47 lines
2.6 KiB
TOML
47 lines
2.6 KiB
TOML
# os-release — la identidad del sistema, que hasta hoy NO EXISTÍA.
|
|
#
|
|
# Se descubrió al meter `fastfetch` (2026-09-14): en la caja de producción decía
|
|
#
|
|
# Host: vServer (20171111)
|
|
# Kernel: Linux 7.1.2
|
|
#
|
|
# …y ni una palabra de takana, porque `/etc/os-release` no está. No es cosmético: ese fichero es lo
|
|
# que TODO el mundo lee para saber en qué distro corre — fastfetch, los instaladores de terceros, los
|
|
# scripts de CI, el propio `qorpa` el día que quiera distinguir anfitrión de huésped. Una distro sin
|
|
# `os-release` es anónima para cualquier programa que no sea suyo.
|
|
#
|
|
# ══ POR QUÉ UNA RECETA Y NO UNA CONSTANTE EN `takana-bootstrap` ════════════════════════════════
|
|
# El `/etc/passwd` del producto SÍ es una constante de Rust, y esa decisión ya costó: para añadir un
|
|
# usuario había que recompilar takana (lo arregló `[[user]]`). Meter `os-release` ahí re-sellaría el
|
|
# `product-rootfs`, que es el **baseline del selfhost**, por un fichero de cinco líneas. Como receta
|
|
# entra por perfil, se edita sin tocar el bootstrap y su radio es cero.
|
|
#
|
|
# ══ Y EL LOGO, QUE ES PARTE DE LA IDENTIDAD ════════════════════════════════════════════════════
|
|
# `fastfetch` dibujaba **el pingüino genérico de Linux**: elige el logo por el `ID` de `os-release`
|
|
# y no conoce `takana`. Van juntos acá y no en la receta de fastfetch porque lo que se declara es la
|
|
# identidad del sistema —nombre, URL, color, logo—, no la configuración de una herramienta: mañana
|
|
# el que dibuje puede ser otro programa y el logo seguirá siendo el mismo fichero.
|
|
# · `/usr/share/takana/logo.txt` — un martillo, que es lo que significa el nombre en quechua
|
|
# · `/etc/xdg/fastfetch/config.jsonc` — la config GLOBAL (XDG), no la de un usuario
|
|
#
|
|
# ⚠ SIN VERSIÓN NI FECHA, a propósito. Un `VERSION_ID` con la fecha del build haría que este
|
|
# artefacto —y con él la clausura de toda imagen que lo lleve— cambiara de hash cada día sin que
|
|
# nada haya cambiado. La versión de una distro de árbol único es el hash de su imagen, que ya existe.
|
|
name = "os-release"
|
|
version = "1"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
dir = "os-release/tree"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = []
|
|
|
|
[build.phases]
|
|
configure = "true"
|
|
compile = "true"
|
|
install = "mkdir -p /out/etc /out/usr/lib && cp -a /src/etc/. /out/etc/ && cp -a /src/usr/. /out/usr/ && ln -sf ../../etc/os-release /out/usr/lib/os-release"
|