我首先要说明的是,我很确定这是我自己设计的独特混乱,但我希望有人遇到过这种情况并且可能能够提供帮助。
我的笔记本电脑运行 Pop!_OS 22.04(基于 Ubuntu Jammy)。我真的很喜欢xscreensaver软件包,但是 Debian/Ubuntu/Pop!_OS 发行版存储库包含过时的版本,并且只有 sid (又名不稳定)包含更新的软件包*。
不用担心,这就是固定存在的原因,所以这就是我的设置方式:
/etc/apt/preferences.d/unstable-200
文件:Run Code Online (Sandbox Code Playgroud)Package: * Pin: release a=unstable Pin-Priority: 200
/etc/apt/preferences.d/xscreensaver-2000
文件:Run Code Online (Sandbox Code Playgroud)Package: xscreensaver* Pin: release a=unstable Pin-Priority: 2000
/etc/apt/sources.list.d/debian.sid.list
文件:Run Code Online (Sandbox Code Playgroud)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: …
Run Code Online (Sandbox Code Playgroud) 这可能是一个可能的错误,但它已经困扰了我几天了。
apt-get upgrade
和之间的区别apt-get dist-upgrade
现在已经众所周知且已经确立,即升级安装/升级而dist-upgrade
能够安装/删除/升级如果软件包删除恰好是安装或升级另一个软件包所必需的。使用类似的东西可以很容易地发现包的差异
(以下是一种快速而肮脏的方法,需要在终端中输入 sudo 密码以进行复制粘贴。此外,由于我自己修补了几个软件包和驱动程序,我需要保留功能,因此我将 OR 包含在在awk
提取只有那些安装和那些要升级,而不是那些被列为必须保持回来,但下面应该工作,即使这些行不存在于你的apt upgrade
输出):
$echo -e 'n' | sudo apt-get dist-upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_get_dist_list
$echo -e 'n' | sudo apt-get upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep …
Run Code Online (Sandbox Code Playgroud)