250 líneas de comentario en 151 scripts. Control verificado: el diff no toca NI UNA línea que no empiece por #, y la sintaxis de los 151 pasa. El barrido saltea heredocs y cadenas triples, y el guardián DISPARÓ 3 veces: las tres eran el MOTD que el script escribe DENTRO de la imagen construida — texto del producto, no comentario del script. Se cambiaron aparte y a propósito, que es rebranding, no limpieza. Y el hallazgo caro: casaba contra , que es el TARGET de tracing — o sea el module_path!, o sea el nombre del crate. La etapa 4 lo movió a y el script quedó casando NADA. No fallaba: imprimía cero atribuciones, indistinguible de un log sin problemas. Comprobado con el binario (RUST_LOG=info sobre zlib), no deducido. Ahora acepta las dos, y tiene que seguir aceptándolas porque los logs viejos en disco dicen la vieja. Además 14 rutas de módulo en docs, que el barrido anterior no tocó porque no es frontera de palabra.
52 lines
2.2 KiB
Bash
Executable File
52 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# harkaq-policy — deriva la política de la clausura declarada (SDD 16, D1).
|
|
#
|
|
# harkaq-policy.sh <dir-dep> [<dir-dep>...] > politica
|
|
#
|
|
# D1: la política NO se escribe, se DERIVA. La receta ya declara sus `deps` por hash; cada dep
|
|
# es un artefacto sellado del store (`store/<hash>-<name>/usr/...`). La clausura es, exactamente,
|
|
# el conjunto de ficheros que esas deps aportan — ni uno más.
|
|
#
|
|
# El sandbox de takana apila cada dep con `--overlay-src` sobre el rootfs Alpine, así que el
|
|
# fichero `store/<hash>-zlib/usr/include/zlib.h` aparece dentro como `/usr/include/zlib.h`. La
|
|
# traducción es sólo quitar el prefijo del store: el resto del path YA es el path del sandbox.
|
|
#
|
|
# Por qué fichero a fichero y no por directorio: adentro, la dep declarada y el rootfs Alpine
|
|
# comparten `/usr` (medido: /usr/include/zlib.h y /usr/include/stdio.h son el mismo directorio
|
|
# overlayfs). Una regla sobre /usr concede los dos y la evidencia deja de significar algo. Los
|
|
# `list` de los directorios se emiten para que las herramientas puedan ESCANEAR (pkgconf, los
|
|
# tests de configure) sin poder LEER lo no declarado — Landlock separa READ_DIR de READ_FILE.
|
|
set -eu
|
|
|
|
emit_dirs() {
|
|
# Los directorios que contienen ficheros de la clausura: listables, no legibles.
|
|
# Se emiten deduplicados y con sus ancestros, porque un `ls /usr` también es un escaneo
|
|
# legítimo y su denegación sería un falso positivo, no deuda de de-Alpinización.
|
|
while IFS= read -r d; do
|
|
while [ "$d" != "/" ] && [ -n "$d" ]; do
|
|
echo "list $d"
|
|
d=$(dirname "$d")
|
|
done
|
|
done | sort -u
|
|
}
|
|
|
|
TMP="$(mktemp)"
|
|
trap 'rm -f "$TMP" "$TMP.d"' EXIT
|
|
: > "$TMP"
|
|
: > "$TMP.d"
|
|
|
|
for dep in "$@"; do
|
|
real=$(readlink -f "$dep")
|
|
# `.hammer/` es metadata del artefacto (recipe.toml), no parte de la clausura que el build
|
|
# consume: si el build lo leyera sería una denegación legítima que queremos ver.
|
|
find "$real" -type f -o -type l | grep -v "/\.hammer/" | while IFS= read -r f; do
|
|
inside="${f#$real}"
|
|
echo "ro $inside" >> "$TMP"
|
|
dirname "$inside" >> "$TMP.d"
|
|
done
|
|
done
|
|
|
|
echo "# harkaq-policy: clausura derivada de $# dep(s)"
|
|
sort -u "$TMP.d" | emit_dirs
|
|
sort -u "$TMP"
|