在 Ubuntu/Debian 中强制安装保留的软件包
在 Ubuntu Linux 发行版的定期软件更新过程中,您可能会遇到某些软件包被保留且未更新的情况。这可能会导致不同系统之间的软件包版本存在差异。
在本教程中您将学习:
- 允许自动系统升级
- 强制升级特定包
- 禁用分阶段更新
本文将深入探讨 Ubuntu 中保留包的管理。它将提供有关如何强制自动安装这些软件包的分步指南。出于本文的目的,我们将使用名为“vol1.2-linuxconfig-1.0”的包作为示例。
了解场景:
通常,在软件升级或发行版升级过程中,可能会出现某些软件包已被保留的消息。这些是由于依赖性问题或因为已设置为不手动升级而未升级的软件包。
在我们的示例中,我们有两个 Ubuntu 系统:一个主系统和一个辅助虚拟系统。理想情况下,两个系统应具有相同的“vol1.2-linuxconfig-1.0”软件包版本。然而,虽然在主系统中该软件包已被保留,但在辅助系统中,相同的软件包已被自动安装。
症状:
为了调查这种差异,我们在主系统上运行以下命令:
$ sudo apt --installed list | grep vol1.2-linuxconfig-1.0
输出显示“vol1.2-linuxconfig-1.0”软件包已安装但可升级。但是,辅助系统上的相同命令显示该软件包已自动安装。
为了更好地理解差异,我们使用命令:
$ apt-cache policy vol1.2-linuxconfig-1.0
通过查看输出的“版本表”部分,我们确定了分阶段更新功能。如果存在,它将显示 (phased x%) 字段,x 是分阶段更新的百分比。
分阶段更新如何运作?
分阶段更新机制将新的软件包版本分发给随机的用户子集。此功能旨在避免新引入的错误同时影响所有用户的情况。
解决方案:
允许自动系统升级:作为一项安全功能,分阶段更新最终会在一段时间(通常是一周左右)后自动安装保留的软件包,因为它是分阶段推出的。
$ sudo apt install unattended-upgrades $ sudo dpkg-reconfigure unattended-upgrades
强制升级特定包:如果要手动覆盖包的保留状态,可以使用 –only-upgrade 选项。这样,特定的包将被强制升级:
bash sudo apt install --only-upgrade vol1.2-linuxconfig-1.0
禁用分阶段更新:如果您想完全禁用此功能并立即安装所有升级,可以通过使用以下命令更改 APT 配置文件来实现:
cat <<EOF > /etc/apt/apt.conf.d/80PhasedUpdates APT::Get::Never-Include-Phased-Updates: True; Update-Manager::Never-Include-Phased-Updates; EOF
结论
从上述场景中学到的经验表明,可以通过多种方式管理保留的包裹。谨慎的用户可以通过允许自动系统升级来选择分阶段更新系统。更具冒险精神的用户可能会决定强制升级特定的软件包或完全禁用分阶段更新功能。
但是,建议初学者用户让系统自动处理这些更新,以防止手动强制升级可能导致系统崩溃。通常不建议永久禁用分阶段更新,因为它会绕过旨在防止新引入的错误产生广泛影响的安全措施。