Debian

擺脫“以下軟體包將被降級”

  • June 28, 2022

我將首先說明,我很確定這是我自己設計的一個獨特的混亂,但我希望有人遇到這個並且可能能夠提供幫助。

設置

我的筆記型電腦執行 Pop!_OS 22.04(基於 Ubuntu Jammy),我真的很喜歡 xscreensaver 軟體包,但是 Debian/Ubuntu/Pop!_OS 發行版儲存庫包含過時的版本,並且只有 sid(又名 Unstable)包含更新的軟體包。

不用擔心,這就是存在固定的原因,所以這就是我設置它的方式:

/etc/apt/preferences.d/unstable-200文件:

Package: *
Pin: release a=unstable
Pin-Priority: 200

/etc/apt/preferences.d/xscreensaver-2000文件:

Package: xscreenaver*
Pin: release a=unstable
Pin-Priority: 2000

/etc/apt/sources.list.d/debian.sid.list文件:

deb [arch=amd64] http://http.us.debian.org/debian sid main contrib non-free

這實際上有效,此時執行sudo apt install xscreensaver安裝更新的版本。但是,有一個奇怪的副作用。

問題

當我執行sudo apt update後跟時sudo apt upgrade,我得到以下輸出:

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] 

這也會影響 Pop!_OS Shop 的更新計數,這些軟體包顯示為待處理的作業系統更新。

故障排除

我在嘗試解決此問題時收集的一些數據。

刪除/etc/apt/sources.list.d/debian.sid.list並執行sudo apt update解決了這個問題,所以我知道這只是某個地方的錯誤計算/有缺陷的邏輯。

關注列表中的第一個包alsa-topology-conf

雖然我知道這個錯誤完全是膚淺的,但起初我想apt以某種方式跟踪包的來源(哪個 repo),所以我刪除、清理,然後重新安裝了包。沒有什麼不同。

sudo apt remove alsa-topology-conf
sudo apt clean
sudo apt update
sudo apt install alsa-topology-conf

執行apt policy alsa-topology-conf,結果為:

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

似乎兩者都sid具有jammy完全相同的版本,並且出於某種原因,apt將包與200優先級匹配,而不是501優先級條目。

刪除後,/etc/apt/sources.list.d/debian.sid.list輸出如下所示:

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

相關問題

以下是類似情況的相關問題,但沒有一個答案有助於解決這個問題。

我已經嘗試了上述問題中的所有答案,但似乎沒有一個相關或有效。

我的問題

有沒有人對如何協調這一點有任何建議,以便系統不會一直認為這些包需要降級?

基本的答案是您正在做一些您不應該做的事情,即在版本(和分發)之間混合儲存庫。在基於 Ubuntu 的發行版中引入 Debian 軟體包是個壞主意。xscreensaver可以在更高版本的 Ubuntu中使用,這樣使用起來會不太危險,但即使這樣也是個壞主意。

鑑於您所做的所有調查以及您提供的詳細資訊,有必要解釋您在此處看到的行為。為“降級”提供的所有軟體包都具有在 Debian 和 Ubuntu 中以相同版本可用的共享屬性;但是,它們不是同一個包,因為從 Debian 導入的所有包都在 Ubuntu 中重建。

apt這裡發揮作用的第一個特性是pin-priorities 只選擇版本。對於儲存庫中不同版本中可用的任何包,pin-priorities 將區分它們。對於儲存庫中相同版本中可用的任何包,它們不會。然後應用下一個功能:當多個儲存庫提供相同的版本時,列出的第一個將獲勝。這與 的另一個特性相結合apt,即如果散列不匹配,使用給定散列安裝的包將被具有相同版本的儲存庫包替換(此處某處有關於該問題的問答,但我找不到現在就可以了)。

所有這一切的結果是,對於 Pop!_OS(引擎蓋下的 Ubuntu)提供的所有軟體包,其 Jammy 中的版本與 Debian 不穩定的目前版本完全匹配,apt將考慮將它們替換為 Debian 版本。我不確定為什麼它將它們標識為降級。

如果你要繼續這樣做,你會用它們的 Debian“等效”替換一些 Pop!_OS 包;這很有可能確實有效,但也有可能使用的庫中的細微差異會導致問題。你最終會得到一個完全未經測試的設置。

要撤消此操作,您應該刪除sid.list、更新您的儲存庫並明確重新安裝您“降級”的任何軟體包:

sudo apt reinstall alsa-topology-conf

引用自:https://unix.stackexchange.com/questions/707670