# 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.png` — **el logo oficial**, tal cual lo entregó el usuario # · `/usr/share/takana/logo.txt` — el mismo, en ANSI de color verdadero para la terminal # · `/etc/xdg/fastfetch/config.jsonc` — la config GLOBAL (XDG), no la de un usuario # # ⚠ EL ASCII NO SE INVENTA: SE EXTRAE DEL PNG. La primera versión de este fichero era un martillo # dibujado a ojo, y no era el logo — era *un* martillo. El de verdad es una cuadrícula **7×7** # medida sobre el PNG (bbox 348×348 en un lienzo de 512, celda de 49,7 px), con cuatro colores # exactos y nada más: # # #a63a25 ladrillo #df6b2a naranja #e3a63d dorado #fff6de crema # # ██ ██ ██ ██ ██ ██ ██ fila 0: las siete # ██ ██ ██ ██ ██ fila 1: cinco, con el crema al centro # ██ ██ ██ ██ ██ ██ ██ fila 2: las siete # ██ filas 3-6: el mango, una sola columna # # Cada celda son DOS caracteres de bloque: un carácter de terminal es alto y angosto, así que # `██` por celda es lo que conserva la geometría CUADRADA del original. Reconstruirlo a ojo la # pierde, y con ella deja de ser el logo. # # ⚠ 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" # `cp -r`, NO `cp -a`: en el sandbox no hay privilegio para preservar el propietario y `-a` aborta # con `failed to preserve ownership ... Invalid argument`. Los modos por defecto son los correctos — # y el dueño real lo pone la proyección del artefacto, no esta copia. install = "mkdir -p /out/etc /out/usr/lib && cp -r /src/etc/. /out/etc/ && cp -r /src/usr/. /out/usr/ && ln -sf ../../etc/os-release /out/usr/lib/os-release"