我希望在从某些来源(如 restricted 和 multiverse)进行 apt 安装时收到警告

我希望在从某些来源(如 restricted 和 multiverse)进行 apt 安装时收到警告

有没有办法让 apt 在我要从某些来源安装包时发出警告?

例如,假设我指定main和某些 PPA 为“OK”(因为如果我理解正确的话,它们基本上只有 FLOSS)。然后,每当我安装这些白名单存储库之外的软件包或依赖项 universe时,我都会收到一些警告。apt install我不想禁用这些源。我只想收到一条警告,列出哪些软件包不在白名单源中,但仍然可以选择继续。

我更喜欢警告,但我也可以接受错误,我可以通过重复最后一个命令并使用一些标志来决定“我确定我需要它们”(或者通过使用普通的 apt 而不需要对命令进行太多编辑)来轻松绕过错误。我正在寻找与 apt 兼容的命令行解决方案,而不是 aptitude 或任何其他复杂或 GUI 软件。

如果这不是 apt 的本机功能,我们可以使用一些调用的自定义脚本apt-getdpkg只要它解释得很清楚并且分析起来不太复杂)。

所需的示例用法(apt-free.sh可以调用aptapt-get使用相同的参数并处理输出):

$ sudo apt-free install pkg1-free pkg2-proprietary
# The following additional packages will be installed:
#   pkg2-dependency1-free pkg1-dependency1-notfree pkg1-dependency2-notfree
# [...] normal apt output ...
# [...] xxx MB of disk space will be used.
# WARNING: Some packages are NOT in whitelisted sources!
#   pkg1-dependency1-notfree :: http://security.ubuntu.com/ubuntu focal-security restricted
#   pkg1-dependency2-notfree :: https://apt.example.com/ stable main
#   pkg2-proprietary :: http://archive.ubuntu.com/ubuntu focal multiverse
# Proceed? [Y/n] n

$ sudo apt install pkg1-free pkg2-proprietary
# The following additional packages will be installed:
# [...] normal apt output (same but no warning) ...
# Proceed? [Y/n] y

对于想要更好地管理软件许可证和跟踪非 FLOSS 软件的人来说,这是一个非常棒的工具。虽然将自己限制在 FLOSS 上是理想的选择,但有时您希望至少允许发现非 FLOSS 软件,同时仍然能够做出是否安装它们的明智决定。Vanilla apt 在这方面有点欠缺,而这个工具将在促进用户选择方面取得很大进步。

如果有知识的人可以编写这样的脚本(我认为可以做到这一点而不太复杂)或指出一些等效的东西,那就太棒了。再次提醒,我不希望一直启用/禁用源和 apt 更新。
有人愿意接受挑战吗

答案1

谢谢这个答案我找到了一个解决方案,使用 APT pins。不确定它对依赖项如何起作用(我没有测试过),但它似乎是目前我能找到的最佳解决方案,至少对于没有非自由依赖项的软件包而言。

这样可以防止 apt 找到专有软件包版本,因此除非我将其列入白名单或要求特定版本,否则 apt 不会安装或升级受限或多元宇宙中的任何软件包。即使对于这些软件包,apt install 中的 Tab 补全仍可正常工作。

sudo nano /etc/apt/preferences.d/proprietary-exceptions.pref && sudo apt update
Explanation: Whitelisted proprietary packages from restricted and multiverse
Package: pkg1-cool pkg2-cool
Pin: release o=Ubuntu
Pin-Priority: 990

Explanation: Prevent APT from finding proprietary package versions in multiverse
Package: *
Pin: release c=multiverse
Pin-Priority: -1

Explanation: Prevent APT from finding proprietary package versions in restricted
Package: *
Pin: release c=restricted
Pin-Priority: -1

因此apt install pkg1-proprietary会失败,提示“没有安装候选项”。

我仍然可以安装特定版本,但没有收到更新:apt install pkg1-proprietary=v1.0.1

为了允许安装和更新,我必须在此文件中将其列入白名单(也许依赖项也是如此?)。要创建空的白名单,我只需使用无效的包名称(如“none”)即可(或直接删除第一部分)。

相关内容