从命令行启用自动更新

Tec*_*son 5 update-manager bash scripts

我正在创建一个 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/' {} +
Run Code Online (Sandbox Code Playgroud)

如何从命令行启用或禁用 -updates、-security、-backports、-propose 存储库?

use*_*733 8

所有 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]
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 检查 apt 设置以查看无人值守升级是否打开(“1”)或关闭(“0”):

     $ grep Unattended-Upgrade /etc/apt/apt.conf.d/20auto-upgrades 
     APT::Periodic::Unattended-Upgrade "1";
    
    Run Code Online (Sandbox Code Playgroud)

/etc/apt/apt.conf.d/50unattended-upgrade 中列出了无人值守升级使用的存储库。

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

如果安装并打开了无人值守升级,无论您是否愿意,它都会每天运行。只有 GUI 提供了更改周期的选项。

进行更改后,无需重新启动系统。Apt 每天随机运行一次,并且每次都会重新加载配置和源。


Xen*_*050 4

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

确定当前配置

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

apt-config dump APT::Periodic::Unattended-Upgrade
Run Code Online (Sandbox Code Playgroud)

这将产生如下输出:

APT::Periodic::Unattended-Upgrade "1";
Run Code Online (Sandbox Code Playgroud)

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

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


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

sudo dpkg-reconfigure --priority=low unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

(这是一个交互式对话框)这将创建/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";
Run Code Online (Sandbox Code Playgroud)

有关这些值含义的详细信息可以在 /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";
Run Code Online (Sandbox Code Playgroud)

手动运行(用于调试)

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

sudo unattended-upgrade -d
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • /usr/share/doc/无人值守升级/README.md.gz
  • /usr/share/doc/apt/examples/configure-index.gz
  • /etc/cron.daily/apt
  • apt.conf(5)

另外,您可能感兴趣的更多信息:

相关系统文件

因为 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
Run Code Online (Sandbox Code Playgroud)

需要上面的第 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
Run Code Online (Sandbox Code Playgroud)