it-swarm-es.com

¿Cómo se realiza un seguimiento de los paquetes que se instalaron en Ubuntu (Linux)?

(Esta pregunta es muy similar a 10458 . Se sugirió que Fedora y Ubuntu/Debian son lo suficientemente diferentes como para garantizar respuestas diferentes).

A medida que uso cualquier configuración de Ubuntu, instalo gradualmente una serie de paquetes además de la instalación de referencia. Si reinstalo, o si necesito instalar una nueva máquina, generalmente quiero reinstalar esos paquetes específicos , y quiero hacerlo rápido para obtener volver al trabajo con un mínimo de molestias. Por lo que he visto, todos los administradores de paquetes (apt-get, aptitude y synaptic) pueden decirme qué paquetes están instalados, y todos tienen registros (aunque diferentes para cada herramienta, lo cual es una molestia). Pero ninguno de ellos puede decirme qué paquetes tengo instalados, a diferencia de sus dependencias o actualizaciones del sistema. Incluso los registros son complicados porque no estoy del todo seguro de qué debería extraer de ellos o cómo integrarlos (en el caso de las diversas herramientas de la familia apt). Esto significa que cada vez que reinstalo, o incluso simplemente hago una copia de seguridad, no estoy seguro de cómo volver a crear esa lista.

No espero necesariamente que ninguna de las herramientas haga esto por mí, pero si no lo hacen, estoy buscando soluciones. Serían útiles incluso patrones para grep, buenas reglas generales o una idea clara de lo que se está registrando exactamente. Puede que no haya una "mejor respuesta" aquí, pero las buenas serían muy útiles.


La mayoría de las respuestas a continuación proporcionan una aproximación de lo que estoy buscando y son útiles hasta cierto punto. El elegido es el que más se acerca a una forma razonablemente automática de reinstalar mis herramientas en un nuevo sistema, incluso con todas sus salvedades.

38
quark

En cualquier máquina basada en Debian, esta es una forma común de duplicar un conjunto de paquetes. En la vieja máquina:

dpkg --get-selections "*" > my_favorite_packages

Copie el archivo my_favorite_packages a la nueva máquina (una memoria USB es una buena opción, pero scp también funciona bien). Luego ejecute esta secuencia (con privilegios de root):

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

Esto no le da solo los paquetes que instaló. También obtiene sus dependencias, etc. Además, si los repositorios entre las dos máquinas son diferentes, todas las apuestas están canceladas.

En cuanto a los registros, apt-get mantiene un registro en /var/log/apt/history.log (gracias a Tshepang por actualizar esto en un comentario); dpkg lo hace (a las /var/log/dpkg.log), pero es famoso por ser difícil de analizar y solo se puede leer con privilegios de root; aptitude tiene uno en /var/log/aptitude y puede navegar a través de él con privilegios de usuario normales.

Por lo que puedo decir, tiene razón en que ninguno de estos registros rastrea específicamente lo que instaló en comparación con las dependencias instaladas automáticamente. Sin embargo, puede obtener esa información mediante una búsqueda aptitude. Busque todos los paquetes instalados que también se instalaron automáticamente:

aptitude search '~i ~M'

Si desea solo los que instaló (no las dependencias automáticas), niegue el ~M:

aptitude search '~i !~M'

Si desea que tenga el formato solo los nombres de los paquetes y la "instalación" de Word, aptitude también puede hacerlo. Esto le da una lista lista para enviar a dpkg --get-selections:

aptitude search '~i !~M' -F "%p install"

(No tengo nada sobre RedHat o sistemas basados ​​en RedHat. Lo siento. Realmente no hay una respuesta para Linux per se ya que la administración de paquetes es una gran parte de lo que hace diferentes distribuciones diferente.)

31
Telemachus

Utilizar dpkg -l '*' > jaunty.original para recordar todos los paquetes instalados en un sistema recién instalado.

Después de haber instalado todos sus paquetes adicionales, haga dpkg -l '*' > mysystem.2009017.

Los paquetes adicionales son solo la diferencia: diff jaunty.original mysystem.2009017

7
Ludwig Weinzierl

La aptitud es bastante buena en esto. Aptitude sabe cuándo se instaló algo a mano o por dependencia y puede decirle que elimine las cosas que ya no son necesarias y que solo se instalaron porque algo más dependía de que siempre mantuviera su sistema lo más pequeño posible.

Hay un puñado de paquetes que componen una instalación de Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server, etc. Si le dice a Aptitude que los marque como instalados manualmente y elimine todo lo demás, terminará con la cantidad mínima posible de paquetes.

Explico cómo hacer todo eso en dos publicaciones en mi blog: Limpiar Debian GNU/Linux y Limpiar Debian GNU/Linux (o Ubuntu), repetición . En resumen, la respuesta que busca es:

aptitude search ~i | grep -v "i A"

La última vez que trabajé con eso, si usó apt-get, entonces no funcionó. Es por eso que siempre recomiendo aptitude y, hasta donde yo sé, Debian está desaprobando apt-get a favor de aptitude.

No sé cómo hacerlo en Fedora y probablemente debería separarlo en una pregunta diferente. Fedora y Ubuntu son sistemas operativos diferentes y deben tratarse como tales (incluso si comparten su kernel y algunas otras cosas).

3
pupeno

En debian apt-show-versions muestra las versiones de los paquetes instalados.

2
seb

De man aptitude-create-state-bundle:

aptitude-create-state-bundle produce un archivo comprimido que almacena los archivos necesarios para replicar el estado actual del archivo del paquete.

Esto retendrá la misma información que aptitude tiene sobre los paquetes que se instalaron manualmente.

Está destinado a ser utilizado con aptitude-run-state-bundle:

aptitude-run-state-bundle descomprime el paquete de estado de aptitude creado por aptitude-create-state-bundle (1) en un directorio temporal, lo invoca con el suministrado y luego elimina el directorio temporal.

1
intuited

Cuando solo usa dpkg no sabe si el paquete fue instalado manualmente por el usuario o automáticamente (como una dependencia o durante la instalación inicial del sistema operativo). Si desea conservar esa información, debe obtener una lista de solo los paquetes que realmente se instalaron manualmente.

Para eso, puede usar cualquiera de estas dos frases ingeniosas. Ambos producen exactamente el mismo resultado en mi máquina y son más precisos que todas las soluciones propuestas hasta ahora en esta pregunta. Son una combinación de las dos respuestas (1) y (2) . Tenga en cuenta que originalmente publiqué esta respuesta aquí .

Usando apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Usando aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Muy pocos paquetes aún no se olvidan, aunque sospecho que estos ¡son realmente instalados por el usuario, ya sea justo después de la instalación a través de la configuración de localización del idioma o, por ejemplo, a través del instalador del códec Totem. Además, las versiones de linux-header también parecen acumularse, aunque solo instalé el metapaquete no específico de la versión. Ejemplos:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

¿Cómo funciona

  1. Obtenga la lista de paquetes instalados manualmente. Para la aptitud, el sed adicional elimina los espacios en blanco restantes al final de la línea.
  2. Obtenga la lista de paquetes instalados inmediatamente después de una nueva instalación.
  3. Compare los archivos, solo genere las líneas en el archivo 1 que no están presentes en el archivo 2.

Otras posibilidades no funcionan tan bien:

  • Utilizando la ubuntu-14.04-desktop-AMD64.manifest archivo ( aquí para Ubuntu 14.04) en lugar de /var/log/installer/initial-status.gz. Se muestran más paquetes como instalados manualmente aunque no lo estén.
  • Utilizando apt-mark showauto en vez de /var/log/installer/initial-status.gz. apt-mark por ejemplo, no incluye el paquete xserver-xorg, mientras que el otro archivo sí.

Ambos enumeran más paquetes que la solución anterior.

1
jmiserez

En sistemas basados ​​en apt, consulte /var/log/apt/term.log. Para mí, hay una línea bastante clara para trazar dónde terminó la instalación y dónde comenzaron mis instalaciones.

1
Wade

Soy parcial y la solución que presento no siempre es posible, pero me cansé de esta situación. El resultado es que ya no instalo nada con las herramientas de actualización/administrador de paquetes.

Sin embargo, tomé una ruta bastante difícil (tenía requisitos estrictos para las versiones). Creé un archivo MAKE enorme que descarga, compila e instala en mi directorio personal cada paquete (programa, biblioteca, lo que sea) que necesite. Lo desarrollé paso a paso, pieza por pieza. El archivo MAKE descarga y compila todo, incluso los compiladores.

Cuando me muevo a un nuevo sistema, o lo reinstalo, simplemente copio el archivo Make (más algunas cosas de apoyo), ejecuto make world y regreso al día siguiente.

Para algunos programas que desarrollo (por lo que tengo el control), utilizo una herramienta que programé, administrador de paquetes castaño . Algo así como carpetas .app en MacOSX. Todo está en el paquete, así que sé lo que está instalado en cualquier momento y sé que es autónomo y autosuficiente (excepto para las bibliotecas del sistema)

0
Stefano Borini