Quando quero listar os pacotes instalados, geralmente o faço de duas maneiras.
O jeito antiquado está usando rpm -qa | grep <whatever I look for>
, e é isso.
Mas, recentemente, eu queria uma exibição mais abrangente dos meus pacotes e, a partir de agora, usei dnf list --installed <whatever I look for>
.
No entanto, ao olhar para o resultado, há algumas coisas que não entendo.
Considere este exemplo:
# dnf list --installed zsh
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64 5.2-5.fc24 @@commandline
(os espaços na impressão real são maiores)
Portanto, as entradas resultantes são: «pacote» «versão» «repo».
No meu exemplo, isso é:
- pacote: zsh.x86_64
- versão: 5.2-5.fc24
- repo: @@ commandline
Até agora, a tabela resultante é compreensível, mas estou confuso sobre o que os dois '@@' significam na frente do nome do repo.
Além disso, "linha de comando" sugere que o pacote foi instalado a partir da linha de comando (baixando o RPM e executando dnf install whatever.rpm
na linha de comando , etc.). No entanto, tenho certeza que instalei zsh
via dnf install zsh
.
Mas isso não é tudo.
Eu tenho vários pacotes no meu sistema instalado a partir do repo @System
, @fedora
(no entanto, há também fedora
sem a @
) e coisas assim @@commandline
.
E o que isso @
ou @@
dizer exatamente na frente do nome do repo?
E como é que eu tenho tantos pacotes importantes instalados, @@commandline
embora eu tenha mais do que certeza de que os instalei dos repositórios?
fonte
dnf
é incrivelmente silenciosa sobre isso. Suponha que '@' denota um pacote instalado, '@@' significa que ele é instalado manualmente a partir de uma fonte que não é de repositório, talvez? Eu realmente gostaria que alguém esclarecesse.(Isenção de responsabilidade: não posso fornecer fontes para nada disso, porque nunca vi nenhuma documentação que realmente discuta essas coisas. As informações a seguir são meramente as que consegui analisar através de inspeção, experimentação de caixa preta, aleatória de tentativa e erro, e simples conjecturas de idade. Além disso, aviso justo, é overexpository ao ponto de ser waaaay muito tempo.)
DNF adiciona um @ para designar o repo um instalado pacote foi instalado a partir de , no
dnf list
contexto. Como você observou:Mas, na realidade, você nunca verá nenhum pacote
fedora
na lista de instaladores , pois cada pacote mostra algum @ -repo como sua origem. (Você pode verificar isso executandosudo dnf list installed
e inspecionando; não há repositórios listados sem pelo menos um sinal @.) Quando você visualiza as informações de um pacotednf info
, oFrom repo:
campo " " mostrará esse nome de repositório sem o@
. ("From repo: fedora
" Portanto, é absolutamente possível e equivalente a@fedora
na lista instalada.)Mas alguns repositórios são nomeados com uma
@
placa na frente. Como JohnKoch descobriu nas fontes do hawkey, "@commandline" é definido como o "nome do repo" para "o repo da linha de comando". Portanto,@@commandline
nadnf list
lista simplesmente indica um pacote instaladoFrom repo: @commandline
, um repositório que recebeu um nome confuso que começa com seu próprio @ -sign.dnf info
em qualquer pacote instalado será exibidoRepository: @System
, que é o outro@
repositório virtual nomeado. Parece que@System
é o repositório virtual que contém o conjunto de pacotes atualmente instalados e@commandline
o repositório de origem virtual de onde veio um pacote, quando não veio de nenhum repositório.O significado de
@commandline
e@System
, e seu relacionamento um com o outro, parece ter mudado desde que escrevi esta resposta. De certa forma, é mais consistente e aborda algumas das minhas objeções anteriores sobre como@commandline
é usado. Não vejo mais nenhum pacote instalado listado como sendo de@@System
, e as instalações fora da banda serão exibidas agoraFrom repo: @commandline
(@@commandline
no contexto da lista).dnf info
em um pacote instalado fora da banda normalmente mostra algo como o seguinte:Se eu fizer um
dnf reinstall remi-release
(porque o pacote está noremi
repositório), ele muda para:Outra coisa sobre repositórios de origem: os repositórios listados no
From repo:
campo são sempre repositórios existentes no contexto atual de repositório . Em outras palavras, a fonte de instalação de um pacote não é apenas uma sequência que contém o nome do repo; os pacotes instalados estão vinculados à identidade do repositório de fornecimento como ele existe (ou existia) no sistema.Como a maioria dos repositórios tem a versão distribuída, eles são redefinidos a cada novo lançamento do Fedora. (Como, por exemplo, o "
fedora
" repo se torna o conjunto de pacotes que compõem o novo lançamento, um repo completamente "fedora
" diferente do que existia no release anterior.) Portanto, sempre que uma atualização do sistema é feita, muitas identidades antigas do repo ser invalidado.DNF (ou hawkey) usado para relegar pacotes instalados a partir de repositórios que não existem mais
@commandline
como repositório de origem. Eu digo "costumava", porque isso (felizmente) não é mais feito. Pacotes instalados que vieram de um repositório que não existe mais não mostrarão mais sua origem como@@commandline
/From repo: @commandline
. De fato,dnf info
mostra que eles não têm mais nenhum repositório de origem. Por exemplo,sitecopy
foi um pacote do Fedora que foi retirado. Eu o instalei a partir das versões 7 ou 8 do orpo,fedora
ouupdates
7 e 8, e ainda o tenho instalado:Não há "
From repo:
" listado.Isso significa confuso que
dnf list installed
mostrará esse pacote (e outros semelhantes) com@System
(um@
) listado ao lado. Portanto, de certa forma, trocamos uma inconsistência por outra, pois essa coluna nem sempre é o repositório de origem com o@
prefixo. Ainda assim, prefiro o estado atual das coisas.Notas de rodapé
(Às vezes mostrado. "Pacotes disponíveis" não são necessariamente exibidos a cada
dnf list
execução: se a versão instalada de um pacote for a melhor versão disponível, ela será listada em "Pacotes Instalados" portanto, seria redundante listá-lo também em "Pacotes disponíveis". O uso--showduplicates
forçará uma seção "Pacotes disponíveis" que inclui todas as instâncias conhecidas, independentemente da versão, instaladas ou disponíveis para download.)fonte