Vou começar afirmando que tenho certeza de que essa é uma bagunça única do meu próprio design, mas espero que alguém tenha encontrado isso e possa ajudar.
A configuração
Meu laptop roda Pop!_OS 22.04 (Baseado no Ubuntu Jammy). Eu realmente gosto dos pacotes xscreensaver , mas os repositórios de lançamento Debian/Ubuntu/Pop!_OS contêm uma versão desatualizada, e apenas sid (também conhecido como Unstable) contém o pacote atualizado * .
Sem problemas, é por isso que a fixação existe, e é assim que eu configurei:
/etc/apt/preferences.d/unstable-200
Arquivo:Package: * Pin: release a=unstable Pin-Priority: 200
/etc/apt/preferences.d/xscreensaver-2000
Arquivo:Package: xscreensaver* Pin: release a=unstable Pin-Priority: 2000
/etc/apt/sources.list.d/debian.sid.list
Arquivo:deb [arch=amd64] http://http.us.debian.org/debian sid main contrib non-free
Isso realmente funciona, neste momento, a execução sudo apt install xscreensaver
instala as versões atualizadas. No entanto, há um efeito colateral estranho.
O problema
Quando executo sudo apt update
seguido por sudo apt upgrade
, recebo a seguinte saída:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be DOWNGRADED:
alsa-topology-conf appmenu-gtk-module-common aspell-en ca-certificates
chrome-gnome-shell dictionaries-common dns-root-data emacsen-common folks-common
fonts-arphic-ukai fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji
fonts-urw-base35 friendly-recovery gir1.2-flatpak-1.0 gir1.2-gdkpixbuf-2.0
gir1.2-graphene-1.0 gir1.2-gtksource-4 gir1.2-polkit-1.0 gir1.2-secret-1
gir1.2-soup-2.4 gsfonts gsfonts-x11 hunspell-ar hunspell-de-at-frami
hunspell-de-ch-frami hunspell-de-de-frami hunspell-en-au hunspell-en-ca hunspell-en-gb
hunspell-en-us hunspell-en-za hunspell-es hunspell-fr hunspell-fr-classical hunspell-it
hunspell-pt-br hunspell-pt-pt hunspell-ru hyphen-de hyphen-en-gb hyphen-es hyphen-fr
hyphen-it hyphen-pt-br hyphen-pt-pt ieee-data javascript-common klibc-utils
laptop-detect liba52-0.7.4 libappmenu-gtk2-parser0 libbytesize-common libffi8
libflatpak-dev libgl1 libgles2 libgutenprint-common libgweather-4-0 libio-stringy-perl
libjs-jquery libldacbt-abr2 libmpcdec6 libmysofa1 libopengl0 libpolkit-gobject-1-0
libsndio7.0 libsoup-gnome2.4-1 libtermkey1 libvterm0 libwacom-common libxkbcommon0
mythes-ar mythes-de mythes-de-ch mythes-en-au mythes-en-us mythes-es mythes-fr
mythes-it mythes-pt-pt mythes-ru neovim-runtime netbase pass policykit-1 poppler-data
powermgmt-base printer-driver-all python3-certifi python3-fido2 python3-jinja2
python3-launchpadlib python3-lazr.uri python3-macaroonbakery python3-more-itertools
python3-pkg-resources python3-pyatspi python3-rfc3339 python3-setuptools python3-tz
python3-wheel python3-ykman sensible-utils sgml-base sgml-data sound-icons ssl-cert
tpm-udev ucf update-inetd va-driver-all wamerican wbrazilian wbritish wfrench witalian
wngerman wogerman wspanish wswiss xfonts-base xml-core yubikey-manager
0 upgraded, 0 newly installed, 125 downgraded, 0 to remove and 0 not upgraded.
Need to get 257 MB/283 MB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
Isso também elimina a contagem de atualizações do Pop!_OS Shop, com esses pacotes sendo exibidos como atualizações pendentes do sistema operacional.
Solução de problemas
Alguns dados que coletei ao tentar solucionar isso.
Remover /etc/apt/sources.list.d/debian.sid.list
e executar sudo apt update
resolve o problema, então eu sei que é apenas um erro de cálculo/lógica falha em algum lugar.
Focando no primeiro pacote da lista alsa-topology-conf
:
Embora eu saiba que o erro é completamente superficial, a princípio pensei de apt
alguma forma rastrear de onde (qual repositório) o pacote veio, então removi, limpei e reinstalei o pacote. Não fez diferença.
sudo apt remove alsa-topology-conf
sudo apt clean
sudo apt update
sudo apt install alsa-topology-conf
Executando apt policy alsa-topology-conf
, os resultados são:
alsa-topology-conf: Installed: 1.2.5.1-2 Candidate: 1.2.5.1-2 Version table: *** 1.2.5.1-2 200 200 http://http.us.debian.org/debian sid/main amd64 Packages 100 /var/lib/dpkg/status 1.2.5.1-2 501 501 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages 501 http://us.archive.ubuntu.com/ubuntu jammy/main i386 Packages
Parece que ambos sid
e jammy
têm exatamente a mesma versão e, por algum motivo, apt
combinam o pacote com a 200
prioridade, em vez da 501
entrada de prioridade.
Com /etc/apt/sources.list.d/debian.sid.list
removido, a saída fica assim:
alsa-topology-conf: Installed: 1.2.5.1-2 Candidate: 1.2.5.1-2 Version table: *** 1.2.5.1-2 501 501 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages 501 http://us.archive.ubuntu.com/ubuntu jammy/main i386 Packages 100 /var/lib/dpkg/status
Perguntas relacionadas
A seguir estão perguntas relacionadas com situações semelhantes, mas nenhuma das respostas me ajudou a entender ou resolver isso.
- apt fixando prioridade restrita
- Debian 10: Por que alguns pacotes SSL serão rebaixados?
- Como se livrar da mensagem apt "Pacotes foram rebaixados e -y foi usado sem --allow-downgrades"
Eu tentei todas as respostas nas perguntas acima, mas nenhuma parece ser relevante ou funcionar.
Minha pergunta
Alguém tem alguma sugestão de como conciliar isso para que o sistema não pense constantemente que esses pacotes precisam ser DOWNGRADED?
A resposta básica é que você está fazendo algo que não deveria, ou seja, misturar repositórios entre versões (e distribuição) . Extrair pacotes Debian em uma distribuição baseada no Ubuntu é uma má ideia.
xscreensaver
está disponível em versões posteriores do Ubuntu , o que seria menos perigoso de usar, mas mesmo isso é uma má ideia.Dada toda a investigação que você fez e os detalhes que você forneceu, vale a pena explicar o comportamento que você está vendo aqui. Todos os pacotes que são oferecidos para “downgrade” têm a propriedade compartilhada de estarem disponíveis na mesma versão no Debian e no Ubuntu; no entanto, eles não são os mesmos pacotes, pois todos os pacotes importados do Debian são reconstruídos no Ubuntu.
A primeira característica
apt
que entra em jogo aqui é que as prioridades de pin só escolhem versões . Para qualquer pacote disponível em versões diferentes em seus repositórios, as prioridades dos pinos farão a distinção entre eles. Para qualquer pacote disponível na mesma versão em seus repositórios, eles não serão. O próximo recurso se aplica: quando vários repositórios fornecem a mesma versão, o primeiro listado vence . Isso combina com outro recurso doapt
, que é que um pacote instalado com um determinado hash será substituído por um pacote de repositório com a mesma versão se os hashes não corresponderem (há uma pergunta e resposta sobre isso em algum lugar aqui, mas não consigo encontrar isso agora).O resultado de tudo isso é que para todos os pacotes fornecidos pelo Pop!_OS (Ubuntu under the hood), cujas versões no Jammy correspondem exatamente à versão atual no Debian instável,
apt
consideraremos substituí-los pela versão do Debian. Não tenho certeza por que os identifica como downgrades.Se você fosse em frente com isso, você substituiria vários pacotes Pop!_OS por seus “equivalentes” Debian; há uma boa chance de que isso realmente funcione, mas também há a possibilidade de que diferenças sutis nas bibliotecas usadas causem problemas. Você acabaria com uma configuração totalmente não testada.
Para desfazer isso, você deve remover
sid.list
, atualizar seus repositórios e reinstalar explicitamente qualquer pacote que você “rebaixou”:Obrigado Stephen Kit
Para ser claro, a resposta de Stephen Kitt é a selecionada.
No entanto, como OP, estou adicionando os detalhes para resolver meu problema específico (caso alguém ache interessante).
Como Stephen tão graciosamente e pacientemente apontou o que está bem documentado, mas ainda assim eu não consegui entender/ler corretamente:
Escolher qual pacote pegar é um processo de 2 fases:
apt
pega o primeiro repositório que tem essa versão específica listada./etc/apt/sources.list
arquivo/etc/apt/sources.list.d
dir, classificando os arquivos no diretório em ordem lexical (basicamente o quels
faz por padrão)Meu problema
Não especificado na minha pergunta, foi o fato de que os arquivos de origem do Pop!_OS foram listados no
/etc/apt/sources.list.d
diretório e são nomeados:Isso significa que
sid.list
oudebian.sid.list
quando classificado com a lista acima, ainda aparecerá antessystem.sources
de onde o repositório Jammy do Ubuntu é especificado.Resolvendo o problema - uma resposta
Para resolver o cenário específico que descrevi na minha pergunta, a solução para mim foi renomear
sid.list
parazzz.sid.list
que garantirá que os pacotessid
sempre sejam escolhidos por último.Aqui está como
apt policy alsa-topology-conf
fica após esta correção:A resposta correta
Quando possível, isso não deve ser necessário, e especificamente com esta versão mais recente do Pop!_OS, a versão subjacente do Ubuntu finalmente atualizou os pacotes xscreensaver e eles realmente correspondem aos do
sid
.Para encurtar a história, pensei (a partir de experiências anteriores) que precisava hackear o sistema, enquanto nesta situação específica, não precisava, e a solução era não tentar.
Mas, novamente - eu aprendo melhor quando quebro coisas, e essa foi uma lição incrível, e agradeço às pessoas que dedicaram um tempo para ler e responder.