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).
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 dedpkg --get-selectionsy la transcripción completa dedpkg --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?dpkg --get-selections(y supongo que te referías a ladpkg --set-selectionstranscripción?)? Incluso el primero tiene más de 3.600 líneas y alrededor de 100 KB./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.Respuestas:
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, ejecuteEsto crea un archivo
foo.apt-clone.tar.gz. Cópielo en la máquina de destino y ejecuteSi 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:
En la máquina de destino:
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 ejecutardpkg --set-selectionsyapt-get -u dselect-upgrade, ejecute el siguiente comando:Desde jessie en adelante, puedes simplificar esto para
Alternativamente, ejecute
o incluso más simple
Otro método simple que no requiere instalar un paquete adicional pero que descargará nuevamente las listas de paquetes es
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 cony restaurarlos en el sistema de destino con
fuente
dpkg --set-selectionsdesde pre-wheezy!--set-selections. Ahora, ¿cómo aplico los cambios? Inclusoapt-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.apt-get -u dselect-upgradeComo lo hice
En el host de origen :
preocuparse
/etc/apt/sources.list.dsi se usa ...Luego copie el
source.selarchivo al host de destino.En el host de destino :
adaptar sources.list incluso con diferentes espejos, pero la misma lista de componentes .
Y ahora, mi host de destino está instalando muchas cosas, entonces podría tomarme un tiempo para publicar esto.
fuente