Escenario: en la configuración del sistema controlada por la versión basada en Puppet, Chef, etc., es necesario reproducir un cierto estado del sistema. Esto se realiza especificando explícitamente las versiones del paquete del sistema.
Recientemente nos encontramos con un problema en el que faltaban ciertas versiones de paquetes en los repositorios de Debian. Un ejemplo: el paquete "parche" se requería en la versión 2.7.5-1 + deb9u1, pero solo 2.7.5-1 + deb9u2 estaba disponible. Otro ejemplo aún más severo: se requiere "linux-headers-4.9.0-9-common" (debido a que se está instalando el kernel asociado) y solo está disponible "linux-headers-4.9.0-11-common".
Esto hace que sea imposible reproducir un cierto estado de un sistema.
Los paquetes anteriores son solo ejemplos (que de hecho encontré). Estoy interesado en comprender y resolver el problema general.
¿Cuál es la idea detrás de estas actualizaciones, 'desaparecer' paquetes y versiones de paquetes?
¿Dónde puedo obtener versiones anteriores (no versiones realmente antiguas, sino versiones que tienen un par de semanas) de paquetes Debian? Debería ser posible automatizar el proceso de instalación de manera general.
stable
permanece constante, al menos hasta el próximo punto de lanzamiento. Las actualizaciones estables, las pruebas y las inestables solo contienen la última versión de cualquier paquete dado. Para cualquier otra cosa, tendrá que buscar en archive.debian.org (o snapshot.debian.org como se menciona en la respuesta de SK)linux
nombre del paquete es una excepción: en general, los paquetes de Debian stable tienen el mismo nombre de paquete y solo cambian el número de versión.linux-image-amd64
nunca cambia de nombre y siempre depende de lo últimolinux-image-4.9.0-*
. El nuevolinux-image-4.9.0-*
nombre del paquete marca los cambios incompatibles de ABI del kernel necesarios para respaldar algunas correcciones de errores y permite tratar con la compilación necesaria de módulos personalizados (dkms, etc.). Del mismo modo paralinux-headers-*
.apt-get changelog packagename
Respuestas:
Ser capaz de reproducir una configuración específica, hasta la versión exacta, es su requisito, no el de Debian.
Debian solo admite una única versión de cada paquete binario en cualquier versión dada; La contrapartida de eso es que se tiene mucho cuidado para garantizar que las actualizaciones de paquetes en cualquier versión dada no introduzcan regresiones, y cuando tal cuidado no es posible, documentar ese hecho. Mantener varias versiones de un paquete dado solo aumentaría la carga de soporte y los requisitos de prueba: por ejemplo, los mantenedores de paquetes tendrían que probar los paquetes actualizados contra todas las versiones disponibles de las bibliotecas que usan, en lugar de solo las versiones compatibles actualmente ... Los paquetes solo se actualizan en una versión estable cuando es realmente necesario, es decirpara corregir un error grave (incluidos problemas de seguridad). En el caso del kernel, esto a veces significa que la ABI del kernel cambia, y el nombre del paquete cambia como resultado de eso (para forzar la reconstrucción de paquetes dependientes); hay meta-paquetes que se puede tirar en lugar de codificar duro la ABI (
linux-image-amd64
,linux-headers-amd64
, etc.).Sin embargo, existe una solución para su situación: cada fuente publicada y paquete binario se archiva en snapshot.debian.org . Cuando crea una configuración versionada, puede elegir la instantánea correspondiente (por ejemplo, una de las instantáneas de septiembre de 2019 ) y usarla como URL del repositorio:
Si termina confiando en esto, utilice un espejo de caché de algún tipo, por ejemplo Apt-Cacher NG . Esto no solo reducirá la carga en el servidor de instantáneas, sino que garantizará que tenga una copia local de todos los paquetes que necesita.
(La situación con respecto a los paquetes fuente es un poco más compleja, y los archivos llevan múltiples versiones de algunos paquetes fuente en una versión dada, debido a las dependencias de licencias. Pero eso no es relevante aquí. Estrictamente hablando, Debian proporciona múltiples versiones de algunos binarios en versiones compatibles: la versión actual en la versión de punto actual, junto con cualquier actualización en los repositorios de seguridad y repositorios de actualización; estos últimos se pliegan en la próxima versión de punto. Por lo tanto, es posible mantener una configuración del sistema reproducible y controlada por la versión sin recurrir a las instantáneas, siempre que las actualice cada vez que se realiza un lanzamiento puntual).
fuente
apt-cache madison packagename
mostrarán todas las versiones queapt
pueden ver a través de repositorios configurados.No confíe en servidores que no están bajo su control para reproducir un estado específico del sistema. Aunque los servidores Debian son bastante confiables, nunca se sabe lo que podría suceder en el futuro. Esto es especialmente relevante con otros repositorios, puede usar.
Debe mantener su propio espejo para obtener estados de sistema capaces de reproducirse. De esta forma, incluso puede tener un estado de producción para sus sistemas normales y varios estados de prueba para nuevas configuraciones.
La herramienta de gestión de repositorio de acierto es capaz de crear espejos de repositorios. Puede elegir los paquetes para duplicar, crear instantáneas del contenido del repositorio en un momento específico y combinar varias duplicaciones o instantáneas en un solo repositorio. De esta manera, puede reproducir completamente los estados del sistema.
fuente
Si bien la respuesta de Stephen Kitt ciertamente es una posible solución, creo que sería más seguro que conserve sus propias copias de los paquetes necesarios.
Cuando grabe una configuración del sistema, asegúrese de guardar copias de los
.deb
archivos de/var/cache/apt/archives/
. También puedes usarapt-get download
.Al restaurar una configuración del sistema, debe ser muy estricto
apt
para evitar desencadenar acciones automáticas potencialmente peligrosas.Probablemente será más fácil de usar
dpkg
directamente para instalar exactamente lo que desea.fuente
/var/cache/apt
.pkgs-20190501
, luego publique el directorio de instantánea como un repositorio. En el momento de la compilación, coloque la URL del repositorio versionada (por ejemplohttp://debmirror/pkgs-20190501/...
) en sources.list, luego ejecute apt-get update, apt-get install $ pkgs, etc.