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

19

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

Para hacerlo, hice 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 me@main-system 'dpkg --get-selections | grep -v deinstall' | \
  dpkg --set-selections

Desafortunadamente, la arquitectura i386 es necesaria en mi caso; El sistema es amd64 nativo.

El problema es con dpkg --set-selectionsejecutar en la VM. Tengo algunos paquetes que requieren un manejo especial (en realidad, esa es la razón principal por la que quiero un entorno de preparación en primer lugar), pero cuando ejecuto el último comando anterior, obtengo un billó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, yelpy zip.

Ahora para 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 lanzamiento de Debian, en Wheezy) y luego aplicar esos cambios? El objetivo es que ambos tengan la misma lista de paquetes instalados, idealmente de tal manera que al hacer una diffentre las salidas de dpkg --get-selectionso dpkg --listen los dos regrese sin mostrar diferencias.

La grep -v deinstallparte está prestada de Evitar que los paquetes se eliminen después de volverdpkg --set-selections a hacerlo en Ask Ubuntu.

He cambiado la fuente en la VM para que sea la misma que en el sistema principal, también instalando 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 la salida --set-selections, veo:

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 impares, y la porción 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 acly aglfnare acpi-support-base, acpidy adduser para los cuales no se informan errores . Parece que los paquetes para los que se informan los errores están de unacuerdo dpkg -lo dpkg -lno tienen ninguna idea sobre ellos ( dpkg-query: no packages found matching ...). Sé que hay algunos paquetes instalados localmente, pero no muchos. i386no figura hasta gcc-4.7-base:i386 install mucho más abajo en la lista (línea 342 en la salida --get-selections).

un CVn
fuente
dpkg --get-selections … | … dpkg --set-selectionses la forma de replicar las selecciones de paquetes. Si le está fallando, necesitará proporcionar más información sobre por qué. Publique su conjunto completo de fuentes en ambos sistemas, la salida de dpkg --get-selectionsy la transcripción completa de dpkg --get-selections(tal vez podamos discernir un patrón al ver qué funciona y qué no). Si el sistema principal amd64 o i386? ¿Funciona si no agrega la arquitectura i386?
Gilles 'SO- deja de ser malvado'
@Gilles ¿Realmente necesita ser la salida completa de dpkg --get-selections(y supongo que te referías a la dpkg --set-selectionstranscripción?)? Incluso el primero tiene más de 3.600 líneas y alrededor de 100 KB.
un CVn
Debe publicar lo suficiente para que podamos discernir el patrón de qué paquetes desencadenan errores y cuáles no (a menos que pueda resolverlo usted mismo). Una copia de /var/lib/dpkg/Packages(que es aún más larga) también podría ser útil, esto podría ser un síntoma de un archivo de paquetes roto.
Gilles 'SO- deja de ser malvado'
@Gilles Punto interesante. Realmente no había considerado la posibilidad, pero uso diferentes espejos en estos. Déjame ver si todavía sucede si apunto la VM al mismo espejo de Debian. Colocarse.
un CVn
@Gilles Eso realmente no hizo ninguna diferencia perceptible, pero encontré algo más. Ver la pregunta actualizada.
un CVn

Respuestas:

17

Para clonar una instalación de Debian, use la apt-cloneutilidad. Está disponible (como un paquete separado, no forma 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 ejecute

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

Si está trabajando con un sistema antiguo donde apt-cloneno 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 fuente:

    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 jadeo. Ver error # 703092 para el fondo.

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

Después de ejecutar apt-get updatey antes de ejecutar dpkg --set-selectionsy 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 para

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 instalar un paquete adicional pero que descargará nuevamente las listas de paquetes 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 la clonación de una instalación de paquete dpkg --set-selectionsno restaura la marca automática / manual en APT. Consulte Restaurar todos los datos y dependencias de dpkg --set-selections '*' para obtener más detalles. Puede guardar las marcas en el sistema fuente con

apt-mark showauto >auto.list

y restaurarlos en el sistema de destino con

xargs apt-mark auto <auto.list
Gilles 'SO- deja de ser malvado'
fuente
3
Este problema debería ser mucho más visible de lo que es. ¡No puedo creer que no haya oído hablar de eso antes!
Faheem Mitha
Interesante. Voy a darle una oportunidad a esto. ¡Gracias!
un CVn
@FaheemMitha Sí, me sorprende que nunca haya oído hablar de eso antes de hoy. ¡No puedo creer que no haya usado dpkg --set-selectionsdesde pre-wheezy!
Gilles 'SO- deja de ser malvado'
Bien, eso dio una lista mucho más corta de advertencias de --set-selections. Ahora, ¿cómo aplico los cambios? Incluso apt-get -u dist-upgradesolo menciona un puñado de paquetes (todos relacionados con ZFS) donde debería haber cientos, si no miles de paquetes afectados.
un CVn
@ MichaelKjörling Eso esapt-get -u dselect-upgrade
Gilles 'SO- deja de ser malvado'
0

Como lo hice

  1. En el host de origen :

    apt-get update && apt-get dist-upgrade
    dpkg --get-selection >/tmp/source.sel
    cat /etc/apt/sources.list
    

    preocuparse /etc/apt/sources.list.dsi se usa ...

    Luego copie el source.selarchivo al host de destino.

  2. En el host de destino :

    vi /etc/apt/sources.list 
    

    adaptar sources.list incluso con diferentes espejos, pero la misma lista de componentes .

    apt-get update
    dselect upgrade
    dpkg --set-selection </tmp/source.sel
    dselect install
    

    Y ahora, mi host de destino está instalando muchas cosas, entonces podría tomarme un tiempo para publicar esto.

techno
fuente
Tal vez 'actualización dselect' debería ser 'actualización dselect' en la descripción anterior 'Cómo lo hice'.
Jonathan Kimmitt