racqspace.unattended_upgrades

Ansible 角色: unattended_upgrades

MIT GitHub 工作流程状态 GitHub 最近提交 GitHub 发布日期 维护

安装和设置 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']
  • 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} – 已安装的发行版名称,例如 DebianUbuntu
  • ${distro_codename} – 已安装的代号,例如 jessietrusty

使用 ${distro_codename} 应优先于使用 stableoldstable 作为选择,因为一旦 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-upgrades0.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 年创建。

贡献者:

安装
ansible-galaxy install racqspace.unattended_upgrades
许可证
mit
下载
1.4k
拥有者