我有几台 Ubuntu 服务器,我想让它们自动应用所有升级。我以前使用过一个简单的脚本,apt-get update && apt-get upgrade
但运行起来不太稳定,所以我尝试迁移到这个unattended-upgrades
脚本,这似乎是官方推荐的方法。
然而,我正在努力实现以下任务:
- 如何每天收到电子邮件(假设
unattended-upgrades
每天都运行)。目前,我似乎只在软件包升级时收到电子邮件(我更喜欢每天都收到电子邮件,因为这样我就知道如果电子邮件没有到达,那就出了问题)。 - 如何升级所有软件包,而不仅仅是那些具有安全更新的软件包。
我能找到的所有教程,包括Ubuntu 官方文档,告诉我编辑 中的现有文件/etc/apt/apt.conf.d
。但是,我更喜欢使用附加文件覆盖选项,部分原因是我以后不会收到“配置文件与维护者不同”错误,也因为这使得在配置管理和版本控制中保留所有覆盖变得更容易。
是否可以通过这种方式覆盖所有配置选项?我尝试过这样做,发现有些覆盖似乎有效,而其他覆盖则无效。
我当前的覆盖文件位于/etc/apt/apt.conf.d/99zz-overrides
(命名以确保最后读取)并包含以下内容:
Unattended-Upgrade::Mail "[email protected]";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
我没有改变任何其他东西/etc/apt/apt.conf.d
。
答案1
因此,如果你想:
- 使用
unattended-upgrades
和 - 改变其行为
和 - 不要更改包内的
unattended-upgrades
脚本
(所以基本上鱼与熊掌兼得;-))
你必须:
- cron每日脚本
- 那
grep
今天的日期var/log/dpkg.log
- 每天向您发送电子邮件
如果电子邮件为空:则什么也不会发生,否则您将拥有日志,因此所有空的和完整的电子邮件放在一起就是您所要求的。
答案2
绘画来源https://gist.github.com/roybotnik/b0ec2eda2bc625e19eaf和https://wiki.debian.org/UnattendedUpgrades:
该文件/etc/apt/apt.conf.d/50unattended-upgrades
包含其配置可用的所有选项以及每个选项的说明。
似乎没有每次运行时都发送电子邮件的选项,只有升级或出现问题时才发送电子邮件。不过,你可以设置是否希望在所有升级时发送电子邮件,或者仅在出现问题时发送电子邮件(Unattended-Upgrade::MailOnlyOnError ["true"/"false"]
要回答问题的第二部分,您可以按如下方式设置无人值守升级将使用的源:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
通过取消注释updates
或其他行,您将自动更新那些相应的软件包集。