Desde o Fedora 26, o repoquery
subcomando Dnf suporta 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
Ao contrário de 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
Nas versões recentes do Dnf (por exemplo, Fedora> = 23), o banco de dados do pacote 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. Como alternativa, 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 no user-installed.py
que também suporta outras distribuições.
histórico instalado pelo usuário
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 (por exemplo, incluindo informações de versão).
Limitações instaladas pelo usuário
Observe que a marcação de pacotes como instalados pelo usuário tem algumas limitações em algumas versões do Fedora; para os sistemas da era do Fedora 23 (de cerca de 2015-11), os seguintes problemas são relevantes):
Repoquery
Em sistemas Fedora mais antigos, onde o Dnf, a API do Dnf e dnf history userinstalled
não está disponível, pode-se usar a recomposição , 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 do awk é usada para excluir pacotes que foram instalados pelo instalador. O ID do usuário do instalador aparentemente foi armazenado como 4294967295 - como alternativa, você pode escrever algo parecido ($3 == 0 || $3 == your-user-id)
.
Note que este comando funciona no Fedora até a versão 21 - mas, por exemplo, não na versão 23, porque o comando repoquery
foi substituído por dnf repoquery
. E dnf repoquery
não entende a %{yumdb_info.reason}
tag.
repoquery ...
: "Razão da consulta do yumdb inválida 'motivo' do pkg instalado: HandBrake-cli-0.9.5-1.fc14.x86_64"