racqspace.unattended_upgrades
Ansible 角色: unattended_upgrades
安装和设置 unattended-upgrades 用于 Ubuntu 和 Debian (自 Wheezy 起),以定期安装安全更新。
需求
该角色使用 apt 模块,并有额外依赖。
如果您将 unattended_upgrades_mail
设置为电子邮件地址,请确保系统中可以使用 mailx
命令,并且您的系统可以发送电子邮件。
该角色需要版本为 0.70 及以上的 unattended-upgrades,自 Debian Wheezy 和 Ubuntu 12.04 起提供。 这是由于使用了 Origins Patterns。
自动重启
如果您启用了自动重启功能 (unattended_upgrades_automatic_reboot
),该角色将尝试安装 update-notifier-common
包,这在某些系统上是检测和执行升级后重启所需的。您还可以选择定义重启的具体时间 (unattended_upgrades_automatic_reboot_time
)。
这个功能在 Debian Jessie 中已损坏,但最终被滚入 unattended-upgrades 包中。
禁用的 Cron 作业
在某些主机上,您可能会发现 unattended-upgrade 的 cron 文件 /etc/cron.daily/apt
被重命名为 apt.disabled
。这可能是供应商的决定,以节省 CPU 资源。使用 enable-standard-cronjobs 角色来重新启用 unattended-upgrades。
角色变量
main
unattended_upgrades_cache_valid_time
: 如果 apt 缓存的时间超出指定的秒数,则更新其缓存;在软件包安装过程中传递给 apt 模块。- 默认值:
3600
- 默认值:
auto-upgrades
unattended_upgrades_enabled
: 启用更新/升级脚本 (0=禁用)- 默认值:
1
- 默认值:
unattended_upgrades_upgrade
: 每 n 天运行一次 "unattended-upgrade" 安全升级脚本 (0=禁用)- 默认值:
1
- 默认值:
unattended_upgrades_update_package_list
: 每 n 天自动执行 "apt-get update" (0=禁用)- 默认值:
1
- 默认值:
unattended_upgrades_download_upgradeable
: 每 n 天执行 "apt-get upgrade --download-only" (0=禁用)- 默认值:
0
- 默认值:
unattended_upgrades_autoclean_interval
: 每 n 天执行 "apt-get autoclean" (0=禁用)- 默认值:
7
- 默认值:
unattended_upgrades_clean_interval
: 每 n 天执行 "apt-get clean" (0=禁用)- 默认值:
0
- 默认值:
unattended_upgrades_random_sleep
: 在 apt 作业开始前定义随机间隔的最大秒数 (仅适用于没有 systemd 的系统)- 默认值:
1800
(30 分钟)
- 默认值:
unattended_upgrades_dl_limit
: 使用 apt 带宽限制功能限制下载速度(以 kB/秒计)。- 默认值: 禁用
unattended-upgrades
unattended_upgrades_origins_patterns
: 用于判断软件包是否可以自动安装的源模式数组,更多详细信息见 Origins Patterns。- Debian 默认值:
['origin=Debian,codename=${distro_codename},label=Debian-Security']
- Ubuntu 默认值:
['origin=Ubuntu,archive=${distro_codename}-security,label=Ubuntu']
- Debian 默认值:
unattended_upgrades_package_blacklist
: 不会被自动升级的软件包- 默认值:
[]
- 默认值:
unattended_upgrades_autofix_interrupted_dpkg
: 是否在不干净的 dpkg 退出时运行dpkg --force-confold --configure -a
- 默认值:
true
- 默认值:
unattended_upgrades_minimal_steps
: 将升级分割为最小的可能部分,以便可以用 SIGUSR1 中断。- 默认值:
true
- 默认值:
unattended_upgrades_install_on_shutdown
: 在机器关闭时安装所有 unattended-upgrades。- 默认值:
false
- 默认值:
unattended_upgrades_mail
: 发送有关升级或 unattended-upgrades 问题的信息的电子邮件地址- 默认值:
false
(不发送任何电子邮件)
- 默认值:
unattended_upgrades_mail_only_on_error
: 仅在出错时发送电子邮件,否则在每次软件包升级时都会发送电子邮件。- 默认值:
false
- 默认值:
unattended_upgrades_remove_unused_dependencies
: 在升级后自动删除所有未使用的依赖项。- 默认值:
false
- 默认值:
unattended_upgrades_remove_new_unused_dependencies
: 在升级后自动删除新的未使用的依赖项。- 默认值:
true
- 默认值:
unattended_upgrades_automatic_reboot
: 如果任何升级的软件包需要重启,则自动重启系统,及时重启。- 默认值:
false
- 默认值:
unattended_upgrades_automatic_reboot_time
: 如果任何升级的软件包需要重启,按特定时间 (HH:MM) 自动重启系统,而不是在升级后立即重启。- 默认值:
false
- 默认值:
unattended_upgrades_update_days
: 设置应用更新的星期天。可以用局部缩写或全名指定。或者用整数表示,“0” 代表星期日,“1” 代表星期一,以此类推。例如:{"Mon";"Fri"};
- 默认值: 禁用
unattended_upgrades_ignore_apps_require_restart
: unattended-upgrades 不会自动升级某些关键包,这些包在升级后需要重启 (即,在其 debian/control 文件中有XB-Upgrade-Requires: app-restart
指令)。将此选项设为true
时,unattended-upgrades 将毫无顾忌地升级这些包。- 默认值:
false
- 默认值:
unattended_upgrades_syslog_enable
: 将事件写入 syslog,在 syslog 消息发送到中央存储的环境中非常有用。- 默认值:
false
- 默认值:
unattended_upgrades_syslog_facility
: 将事件写入指定的 syslog 设施,未指定时使用守护进程设施。仅在unattended_upgrades_syslog_enable
设置为true
时有效。- 默认值:
daemon
- 默认值:
unattended_upgrades_verbose
: 定义 APT 定期运行的详细程度。输出将发送给 root。- 可能的选项:
0
: 没有报告1
: 进度报告2
: + 命令输出3
: + 开启追踪
- 默认值:
0
(没有报告)
- 可能的选项:
unattended_upgrades_dpkg_options
: 在 unattended-upgrades 运行期间使用的 dpkg 命令行选项数组,例如["--force-confdef"]
,["--force-confold"]
- 默认值:
[]
- 默认值:
Origins Patterns
Origins Pattern 是比以前版本中使用的允许来源选项更强大的替代方案。
模式由特定关键字组成:
a
,archive
,suite
– 例如stable
,trusty-security
(archive=stable
)c
,component
– 例如main
,crontrib
,non-free
(component=main
)l
,label
– 例如Debian
,Debian-Security
,Ubuntu
o
,origin
– 例如Debian
,Unofficial Multimedia Packages
,Ubuntu
n
,codename
– 例如jessie
,jessie-updates
,trusty
(此项仅支持unattended-upgrades
>= 0.80)site
– 例如http.debian.net
您可以使用 apt-cache policy
查看可用的仓库,并使用 unattended-upgrades -d
命令在目标系统上调试您的选择。
另外,unattended-upgrades 支持两个宏(变量),从 /etc/debian_version
派生:
${distro_id}
– 已安装的发行版名称,例如Debian
或Ubuntu
。${distro_codename}
– 已安装的代号,例如jessie
或trusty
。
使用 ${distro_codename}
应优先于使用 stable
或 oldstable
作为选择,因为一旦 stable
移动到 oldstable
,将不会再进行安全更新,或更糟糕的是,意外安装了来自新发行版的包。在将安装从 oldstable
升级到 stable
时,如果您忘记在源模式中进行更改,您可能不会收到新发行版的安全更新。使用 ${distro_codename}
,这两种情况都不会发生。
角色使用示例
示例(适用于 Ubuntu,带有自定义 origins patterns,黑名单软件包和电子邮件通知):
- hosts: all
roles:
- role: racqspace.unattended_upgrades
vars:
unattended_upgrades_origins_patterns:
- 'origin=Ubuntu,archive=${distro_codename}-security'
- 'o=Ubuntu,a=${distro_codename}-updates'
unattended_upgrades_package_blacklist: [cowsay, vim]
unattended_upgrades_mail: '[email protected]'
注意: 您不需要指定 unattended_upgrades_origins_patterns
,如果没有设置,该角色将使用发行版的默认值。
仅在基于 Debian 的系统上运行
如果您在同一个剧本中管理多个发行版,您可能希望跳过在非 Debian 系统上运行该角色。您可以 使用 when
条件与角色 来限制角色到特定系统:
- hosts: all
roles:
- role: racqspace.unattended_upgrades
when: ansible_facts['os_family'] == 'Debian'
模式示例
默认情况下,只有安全更新被允许用于 Ubuntu 和 Debian。您可以添加更多模式以允许 unattended-updates 自动安装更多软件包,但请注意,自动执行重大更新可能会导致您的系统出现问题。
适用于 Debian
unattended_upgrades_origins_patterns:
- 'origin=Debian,codename=${distro_codename},label=Debian-Security' # 安全更新
- 'o=Debian,codename=${distro_codename},label=Debian' # 包括非安全更新的更新
- 'o=Debian,codename=${distro_codename},a=proposed-updates'
在 debian wheezy 上,由于 unattended-upgrades
为 0.79.5
,您不能使用 codename
指令。
您将不得不基于档案进行匹配:
unattended_upgrades_origins_patterns:
- 'origin=Debian,a=stable,label=Debian-Security' # 安全更新
- 'o=Debian,a=stable,l=Debian' # 包括非安全更新的更新
- 'o=Debian,a=proposed-updates'
请确保阅读有关此问题的信息,以便在上面的源模式文档中获得细节。
适用于 Ubuntu
在 Ubuntu 中,档案始终包含发行版代号。
unattended_upgrades_origins_patterns:
- 'origin=Ubuntu,archive=${distro_codename}-security'
- 'o=Ubuntu,a=${distro_codename}'
- 'o=Ubuntu,a=${distro_codename}-updates'
- 'o=Ubuntu,a=${distro_codename}-proposed-updates'
适用于 Raspbian
在 Raspbian 中,只能从默认存储库更新所有软件包,包括非安全更新,或不更新任何软件包。
更新所有软件包,包括非安全更新:
unattended_upgrades_origins_patterns:
- 'origin=Raspbian,codename=${distro_codename},label=Raspbian'
您不能在 raspbian wheezy 上使用 codename
指令,和上面的 debian wheezy 一样。
如果您不想在 raspbian 主机上安装任何更新,只需将 unattended_upgrades_origins_patterns
设置为空列表:
unattended_upgrades_origins_patterns: []
许可证
MIT
作者信息
此角色由 Clemens Kaserer 在 2021 年创建。
贡献者:
Configure unattended-upgrades for Debian based systems.
ansible-galaxy install racqspace.unattended_upgrades