我安装了一个软件包multiverse
,然后禁用multiverse
了restricted
apt 源(在所有 URL 中)。我禁用了它们,所以我没有安装任何新的意外使用非自由软件包或依赖项。
当我对软件包执行 apt update 然后升级时,apt 说它“已经是最新版本”。但我认为我实际上不会获得该软件包的升级,对吗?
有没有办法只对已安装的软件包进行升级,同时仍防止安装任何新的软件包restricted
(multiverse
无需在每次安装时编辑 apt 源)?
我考虑过保持multiverse
启用状态focal-security
,focal-updates
但我认为这可能不会达到我期望的效果。
我的另一个有点相关的问题:
我希望在从某些来源(如 restricted 和 multiverse)进行 apt 安装时收到警告
答案1
如果您禁用安装软件包的软件源(例如,在软件源中通过在软件源前面添加字符来注释掉软件源的行#
),则已安装的软件包将不会继续自动升级,但是,您仍然可以通过重新启用其软件源并重新安装软件包,然后再次禁用其软件源来手动升级该软件包。
当您使用 重新安装软件包时,apt 将尝试在您的软件源中找到该软件包并安装该软件包的最新可用版本。当使用 升级软件包时,apt也会将其升级到该软件包的最新可用版本。sudo apt reinstall package-name
sudo apt upgrade
--install-suggests
仅当您在运行命令时使用该选项添加建议的软件包时,依赖关系才会跨存储库sudo apt install
。Ubuntu 默认仅安装软件包本身及其推荐的软件包。如果您尝试安装系统软件源中没有的建议软件包,您将收到一条错误消息。
即使软件包已经由 apt 安装,也有命令可以告诉 apt 将该软件包视为手动安装的软件包,这样,如果不先切换选项,它就不能被自动删除或自动升级。用于将软件包标记为手动安装,这将阻止该软件包在没有其他软件包依赖于它的情况下被自动删除。hold 用于将软件包标记为保留,这将阻止该软件包被自动安装、升级或删除。用于取消先前设置的软件包保留,以再次允许所有操作。模拟软件包的重新安装,其结果将显示重新安装该软件包是否还会安装任何新软件包或依赖项,其中可能包括当前未安装的非自由软件包。 用于防止安装这些不需要的新软件包。sudo apt-mark manual package-name
sudo apt mark hold package-name
unhold
apt reinstall --simulate package-name
sudo apt-mark hold
答案2
禁用源不起作用(系统永远不会发现软件包的升级版本)。可能工作(我自己还没有针对这个用例进行测试)是APT 引脚. 保持源启用并添加如下内容到/etc/apt/preferences
:
Package: your-favorite-package
Pin: release o=Ubuntu
Pin-Priority: 990
Package: *
Pin: release c=multiverse
Pin-Priority: -1
Package: *
Pin: release c=restricted
Pin-Priority: -1
第二和第三块将来自 multiverse 和 restricted 的所有包标记为“不安装”,第一块将默认优先级恢复为your-favorite-package
。