Linux:パッケージのアップデート
Linuxログイン時メッセージが私を苦しめるの・・・
事象1:ログインすると「〇件のパッケージがアップデート可能です」が表示されている。
件数が増えてくるとそわそわしちゃいます。
どうしよう、いっそひと思いにアップデートしてsudo rebootしちゃいたい。
そもそも更新したらどんないいことがあるの?デメリットは?更新時に気を付けることは…?
心配し始めたらきりがなくなってきたのと、運用始まってから困ってもいやだなぁ
ということで今のうちに調査しよう!というのが事の発端です。
①「アップデート」の表示タイミング
上記のメッセージが表示されるのは以下のパターン。
- セキュリティアップデート
- バグフィックス・機能強化のためのアップデート
※デフォルトではパッケージの自動アップデート・アップグレードがONになっている
(「セキュリティアップデートは適用したいが、バグフィックスは余計なトラブルを発生させる恐れがあるからやめておきたい。」という判断になりそう…)
■最近インストールした100パッケージを確認する方法
zgrep -h 'status installed' /var/log/dpkg.log* | sort | tail -n 100
※Linuxカーネルに関係するアップデートはlinux-image-
で始まる
参考:
System Restart Required – Automated Linux Kernel Patches
②「アップデート」表示時の対応はどうするか
ぱっと思いつく選択肢は以下だった。
- 無視する セキュリティアップデートの場合脆弱性を抱えたままになる…
- 一部アップデートする(プロセスを個別に再起動)
VM停止時間が発生しないが、どのプロセスを再起動する必要があるのか毎回調査する必要がある。 - 全てアップデートする(reboot)
セッションアフィニティが効かないサービスだとセッション切れが発生する。
③「アップデート」自動化、モニタリング
■security updateのみ自動化
現実的な自動化の一歩目はこのあたりかと考えました。
参考:
Ubuntuでsecurity updateのみ自動的に適用する
Debian 系で unattended-upgrades を有効にする場合の追加設定
事象2:「再起動が必要です」が表示されることがある。
アップデートしたらしたで今度はこちら。
いやいやいや、今この瞬間もこのサーバでアプリ使ってるユーザさんいるんだよね…
そんなこと言われても困りますって…!
④「再起動」が促される理由
ソフトウェアのアップデートでは通常、新しいライブラリが導入される。一方稼働しているプロセスは古いバージョンのライブラリを使用したままであることが多い。
そのプロセスを終了し、改めて開始することによって新しいライブラリを参照するようにする。これにより初めて更新内容が有効化する。
⑤「再起動」警告時の対応方法
再起動のメッセージが出るきっかけは
参考:When is it necessary to reboot an Ubuntu system?
■再起動が必要かを確認
# cat /var/run/reboot-required *** システムの再起動が必要です ***
※不要な場合はファイルそのものがない
■何のパッケージが再起動をリクエストしているのか確認
cat /var/run/reboot-required.pkgs
■再起動が必要なプロセスの調べ方
sudo apt-get install -y debian-goodies sudo checkrestart
init/initd
から起動しているプロセスに関してはinit script
が表示される。
一方、デーモン以外等で起動しているプロセスが使っているライブラリが置き換えられた場合、init scriptが表示されない。
→PID等から対応するプログラムを調べ、再起動する。(え、面倒…)
sudo ls -l /proc/【PID】 sudo cat -v /proc/【PID】/cmdline
再起動
kill -HUP 【PID】
参考:
Linuxのパッケージをアップデートしたあとrestartが必要なプロセスを見つける方法
Good to know checkrestart from debian-goodies
【結論】
以下を決める必要がある。確定ではないが考えを示しておく。
- パッケージの自動更新を許容するか どこまで(セキュリティアップデートのみか、それ以外も含むか)許容するか
「セキュリティアップデートは脆弱性対策のため常に行う。バグフィックス等は既存動作に影響を与える恐れがあるため日常的には行わない。」スタンスかなぁ
- 再起動が求められた場合の対応方法 VMごと再起動するのか、プロセスを指定して個別に再起動するのか
警告の度にプロセスまで詳細調査して対応するのは手間がかかる。再起動するVMがあってもユーザには影響のない構成を徹底する
なんだかゆるふわな結論になってしまった。
私だけで決められる問題ではないことがよく分かったので、これを持って先輩方に相談してみようっと。