Ubuntu 16.04: 自動アップデート / アップグレードの設定をする

自動アップデート(sudo apt update)と自動アップグレード(sudo apt upgrade)の設定について記述します。

apt updateで固まってしまう問題の回避策をご参照ください。

 

1 Ubuntu 16.04をインストールしたままの場合

Ubuntu 16.04を起動した時と毎日6時と18時(ランダムなディレイあり)に自動アップデートと自動アップグレードが実行がされます。

デフォルトでは、セキュリティアップグレードのみ実行され、自動再起動は実行されません。

2 apt.systemd.daily

aptの自動実行を可能にするフレームワークです。

以下の2種類のsystemdスクリプトが存在します。

apt-daily.service システム起動時に実行
apt-daily.timer 毎日6時と18時に実行

上記のsystemdスクリプト経由でapt autocleanの実行やunattended-upgradeを実行します。

3 unattended-upgradesパッケージ

自動アップグレードを実行するパッケージです。

デフォルトだとセキュリティアップデートのみをアップグレードする設定になっています。アップデート後にシステム再起動が必要な場合に再起動させることも設定できます。

サーバ運用している場合はアップグレード作業が不要になるので便利なツールです。

4 /etc/apt/apt.conf.d/10periodic

unattended-upgradesはこのファイルを使用しません。apt-dailyが使用します。apt-dailyは10periodicと20auto-upgradesの両方を使用し(aptが使用する為)、20auto-upgradesの値が優先されます。

5 /etc/apt/apt.conf.d/20auto-upgrades

自動アップデートと自動アップグレードを実行する設定ファイルです。Ubuntu 16.04インストール時にデフォルトで項目が有効になっています。

$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

APT::Periodic::Update-Package-Listsが/etc/apt/apt.conf.d/10periodicと被っています。

APT::Periodic::Update-Package-Lists 0だと自動アップデート無効
APT::Periodic::Unattended-Upgrade 0だと自動アップグレード無効
APT::Periodic::Download-Upgradeable-Packages 0だと自動アップグレード無効
  (パッケージのダウンロードのみ)
APT::Periodic::AutocleanInterval 0だと自動autoclean無効

unattended-upgradesのpostinstall処理で自動生成されます。

20auto-upgradesと50unattended-upgradesはdpkg-reconfigureコマンドで再生成できます。

$ sudo dpkg-reconfigure --priority=low unattended-upgrades

なお、以下の設定項目は意味を持ちません("origin=Debian,codename=${distro_codename},label=Debian-Security"を別の文字列に置換しようとする設定ですが、置換前の文字列が現在の50unattended-upgradesに存在しない)。

Origins-Pattern that packages must match to be upgraded:
"origin=Debian,codename=${distro_codename},label=Debian-Security"

5.1 GUIから/etc/apt/apt.conf.d/20auto-upgradesを設定

ソフトウェアとアップデートの画面から設定できます。

システム設定 -> ソフトウェアとアップデート -> アップデート

0001_GUI.png

上記の内容だと以下のようになります。

APT::Periodic::Update-Package-Lists "14";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "1";

6 /etc/apt/apt.conf.d/50unattended-upgrades

自動アップグレードの設定ファイルです。アップグレード対象をセキュリティのみに絞ったり、アップグレード後に再起動するかどうか等を設定します。

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};
<snip>
// Automatically reboot *WITHOUT CONFIRMATION*
//  if the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
//  Default: "now"
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
Unattended-Upgrade::Allowed-Origins 自動アップグレード対象
Unattended-Upgrade::Automatic-Reboot 再起動が必要な場合に実行
Unattended-Upgrade::Automatic-Reboot-Time 再起動の時刻

unattended-upgradesのpostinstall処理で自動生成されます。

7 dpkgデータベースのロックを防ぎたい

apt-dailyとapt-daily-upgradeを停止します。

$ sudo systemctl mask apt-daily.service
$ sudo systemctl mask apt-daily.timer
$ sudo systemctl mask apt-daily-upgrade.service
$ sudo systemctl mask apt-daily-upgrade.timer

8 自動アップグレードがあった場合はスケジュールに従って再起動したい

再起動の時刻は/etc/apt/apt.conf.d/50unattended-upgradesのUnattended-Upgrade::Automatic-Rebootをtrueにして、Unattended-Upgrade::Automatic-Reboot-Timeをスケジュールに従った時刻にします。