概要
この記事では、Linux システムで apt
の自動アップデートの仕組みについて解説し、自動アップデートを設定、またはすでに有効になっている自動アップデートを停止する方法について説明します。
手順
1. unattended-upgrades
パッケージのインストール
まず、自動アップデートを管理するためのパッケージ unattended-upgrades
をインストールします。
sudo apt update
sudo apt install unattended-upgrades
2. 自動アップデートを有効化
unattended-upgrades
パッケージのインストールが完了したら、自動アップデートを有効にする必要があります。
dpkg-reconfigure
コマンドを使用して設定を行います。
sudo dpkg-reconfigure unattended-upgrades
このコマンドを実行すると、対話形式の設定画面が表示されるので、「yes」を選択して自動アップデートを有効にします。
自動アップデートの対象パッケージを設定
自動アップデートの対象パッケージを設定するには、/etc/apt/apt.conf.d/50unattended-upgrades
を編集します。
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
まず、レポジトリリストを確認します。
$ apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 https://deb.nodesource.com/node_18.x focal/main amd64 Packages
release o=Node Source,n=focal,l=Node Source,c=main,b=amd64
origin deb.nodesource.com
500 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 Packages
release o=NVIDIA,l=NVIDIA CUDA,c=
origin developer.download.nvidia.com
500 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages
release v=20.04,o=Ubuntu,a=focal-security,n=focal,l=Ubuntu,c=multiverse,b=amd64
origin security.ubuntu.com
Unattended-Upgrade::Origins-Pattern で指定する
Unattended-Upgrade::Origins-Pattern {
# origin が Google, Inc.、suite が contrib のパッケージ
"origin=Google\, Inc.,suite=contrib";
# www.example.com から取得され、component が main のパッケージ
"site=www.example.com,component=main";
};
Unattended-Upgrade::Allowed-Origins で指定する
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
distro_id
および distro_codename
はそれぞれ以下に置換されます。
$ lsb_release -i;lsb_release -c
Distributor ID: Ubuntu
Codename: focal
- distro_id: ディストリビューションの名前 (例:
Ubuntu
) - distro_codename: ディストリビューションのコードネーム (例:
focal
)
例えば、"${distro_id}:${distro_codename}-security"
の場合、apt-cache policy
で確認したリストのうち、
o=Ubuntu,a=facal-security
のレポジトリのパッケージが更新対象となります。
Unattended-Upgrade::Package-Blacklist で指定する
特定のパッケージを対象外としたい場合、Unattended-Upgrade::Package-Blacklist
で指定します。
Python の正規表現が使用できます。
Unattended-Upgrade::Package-Blacklist {
// linux- から始まるすべてのパッケージ
// "linux-";
// 末尾が "libc6" のすべてのパッケージ
// "libc6$";
// 特殊文字はエスケープが必要です (例: libstdc++6)
// "libstdc\+\+6$";
};
実際に動作させる前に設定の挙動を確認したい場合は以下のコマンドを実行します。
sudo unattended-upgrade --debug --dry-run
自動アップデートのスケジュールを設定
自動アップデートのスケジュールを設定するには、/etc/apt/apt.conf.d/20auto-upgrades
ファイルを編集します。
sudo vim /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
- APT::Periodic::Update-Package-Lists: パッケージリストを更新する間隔 (日)
- APT::Periodic::Unattended-Upgrade: パッケージを更新する間隔 (日)
上記の設定では、毎日パッケージリストおよびパッケージを更新します。
apt
の自動更新を無効にする
/etc/apt/apt.conf.d/20auto-upgrades
の更新間隔を 0 に設定すると、自動更新が無効になります。
sudo vim /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
その他の設定
/etc/apt/apt.conf.d/50unattended-upgrades
で設定可能な上記以外の設定について記載します。
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
// このオプションは、Ubuntu の開発リリースが自動的にアップグレードされるかどうかを制御します。
// 有効な値は "true"、"false"、および "auto" です。
Unattended-Upgrade::DevRelease "auto";
// このオプションは、dpkgが不正終了した場合に自動的に
// `dpkg --force-confold --configure -a` を実行するかどうかを制御します。
// デフォルト: "true"
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
// アップグレードを可能な限り小さなチャンクに分割することで、SIGTERM で中断できるようにします。
// これにより、アップデート中にシャットダウンが行えるようになります。
Unattended-Upgrade::MinimalSteps "true";
// マシンをシャットダウンする際にすべてのアップデートをインストールするかどうかを指定します。
// "false" に設定すると、マシンの動作中にインストールを実行します。
Unattended-Upgrade::InstallOnShutdown "false";
// 問題やパッケージのアップグレードに関してこのアドレスにメールを送信します。
// 空または未設定の場合、メールは送信されません。
// mailx パッケージがインストールされている必要があります。
Unattended-Upgrade::Mail "";
// メールを通知する条件を設定します。
// "always": 常にメールを送信します。
// "only-on-error": エラーが発生した場合のみメールを送信します。
// "on-change": パッケージが変更された場合のみメールを送信します。
Unattended-Upgrade::MailReport "on-change";
// 自動的にインストールされたカーネル関連の不要なパッケージを削除します。
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
// アップグレード後に不要になった依存関係を自動的に削除します。
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
// アップグレード後に不要になったパッケージを自動的に削除します。(apt-get autoremoveと同等)
Unattended-Upgrade::Remove-Unused-Dependencies "false";
// アップグレード後に /var/run/reboot-required ファイルが見つかった場合、確認なしで自動的に再起動します。
Unattended-Upgrade::Automatic-Reboot "false";
// Unattended-Upgrade::Automatic-Reboot が true に設定されている場合、// ユーザーが現在ログインしている状態でも自動的に再起動します。
Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
// 自動再起動が有効で必要な場合、特定の時間に再起動します。
// デフォルト: "now"
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
// apt の帯域制限機能を使用します。この例では、ダウンロード速度を 70kbps に制限します。
Acquire::http::Dl-Limit "70";
// syslog へのログ記録を有効にします。
// デフォルト: "false"
Unattended-Upgrade::SyslogEnable "false";
// syslog のファシリティを指定します。
// デフォルト: "daemon"
Unattended-Upgrade::SyslogFacility "daemon";
// AC 電源時のみアップグレードをダウンロードおよびインストールします。
// つまり、バッテリー使用時にはアップデートをスキップまたは停止します。
Unattended-Upgrade::OnlyOnACPower "true";
// 従量課金接続時にはアップグレードをダウンロードおよびインストールしません。Unattended-Upgrade::Skip-Updates-On-Metered-Connections "true";
// 詳細なログを記録します。
Unattended-Upgrade::Verbose "false";
// unattended-upgrades および unattended-upgrade-shutdown の両方でデバッグ情報を表示します。
Unattended-Upgrade::Debug "false";
// Pin-Priority が 1000 を超える場合、パッケージのダウングレードを許可します。
Unattended-Upgrade::Allow-downgrade "false";
ログの確認
自動アップデートの結果を確認するために、/var/log/unattended-upgrades/
ディレクトリのログを確認します。
sudo cat /var/log/unattended-upgrades/*.log
コメント