squid corre desde el corpus: la jaula duró unas horas y se tiró
`b3:932ba096…` proyectado en la caja y arrancado por arje SIN bwrap: `pid 11548 · uid=968 · exe=/usr/sbin/squid`, con la cuenta `proxy` que declara la receta. La instancia `qorpa/squid` se borró — el manifiesto es descartable por diseño (ADR 0015 D3) y esto es para lo que existía. El arreglo de esta tanda: **`--disable-log-daemon-helpers` compilaba perfecto y no arrancaba**. El default de `access_log` es `daemon:`, asi que sin `log_file_daemon` squid muere con `FATAL: logfile_daemon /usr/lib/squid/log_file_daemon: (2) No such file or directory`. Sellaba, hasheaba y pasaba `-k parse` — se ve SOLO levantando el servicio con la config real. Familia [[subcomando-sin-driver]]. El control que lo caza, y que corre en el hub antes de tocar produccion: con la config REAL del origen y en un puerto aparte, arranque completo + CONNECT a claude.ai y api.anthropic.com con TCP_TUNNEL/200 + el access.log escrito por el log daemon + `basic_ncsa_auth` leyendo el `passwd` de verdad (control negativo: clave mala ⇒ `ERR Wrong password`). Los DOS primeros intentos de esta receta habrian llegado a produccion sin ese control: el binario estaba sellado y el hash era estable las dos veces. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1644,6 +1644,53 @@ minutos, sin compilar nada—, no la respuesta final. La diferencia con `php-fpm
|
||||
definitivo), mientras que **`squid` es C, se compila con el lab y su sitio natural es una receta**
|
||||
como la de `gitea`. Cuando esté, la instancia se tira: el manifiesto es descartable a propósito.
|
||||
|
||||
### 6.28 📦 `squid` YA NO ESTÁ ENJAULADO: corre desde el corpus *(2026-09-15)*
|
||||
|
||||
La jaula del §6.27 duró unas horas, que es lo que tenía que durar. **Hoy el proxy de producción es
|
||||
el artefacto sellado `b3:932ba096…`**, proyectado en la caja y arrancado por arje sin bwrap de por
|
||||
medio: `pid 11548 · uid=968 · exe=/usr/sbin/squid`. La instancia `qorpa/squid` se borró — el
|
||||
manifiesto es descartable por diseño (D3) y esto es exactamente para lo que existía esa salida.
|
||||
|
||||
`recipes/squid.toml`: 7.7, estático de verdad (binario **y** los cuatro helpers), `[[user]] proxy`
|
||||
con uid 968 y `[[service]]` del SDD 30. Declarado en `perfil.servidor` como paquete y en `servicios`.
|
||||
|
||||
**La config NO viaja en el paquete y es a propósito**: `squid.conf`, el `passwd` de los tres usuarios
|
||||
y las dos ACL (412 K, 40 IPs autorizadas) son datos del SITIO. El servicio los comprueba al arrancar
|
||||
y sale **78 nombrando cuál falta**, en vez de dejar un bucle de reinicios.
|
||||
|
||||
#### Los tres muros de la receta, en orden
|
||||
|
||||
1. **La URL de upstream devolvía una página HTML de 8985 bytes con un 200.**
|
||||
`squid-cache.org/Versions/v7/squid-7.7.tar.xz` no es el tarball. Pinear su sha256 habría anclado
|
||||
la receta a una página de error — y habría «funcionado» hasta el primer build. Va el release de
|
||||
GitHub, que además trae `configure` generado.
|
||||
2. 🧨 **`--export-dynamic` desactivaba el enlace estático, y el binario sellaba igual.** El primer
|
||||
artefacto tenía `usr/sbin/squid` **dinámico con `NEEDED libc.so`** mientras sus helpers salían
|
||||
estáticos: inerte en cualquier imagen sin cargador ([[needed-colgante-libstdcxx]]) pese a
|
||||
`link = "static"`. La cadena tiene tres eslabones y ninguno es obvio: `squid_LDFLAGS` trae
|
||||
`-export-dynamic` (para módulos eCAP, apagados) → **el wrapper del lab quita `-static` de
|
||||
cualquier enlace que mencione `--export-dynamic`**, a propósito, para poder enlazar las `.so`
|
||||
dlopen-ables de Python → y **libtool vuelve a añadirlo solo** en cuanto hay un `-dlopen`, así que
|
||||
sacarlo de la variable no alcanza. Se vacía `export_dynamic_flag_spec` en el `libtool` GENERADO,
|
||||
con guarda que aborta si el campo no aparece: *un `sed` que no acierta deja pasar el problema y
|
||||
el binario sale dinámico sin que nada falle*.
|
||||
⚠ Y `-dlopen force` **no sobra**: vaciar `squid_LDFLAGS` entero rompe el enlace con
|
||||
`undefined symbol: lt__PROGRAM__LTX_preloaded_symbols`, que emite el propio libtool porque hay un
|
||||
`-dlopen`. De los dos flags estorba uno; distinguirlos costó un build y adivinar cuesta lo mismo.
|
||||
3. **`--disable-log-daemon-helpers` compilaba perfecto y no arrancaba.** El default de `access_log`
|
||||
es `daemon:`, así que sin `log_file_daemon` squid muere con
|
||||
`FATAL: logfile_daemon /usr/lib/squid/log_file_daemon: (2) No such file or directory`. **Sólo se
|
||||
ve levantando el servicio con la config real; el sellado, el hash y el `-k parse` pasan los tres.**
|
||||
Es la familia de [[subcomando-sin-driver]] otra vez.
|
||||
|
||||
#### El control que hay que correr antes de tocar producción
|
||||
|
||||
Con la config REAL del origen, en el hub y en un puerto aparte: `-k parse` sin FATAL, arranque
|
||||
completo, **`CONNECT claude.ai` y `CONNECT api.anthropic.com` con TCP_TUNNEL/200**, el `access.log`
|
||||
escrito por el log daemon, y el `basic_ncsa_auth` leyendo el `passwd` de verdad (control negativo:
|
||||
con una clave mala contesta `ERR Wrong password`). Los dos primeros intentos de esta receta habrían
|
||||
llegado a producción sin ese control: el binario estaba sellado y el hash era estable las dos veces.
|
||||
|
||||
## 7. Reusar los scripts que ya existen, y no escribir de nuevo
|
||||
|
||||
Pedido explícito del usuario. El inventario de lo que ya hace el trabajo:
|
||||
|
||||
+7
-1
@@ -27,6 +27,12 @@
|
||||
# protocolos de red que este proxy no habla. `eui` además quiere las cabeceras de ARP del sistema.
|
||||
# · `--disable-translation`: las páginas de error localizadas se GENERAN con `po2html`, que el lab
|
||||
# no trae. El inglés sale igual.
|
||||
# · ⚠ `--enable-log-daemon-helpers=file` **no es opcional aunque suene a extra**: el default de
|
||||
# `access_log` es `daemon:/var/log/squid/access.log`, y sin ese helper squid arranca, avisa… y
|
||||
# muere con `FATAL: logfile_daemon /usr/lib/squid/log_file_daemon: (2) No such file or directory`.
|
||||
# La primera versión de esta receta lo apagaba junto al resto de los helpers y sólo se vio al
|
||||
# levantar el servicio con la config real — nunca al construir. Los que sí sobran (DB, reescritura
|
||||
# de URL, ACL externas) siguen apagados.
|
||||
name = "squid"
|
||||
version = "7.7"
|
||||
license = "GPL-2.0-or-later"
|
||||
@@ -51,7 +57,7 @@ configure = '''
|
||||
--disable-arch-native --disable-strict-error-checking --disable-translation \
|
||||
--enable-auth-basic=NCSA --disable-auth-digest --disable-auth-negotiate --disable-auth-ntlm \
|
||||
--disable-external-acl-helpers --disable-url-rewrite-helpers --disable-storeid-rewrite-helpers \
|
||||
--disable-log-daemon-helpers --disable-security-cert-validators --disable-security-cert-genrators \
|
||||
--enable-log-daemon-helpers=file --disable-security-cert-validators --disable-security-cert-genrators \
|
||||
--disable-icap-client --disable-snmp --disable-wccp --disable-wccpv2 --disable-eui --disable-htcp \
|
||||
--without-openssl --without-gnutls --without-nettle --without-cap --without-systemd \
|
||||
--without-ldap --without-sasl --without-gss --without-mit-krb5 --without-heimdal-krb5 \
|
||||
|
||||
Reference in New Issue
Block a user