現在、数百台のubuntuサーバをオンプレミスで運用しています。
日々、様々なツールを実行しているため、環境要因による意図しないエラーは起きてほしくはありません
先日、いつものようにSSHでログインした際、以下のメッセージが目に入りました。
*** System restart required ***
どうやら、自動(または手動)更新によってカーネルなどが更新され、再起動待ち状態であることを示しています。 実体としては /var/run/reboot-required というファイルの有無で判定されています。
$ sudo cat /var/run/reboot-required
*** System restart required ***
この時点で、自動更新がオンになっていることに気が付きました。
上司と相談の結果、サービスの安定稼働を優先し、自動更新をオフにする方針となりました。
自動更新を無効化する方法
調査したところ、このような記事を見つけました。
設定は/etc/apt/apt.conf.d/20auto-upgradesに記述してあり、デフォルトでは下記のようになっていることがわかりました。
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
1だと自動更新が有効とのことなので、デフォルトでは有効になっているようですね。
管理者権限で、20auto-upgradeファイルを開き、0に編集することにより、無効化できるそうです。
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
コマンドによる無効化
同記事では、コマンドによる無効化についても説明されていました。
以下のコマンドで、unattended-upgradesのインストール
sudo apt install -y unattended-upgrades
インストール後に、以下のコマンドを実行
sudo dpkg-reconfigure -p low unattended-upgrades
対話画面が表示され、(はい/いいえ)の選択を求められるのでどちらかを選択し、Enterを押下
以下のような出力がされると編集完了とのことです。
Replacing config file /etc/apt/apt.conf.d/20auto-upgrades with new version
どのように無効化するか
無効化する方法自体は正規の手順(dpkg-reconfigure)が存在しますが、我々の現場に適用するには課題がありました。
サーバは、サーバ室に置かれており、基本的にssh接続で操作することになっているので、対話形式での実施は難しいです。
そこで、設定ファイルである/etc/apt/apt.conf.d/20auto-upgradesを直接編集する方法で行くことにしました。
ただ、サーバPCの数も多く、なんとか効率化したいので、sedコマンドでどうにかできないか調べることに。
Geminiに相談すると下記コマンドを提案されました。
sudo sed -i -E 's/"1";/"0";/g' /etc/apt/apt.conf.d/20auto-upgrades
/etc/apt/apt.conf.d/20auto-upgradesファイル内の"1"を"0"に置換するコマンドのようです。
このコマンドであればシェルスクリプトなどで自動化できそうですね。
まとめ
Ubuntuにおいて、自動更新のオンオフは /etc/apt/apt.conf.d/20auto-upgradesで管理されていることがわかりました。
普段動かしているサービスの安定稼働のためには、意図しないタイミングでの更新や再起動は避けたいです。
自動更新はセキュリティ維持にとても良いものでありますが、ときに迷惑となります。
ただ、オフにして終わりではなく、定期的にパッケージなどの更新を実施することは大事です。
将来的にはコンテナ化(Docker等)を進め、OSの更新とアプリケーションの環境を切り離すなど、よりモダンな運用についても検討を進めていきたいと思います。