EL LOGO. El usuario pasó el PNG oficial. El ASCII no se inventa: se MIDE. Extraído celda por celda
del original — bbox 348×348 en un lienzo de 512, cuadrícula **7×7**, celda de 49,7 px — con cuatro
colores exactos y ninguno más:
#a63a25 ladrillo · #df6b2a naranja · #e3a63d dorado · #fff6de crema
La primera versión que puse era un martillo dibujado a ojo: era *un* martillo, no *el* logo. Cada
celda son DOS caracteres de bloque porque un carácter de terminal es alto y angosto, y `██` es lo que
conserva la geometría cuadrada del original; reconstruirlo a ojo la pierde y deja de ser el logo.
Van los dos ficheros: `logo.png` (el oficial, tal cual) y `logo.txt` (el mismo en ANSI de color
verdadero), más la config global de fastfetch con `file-raw` — con `file` los escapes se imprimirían
como texto. Y `os-release` se mueve de `cli` a **`base`**: toda imagen de takana debe saber decir qué
es, incluida la más pelada. «No sólo para esta máquina, para siempre en takana».
De paso, dos cosas que sólo se ven construyendo: `cp -a` aborta en el sandbox («failed to preserve
ownership»), va `cp -r`; y un config de fastfetch que sólo define `logo` dibuja el logo y NI UN DATO
— `modules` hay que listarlo aunque parezca redundante.
RUSTC, PASO 1. `rust-toolchain-bin` 1.97.0, el tarball oficial de rust-lang verificado por su sha256
y sellado tal cual, con `foreign = true` porque son bytes ajenos y no un build nuestro (clase
`ajeno`: no infla el recuento del corpus, ADR 0015). Target **musl**, no gnu: un toolchain gnu
traería el cargador de glibc y sería needed-colgante otra vez.
Por qué importa, y no es gusto: TODO el instrumental de takana es Rust —12 crates, 42 555 líneas— y
el `rustc` que los construye sale del LAB, un rootfs ajeno que ENTRA en el ArtifactHash. La distro
depende de bytes de otro para reconstruirse a sí misma. Y el corpus tenía **44 recetas `cargo-*` y
CERO de rustc**: subcomando-sin-driver a escala de toolchain.
Es el paso 1 de tres, y los otros dos no son opcionales: (2) rustc desde fuente con el `llvm18` que
YA está sellado (379 M), y (3) la cadena mrustc→1.91.1 que ya existe documentada en el selfhost pero
vive en el bootstrap, no en el corpus.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016Tf9T4vGzsMoT7eS8YzMFn
67 lines
3.9 KiB
TOML
67 lines
3.9 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.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"
|