(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 cantidad de paquetes que van más allá de la instalación de línea de base. Si reinstalo, o si necesito instalar una nueva máquina, generalmente quiero reinstalar esos paquetes específicos , y quiero hacerlo rápido para volver al trabajo con un mínimo de problemas. Por lo que yo he visto todos los gestores de paquetes ( apt-get
, aptitude
y synaptic
) puede mi, lo cual se instalan los paquetes contar, y todos ellos tienen registros (aunque los diferentes para cada herramienta, que es una molestia). Pero ninguno de ellos puede decirme qué paquetes tengoinstalado, a diferencia de sus dependencias o actualizaciones del sistema. Incluso los registros son complicados porque no estoy completamente seguro de qué debo extraer de ellos o cómo integrarlos (en el caso de las diversas herramientas familiares aptas). Esto significa que cada vez que reinstalo, o incluso solo hago una copia de seguridad, no estoy seguro de cómo volver a crear esa lista.
No estoy esperando necesariamente que ninguna de las herramientas haga esto por mí, pero si no lo hacen, estoy buscando soluciones. Incluso los patrones a seguir, buenas reglas generales o una idea clara de lo que se está registrando exactamente, sería útil. 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 advertencias.
Respuestas:
En cualquier máquina basada en Debian, esta es una forma común de duplicar un conjunto de paquetes. En la vieja máquina:
Copie el archivo
my_favorite_packages
a la nueva máquina (una memoria USB es una buena opción, peroscp
también funciona bien). Luego ejecute esta secuencia (con privilegios de root):Esto no solo le proporciona 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 desactivadas.
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
does (at/var/log/dpkg.log
), pero es 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 regulares.Por lo que puedo decir, tiene razón en que ninguno de estos registros rastrea específicamente lo que instaló en lugar de las dependencias instaladas automáticamente. Sin embargo, puede obtener esa información de una
aptitude
búsqueda. Busque todos los paquetes instalados que también se instalaron automáticamente:Si solo desea los que instaló (no las autodependencias), niegue
~M
:Si desea que esté formateado para que solo tenga los nombres de los paquetes y la palabra "instalar", también
aptitude
puede hacerlo. Esto le brinda una lista lista para alimentar adpkg --get-selections
:(No tengo nada en RedHat o en los 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 que las diferentes distribuciones sean diferentes ).
fuente
apt-get
,synaptic
yaptitude
(por lo que he visto). Esto es desde principios de 2010.dpkg.log
declaraciones no parecen ser ciertas en Ubuntu 14.04 ya que cualquier usuario puede obtener mis selecciones fácilmente, no es trivial, pero no demasiado difícil.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u
hace.Úselo
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 lo hacen
dpkg -l '*' > mysystem.2009017
.Los paquetes adicionales son solo la diferencia:
diff jaunty.original mysystem.2009017
fuente
La aptitud es bastante buena en esto. Aptitude sabe cuándo se instaló algo a mano o por dependencia y puede decirle que elimine 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 conforman 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, entonces terminará con la cantidad mínima posible de paquetes.
Explico cómo hacer todo eso en dos publicaciones en mi blog: Limpiar un Debian GNU / Linux y Limpiar un Debian GNU / Linux (o Ubuntu), repita . En resumen, la respuesta que busca es:
La última vez que trabajé con eso, si usaste apt-get, entonces no funcionó. Es por eso que siempre recomiendo aptitude y, que yo sepa, Debian está despreciando apt-get a favor de aptitude.
No sé cómo hacerlo en Fedora y probablemente deberías separarte en una pregunta diferente. Fedora y Ubuntu son sistemas operativos diferentes y deben tratarse como tales (incluso si comparten su núcleo y algunas otras cosas).
fuente
grep
:aptitude search '~i !~M'
debería hacer el truco.apt-get
no está en desuso. Debian recomienda laaptitude
gestión de paquetes en la línea de comandos, pero eso está muy lejos de ser obsoletoapt-get
.En debian apt-show-version muestra las versiones de los paquetes instalados.
fuente
En sistemas basados en apt, mire /var/log/apt/term.log. Para mí, hay una línea bastante clara para dibujar dónde terminó la instalación y dónde comenzaron mis instalaciones.
fuente
De
man aptitude-create-state-bundle
:Esto retendrá la misma información que
aptitude
tiene sobre qué paquetes se instalaron manualmente.Está destinado a ser utilizado con
aptitude-run-state-bundle
:fuente
Al usarlo
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 estos dos one-liners. Ambos producen exactamente la misma salida 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í .
Utilizando
apt-mark
:Utilizando
aptitude
:Muy pocos paquetes aún se quedan atrás, 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 de códec Totem. Además, las versiones de encabezado de Linux también parecen acumularse, aunque solo he instalado el metapaquete no específico de la versión. Ejemplos:
Como funciona
sed
elimina el espacio en blanco restante al final de la línea.Otras posibilidades no funcionan tan bien:
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 sean.apt-mark showauto
lugar 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.
fuente
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 enorme archivo MAKE que descarga, compila e instala en mi directorio de inicio cada paquete (programa, biblioteca, lo que sea) que necesito. Lo desarrollé paso a paso, pieza por pieza. El archivo MAKE descarga y compila todo, incluso los compiladores.
Cuando me mudo a un nuevo sistema, o lo reinstalo, solo copio el archivo MAKE (más algunas cosas de soporte), ejecuto make world y vuelvo al día siguiente.
Para algunos programas que desarrollo (por lo que tengo control), uso una herramienta que programé, el administrador de paquetes de la castaña . 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 las bibliotecas del sistema)
fuente