Ubuntu16.04/18.04如何配置系统自动更新所有的包?
优采云 发布时间: 2021-05-24 19:05Ubuntu16.04/18.04如何配置系统自动更新所有的包?
Ubuntu(1 6. 04/1 8. 0 4)默认每天都会自动安装系统安全更新,但不会自动安装软件包更新。本文整理了Ubuntu 1 6. 04/1 8. 04系统的自动更新机制,并描述如何配置系统以自动更新所有软件包注意:为简单起见,本文中使用Ubuntu指的是Ubuntu 1 6. 04/1 8. 04。
系统需要更新
当我们远程登录系统时,将收到与更新有关的消息,如下图所示:
红色框中的第一行文本指出系统中有149个软件包需要更新。第二行表明没有安全相关的程序包需要更新。原因是Ubuntu的默认配置每天都会自动安装安全更新,而忽略对其他软件包的更新。接下来,我们将介绍Ubuntu中的自动更新机制。
通过计划的任务执行更新
Ubuntu定义了4个systemd单元,默认情况下执行更新任务。他们是:
/lib/systemd/system/apt-daily-upgrade.service
/lib/systemd/system/apt-daily-upgrade.timer
/lib/systemd/system/apt-daily.service
/lib/systemd/system/apt-daily.timer
其中,apt-daily.timer和apt-daily-upgrade.timer是两个触发器,它们每天在指定的时间触发apt-daily.service和apt-daily-upgrade.service。这两个服务的类型都是oneshot,这意味着服务进程在任务完成时退出。这两个服务实际上调用了相同的脚本:/usr/lib/apt/apt.systemd.daily。 apt-daily.service传递脚本的参数“ update”,其功能是检查系统更新并下载相应的更新程序包。 apt-daily-upgrade.service为脚本传递参数“ install”,其功能是安装更新并删除本地缓存的更新包。
默认情况下,每天两次触发
apt-daily.timer,分别在6点和18点,这主要是为了减轻服务器端的下载压力。我们可以根据自己的业务特点设置适当的触发时间。
apt-daily-upgrade.service默认每天在6点触发一次,我们也可以将其设置为其他时间,例如午夜。
apt.systemd.daily脚本
/usr/lib/apt/apt.systemd.daily脚本负责完成与更新有关的一系列任务。这些任务主要分为两个部分:
•检查更新并下载更新包
•安装更新并清理更新包
在apt.systemd.daily脚本中调用apt-config命令,以从/etc/apt/apt.conf.d/10periodic文件和/etc/apt/apt.conf.d/中读取配置变量。 20自动升级,并根据这些变量的值来控制系统的更新策略。下面我们介绍一些更重要的配置项目。
执行apt-get更新的天数,默认为1天,0表示不执行该操作:
APT ::定期:: Update-Package-Lists“ 1”;
每隔几天执行一次apt-get升级--download-仅下载更新程序包,0表示不执行该操作:
APT ::定期::下载可升级软件包“ 0”;
下载的更新版本缓存在目录/ var / cache / apt / archives /中,并且在执行升级操作时直接从缓存目录中读取软件包文件,而不是从Internet下载。
您执行apt-get autoclean几天以删除无用的更新程序包,0表示不执行此操作:
APT ::定期:: AutocleanInterval“ 0”;
执行无人值守升级执行系统安全更新(或程序包更新)的天数,0表示不执行该操作:
APT ::定期::无人值守升级“ 1”;
使用这些配置,我们可以控制自动更新的频率和行为。请注意,到目前为止的配置只能安装系统的安全更新。如果要安装所有软件包更新,则需要其他配置。我们将在以下小节中介绍相关内容。
在继续介绍以下内容之前,让我们首先了解apt.systemd.daily脚本中使用的apt-config命令以及apt.systemd.daily脚本所依赖的配置文件。
apt-config命令
apt-config是APT套件使用的内部命令。它可用于在脚本的/etc/apt/apt.conf目录下的配置文件中提取信息。
例如,如果要在脚本中获取APT :: Periodic :: Update-Package-Lists的设置,则可以使用以下代码:
#!/ bin / bash
ABC = 0
eval $(apt-config shell ABC APT :: Periodic :: Update-Package-Lists)
回显$ {ABC}
这时,脚本变量ABC中存储的是APT :: Periodic :: Update-Package-Lists的值。
定期10次自动升级20次
/etc/apt/apt.conf.d/10periodic是update-notifier-common的配置文件:
$ dpkg-query -S /etc/apt/apt.conf.d/10定期
update-notifier-common:/etc/apt/apt.conf.d/10定期
在ubuntu 1 6. 04和1 8. 04中,这两个文件的默认内容相同。 apt.systemd.daily脚本在注释中表示,我们可以通过/etc/apt/apt.conf.d/10periodic文件自定义相关的变量值,并使用get-config命令获取值这些变量。但是测试的结果是/etc/apt/apt.conf.d/20auto-upgrades文件中的变量将覆盖/etc/apt/apt.conf.d/10定期文件中的变量。似乎get-config命令是基于文件名的顺序的,后一个文件中的变量将覆盖前一个文件中的变量。
在桌面版本中,如果您通过GUI程序修改相关变量,则这两个文件将被修改并保持一致。因此,在服务器版本中,我们最好同时修改这两个文件,并使它们的内容保持一致。
无人值守升级
Ubuntu实际上是通过无人值守升级命令自动安装更新的。默认情况下,此软件包已安装在Ubuntu 1 6. 04/1 8. 04中。如果遇到未安装的情况,也可以通过以下命令自己安装它:
$ sudo apt install无人值守升级
无人值守升级的配置文件是/etc/apt/apt.conf.d/50unattended-upgrades。
请注意,无人值守升级不仅可以安装系统的安全更新,还可以安装所有软件包的更新。但是默认配置仅安装安全更新,我们可以使用配置项使无人参与的升级安装所有程序包更新,或者仅安装安全更新。
无人值守升级命令旨在通过cron定期执行系统更新,但是在Ubuntu 1 6. 04/1 8. 04中,服务单元是通过systemd计时器单元定期触发的。
unattended-upgrades命令的日志文件存储在/ var / log / unattended-upgrades目录中。
无人值守升级命令的一种常见用法是检查系统是否已更新:
$ sudo无人值守升级-干运行
另一种用法是安装更新:
$ sudo无人值守升级
当在apt.systemd.daily脚本中执行无人值守升级命令时,由于更新包已预先下载到缓存目录(/ var / cache / apt / archives),因此它将直接使用更新包在缓存中。
配置文件50无人值守升级
50unattended-upgrades文件中的默认配置仅用于安装安全更新:
复制代码
无人值守升级::允许来源{
“ $ {distro_id}:$ {distro_codename}”;
“ $ {distro_id}:$ {distro_codename}-安全性”;
“ $ {distro_id} ESM:$ {distro_codename}”;
//“ $ {distro_id}:$ {distro_codename}-更新”;
//“建议的$ {distro_id}:$ {distro_codename}”;
//“ $ {distro_id}:$ {distro_codename} -backports”;
};
复制代码
如果要自动安装所有软件包更新,只需取消注释以下行:
“ $ {distro_id}:$ {distro_codename}-更新”;
我们还可以通过黑名单指定不更新哪些软件包:
无人值守升级::包黑名单{
“ vim”;
“ libc6”;
“ libc6-dev”;
“ libc6-i686”;
};
以下配置项指定在更新后删除无用的软件包:
无人值守升级::删除未使用的内核包“ true”;
无人值守升级::删除未使用的依赖项“ true”;
某些更新要求重新启动系统,并且默认配置不会重新启动系统。以下配置允许系统重新启动(更新完成后,如果需要重新启动,请立即重新启动系统):
无人值守升级::自动重启“ true”;
但是在大多数情况下,我们希望指定一个重新启动系统的时间(如果需要重新启动,请在以下配置中指定的时间重新启动系统):
无人值守升级::自动重启时间“ 02:38”;
如果系统更新期间发生错误,我该怎么办?当然是通知管理员!发生错误时,以下配置将向管理员发送电子邮件:
无人值守升级::邮件“”;
Unattended-Upgrade :: MailOnlyOnError“ true”;
注意:如果要将邮件发送到Internet,则需要安装诸如mailx之类的工具。
关闭自动更新
如果主机在封闭的环境中运行并且无法连接到有效的更新源,则可以选择此时关闭自动更新功能。首选方法是停止相关服务:
复制代码
$ sudo systemctl stop apt-daily.service
$ sudo systemctl stop apt-daily.timer
$ sudo systemctl stop apt-daily-upgrade.service
$ sudo systemctl stop apt-daily-upgrade.timer
$ sudo systemctl禁用apt-daily.service
$ sudo systemctl禁用apt-daily.timer
$ sudo systemctl禁用apt-daily-upgrade.service
$ sudo systemctl禁用apt-daily-upgrade.timer
复制代码
或者您可以修改自动更新程序的配置文件,并同时更新/etc/apt/apt.conf.d/10periodic和/etc/apt/apt.conf.d/20auto-upgrades:
APT ::定期:: Update-Package-Lists“ 1”;
APT ::定期::无人值守升级“ 1”;
更改为
APT ::定期:: Update-Package-Lists“ 0”;
APT ::定期::无人值守升级“ 0”;
故障调查
由于apt.systemd.daily脚本同时调用apt-get和无人值守升级等命令,因此相关日志也分散在不同的位置。与apt-get相关的日志位于/ var / log / apt目录中,而无人值守升级命令的日志位于/ var / log / unattended-upgrades目录中。
Linux Commune的RSS地址:
本文将永久更新链接地址: