Instalé un Ubuntu 10.10 simple en mi computadora e instalé algún software a través de apt-get. La semana pasada logré romper todo y comencé desde cero, y necesito reinstalar mi software. ¿Hay alguna forma de crear una lista con todos los paquetes que he instalado manualmente?
¿Para que me diera una lista como texlive, ...
y no texlive, texlive-dep1, textlive-dep2, ...
y todos los paquetes estándar eliminados?
Si de alguna manera pudiera averiguar qué programas de la instalación regular he eliminado, ¡eso también sería increíble!
Actualización 2015-05-23: ahora uso Ansible como gestión de configuración en mis sistemas. Allí especifico los paquetes a instalar. Esto sirve al objetivo, instalando todos los programas en un sistema nuevo, incluso mejor. Entonces, esta pregunta podría ser la entrada en una gestión de configuración ligera.
something
y nosomething-common
tan bien.Este hilo de superuser.com ofrece esta solución:
fuente
apt-get
, más sus dependencias. Entonces, por ejemplo, si instalóaptitude
, también aparecerá en la listaapt-xapian-index aptitude-common libboost-iostreams1.54.0 libclass-accessor-perl libcwidget3 libept1.4.12 libio-string-perl libparse-debianchangelog-perl libsigc++-2.0-0c2a libsub-name-perl libtimedate-perl libxapian22 python-chardet python-debian python-six python-xapian
Si sus registros de apt están en / var / log / apt, algo como esto debería funcionar:
O si desea deshacerse de parte de la basura repetitiva en la salida:
fuente
Puede usar apt-mark , pero recomiendo debfoster :
Esto inspeccionará todos los paquetes instalados y descubrirá cuáles mantienen los otros instalados:
A medida que responde "y" a cada pregunta (solo presione Enter para moverse rápidamente), debfoster recopilará la lista de paquetes y los escribirá línea por línea en un archivo. Por defecto esto es a las
/var/lib/debfoster/keepers
. Se parece a esto:Configuro debfoster vía
/etc/debfoster.conf
para poner esta lista/etc/debfoster-keepers
y rastrear el archivo con etckeeper para mantener el historial y las copias de seguridad. La respuesta aquí muestra cómo instalar una lista de paquetes desde un archivo de texto delimitado por nueva línea:Tenga en cuenta una limitación aquí, los paquetes que purgó tienen un '-' delante de ellos. Por lo tanto, desea eliminar esas líneas antes de llamar a apt-mark.
Aunque el sitio web de debfoster dice que debfoster está en desuso en favor de la aptitud, prefiero la configuración rápida y simple de debfoster. Lo coloca en el centro de la base de datos de su paquete y le permite limpiar las cosas, haciendo que los paquetes automáticos y manuales sean más obvios.
Escriba "h" en el indicador de debfoster para explicar sus opciones. Tipo "?" para ver la descripción del paquete. El cómo hacerlo aquí podría ser útil.
fuente
Da todos los paquetes instalados manualmente (no paquetes del sistema, no dependencias). Por ejemplo se muestra
build-essential
pero nogcc
.fuente
Para aquellos que prefieren usar las herramientas apt- *, hay una utilidad apt-mark que permite consultar y modificar el estado manual / automático.
También puede especificar el patrón para los paquetes que le interesan:
fuente
Finalmente lo tengo ahora:
fuente
/var/log/apt/history.log(.N.gz)
embargo, hay archivos similares .zgrep
lugar degunzip
ozcat
canalizado agrep
. Es un script de envoltura que se envía con gzip, creo. También acepta archivos sin comprimir, por lo que puede simplificar su secuencia de comandos azgrep -E '(\[INSTALLIEREN\]|\[INSTALL\])' /var/log/aptitude* | awk '{ print $2 }'
Puedo extraer todo abriendo los archivos de registro en / var / log / apt /
Luego entro y filtro manualmente los paquetes de instalación de apt-get. Puede haber una manera de hacer esto programáticamente, pero no estoy al tanto.
fuente
de esta manera verá la lista de comandos ejecutados en el pasado.
Elimine el código grep si necesita más información:
si el registro está comprimido (es decir, termina con gz)
para cerrarlo nuevamente cuando haya terminado, puede hacer:
fuente
zcat
? Es tan fácil comozcat filename.gz
. Uno puede usarlo en archivos comprimidos de gzip en lugar decat
. Tambiéngrep
se puede reemplazar conzgrep
, pzgrep Commandline history.log.1.gz
. Ej .(grep "Commandline" history.log ; zgrep "Commandline" history.log.*.gz ) | grep " install " | grep -v -- "--yes" | sed -r "s/^.*install //"
. Tiene fallas, porque los paquetes eliminados también se enumeran, y si un paquete se instaló más de una vez, se enumera varias veces.No vi ninguna solución aquí que funcione para mí, he instalado bastantes paquetes de deb con dpkg y faltaban algunos de los elementos que estaba buscando particularmente.
Un revestimiento bastante largo, pero conveniente para copiar y pegar sería:
El comando anterior guarda una lista de paquetes en un archivo en su directorio de trabajo actual llamado
my-packages
.Explicación
Primero construí una lista de paquetes que componía la línea base de paquetes seleccionados durante la instalación.
Seguido de una larga lista de elementos instalados en general.
Luego comparé los dos archivos
initial
yinstalled
enumeré solo los elementos únicos para instalar.A partir de ahí, quise filtrar las dependencias, aquí es donde este método puede perder algunos paquetes deseados, no es consciente de las dependencias que también están instaladas explícitamente.
Escribí una función bash rápida para acortar estos pasos en el procesamiento de estos elementos.
Después de eso, pasé cada línea de mi archivo
custom
a esta función conxargs
.Una vez que tuve la larga lista de todas las dependencias posibles, (no estoy seguro de cada declaración posible), una vez más obtuve las líneas que eran exclusivas de un solo archivo.
Y mi lista final de paquetes ahora está en un archivo llamado
manual
disponible para que lo revise.fuente
Alguien vinculado a https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624 que tiene una buena solución, pero no se comporta correctamente como el resultado de aptitude ha cambiado. Aquí hay una versión actualizada, basada en paquetes comparados actualmente instalados en comparación con 12.04 LTS. Necesitará
aptitude
instalar, ese es el único requisito.Para dividir el comando anterior en partes, este bit genera un paquete por línea de todo lo instalado en el sistema
Y esto descarga la lista de paquetes predeterminada y recorta la información redundante.
y
comm
compara los dos archivos y genera los paquetes que no están en la lista predeterminada.fuente
Utilice un archivo de manifiesto de distribución como conjunto de paquetes base. Ordene los resultados instalados manualmente en grupos de paquetes por arquitectura y sección, para que sea más fácil concentrarse en grupos de paquetes (tal vez no le interesen algunas secciones).
https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4
fuente
apt-get install -y
y el archivo sea un script bash. Entonces, todos los archivos del paquete podrían incluirse en un ciclo de provisión vagabundo.fuente
No encontré uno que fuera adecuado para mí, así que escribí un guión. Mediante el análisis de los contenidos de /var/log/apt/history.log* y / var / log / aptitude, luego se ordena por fecha y hora, lo que da como resultado dos listas, una se instala manualmente pkgs, otra se instala pero se eliminan los pkgs. Script con verificación de 'lista de apt'. una pequeña desviación, porque el uso de dpkg instaló y modificó la fuente de PPA.
Puse aquí, https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .
si alguien necesita probarlo, tal vez necesite modificar algún código, ya que mis archivos de registro están mezclados en chino e inglés (especialmente el formato de fecha y hora RFC2822), necesito tratarlo.
fuente
Creo que desea utilizar
/var/log/apt/history.log
y sus amigos para dar los cambios que se han realizado:(Modificado de la fuente )
Le dará todos los paquetes que se han instalado en la línea de comandos utilizando una variación de
apt-get install
.Obtiene los archivos comprimidos en el viejo
history.log
s los agrega con el actualhistory.log
y pasa a través de grep, extrayendo líneas con apt [-get] install [y / o reinstall] y mostrando el resto de la línea (-o flag) que equivale a nombre (s) del paqueteEsto necesitará una pequeña modificación (por ejemplo, con
sed
) si desea solo los nombres de los paquetes en líneas separadas; Un ejercicio para el lector!Vale la pena señalar que el administrador de paquetes sinápticos (
gksu synaptic
okdesudo synaptic
) en la sección "estado" tiene una lista de "instalado (manualmente)". Si marca la lista completa para su eliminación [¡no la aplique!], Debería poder guardar los cambios marcados y obtener una lista de paquetes de esa manera. Precaución: esto está bloqueadosynaptic
para mí (calculando presumiblemente la eliminación de dependencias).fuente