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.
43 lines
2.0 KiB
Bash
Executable File
43 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# alpine-import.sh <pkg> [main|community] — Etapa G, fuente #2: baja el APKBUILD de Alpine aports
|
|
# (y SUS PARCHES de musl), y emite la receta hammer vía `hammer import-alpine`. Alpine es la mejor
|
|
# semilla cuando importar de nix falla en musl: su receta YA incluye el trabajo de portabilidad.
|
|
#
|
|
# Ej: scripts/alpine-import.sh coreutils main > recipes/coreutils-alpine.toml
|
|
# (los .patch se bajan a $OUTDIR, default el dir actual)
|
|
# Env: ALPINE_BRANCH (default master), OUTDIR (default .), HAMMER (cmd del cli)
|
|
set -eu
|
|
|
|
PKG="${1:?uso: alpine-import.sh <pkg> [main|community]}"
|
|
REPO="${2:-main}"
|
|
BRANCH="${ALPINE_BRANCH:-master}"
|
|
OUTDIR="${OUTDIR:-.}"
|
|
HAMMER="${TAKANA:-${HAMMER:-cargo run -q -p takana-cli --}}"
|
|
BASE="https://gitlab.alpinelinux.org/alpine/aports/-/raw/${BRANCH}/${REPO}/${PKG}"
|
|
|
|
apk=$(curl -fsSL "${BASE}/APKBUILD") || { echo "no encontré ${REPO}/${PKG} en aports@${BRANCH}" >&2; exit 1; }
|
|
toml=$(printf '%s' "$apk" | $HAMMER import-alpine -)
|
|
|
|
# sha256 automático: Alpine publica sha512, pero hammer pide sha256. Bajamos el tarball UNA vez y
|
|
# lo calculamos, reemplazando el FIXME ⇒ receta lista para `pack --build` sin tocar el hash a mano.
|
|
url=$(printf '%s\n' "$toml" | sed -n 's/^tarball = "\(.*\)"$/\1/p' | head -1)
|
|
if [ -n "$url" ]; then
|
|
sha=$(curl -fsSL "$url" 2>/dev/null | sha256sum | cut -d' ' -f1)
|
|
if [ -n "$sha" ] && [ "$sha" != "$(printf '' | sha256sum | cut -d' ' -f1)" ]; then
|
|
toml=$(printf '%s\n' "$toml" | sed "s|FIXME-sha256|$sha|")
|
|
echo " sha256 calculado: $sha" >&2
|
|
else
|
|
echo " ⚠ no pude bajar el tarball para sha256 (queda FIXME): $url" >&2
|
|
fi
|
|
fi
|
|
printf '%s\n' "$toml"
|
|
|
|
# Bajar los .patch referenciados (los parches de musl que hacen al paquete compilar).
|
|
printf '%s\n' "$toml" | grep -oE '"[^"]+\.(patch|diff)"' | tr -d '"' | while read -r p; do
|
|
if curl -fsSL "${BASE}/${p}" -o "${OUTDIR}/${p}" 2>/dev/null; then
|
|
echo " ✓ parche bajado: ${OUTDIR}/${p}" >&2
|
|
else
|
|
echo " ✗ no pude bajar ${p} (¿está en otra ruta del aport?)" >&2
|
|
fi
|
|
done
|