Desde Fedora 26, el Dnf repoquery
subcomando admite una nueva opción para enumerar todos los paquetes instalados por el usuario:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
A diferencia de otros métodos, también enumera todos los paquetes de debuginfo. El grep adicional en el ejemplo anterior los filtra.
Para instalar la lista en el host B:
$ < pkgs_a.lst xargs dnf -y install
API de Dnf
Con las versiones recientes de Dnf (por ejemplo, Fedora> = 23), la base de datos de paquetes puede consultarse por los nombres de paquetes instalados por el usuario a través de la API de Dnf Python:
$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); \
l = sorted(set(x.name for x in b.iter_userinstalled() \
if not x.name.endswith("-debuginfo") \
and x.name not in \
["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); \
print("\n".join(l)) ' > pkgs_a.lst
# dnf install $(cat pkgs_a.lst) # on host_b
Por defecto, dnf install
aborta si uno o más paquetes ya no están disponibles. Alternativamente, dnf puede verse obligado a instalar todos los restantes:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PD: Ponga el código anterior y más enuser-installed.py
eso también es compatible con otras distribuciones.
historial instalado por el usuario
En Fedora 23 y posterior, Dnf proporciona el
# dnf history userinstalled
comando que enumera todos los paquetes instalados por el usuario. A partir de 2016-11, su utilidad es limitada porque no hay forma de controlar su salida e imprime paquetes totalmente calificados (es decir, que incluye información de versión).
Limitaciones instaladas por el usuario
Tenga en cuenta que el marcado de paquetes como instalados por el usuario tiene algunas limitaciones en algunas versiones de Fedora, para los sistemas Fedora 23-ish era (de alrededor de 2015-11) los siguientes problemas son relevantes):
Repoquery
En sistemas Fedora más antiguos, donde Dnf, la API de Dnf y dnf history userinstalled
no están disponibles, uno puede usar repoquery , por ejemplo:
$ repoquery --installed \
--qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all \
| awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }' \
| sort -u > pkgs_a.lst
La segunda condición awk se usa para excluir paquetes que fueron instalados por el instalador. La identificación de usuario del instalador aparentemente se almacenó como 4294967295; alternativamente, puede escribir algo como ($3 == 0 || $3 == your-user-id)
.
Tenga en cuenta que este comando funciona en Fedora hasta la versión 21, pero, por ejemplo, no en la versión 23, porque el comando repoquery
fue reemplazado por dnf repoquery
. Y dnf repoquery
no entiende la %{yumdb_info.reason}
etiqueta.
repoquery ...
: "Motivo de consulta inválido yumdb 'razón' para el paquete instalado: HandBrake-cli-0.9.5-1.fc14.x86_64"yum localinstall ...
. Sin embargo, tuve una buena cantidad de paquetes que cayeron en ese campamento.repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l
devolvió 90 paquetes.La forma más fácil y ha funcionado durante mucho tiempo es:
... que funciona de manera muy similar al comando get / set selections dpkg, AIUI. También tenga en cuenta que si está reproduciendo el historial puede usar:
... en lugar de tener que analizarlo usted mismo.
fuente
Inspirado por la respuesta de slm , se me ocurrió la siguiente solución basada:
yum history
Obtenga todo el historial detallado de todas las transacciones de instalación de yum (es decir, sin actualizaciones), excluidas las ejecutadas como parte de las acciones iniciales del instalador (transacciones 1 y 2 en mi sistema, atribuidas al usuario 'Sistema'):
Filtra los paquetes instalados explícitamente y corta los prefijos de versión.
La expresión regular fea es necesaria para que coincidan todos los tipos de sufijos de versión.
Los resultados se ven bastante bien en mi sistema.
Una comparación contra el repositorio ansatz (en mi sistema):
(Canalicé los resultados del repositorio a través de sort -u)
¿Por qué hay diferencias? Porque el repositorio incluye todos los paquetes de las transacciones 1 y 2, es decir, todos los paquetes que fueron instalados por el instalador de Fedora. Esto explica por qué el repositorio incluye los paquetes mencionados xorg-x11- drv-mga y amigos.
La comparación de repoquery-2nd y yum-history muestra que repoquery-2nd es más preciso: no incluye algunos paquetes ya eliminados. Además, parece que incluye algunos paquetes (2 en mi sistema) de operaciones 'yum update'.
Advertencia
El método basado en el historial anterior solo enumera todos los paquetes instalados explícitamente durante la vida útil completa del sistema. No equilibra los paquetes que se eliminaron en una transacción posterior. Por lo tanto, este método necesita un tratamiento manual de los resultados y solo debe usarse en sistemas donde
repoquery
no está disponible.fuente
Tengo una versión anterior de Fedora (14), por lo que mi yum incluye una versión menos rica en funciones
yum
, pero es posible que desee echar un vistazo a layum history
función. Creo que puede obtener la información que busca de ese comando.lista de historia
Puede volver a la primera transacción pasando una lista de números a
yum history list
:información de la historia
Lo siguiente le mostrará lo que se instaló como parte de la primera transacción anual:
Observe cómo yum informa si un paquete se instaló o instaló explícitamente porque lo necesitaba una dependencia. Puede analizar esta información y obtener su lista de paquetes que se instalaron explícitamente.
fuente
yum history
idea, también compara los resultados con elrepoquery
método basado. Como efecto secundario, he extendido mi respuesta de respuesta.fuente
--userinstalled
cambio se agregó a dnf en mayo . Lo he probado y da resultados precisos. Module los paquetes kernel / kernel-core / kernel-modules que no están realmente instalados por el usuario. También contiene todos los*-debuginfo
paquetes, pero se pueden filtrar fácilmente, si es necesario.Para enumerar los paquetes que ha instalado, intente con esta línea :
Resultado:
PS1: no muestra dependencias
PS2: se ordena alfabéticamente
PS3: no se muestra si ha eliminado el paquete más tarde
fuente
Lo que hice (olvidé los detalles, y soy un vago flojo, así que ...
Obtenga todos los paquetes instalados:
rpm -qa > file
Úselo
sed(1)
para deshacerse de los números de versión y demás (mantenga la arquitectura, si es necesario). Esto requirió algunas iteraciones para hacerlo bien, desea reemplazar el último tramo de-[0-9.]-[0-9].fc23
o similar por nada, pero también hay "números" de versión divertida.Después de instalar normalmente, haga un
yum -y install $(< file)
(odnf
, según sea necesario).Obtendrá algunas consecuencias de los paquetes que ya no existen o que cambiaron de nombre o fueron reemplazados por otros.
fuente