Files
takana/scripts/fuentes/mirror-env.sh
T
Sergio 1c3e185167 takana: las variables de entorno leen las dos formas, gana la nueva
TAKANA_X con caída a HAMMER_X (ADR 0016). No es un sed: estas variables son
contrato de usuario —knobs del instalador, el entorno del worker, mirror-env.sh—
y viven en perfiles de shell y units FUERA del repo, así que un renombre duro no
falla ruidosamente: la variable no aparece, se toma el default y el build se
comporta distinto sin que nada lo diga.

Rust: takana_core::env::{var,var_os} toma el nombre canónico y deriva el viejo
cambiando el prefijo — se le pasa TAKANA_* para que un grep del nombre nuevo
encuentre todas las lecturas. 5 tests, con DOS controles negativos: sin ninguna
de las dos no hay valor, y un nombre sin prefijo no inventa una caída.
Migrados los 17 sitios directos y los indirectos que el grep no mostraba
(bases_de_mirror, las constantes de kernel_cmd, ROOT_ENV de qorpa, env_path de
recover). takana-recover lleva la caída inline: es un mini-binario que se copia
a /usr/sbin y no vale arrastrarle una dep entera por dos líneas.

Scripts: 30 lecturas pasan a default, manteniendo el
nombre INTERNO de la variable para no tocar sus 190 usos.

Y donde el script EXPORTA en vez de leer, se ponen LAS DOS (mirror-env.sh y el
fragmento in-VM de bootstrap): ahí el lector puede ser un binario viejo —worker
sin recompilar, el /usr/bin/hammer pinado del baseline— que sólo conoce HAMMER_*.
La caída sirve para lectores nuevos; los viejos necesitan que la vieja siga puesta.

Verificado de punta a punta con el binario, no sólo con unit tests: HAMMER_LAB
sigue surtiendo efecto, TAKANA_LAB hace lo mismo, y con las dos gana TAKANA_LAB.
605 tests en verde y el hash de zlib sigue en b3:dc363f26… , intacto.

Cambio de comportamiento que va aparte y hay que decir: el hostname por defecto
de una instalación nueva pasa de 'hammer' a 'takana' (sólo si no se fija ninguna
de las dos variables).

NO se tocan: las rutas /var/lib/hammer de sistemas instalados, el volid
HAMMER_LIVE del ISO, ni el namespace HARKAQ_*, que es de otro subsistema.
2026-09-09 19:14:49 +00:00

34 lines
2.3 KiB
Bash

# mirror-env.sh — activa el mirror de fuentes (ADR 0013). Se hace `source`, no se ejecuta:
#
# . scripts/fuentes/mirror-env.sh
# flock work/.farm-build.lock ./target/release/takana --store ./store build <receta>
#
# Sin esto `hammer build` va derecho a upstream, que es el comportamiento de siempre: el mirror es
# ADITIVO y su ausencia nunca rompe un build. Por eso no está horneado en el binario — un default
# que apunta a una máquina concreta convertiría un fallo de red en un fallo de hammer para cualquiera
# que clone el repo.
#
# LISTA, no una URL (ADR 0014): las dos variables aceptan varios orígenes separados por comas y se
# prueban todos antes de caer a upstream. Con uno solo, el mecanismo que existe para no depender de
# 79 servidores ajenos dependía de UNO nuestro. Para añadir el espejo público:
#
# export HAMMER_MIRROR="sftp://…/hammer/fuentes,https://<bucket>.r2.dev/fuentes"
#
# El orden se ROTA por el hash de cada objeto, así que todos los orígenes se ejercitan en una tanda
# del corpus — un espejo que sólo se usa cuando el otro falla es un espejo que nadie prueba.
#
# La ruta lleva `/~/` a propósito. curl interpreta lo que sigue al host en una URL `sftp://` como
# ruta ABSOLUTA del servidor, así que `…:23/hammer/fuentes` busca en la raíz y devuelve
# «(78) Could not open remote file for reading» aunque el fichero exista. `/~/` lo ancla al home.
# ADR 0016: se exportan las DOS formas. Se acepta la vieja como entrada (hay entornos que la
# traen puesta desde perfiles y units fuera del repo) y se deja también puesta, porque un
# binario viejo —worker sin recompilar, imagen pinada— sólo conoce ésa.
export TAKANA_MIRROR="${TAKANA_MIRROR:-${HAMMER_MIRROR:-sftp://u647150@u647150.your-storagebox.de:23/~/hammer/fuentes}}"
export HAMMER_MIRROR="$TAKANA_MIRROR"
# Fuentes git: bundles shallow por commit. Variable APARTE de HAMMER_MIRROR porque son dos espacios
# de nombres distintos —`{sha256}.tar` vs `{commit}.bundle`— y se pueblan y se pierden por separado.
export TAKANA_MIRROR_GIT="${TAKANA_MIRROR_GIT:-${HAMMER_MIRROR_GIT:-sftp://u647150@u647150.your-storagebox.de:23/~/hammer/fuentes-git}}"
export HAMMER_MIRROR_GIT="$TAKANA_MIRROR_GIT"
export TAKANA_MIRROR_KEY="${TAKANA_MIRROR_KEY:-${HAMMER_MIRROR_KEY:-$HOME/.ssh/github5}}"
export HAMMER_MIRROR_KEY="$TAKANA_MIRROR_KEY"