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-selections
ejecutar 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
, yelp
y 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 diff
entre las salidas de dpkg --get-selections
o dpkg --list
en los dos regrese sin mostrar diferencias.
La grep -v deinstall
parte 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 acl
y aglfn
are acpi-support-base
, acpid
y adduser
para los cuales no se informan errores . Parece que los paquetes para los que se informan los errores están de un
acuerdo dpkg -l
o dpkg -l
no tienen 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).
fuente
dpkg --get-selections … | … dpkg --set-selections
es 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-selections
y 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-selections
transcripció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-clone
utilidad. 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-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 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-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 ejecutardpkg --set-selections
yapt-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-selections
no 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-selections
desde pre-wheezy!--set-selections
. Ahora, ¿cómo aplico los cambios? Inclusoapt-get -u dist-upgrade
solo 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-upgrade
Como lo hice
En el host de origen :
preocuparse
/etc/apt/sources.list.d
si se usa ...Luego copie el
source.sel
archivo 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