Cómo crear una lista de paquetes instalados para una reinstalación fácil / automática después de formatear el disco

8

Cambiaré mi sistema de 32 bits a 64 bits, y será el mismo que tenía antes, Debian Squeeze, pero no quiero perder los programas que instalé antes, porque no recuerdo el nombre de todos ellos.

Entonces, quería que un comando hiciera esto por mí, guardar el nombre de todos los programas que instalé en un archivo, pero no los programas estándar que venían con el sistema, y ​​cuando estoy usando el otro sistema mencionaría el nombre de el archivo y su directorio para que todo se instale automáticamente.

Una pregunta más: ¿es posible hacer esto con programas que se instalaron manualmente dpkg-i package.deb? Si es así, ¿cómo puedo hacer eso?

Zignd
fuente

Respuestas:

7

¿Has intentado usar dpkg --get-selections >packages? Si desea excluir algunos paquetes, puede editar el archivo de salida packages. Cuando haya terminado, transfiéralo al sistema de destino y diga:

dpkg --set-selections <packages

Y los paquetes se marcarán para su instalación. Lo más probable es que también necesites decirlo aptitude update; aptitude dist-upgrade.

La otra pregunta: si esos paquetes son paquetes de i386arquitectura, y usted los ha multiarchinstalado, puede instalar los .debs con lo habitual dpkg -i package.deb. Pero probablemente sea mejor investigar caso por caso e instalar versiones de 64 bits de los paquetes que los tienen.

Alexios
fuente
Gracias, realmente me ayudaste cuando dijiste que los paquetes ya instalados están en la arquitectura i386, no lo había pensado, creo que es mejor reinstalar esos otros.
Zignd
9

En las versiones actuales de Debian, puede obtener una lista de paquetes instalados explícitamente con

apt-mark showmanual

Para aquellos que ejecutan versiones antiguas de Debian donde apt-mark showmanualno existe, o si desea realizar selecciones adicionales, puede usar aptitude.

aptitude search '~i !~M' -F %p >package.list

~icoincide con los paquetes instalados; !~Momite los paquetes que se instalaron automáticamente como una dependencia de algún otro paquete. -F %pcambia el formato de salida para incluir solo el nombre del paquete.

Luego puede instalar esos paquetes con

apt-get install $(cat package.list)

Debian squeeze no tiene apt-mark showmanual, pero tiene apt-mark showautolistas de paquetes instalados automáticamente. Si utiliza esto, puede enumerar todos los paquetes en el sistema anterior dpkg --get-selections >package.list, restaurarlos y luego marcar los paquetes automáticos con apt-mark markauto. Para su caso de uso (32 bits a 64 bits), es probable que este enfoque deje algunas bibliotecas marcadas como manuales, porque tienen nombres diferentes en arquitecturas diferentes.

Tenga en cuenta que si el caso de uso es reproducir una instalación idéntica, en lugar de mantener el conjunto de paquetes pero cambiar la arquitectura, ahora hay una herramienta llamada apt-clone (distribuida en Debian desde wheezy) que hace todo automáticamente.

Gilles 'SO- deja de ser malvado'
fuente
Lamentablemente, esto no es perfecto. Cuando hago esto, lo primero que aparece es "acl", que no cargué explícitamente. Mirando rdepends, parece que systemd depende de esto, y en Debian 8 ya está instalado. Y, systemd también está en esta lista. Entonces, aunque systemd y acl vinieron instalados, aptitude no los identifica como "automáticos". ¿Podría ser esto una deficiencia en la aptitud?
Liam
@Liam Creo que el instalador no marca ningún paquete como automático. Incluso si lo hiciera, lo que tendría sentido para las bibliotecas, un paquete como aclpodría considerarse una parte importante del sistema base y, por lo tanto, se marcaría como instalado manualmente. Fue instalado "manualmente" por el instalador inicial en lugar de por el usuario, pero aun así, el significado de "instalado automáticamente" es "puede eliminarlo de manera segura si no interrumpe las dependencias", y los paquetes fundamentales necesarios para hacer el el sistema funciona correctamente no se ajusta a la factura.
Gilles 'SO- deja de ser malvado'
1

No veo una manera simple y estándar de hacerlo. Me temo que tendrá que jugar con dpkglos registros y las opciones, porque dpkgno distingue los "programas estándar que vienen con el sistema" y los demás.

ESTO NO SERÁ RECTAMENTE ADELANTE , prefiero dejarlo claro usando texto en negrita en mayúscula , pero puede hacer algo como esto

  • Extraiga la lista de software instalado de los /var/log/dpkg.log*archivos.

  • Elimine los instalados durante la instalación del sistema. (Use el tiempo de instalación para detectarlos)

  • Guarde la lista en el dpkg --get-selectionsformato

Et voilà! Cuando su sistema esté funcionando, reinstale sus programas con

 apt-get update
 dpkg --set-selections < yourSelection
 apt-get -u dselect-upgrade
deviantkarot
fuente