`targets.toml` declaraba `chrony`, `cronie` y `logrotate` como raíces del perfil `servidor` con el
motivo escrito al lado, y ninguna tenía receta: el grafo las contaba como `wanted` y ésa era toda la
deuda que le quedaba al perfil. Ahora sellan las cuatro (popt es la hoja que `logrotate` exige:
incluye `<popt.h>` en la primera pantalla y su configure aborta sin él).
servidor 97/97 → 101/101 listo, falta 0. `wanted` desaparece de los totales.
Lo que se midió, no se supuso:
· logrotate estático, CERO NEEDED, corre, y las rutas de gzip quedan en `/bin` — que es donde
busybox las deja de verdad; el default de upstream en Linux es `/usr/bin/gzip`, que en esta
distro NO EXISTE y habría fallado en runtime diciendo «no se pudo comprimir».
· chrony `+CMDMON +REFCLOCK +RTC +PRIVDROP +IPV6`; `cap_set_proc` está en el ELF, o sea que
libcap entró de verdad y chronyd suelta privilegios. Sale `-NTS -SECHASH` a propósito: NTS
necesita nettle o gnutls y ninguna está en el corpus.
· cronie los cuatro binarios estáticos sin NEEDED, con inotify dentro, y `/bin/vi` pineado.
**El hilo que recorre las tres recetas es el mismo, y es el que valía la pena escribir:** los tres
`configure` DECIDEN MIRANDO EL LAB. `logrotate` trae `--with-selinux/--with-acl` en `[default=check]`;
`chrony` prueba nettle, gnutls, libcap, seccomp y editline; `cronie` resuelve el editor de
`crontab -e` con `AC_PATH_PROG([vi])` y lo graba en el binario. El lab NO entra en `hash_inputs` ⇒
dos labs distintos sellarían bytes distintos en la MISMA dirección del store y nada lo notaría.
Cada palanca va fijada en la receta —que sí entra en el hash— para que sea una decisión y no un
accidente del entorno.
Y una anotada en vez de tapada: cronie no reemplaza al `crond` de busybox por reflejo (busybox ya lo
pone en `/sbin`); agrega `@reboot`, crontabs por usuario, `/etc/cron.d` y anacron. Cuál va en cada
imagen es decisión de perfil — lo que faltaba era que la opción existiera en el corpus.
55 lines
3.2 KiB
TOML
55 lines
3.2 KiB
TOML
# cronie 1.7.2 — el disparador periódico. Es la tercera y última de las raíces que `targets.toml`
|
|
# declaraba para el perfil `servidor` sin receta detrás. El motivo escrito allí es directo: en una
|
|
# distro sin systemd no hay timers, y el latido de la granja son tres líneas de crontab.
|
|
#
|
|
# **Y busybox YA trae un `crond` — esto no lo reemplaza por reflejo.** El artefacto sellado de
|
|
# busybox pone `crond` en `/sbin`. Lo que cronie agrega y busybox no tiene: `@reboot`, crontabs por
|
|
# usuario con `crontab -e`, `/etc/cron.d`, `cronnext`, y `anacron` para las tareas que hay que
|
|
# recuperar cuando la máquina estuvo apagada. Cuál de los dos va en cada imagen es una decisión de
|
|
# perfil, no de esta receta; lo que hacía falta era que la opción EXISTIERA en el corpus en vez de
|
|
# descubrirse ausente el día que alguien la necesite.
|
|
#
|
|
# ⚠ EL DEFAULT QUE HABÍA QUE PINEAR SÍ O SÍ: `--with-editor`. Sin él, `configure.ac` hace
|
|
# `AC_PATH_PROG([vi])` — o sea que la ruta del editor que `crontab -e` lanza SALE DE BUSCAR `vi` EN
|
|
# EL LAB, y queda grabada en el binario con `AC_DEFINE_UNQUOTED`. El lab no entra en `hash_inputs`:
|
|
# dos labs con `vi` en rutas distintas sellarían bytes distintos en la MISMA dirección del store y
|
|
# nada lo notaría. Se fija en `/bin/vi`, que además es donde busybox lo deja de verdad (comprobado
|
|
# en su artefacto sellado); el fallback de autoconf era `/usr/bin/vi`, que en esta distro no existe.
|
|
#
|
|
# Lo demás son palancas de cosas que el corpus no tiene, apagadas explícitamente por la misma razón
|
|
# —que el probe no salga del entorno— y no porque estorben:
|
|
# --without-pam no hay Linux-PAM en el corpus. La autorización de `crontab` cae entonces a
|
|
# `/etc/cron.allow` + `/etc/cron.deny`, que es el mecanismo clásico y no
|
|
# necesita nada más.
|
|
# --without-selinux la distro no lleva SELinux.
|
|
# --without-audit no hay libaudit.
|
|
# --with-inotify esto se ENCIENDE: con inotify, crond se entera de un crontab editado sin
|
|
# esperar al minuto siguiente. Es una API del kernel, no una dep nueva.
|
|
# --enable-syscrontab `/etc/crontab` y `/etc/cron.d`, que es por donde entra el latido de la granja.
|
|
#
|
|
# `link = "static"`: binarios monolíticos como el resto de las herramientas de sistema.
|
|
#
|
|
# La licencia es compuesta y no se adivina: el grueso (`src/cron.c` y compañía) es ISC de Vixie/ISC,
|
|
# y `anacron` —que se construye— trae su propio `COPYING.anacron`, GPLv2-or-later.
|
|
name = "cronie"
|
|
version = "1.7.2"
|
|
license = "ISC AND GPL-2.0-or-later"
|
|
|
|
[source]
|
|
tarball = "https://github.com/cronie-crond/cronie/releases/download/cronie-1.7.2/cronie-1.7.2.tar.gz"
|
|
sha256 = "f1da374a15ba7605cf378347f96bc8b678d3d7c0765269c8242cfe5b0789c571"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = []
|
|
|
|
[build.phases]
|
|
configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --localstatedir=/var --sbindir=/usr/sbin --with-editor=/bin/vi --with-inotify --without-pam --without-selinux --without-audit --enable-syscrontab'
|
|
compile = 'make -j"$(nproc)"'
|
|
install = "make install DESTDIR=/out && find /out -name '*.la' -delete"
|
|
|
|
[deps]
|
|
build = ["binutils", "busybox", "make", "pkgconf"]
|