通过 /etc/apt/apt.conf.d/02periodic 自动调用

通过 /etc/apt/apt.conf.d/02periodic 自动调用

我正在创建一个 BASH 脚本,它将启用自动更新、重要安全更新以及软件更新菜单中的“每日检查”选项等。但无论我在哪里搜索,我都找不到答案。据我所知,唯一的方法是通过 GUI。有没有我所不知道的方法可以做到这一点?

编辑 1:通过进一步研究,我已经弄清楚了如何使用这段代码启用重要的安全更新和推荐更新:

find /etc/apt -type f -name '*.list' -exec sed -i 's/^#\(deb.*-backports.*\)/\1/; s/^#\(deb.*-updates.*\)/\1/; s/^#\(deb.*-proposed.*\)/\1/; s/^#\(deb.*-security.*\)/\1/' {} +

如何从命令行启用或禁用 -updates、-security、-backports、-proposed repositories?

答案1

默认情况下启用无人值守升级在所有 Ubuntu 版本 16.04 及更新版本中。

有三种简单的方法可以判断unattended-upgrades包是否已安装并正常运行。

  1. 查看包是否已安装. 在输出底行的末尾查找“[installed]”。

     $ apt list unattended-upgrades
     Listing... Done
     unattended-upgrades/cosmic-updates,cosmic-updates,now 1.5ubuntu3.18.10.1 all [installed]
    
  2. 检查 apt 时间戳无人值守升级活动。查找过去一两天内无人值守升级的时间戳:

     $ ls -la /var/lib/apt/periodic/
     total 8
     drwxr-xr-x 2 root root 4096 Sep 15  2017 .
     drwxr-xr-x 5 root root 4096 Jan  1 08:24 ..
     -rw-r--r-- 1 root root    0 Jan 10 07:54 download-upgradeable-stamp
     -rw-r--r-- 1 root root    0 Jan 10 07:51 unattended-upgrades-stamp
     -rw-r--r-- 1 root root    0 Jan 10 07:52 update-stamp
     -rw-r--r-- 1 root root    0 Jan 10 07:53 update-success-stamp
     -rw-r--r-- 1 root root    0 Jan 10 07:55 upgrade-stamp
    
  3. 检查 apt 设置查看无人值守升级是打开(“1”)还是关闭(“0”):

     $ grep Unattended-Upgrade /etc/apt/apt.conf.d/20auto-upgrades 
     APT::Periodic::Unattended-Upgrade "1";
    

unattended-upgrades 使用的存储库在 /etc/apt/apt.conf.d/50unattended-upgrade 中列出。

  • -security 存储库在 Ubuntu 的所有版本中默认启用。
  • 添加其他 Ubuntu 存储库很简单:只需取消注释相应的行即可。
  • 不鼓励启用 -backports,这些软件包尚未经过全面测试。
  • 强烈不建议启用-proposed,因为这些包可能非常危险。

如果安装并启用了无人值守升级,无论你是否愿意,它都会每天运行。仅 GUI 提供了更改期限的选项。

进行更改后您不需要重新启动系统。Apt 每天在随机时间运行一次,并且每次都重新加载配置和源。

答案2

如果你正在使用该unattended-upgrades软件包并且它已经安装,那么根据Ubuntu 社区帮助 Wiki 上的 AutomaticSecurityUpdates(仅供参考,它还包含有关使用 GNOME 更新管理器、cron 和 aptitude 以及 cron-apt 的信息):

确定当前配置

可以通过运行以下命令查询当前配置:

apt-config dump APT::Periodic::Unattended-Upgrade

这将产生如下输出:

APT::Periodic::Unattended-Upgrade "1";

在此示例中,无人值守升级将每 1 天运行一次。如果数字为“0”,则无人值守升级将被禁用。

/etc/apt/apt.conf.d/ 中的文件按字典顺序进行评估,每个文件都可以覆盖先前文件中设置的值。这使得查看 /etc/apt/apt.conf.d/20auto-upgrades 中的设置以及为什么建议使用 apt-config 变得不够充分。


要启用它,请执行以下操作:

sudo dpkg-reconfigure --priority=low unattended-upgrades

(这是一个交互式对话框)它将创建/etc/apt/apt.conf.d/50unattended-upgrades。并/etc/apt/apt.conf.d/20auto-upgrades包含以下内容:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

有关这些值的含义的详细信息可以在 /etc/cron.daily/apt 文件的标题中找到。

如果您绝对确定您不会错过任何其他dpkg-reconfigure内容(我不确定以上是否是详尽的列表),您可以创建/编辑上述文件。

或者,除了上述情况,根据Debian wiki 上的 UnattendedUpgrades

通过 /etc/apt/apt.conf.d/02periodic 自动调用

或者,您也可以创建 apt 配置文件/etc/apt/apt.conf.d/02periodic来激活无人值守升级:

下面是一个示例 /etc/apt/apt.conf.d/02periodic:

// Control parameters for cron jobs by /etc/cron.daily/apt-compat //

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "21";


// Send report mail to root
//  0: no report         (or null string)
//  1: progress report   (actually any string)
//  2: + command outputs (remove -qq, remove 2>/dev/null, add -d)
//  3: + trace on
APT::Periodic::Verbose "2";

手动运行(用于调试)

为了帮助调试,您可能需要手动运行无人值守升级,如下所示:

sudo unattended-upgrade -d

也可以看看

  • /usr/share/doc/unattended-upgrades/README.md.gz
  • /usr/share/doc/apt/examples/configure-index.gz
  • /etc/cron.daily/apt
  • apt.conf(5)

此外,您可能还会感兴趣更多信息:

相关 systemd 文件

由于 Debian 使用的是 systemd 系统,它定义了用于 APT 的计时器,这些文件由 apt 包提供。
相关文件是:

  • 用于下载/lib/systemd/system/apt-daily.timer
    • 覆盖/etc/systemd/system/apt-daily.timer.d/override.conf
  • 用于升级:/lib/systemd/system/apt-daily-upgrade.timer
    • 覆盖/etc/systemd/system/apt-daily-upgrade.d/override.conf

您可以使用本地覆盖文件覆盖这些设置(如上所示),如果尚不存在则创建缺失的部分。

下面是如何使用以下命令将下载时间覆盖为凌晨 1 点的示例 /etc/systemd/system/apt-daily.timer.d/override.conf

[Timer]
OnCalendar=
OnCalendar=01:00

需要上面的第 2 行来重置(清空)下面第 5 行显示的默认值。

默认值/lib/systemd/system/apt-daily.timer是(撰写本文时):

[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

答案3

echo -e 'APT::Periodic::Update-Package-Lists "7";\nAPT::Periodic::Download-Upgradeable-Packages "7";\nAPT::Periodic::Unattended-Upgrade "7";\nAPT::Periodic::AutocleanInterval "7";' >> /etc/apt/apt.conf.d/20auto-upgrades

仅安全自动更新.. sed -i 's/"${distro_id}:${distro_codename}";/\/\/"${distro_id}:${distro_codename}";/' /etc/apt/apt.conf.d/50unattended-upgrades

通知:apt install apticron && echo -e 'EMAIL=$EMAIL' >> /etc/apticron/apticron.conf

echo -e "[Timer]\nPersistent=delay" > /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf 这是为了防止在启动时出现 uu,尽管默认设置为随机(systemctl list-timers)

unattended-upgrades --dry-run --debug && cat /var/log/unattended-upgrades/unattended-upgrades.log

相关内容