el aviso, enchufado en la caja — y «al día» con cero instalados era una mentira cómoda
Cron horario de root → /usr/local/bin/avisar-actualizaciones, un envoltorio que sólo fija las rutas de la caja y llama al guion del repo. La lógica no se copia: comprobado en vivo que arreglar el guion en el clon cambia la salida del cron sin volver a desplegar nada. ⚠ La primera corrida real destapó un defecto del aviso: con la DB de instalados vacía decía «al día». Es verdad y no dice nada — peor, se lee como «comprobado y correcto» cuando lo cierto es que no había NADA que comprobar. Un aviso que suena igual cuando vigila que cuando no vigila nada es cómo se deja de mirar un aviso. Ahora distingue el caso y lo nombra. Control en la caja con una DB de juguete (un zsh a otro hash): grita «1 con novedad · hash distinto» y en la segunda corrida calla. Y dos piezas que faltaban allá: /var/lib/hammer/trust/release.ed25519.pub (el almacén de confianza por defecto de la CLI, que no existía ⇒ ahora install/outdated verifican sin pasar --trust) y /usr/local/bin/takana con el arreglo del §5.5. Ojo: el PATH de la caja no incluye /usr/local/bin, así que un `takana` a secas sigue siendo el del store; el cron usa rutas absolutas.
This commit is contained in:
@@ -670,10 +670,32 @@ rechazándolo, que es lo único honesto que se podía hacer sin la clave.
|
||||
los clientes debería llevar también el Storage Box. El primer origen roto, si es el único, es el
|
||||
último.
|
||||
|
||||
⚠ **Y el aviso periódico no está cableado en la caja a propósito**: `/var/lib/hammer/installed.json`
|
||||
no existe ahí —ningún paquete se instaló por `takana install`, el sistema viene de imágenes—, así
|
||||
que `avisar-actualizaciones.sh` sólo diría «nada instalado» cada 30 minutos. Se enchufa el día que
|
||||
la caja consuma su propio repo, que es el §6.46 visto desde el otro lado.
|
||||
### 5.9 El aviso, enchufado en la caja *(2026-09-21)*
|
||||
|
||||
`41 * * * *` en el crontab de root → `/usr/local/bin/avisar-actualizaciones`, un envoltorio de tres
|
||||
líneas que **sólo fija las rutas de la caja** (`REPO`, `DB`, `TRUST`, `STATE`, `TAKANA`) y llama al
|
||||
guion del repo. La lógica no se copia a propósito: el día que el guion cambie, el cron no se queda
|
||||
con una versión vieja — y se comprobó en vivo, arreglando el guion en el clon y viendo cambiar la
|
||||
salida del envoltorio **sin volver a desplegar nada**.
|
||||
|
||||
Tres piezas que faltaban en la caja y ahora están:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `/var/lib/hammer/trust/release.ed25519.pub` | el almacén de confianza **por defecto** de la CLI, que no existía ⇒ `install`/`outdated` verifican la firma **sin pasar `--trust`** |
|
||||
| `/usr/local/bin/takana` | build release con el arreglo del §5.5. ⚠ El `PATH` de la caja **no incluye `/usr/local/bin`**, así que un `takana` a secas sigue siendo el del store (que no conoce `outdated`). El cron usa rutas absolutas. Ponerlo canónico es reconstruir la receta `takana` e hidratarla — su propia unidad de trabajo |
|
||||
| `/var/log/takana-actualizaciones.log` | una línea por hora |
|
||||
|
||||
⚠ **Y la primera corrida real destapó un defecto del propio aviso**: con la DB de instalados vacía
|
||||
decía **«al día»**. Es verdad y no dice nada — peor, se lee como «comprobado y correcto» cuando lo
|
||||
cierto es que *no había nada que comprobar*. Un aviso que suena igual cuando vigila que cuando no
|
||||
vigila nada es exactamente cómo se deja de mirar un aviso. Ahora distingue: *«nada instalado por
|
||||
takana en esta máquina (DB …) — no hay qué comparar»*. Control en la caja con una DB de juguete
|
||||
(un `zsh` a otro hash): grita `1 con novedad · hash distinto`, y en la segunda corrida calla.
|
||||
|
||||
Hoy la caja no instala de su propio repo —viene de imágenes—, así que el aviso dirá esa línea hasta
|
||||
que lo haga; se pone igual para que el día que instale algo ya esté, y porque una línea por hora no
|
||||
es ruido. Cada hora y no cada 30 minutos: el repo cambia cuando alguien publica.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -68,10 +68,20 @@ AHORA="$(huella "$NUEVO")"
|
||||
mv "$NUEVO" "$STATE"
|
||||
|
||||
N=$(python3 -c 'import json,sys; print(len(json.load(open(sys.argv[1])).get("novedades",[])))' "$STATE")
|
||||
INSTALADOS=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("instalados",0))' "$STATE")
|
||||
SELLO="$(date -u +%FT%TZ)"
|
||||
|
||||
# ⚠ «Al día» con CERO paquetes instalados es verdad y no dice nada — peor: se lee como «comprobado
|
||||
# y correcto» cuando lo cierto es que no había nada que comprobar. Medido la primera vez que corrió
|
||||
# en la caja, cuya DB de instalados ni existe. Un aviso que suena igual cuando vigila que cuando no
|
||||
# vigila nada es exactamente cómo se deja de mirar un aviso.
|
||||
if [ "$INSTALADOS" = "0" ]; then
|
||||
echo "$SELLO · nada instalado por takana en esta máquina (DB $DB) — no hay qué comparar contra $REPO"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$N" = "0" ]; then
|
||||
echo "$SELLO · al día contra $REPO"
|
||||
echo "$SELLO · al día contra $REPO ($INSTALADOS paquete(s) comprobado(s))"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user