我正在创建一个 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
包是否已安装并正常运行。
查看包是否已安装. 在输出底行的末尾查找“[installed]”。
$ apt list unattended-upgrades Listing... Done unattended-upgrades/cosmic-updates,cosmic-updates,now 1.5ubuntu3.18.10.1 all [installed]
检查 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
检查 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