(Isenção de responsabilidade: Eu não posso fornecer fontes para nada disso, porque eu nunca vi nenhuma documentação que realmente discuta essas coisas. A informação a seguir é meramente o que eu consegui descobrir por meio de inspeção, blackbox experimentação, aleatório tentativa e erro, e adivinhações simples.Também, aviso justo, é superexposição a ponto de ser waaaay por muito tempo.
O DNF usa @ para indicar que o repositório instalado foi instalado de . Como você observou:
I've several packages on my system installed from the repo @System, @fedora (however there's also fedora without the @) and things like @@commandline.
Mas, na realidade, você nunca verá nenhum pacote instalado a partir de fedora
, pois cada pacote na lista instalada mostra algum @ -repo como sua origem. (Você pode verificar isso executando sudo dnf list installed
e inspecionando; não há repos listados sem pelo menos um sinal @).
Non-@ repos entram em cena na seção "Pacotes disponíveis" de dnf list
, o que é mostrado 1 quando você não limita a instalação pacotes. Lá, o dnf lista o local onde cada versão disponível de um pacote pode ser "encontrada". É por isso que, se você ativar --showduplicates
, os pacotes de repositório atuais instalados no sistema sempre serão listados duas vezes em "Pacotes disponíveis": A instância instalada ( @somewhere
) conta como uma cópia disponível dessa versão o pacote, separado da cópia do repo para download ( reponame
, sem o @) da mesma versão.
Como JohnKoch descobriu nas fontes do hawkey, "@commandline" é definido como o "nome do repositório" para "o repo da linha de comando". Portanto, @@commandline
simplesmente indica um pacote instalado que é considerado "instalado a partir de" aquele "repo virtual" especial, que confusamente recebeu um nome que começa com um segundo @ -sign. Como você observou, outros pacotes instalados são listados com @System
como sua origem, indicando que são considerados como tendo vindo de um repositório virtual diferente chamado "Sistema".
O propósito de @@commandline
em DNF é um pouco estranho, já que não significa o que parece implicar. Executar um manual dnf install zsh
a partir da linha de comando não resultará em um pacote @@commandline
-sourced, todos os pacotes que o comando instalar serão listados como provenientes de @fedora
ou qualquer outro repo extraído.
Na minha experiência, o DNF (ou hawkey) relega os pacotes instalados para o @commandline
"repo" quando eles foram instalados de um repositório que era válido no momento, mas que não existe mais no o atual repolista. Em outras palavras, a fonte de instalação do pacote não é meramente uma string contendo o nome do repositório: os pacotes instalados são vinculados à identidade do repositório de fornecimento como existe (ou existia) no sistema. E, como a maioria dos repositórios são distribuídos em versões, eles são redefinidos a cada nova versão do Fedora. (Como, por exemplo, o repo " fedora
" torna-se o conjunto de pacotes que compõem o novo lançamento, um repositório completamente diferente do " fedora
" que existia no lançamento anterior.)
Assim, a cada atualização do sistema, essas identidades de repositório ficam desatualizadas. É por isso que, se eu executar dnf list installed
no meu sistema agora, tudo o que mostra sua origem como @@commandline
vem de um dos dois locais. Qualquer um:
- É de um repositório padrão (
fedora
, updates
, rpmfusion-free
, o que você tem), mas ele foi instalado antes eu atualizei o sistema para F27, e não foi atualizado durante a atualização do sistema. Então, sua fonte era um repositório que não existe mais, agora que os repositórios foram redefinidos para o F27.
- É um pacote de recompra de um repo que eu removi completamente, como um repo COPR que subseqüentemente submeti a
sudo dnf copr remove
. Mais uma vez, uma fonte de recompra que não existe mais.
Pacotes que foram realmente instalados manualmente na linha de comando, os que nunca tiveram um repositório de origem - quer isso signifique que eu usei rpm -i $localpath
, dnf install $localpath
, dnf install $URL
ou algum outro método fora de banda - esses parecem estar listados com @System
como sua origem. É verdade se o pacote estava ou está disponível em algum repositório; se não foi instalado via um caminho de recompra, está listado como tendo vindo de @System
.
Você pode argumentar, baseado nisso, que o significado de @@commandline
é completamente ass-backwards, e o @System
set é o que deveria ser rotulado como "commandline" ... e você não ouviria absolutamente nenhum desacordo de mim.
Notas de rodapé
- "... o que foi mostrado ..."
(Algumas vezes mostrado. "Pacotes disponíveis" não serão necessariamente exibidos
cada dnf list
run: Se a versão instalada de um pacote é a
melhor versão disponível, está listado em "Pacotes Instalados" para que
seria redundante também listá-lo em "Pacotes Disponíveis". Usando
--showduplicates
forçará uma seção "Pacotes disponíveis" que
inclui todas as instâncias conhecidas, independentemente da versão, seja
instalado ou descarregável.)