Restaurar todos los datos y dependencias de dpkg --set-selections '*'

44

Entonces puedo correr en una máquina:

dpkg --get-selections '*' > selection.txt

En otra maquina:

dpkg --set-selections < selection.txt

... seguido de cualquiera de los siguientes:

aptitude install
apt-get -u dselect-upgrade

... para instalar los paquetes que.

Sin embargo, parece que cierta información se pierde en el proceso, como si un paquete (por ejemplo xyz) se instaló automáticamente como dependencia de otro paquete ( abc). Puedes ver eso cada vez que haces algo así apt-get --purge remove abc. En la máquina original, se le notificará que el paquete xyzse instaló como dependencia abcy que puede usar apt-get autoremovepara deshacerse de él.

Ahora soy consciente de deborphany debfoster, pero son engorrosos de usar dada la tarea (simple) en cuestión.

Parece que guardar y restaurar las selecciones como se muestra arriba no es suficiente para restaurar las sutiles dependencias de los paquetes instalados.

¿Hay alguna manera de hacer una copia de seguridad del conjunto completo de metadatos para la administración de paquetes y restaurarlo en su totalidad?

0xC0000022L
fuente
A menudo me he preguntado lo mismo que genero un gran script de shell con un 'sudo apt-get install' con todos mis paquetes (menos libs). Por supuesto, me encuentro con el mismo problema que tienes.
Chuck R
Supongo que el mejor lugar para comenzar a buscar sería verificar si dpkg es realmente responsable de esa información. Si no es así, tal vez ese sea el trabajo de apt.
Huckle
3
Si va por el camino manual, puede estar interesado en apt-markguardar / restaurar información sobre paquetes automáticos versus paquetes instalados manualmente
Lekensteyn
No está en el repositorio del paquete 10.04, ¿verdad? ¿Forma parte de los repositorios canónicos o de terceros?
0xC0000022L
2
No, eso es solo un comentario "para su información". Usaría apt-mark (es parte de apt, por lo que ya debería estar instalado) para obtener y establecer las marcas de los paquetes (consulte su página de manual para más detalles).
htorque

Respuestas:

39

Apoyo:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Restaurar:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
fuente
Gracias, estaba a punto de pedirle a usted oa Lekensteyn que lo escribieran como respuesta.
0xC0000022L
¿Estos comandos le permiten reinstalar los programas de esa lista?
Svetlana Belkin
¿Esto puede eliminar los paquetes que se instalan extra, en la restauración?
n611x007
1
¿Puedes explicar la diferencia entre autoy manual? Gracias.
Anto
Accidentalmente marqué como manual un montón de otros paquetes ... ¿hay alguna forma de revertir? Gracias
dentex
2

La respuesta seleccionada a esta pregunta está incompleta y no funciona (o ya no funciona). La solución dolorosa es usar un bash for-loop para analizar los archivos de salida * .lst y alimentarlos apt install. Sin embargo, mala elección, por lo que no se ilustrará aquí.

Una mejor opción es usar apt-clone, como se ve en esta respuesta en el intercambio de pila de Unix y Linux. Esto crea un archivo pequeño (alrededor de 100K o menos para mi sistema). Supuestamente, clonará los paquetes con poco esfuerzo o dolor.

Entonces, en resumen, en la máquina original:

apt-clone clone `uname -n`

Luego, en la máquina para clonar, copie el archivo de clonación y ejecute:

apt-clone restore original-machine-name.apt-clone.tar.gz

Incluyo esta respuesta aquí ya que esta página apareció en las búsquedas web iniciales, pero la otra respuesta no. Este método parece mucho más fácil.

casualcoder
fuente