¿Cómo puedo enumerar el conjunto mínimo de paquetes de Debian necesarios para recrear un conjunto de paquetes instalados?

StackOverflow https://stackoverflow.com/questions/2273836

  •  20-09-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma de hacer que dpkg, apt-get o aptitude produzcan una lista de los paquetes que deben instalarse en una segunda máquina para duplicar los paquetes instalados en la primera?

es decir.Si instalé un servidor Ubuntu simple, elegí la opción sshd en el momento de la instalación y luego instalé build-essential, esperaría que el resultado se viera así:

#ubuntu 9.10 server
openssh-sshd
build-essential

Hasta donde puedo ver, todas las herramientas de empaquetado disponibles producirán una lista detallada de los paquetes en una caja.No estoy interesado en openssh libs, ld, gcc y todos los demás paquetes extraídos por sshd y build-essential, ya que se instalarán cuando instale sshd y build-essential.

Me gustaría ver solo la lista del paquete que necesito instalar para recrear mi conjunto actual de paquetes en otra máquina.

es posible?

¿Fue útil?

Solución

deborphan, de tipo. Se crea una lista de todos los paquetes en su sistema, se da cuenta de lo que depende de lo que, e imprime los paquetes que no tienen ninguna dependencia. Por defecto sólo muestra las bibliotecas (para que sea más fácil encontrar las bibliotecas que fueron instalados por otros paquetes y ya no se necesita, de ahí el nombre). Cuenta con opciones para hacer lo que quiere, en su mayoría. Lo ejecuto como:

deborphan -anp required --no-show-section

-a especifica todos los paquetes (no sólo las bibliotecas)
-n ignora "sugiere" o "Recomienda" comprobación de dependencia (es decir simplemente "depende")
-p required enumera todos los paquetes a pesar prioridad
--no-show-section no indica qué parte de Debian que se encuentra, sólo una buena característica de formato que pueda ser útil para la construcción de una lista.

Ahora, se perderá paquetes, debido a que algunos paquetes tienen dependencias circulares. Pero aquellos que tienden a ser bastante raro, por lo que debe conseguir lo suficientemente cerca.

Otros consejos

El código que ha escrito dannysauer es un comienzo. Una vez que tenga una lista de paquetes que incluye dependencias, puede utilizar apt-rdepends para encontrar el dependencias de un paquete particular (véase esta página por ejemplo el uso y la salida).

contornos Procedimiento

  1. iterar a través de la lista de paquetes devuelto por el código del dannysauer
  2. Llamada apt-rdepends en cada
  3. Eliminar todos los paquetes de la lista que aparece en la salida del apt-rdepends

Entonces, ¿desea la lista de paquetes que se instalaron explícitamente (como, por ejemplo, ubuntu-desktop y openssh), y no las dependencias automáticas?No soy positivo, pero creo que eso es lo que dpkg --get-selections hace.Entonces, puedes hacer

dpkg --get-selections > file

Y luego, en la otra computadora, use el mismo "archivo" y ejecute

dpkg --set-selections  < file
apt-get dselect-upgrade

no soy absolutamente positivo Sin embargo, esos comandos solo seleccionan paquetes manualmente y actualmente no tengo ningún sistema basado en Debian para verificar.:)

¿Qué hay de esto:

#!/bin/bash

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')

for pkg in $packages
do
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
    if [ "$nr_lines" = "2" ]
    then
        echo $pkg
    fi
done

¿Funciona bien? Se puede mejorar de alguna manera?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top