擺脫“以下軟體包將被降級”
我將首先說明,我很確定這是我自己設計的一個獨特的混亂,但我希望有人遇到這個並且可能能夠提供幫助。
設置
我的筆記型電腦執行 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