Ubuntu16.04/18.04如何配置系统自动更新所有的包?

优采云 发布时间: 2021-05-24 19:05

  Ubuntu16.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地址:

  本文将永久更新链接地址:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线