sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
la deuda del recorte, pagada: 21 recetas en 44 min — y el mirror sftp, inalcanzable
1# mirror-env.sh — activa el mirror de fuentes (ADR 0013). Se hace `source`, no se ejecuta:
2#
3# . scripts/fuentes/mirror-env.sh
4# flock work/.farm-build.lock ./target/release/takana --store ./store build <receta>
5#
6# Sin esto `takana build` va derecho a upstream, que es el comportamiento de siempre: el mirror es
7# ADITIVO y su ausencia nunca rompe un build. Por eso no está horneado en el binario — un default
8# que apunta a una máquina concreta convertiría un fallo de red en un fallo de takana para cualquiera
9# que clone el repo.
10#
11# LISTA, no una URL (ADR 0014): las dos variables aceptan varios orígenes separados por comas y se
12# prueban todos antes de caer a upstream. Con uno solo, el mecanismo que existe para no depender de
13# 79 servidores ajenos dependía de UNO nuestro. Para añadir el espejo público:
14#
15# export HAMMER_MIRROR="sftp://…/hammer/fuentes,https://<bucket>.r2.dev/fuentes"
16#
17# El orden se ROTA por el hash de cada objeto, así que todos los orígenes se ejercitan en una tanda
18# del corpus — un espejo que sólo se usa cuando el otro falla es un espejo que nadie prueba.
19#
20# La ruta lleva `/~/` a propósito. curl interpreta lo que sigue al host en una URL `sftp://` como
21# ruta ABSOLUTA del servidor, así que `…:23/hammer/fuentes` busca en la raíz y devuelve
22# «(78) Could not open remote file for reading» aunque el fichero exista. `/~/` lo ancla al home.
23# ADR 0016: se exportan las DOS formas. Se acepta la vieja como entrada (hay entornos que la
24# traen puesta desde perfiles y units fuera del repo) y se deja también puesta, porque un
25# binario viejo —worker sin recompilar, imagen pinada— sólo conoce ésa.
26export TAKANA_MIRROR="${TAKANA_MIRROR:-${HAMMER_MIRROR:-sftp://u647150@u647150.your-storagebox.de:23/~/hammer/fuentes}}"
27export HAMMER_MIRROR="$TAKANA_MIRROR"
28# Fuentes git: bundles shallow por commit. Variable APARTE de HAMMER_MIRROR porque son dos espacios
29# de nombres distintos —`{sha256}.tar` vs `{commit}.bundle`— y se pueblan y se pierden por separado.
30export TAKANA_MIRROR_GIT="${TAKANA_MIRROR_GIT:-${HAMMER_MIRROR_GIT:-sftp://u647150@u647150.your-storagebox.de:23/~/hammer/fuentes-git}}"
31export HAMMER_MIRROR_GIT="$TAKANA_MIRROR_GIT"
32# ⚠⚠ DESDE LA JAULA `qorpa` EL MIRROR SFTP NO SE ALCANZA, Y FALLAN DOS COSAS A LA VEZ
33# (medido 2026-09-22 intentando construir `ia-modelo-embeddings`, que es de las tres recetas cuya
34# fuente SÓLO vive acá — las otras son `ia-modelo-chat` y `firefox-pgo-profile`):
35#
36# 1. **El `curl` del CORPUS no habla sftp.** `takana` lo invoca por nombre
37# (`takana-build/src/fetch.rs:649`, `Command::new("curl")`) y el PATH del lab pone primero
38# `/work/sergio/bin/curl` — 8.20.0 musl, SIN libssh2:
39# curl: (1) Protocol "sftp" disabled
40# El de la imagen (`/usr/bin/curl` 8.21.0, con libssh2/1.11.1) sí lo trae. Es el MISMO patrón
41# que el `git` sin `remote-https` que documenta CLAUDE.md: un binario del corpus compilado sin
42# una capacidad, y el PATH poniéndolo delante.
43# 2. **La clave no está.** `~/.ssh/github5` no existe en el hub, y la que hay (`id_ed25519`) NO
44# está autorizada en el Storage Box: con `/usr/bin/curl` se pasa de `(1) Protocol disabled` a
45# `(67) Authentication failure`. (El `(60) SSH remote key was not OK` previo es otra cosa: el
46# host no estaba en `known_hosts`; se resuelve con `ssh-keyscan -p 23`, y el TOFU acá es
47# inocuo porque el objeto se verifica por sha256 — ADR 0014, «el origen no necesita confianza».)
48#
49# ⇒ Arreglar sólo una de las dos no destraba nada, y cada una falla con un error que no menciona a
50# la otra. Lo que hace falta: un `curl` con sftp en el PATH **y** una clave autorizada.
51export TAKANA_MIRROR_KEY="${TAKANA_MIRROR_KEY:-${HAMMER_MIRROR_KEY:-$HOME/.ssh/github5}}"
52export HAMMER_MIRROR_KEY="$TAKANA_MIRROR_KEY"