Ubuntu:升级特定软件包或安全更新
要仅刷新已在 Ubuntu 上安装的特定软件包,请使用 apt install --only-upgrade PACKAGE。要选择安全更新,请检查 unattended-upgrades 中的允许来源,模拟升级,然后再应用它。根据所选软件包的依赖关系或设置,其他软件包也可能会一起更改。
更新前需要检查的事项
apt update 从仓库获取软件包列表,但不会升级已安装的软件包。安装和升级是不同的任务。在应用更新之前,请检查备份和恢复方法、磁盘空间以及可能的服务中断,并在生产服务器上安排操作时间。
sudo apt update
apt list --upgradable
如果第一个命令失败,请解决仓库和网络错误,然后再次刷新列表。第二个命令显示当前可升级的软件包,但这并不意味着列表中的所有项目都是安全更新。
升级特定软件包
下面的命令以 curl 为示例,假设它已经安装。将其替换为您想要更新的已安装软件包的实际名称。首先,通过 APT 检查候选版本、来源和预期更改。
apt-cache policy curl
sudo apt-get -s install --only-upgrade curl
-s 是一次模拟运行,不会执行实际安装。--only-upgrade 不会在指定软件包尚未安装的情况下进行新安装。但是,它可能会建议安装、升级或删除目标软件包升级所需的其他软件包,因此请查看整个结果。根据被保留的软件包、依赖关系和软件源优先级,可能无法选择所需版本。
如果预期的更改是合适的,请使用以下命令应用它们。请再次确认 APT 建议的安装、升级、删除列表以及所需空间,如果与您的预期不同,请在确认步骤停止。
sudo apt install --only-upgrade curl
完成后,使用 apt-cache policy curl 检查已安装的版本,并验证对应的服务或应用程序是否正常运行。根据软件包的不同,可能需要重启服务或重启系统。
检查允许的安全更新来源
与名称不同,unattended-upgrade 并不总是只选择安全更新。根据配置的允许源,其他更新也可能被安装。首先,检查该软件包是否已安装以及当前的 APT 设置。
dpkg-query -W unattended-upgrades
apt-config dump | grep -E 'Unattended-Upgrade::(Allowed-Origins|Origins-Pattern|Automatic-Reboot|Remove-)'
apt-cache policy
如果未安装,可以使用 sudo apt install unattended-upgrades 进行安装。安装后,自动更新计划可能会生效,因此请检查服务器策略和现有的 /etc/apt/apt.conf.d/20auto-upgrades 设置。将 apt-cache policy 的存储库信息与允许列表进行比较,还要验证自动重启或不必要的软件包删除的设置。该列表可能会结合多个配置文件中的值。
如果允许安全范围之外的来源,例如 -updates 或外部仓库,则必须在执行以下命令之前根据组织政策调整设置。Ubuntu Pro 的 ESM 安全仓库和外部仓库可能是独立来源,因此请检查支持范围和来源以确保不会错过所需的安全补丁。您可以在 Ubuntu 自动更新文档 中检查默认来源和重启设置。
仅允许一般 Ubuntu 安全仓库的示例
以下是一个示例配置,仅允许使用标准的 Ubuntu 安全仓库。它不包含 ESM 或外部仓库,因此不要在需要这些更新的环境中照原样应用。由于这是一个同时影响自动更新的持久设置,请记录您现有的策略,并确保在继续之前它不会与其他配置管理工具冲突。
在 /etc/apt/apt.conf.d/ 中,创建一个名为 99local-security-only 的新文件,不要覆盖已有文件,并保存以下内容。当仅添加新条目时,APT 列表会保留现有条目,因此首先清除两个列表。#clear 是一个 APT 配置指令,而不是 shell 提示符。
#clear Unattended-Upgrade::Allowed-Origins;
#clear Unattended-Upgrade::Origins-Pattern;
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
其他文件可能会在以后重新添加源,因此保存后,请使用上面的 apt-config dump 和模拟运行结果检查实际允许的源。安全仓库必须处于激活状态,如果必要的依赖项无法从允许的源获取,某些软件包可能会保持挂起状态。要恢复此配置,只需删除此操作创建的文件,然后再次检查配置和模拟运行结果。
模拟运行及应用后验证
以下命令用于检查允许的源和待处理的软件包,而无需实际安装更新。请查看输出和日志,以检查意外的源、挂起项目和错误。
sudo unattended-upgrade --dry-run --debug
仿真执行不能保证实际工作的结果。请检查源和目标、自动重启/移除策略,并仅在合适的维护窗口运行以下命令。
sudo unattended-upgrade --verbose
完成后,请检查 /var/log/unattended-upgrades/ 中的日志和受影响服务的状态,如有必要,在计划时间重启。注释 sources.list 中的仓库可能会忽略其他源文件和依赖,因此此方法在这里不使用。有关选项和日志路径,请参阅 Ubuntu unattended-upgrade 手册。




