Como o Fedora 26, o subcommando suporte do Dnf repoquery
tem uma nova opção para listar todos os pacotes instalados pelo usuário:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
Em contraste com outros métodos, ele também lista todos os pacotes debuginfo. O grep adicional no exemplo acima os filtra.
Para instalar a lista no host B:
$ < pkgs_a.lst xargs dnf -y install
API Dnf
Com versões recentes do Dnf (por exemplo, Fedora > = 23), o banco de dados de pacotes pode ser consultado para nomes de pacotes instalados pelo usuário através da API 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 padrão, dnf install
aborta se um ou mais pacotes não estiverem mais disponíveis. Alternativamente, o dnf pode ser forçado a instalar todos os restantes:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Coloque o código acima e mais em user-installed.py
que também suporta outras distribuições.
história userinstalled
No Fedora 23 e posterior, o Dnf fornece o
# dnf history userinstalled
comando que lista todos os pacotes instalados pelo usuário. A partir de 2016-11, sua utilidade é limitada porque não há como controlar sua saída e ela imprime pacotes totalmente qualificados (ou seja, incluindo informações de versão).
Limitações instaladas pelo usuário
Note que a marcação de pacotes como instalados pelo usuário tem algumas limitações em algumas versões do Fedora, para sistemas do período Fedora de 23 ish (de 2015 a 2015) os seguintes problemas são relevantes):
- os pacotes instalados através da GUI não estão incluídos Os
- pacotes instalados através do manipulador de comando não encontrado não estão incluídos
- alguns pacotes instalados por padrão (pelo anaconda) estão incluídos
Repoquery
Em sistemas antigos do Fedora, onde Dnf, a API Dnf e dnf history userinstalled
não estão disponíveis, pode-se usar repoquery em vez disso, por exemplo:
$ 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
A segunda condição de awk é usada para excluir pacotes que foram instalados pelo instalador. O user-id do instalador aparentemente foi armazenado como 4294967295 - como alternativa, você pode escrever algo como ($3 == 0 || $3 == your-user-id)
.
Note que este comando funciona no Fedora até o lançamento 21 - mas por exemplo não no release 23, porque o comando repoquery
foi substituído por dnf repoquery
. E dnf repoquery
não entende a tag %{yumdb_info.reason}
.