DebianとUbuntuの無人アップグレードによる自動更新
DebianとUbuntuの無人アップグレードによる自動更新
このページで
- 忙しい管理者のための簡単な方法
- ドキュメントはどこにありますか
高度な構成
- メールを送る
- リポジトリを追加
制御時間
- 自動再起動
Linuxのリリースは頻繁に更新され、セキュリティアップデートは速やかにインストールする必要があります。DebianとUbuntuはAPTシステムを使用しており、保留中のすべてのアップデートを手動でインストールするのは比較的簡単ですが、管理者がそれを忘れてしまったり、アップデートを確認する代わりに夜に眠ることを好む場合があります。この記事は主にサーバーインストール向けです。
unattended-upgradesを使用している場合でも、apt upgradeを使用して手動でパッケージを更新およびインストールすることは依然として可能です。unattended-upgradesによって開始されたアップグレードが、コマンドラインからaptが使用されているときに実行中である場合、aptシステムはユーザーに既に操作が進行中であることを通知し、ユーザーはaptコマンドを発行する前にその操作が完了するのを待たなければなりません。
忙しい管理者のための簡単な方法
unattended-upgradesをインストールし、それが有効になっているか確認し、ログファイルからその動作を監視します。
apt install unattended-upgradesdpkg-reconfigure -plow unattended-upgrades
dpkg-reconfigure コマンドは、自動的に安定したセキュリティ更新をダウンロードしてインストールするかどうかのダイアログボックスを表示します。はいと答えられているか確認してください。
unattended-upgradesは、ランダムな時間に1日2回更新をチェックし、安定したセキュリティアップデートをインストールします。
ディレクトリ /var/log/unattended-upgrades/ にあるログファイルやファイル /var/log/dpkg.log を読み取ることで、何が起こっているかを監視してください。
ドキュメントはどこにありますか?
/etc/apt/apt.conf.d/50unattended-upgrades の設定ファイルにはコメントにドキュメントがあります。この文書は今後、そのファイルを 50unattended-upgrades と呼びます。
READMEファイル/usr/share/doc/unattended-upgrades/README.md.gzには有用な指示があります。コマンドzless(パッケージgzipから入手可能)を使って読むことができます。この文書では今後、そのファイルをREADMEと呼びます。
Debianウィキには、https://wiki.debian.org/UnattendedUpgradesというページがあります。
Ubuntuサーバードキュメントページには、無人アップグレードに関する「自動更新」という章があります。
無人アップグレードのマニュアルページ、man unattended-upgrade.
高度な構成
簡単な方法を使うと、すべてのアップグレードが自動的にインストールされるわけではないことに気付くでしょう。また、アップデートをインストールすることに加えて、自動で何が起こるのかについてもより多くの制御を望むかもしれません。
/etc/apt/apt.conf.d/50unattended-upgradesの設定ファイルには、コメントにドキュメントが含まれているため、ファイルを読んで利用可能な設定を確認してください。非常に便利なのは、何かが発生したときに自動アップグレードがメールを送信するように設定することです。
無人アップグレードパッケージのインストールまたはアップグレードによって構成ファイルが作成されることを知っておくことが重要です。したがって、無人アップグレード自体がアップグレードされる場合や、次のOSバージョンに進む際に、このファイルに加えた編集が手動で解決する必要がある競合を引き起こすことになります。ドキュメンテーションファイルのREADMEでは、元の構成ファイルを変更する代わりに52unattended-upgrades-localファイルを作成することをお勧めしています。
もしよければ、/etc/apt/apt.conf.d/20auto-upgradesというファイルを確認して、これらの行が含まれているか見てみてください:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";dpkg-reconfigureコマンドを実行して「はい」と答えた場合、その行はそこにあるはずです。それらの行は無人アップグレードを有効にすることを制御します。
メールを送る
仕事にメールを送信するためには、ホストにメールを送信できる動作するメールシステムが必要です。まずそれを確認してください。
未監視のアップグレードからの電子メール送信を有効にするには、設定ファイル52unattended-upgrades-localを編集します(/etc/apt/apt.conf/ディレクトリに存在しない場合はファイルを作成します)。次の行をコピーします。
//Unattended-Upgrade::Mail "";50unattended-upgradesからコメントを外し、"-引用符の間にターゲットのメールアドレスを追加してください。
未監視のアップグレードがアップグレードを行う際に、常にメールが送信されるか、エラー時のみ送信されるかを設定するオプションもあります。
// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "false";設定を変更したい場合は、52unattended-upgrades-localに行をコピーし、設定行のコメントを外して「false」を「true」に変更してください。
確認中です
unattended-upgrade --dry-run -d設定ファイルを修正した後は良い考えです。
少なくともDebian 10、11、およびUbuntu 22.04では、unattended-upgradesのインストールにより、ディレクトリ/usr/bin/および/または/bin/にunattended-upgradesというシンボリックリンクが作成されるため、両方のコマンドは同じように機能します。
ls -lhi /bin/unattended-upgrade*
11404505 -rwxr-xr-x 1 root root 98K tammi 15 2022 /bin/unattended-upgrade
11407087 lrwxrwxrwx 1 root root 18 tammi 15 2022 /bin/unattended-upgrades -> unattended-upgradeリポジトリを追加
自動的に更新するためのリポジトリを追加するには、Unattended-Upgrade::Origins-Pattern に行を追加します。これに関するドキュメントは設定ファイルにあります。
READMEには、後の設定ファイル52unattended-upgrades-localでデフォルト設定を上書きするよう指示されています。私は試してみたところ、Unattended-Upgfade::Origins-Patternの設定はデフォルトファイルで設定されたものを完全に上書きするのではなく、デフォルトに追加されることが分かりました。したがって、完全なデフォルトのUnattended-Upgrade::Origins-Patternをコピーする必要はなく、それに追加することができます。
例えば、パッケージgoaccessは、Official GoAccess Repositoryからインストールされた場合、自動的にアップグレードされません。通常のDebianリポジトリからインストールされた場合は、自動的にアップグレードされます(両方から利用できます)。Origins-PatternにGoAccessリポジトリを追加すると、unattended-upgradesがアップグレードを行うようになります。
適切なリスト --upgradable: で状況を確認してください。
root@posti:~# LANG=C apt list --upgradable
Listing... Done
goaccess/unknown 2:1.6.3-buster amd64 [upgradable from: 2:1.6.2-buster]
php-tcpdf/buster-backports 6.5.0+dfsg1-1~bpo10+1 all [upgradable from: 6.3.5+dfsg1-1~bpo10+1]
root@posti:~#自動アップグレードによってアップグレードされなかった2つのパッケージがあります。goaccessを調べると、GoAccess公式リポジトリからのもので、通常のDebianリポジトリからの古いバージョンもあることがわかります。
root@posti:~# LANG=C apt policy goaccess
goaccess:
Installed: 2:1.6.2-buster
Candidate: 2:1.6.3-buster
Version table:
2:1.6.3-buster 500
500 https://deb.goaccess.io buster/main amd64 Packages
*** 2:1.6.2-buster 100
100 /var/lib/dpkg/status
1:1.2-4+b10 500
500 http://mirror.hetzner.de/debian/packages buster/main amd64 Packages
500 http://deb.debian.org/debian buster/main amd64 Packages
root@posti:~#無観客のアップグレードを実行すると、インストールされていないパッケージの起源が表示されます。これにより、Origins-Patternに追加する必要があるものを特定するのに役立つかもしれません。
無人アップグレードの最新実行からのログを調査すると、自動的にアップグレードする際に考慮されるオリジンがわかります:
2022-09-05 08:28:08,955 INFO Checking if system is running on battery is skipped. Please install
powermgmt-base package to check power status and skip installing updates when the system
is running on battery.
2022-09-05 08:28:08,960 INFO Initial blacklist :
2022-09-05 08:28:08,960 INFO Initial whitelist:
2022-09-05 08:28:08,960 INFO Starting unattended upgrades script
2022-09-05 08:28:08,960 INFO Allowed origins are:
origin=Debian,codename=buster,label=Debian,
origin=Debian,codename=buster,label=Debian-SecurityGoAccess リポジトリはまだ存在しないので、今はそれを /etc/apt/apt.conf.d/52unattended-upgrades-local に追加します。
ちなみに、ノートパソコンにunattended-upgradesをインストールしている場合は、powermgmt-baseのインストールを検討してください。このunattended-upgradesはバッテリー電源で動作しているときにアップグレードを開始しないため、ログにある情報メッセージが示す通りです。常に電力供給があるサーバーで動作している場合は、設定にUnattended-Upgrade::OnlyOnACPower "false";を追加することで、その情報メッセージは表示されなくなります。
Unattended-Upgrade::Origins-Pattern {
// Taleman added GoAccess 2022-09-05
"o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
};
Unattended-Upgrade::OnlyOnACPower "false";apt policyはGoAccessのためにフィールドaを表示しなかったので、o、n、lを使用しました。これらのフィールドに関する情報はREADMEで確認してください。
変数の置換は、lsb_release -iの出力を含む$ {distro_id}およびlsb_release -cの出力を含む$ {distro_codename}に対してサポートされています。したがって、n=busterの代わりにn=$ {distro_codename}と書くことができました。
自動的にアップグレードされなかったパッケージが2つあり、まだアップグレードされていないもう1つはphp-tcpdfです。もちろん、apt upgradeを使用してアップグレードできますが、unattended-upgradesに追加して自動的にアップグレードされるようにすることもできます。この手順は、goaccessと同じです。
最初に、適切なポリシーphp-tcpdfを使って状況を調べてください。これにより、それがDebianリポジトリのbuster-backportsセクションからインストールされていることがわかります。
unattended-upgrades.logから、buster-backportsが許可されたオリジンの中にないことがわかります。それは50unattended-upgradesファイルにありますが、コメントアウトされています。有効にするには、その行をコピーしてください。
// "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";Origins-Pattern設定内の52unattended-upgrades-localに行き、コメントを解除します。
ファイルを編集した後、unattended-upgrades --dry-run -d で追加されたリポジトリが「許可されたオリジン」の中にあり、php-tcpd がアップグレードされるパッケージの中にあるかを確認してください。
制御時間
無人アップグレードは、リポジトリサーバーの負荷を軽減するためにランダムな時間に実行されます。これは、すべてのホストが同時にアップデートを開始した場合に発生する大きな負荷のスパイクを避けるためです。この動作を変更することを決定する場合は、慎重に考えてください。独自のリポジトリやミラーリポジトリを運営している場合、負荷のスパイクがリポジトリサーバーに影響を与え、インターネット上のリポジトリの管理者を悩ませることを避けることができます。
無人アップグレードが開始される時間を制御するのはsystemdです。ファイル/lib/systemd/system/apt-daily.timerには、12時間のランダムな遅延で1日2回aptのダウンロード作業を開始するタイマーセクションがあります。これを変更しないことをお勧めします、または変更するための非常に良い理由がある場合のみ変更してください。
残りの時間の設定は、50unattended-upgradesおよび52unattended-upgrades-localファイルで行われます。
設定 Unattended-Upgrade::Update-Days は、無人アップグレードが実行される曜日を制御します。デフォルトは空で、これは毎日実行することを意味します。例えば、土曜日と日曜日のみに実行するように設定することもできます。
自動再起動
自動アップグレードは、インストールされた更新が再起動を必要とする場合に再起動するように設定できます。これを即座に行うか、希望の時間に行うように設定できます。これらの設定は、設定を使用します。
//Unattended-Upgrade::Automatic-Reboot "false";
//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
デフォルトでは、自動再起動はありません。設定を「true」に変更すると、アップグレードがインストールされるとすぐに再起動が行われます。自動再起動時間は、再起動が必要なインストールされた更新がある場合に、希望する時間に再起動するように設定できます。
ブラックリスト、ホワイトリスト
ブラックリストは、無人アップグレードによってアップグレードされるはずのパッケージがアップグレードされないようにします。設定のPackage-Blacklistには正規表現が含まれています。パッケージ名が一致する場合、自動アップグレードから除外されます。
この機能は使用したことがありませんが、重要なパッケージの自動アップグレードを防ぐことが意味を持つ開発リリースを実行している場合、より役立つかもしれません。50unattended-upgradesの設定ファイルには、ブラックリストに登録されたパッケージの例が記載されています。
READMEにはパッケージホワイトリスト設定について説明されています。説明には「このリストの正規表現に一致するパッケージのみがアップグレードの対象としてマークされます。」と記載されています。ホワイトリストを設定するのが望ましい具体例は示されていません。私の実験からは、ホワイトリストにパッケージを追加することで、そのパッケージのみが自動的にアップグレードされ、それ以外のパッケージはアップグレードされないようです。
結論
これで、未監視のアップグレードが何をできるか、そして自分の望むようにそれを実行する方法がわかりました。
自動アップグレードが、apt upgradeコマンドがパッケージを保持しているためにアップグレードを実行しない場合があります。これは、アップグレード時にパッケージを削除したり、以前にアンインストールされたパッケージをインストールしたりする場合に発生します。アップグレードを実行するには、apt full-upgradeコマンドを使用して自分で行う必要があります。このコマンドは、パッケージを削除したり、新しく以前にアンインストールされたパッケージをインストールしたりすることができます。自動アップグレードがメール送信に設定されている場合、そのメールには次の行が含まれます。
Packages with upgradable origin but kept back:私のホストの一つからの52unattended-upgrades-localの最終例:
Unattended-Upgrade::Origins-Pattern {
// Taleman added 2022-09-05
"o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
"o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
"origin=deb.sury.org,archive=${distro_codename}";
};
Unattended-Upgrade::Mail "[email ";
Unattended-Upgrade::OnlyOnACPower "false";