GNU/Linux >> Tutoriales Linux >  >> Debian

Debian:¿cómo replicar selecciones de paquetes instalados de un sistema Debian a otro? (Debian Wheezy)?

Estoy tratando de configurar un entorno de prueba en una máquina virtual para probar las actualizaciones antes de aplicarlas a mi sistema principal.

Para hacerlo, realicé una instalación básica de Debian Wheezy (igual que en el sistema principal) en la VM, luego ejecuté como root desde dentro de la VM:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] 'dpkg --get-selections | grep -v deinstall' | 
  dpkg --set-selections

Desafortunadamente, en mi caso se necesita la arquitectura i386; el sistema es nativo amd64.

El problema es con dpkg --set-selections ejecutar en la máquina virtual. Tengo algunos paquetes que requieren un manejo especial (esos son en realidad la razón principal por la que quiero un entorno de prueba en primer lugar), pero cuando ejecuto el último comando anterior, obtengo un montón de líneas de salida como:

dpkg: warning: package not in database at line NNN: package-name

para paquetes que realmente deberían estar disponibles en el sistema base. Los ejemplos incluyen xterm , yelp y zip .

Ahora mi pregunta:

¿Cuál es el proceso específico para transferir la lista de selección de paquetes de un sistema Debian a otro? (asumiendo el mismo nivel de versión de Debian, en Wheezy) y luego aplicando esos cambios posteriormente? El objetivo es que ambos tengan la misma lista de paquetes instalados, idealmente haciendo una diff entre las salidas de dpkg --get-selections o dpkg --list en los dos vuelve sin mostrar diferencias.

grep -v deinstall la parte se toma prestada de Impedir que los paquetes se eliminen después de hacer dpkg --set-selections en Ask Ubuntu.

Cambié la fuente en la VM para que sea la misma que en el sistema principal, también instalé apt-transport-https :

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

Mirando el resultado de –set-selections, estoy viendo:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

Los números de línea parecían extraños y la parte correspondiente de la salida de –get-selections es:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

Observe que entre acl y aglfn son acpi-support-base , acpid y adduser para los que no se informan errores . Parece que los paquetes para los que se informan errores son un según dpkg -l , o dpkg -l no tiene ninguna idea sobre ellos (dpkg-query: no packages found matching ... ). Sé que hay algunos paquetes instalados localmente, pero no muchos. i386 no figura hasta gcc-4.7-base:i386 install mucho más abajo en la lista (línea 342 en la salida –get-selections).

Relacionado:¿Cuáles son las diferencias fundamentales entre los principales shells *NIX?

Respuesta aceptada:

Para clonar una instalación de Debian, use apt-clone utilidad. Está disponible (como un paquete separado, no como parte de la instalación predeterminada) en Debian desde Wheezy y en Ubuntu desde 12.04. En la máquina existente, ejecute

apt-clone clone foo

Esto crea un archivo foo.apt-clone.tar.gz . Cópielo en la máquina de destino y ejecútelo

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Si está trabajando con un sistema antiguo donde apt-clone no está disponible, o si solo desea replicar la lista de paquetes instalados pero no cualquier archivo de configuración, estos son los pasos manuales.

  • En la máquina de origen:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • En la máquina de destino:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

Creo que está afectado por un cambio incompatible en dpkg que primero lo convirtió en sibilante. Consulte el error n.º 703092 para conocer los antecedentes.

La historia corta es que dpkg --set-selections ahora solo acepta nombres de paquetes que están presentes en el archivo /var/lib/dpkg/status o /var/lib/dpkg/available . Si solo usa APT para administrar paquetes, como la mayoría de las personas, entonces /var/lib/dpkg/available no se mantiene actualizado.

Después de ejecutar apt-get update y antes de ejecutar dpkg --set-selections y apt-get -u dselect-upgrade , ejecute el siguiente comando:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Desde jessie en adelante, puedes simplificar esto a

apt-cache dumpavail | dpkg --merge-avail

Alternativamente, ejecute

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

o incluso más simple

apt-get install dctrl-tools
sync-available

Otro método simple que no requiere la instalación de un paquete adicional pero que descargará las listas de paquetes nuevamente es

dselect update

Consulte las preguntas frecuentes de dpkg para obtener más información. (Esto se menciona en la página de manual de dpkg, pero más de una manera que le recordaría el problema si ya lo sabía, ¡no de una manera que explique cómo resolver el problema!)

Tenga en cuenta que clonar la instalación de un paquete con dpkg --set-selections no restaura la marca automática/manual en APT. Consulte Restauración de todos los datos y dependencias de dpkg –set-selections '*' para obtener más detalles. Puede guardar las marcas en el sistema de origen con

apt-mark showauto >auto.list

y restaurarlos en el sistema de destino con

xargs apt-mark auto <auto.list

Debian
  1. Cómo actualizar el sistema Debian Linux de Wheezy a la versión estable de Jessie

  2. Cómo instalar Gradle en Debian 10

  3. Debian:¿cómo instalar un solo paquete desde Debian Testing o Unstable en Stable?

  4. Fedora:¿cómo replicar la selección de paquetes instalados de una instancia de Fedora a otra?

  5. Cómo compilar desde la fuente e instalar Nginx en un VPS Debian 7 (Wheezy)

Cómo instalar paquetes en Debian 10

Cómo instalar PostgreSQL 14 en Debian 11

Cómo instalar el paquete Debian (.deb)

Cómo instalar webmin en Debian 11

Cómo redirigir de un dominio a otro en Nginx y Debian 11

Cómo instalar Wine en Debian 7 Wheezy