Ubuntuを含むLinux/
しかしながら常に何か伝えたいことがあるわけではなく、普段どのような情報を表示するかは、システムの設定に依存します。たとえばUbuntuの場合、何も設定しなければシステム情報を表示します。今回はUbuntuのやたらと情報過多なMOTDを整理する方法を紹介しましょう。
MOTDとISSUE
冒頭で述べたように、MOTDはユーザーがログインしたときにメッセージを表示する仕組みです。そこで何を表示するかはシステム管理者のセンスが問われます。一番シンプルなのは
「名言・
ちなみにMOTDとは別のサーバーへのログイン時にユーザーに通知する仕組みとして/etc/
が存在します。これは/etc/
はコンソールログイン時、/etc/
はtelnetなどネットワーク経由のログイン時に使われます。また、ログインプロンプトがないSSHの場合は、/etc/
のBanner
で任意のテキストファイルの内容を出力することが可能です。
さて、UbuntuのMOTDはどうでしょうか。サーバー版のUbuntuをインストールした場合、特に何も設定しなければログイン時に次のようなメッセージが表示されます。
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-67-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sun Mar 19 07:49:43 AM UTC 2023 System load: 0.16015625 Usage of /: 14.3% of 48.91GB Memory usage: 8% Swap usage: 0% Processes: 125 Users logged in: 0 IPv4 address for enp5s0: 10.56.73.122 IPv6 address for enp5s0: fd42:b1c7:99a6:67fb:216:3eff:fefc:a5a0 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s just raised the bar for easy, resilient and secure K8s cluster deployment. https://ubuntu.com/engage/secure-kubernetes-at-the-edge 1 device has a firmware upgrade available. Run `fwupdmgr get-upgrades` for more information. * Introducing Expanded Security Maintenance for Applications. Receive updates to over 25,000 software packages with your Ubuntu Pro subscription. Free for personal use. https://ubuntu.com/pro Expanded Security Maintenance for Applications is not enabled. 2 updates can be applied immediately. To see these additional updates run: apt list --upgradable Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status 1 device has a firmware upgrade available. Run `fwupdmgr get-upgrades` for more information.
いくらなんでも量が多すぎですね。これだけで1500バイトぐらいあります。昔はロードアベレージやストレージの使用量等だけだった記憶があるのですが、いつの間にかあれやこれやと情報が増えていき、最近はいわゆる
UbuntuにおけるMOTDの仕組み
UbuntuのMOTDの仕組みは特殊です。PAMに独自のパッチを当てたりして拡張しています。というわけで順番に見ていきましょう。
PAMを用いたMOTDの更新と表示
まず最初に、Ubuntuはそもそも/etc/
」/run/
」/etc/
/etc/
# Print the message of the day upon successful login. # This includes a dynamically generated part from /run/motd.dynamic # and a static (admin-editable) part from /etc/motd. session optional pam_motd.so motd=/run/motd.dynamic session optional pam_motd.so noupdate
pam_
が2行存在しますね。1行目は/run/
を更新し、それを表示する」/run/
を更新せずに、/etc/
を表示する」
$ grep pam_motd /etc/pam.d/sshd #session optional pam_motd.so motd=/run/motd.dynamic session optional pam_motd.so noupdate $ cat /etc/motd cat: /etc/motd: No such file or directory
この状態でサーバーにSSHログインしてみましょう。
$ ssh サーバーのアドレス 1 device has a firmware upgrade available. Run `fwupdmgr get-upgrades` for more information. Last login: Sun Mar 19 09:38:04 2023 from 10.56.73.1
どうやらまだ、何か表示されてしまうようです。実はpam_
は、/etc/
だけでなく次のような順番でファイルを検索・
/etc/
、motd /run/
、motd /usr/
のうち最初に見つかったファイルlib/ motd /etc/
、motd. d/ /run/
、motd. d/ /usr/
以下のファイル。ただし同じファイル名なら先に見つかったほうだけ使われるlib/ motd. d/
たとえば上記の
$ cat /run/motd.d/85-fwupd 1 device has a firmware upgrade available. Run `fwupdmgr get-upgrades` for more information.
このfwupdmgrコマンドを提供しているfwupdはBIOSなどファームウェアの更新・
このファイルは毎日2回起動するfwupd-refresh.
で実行される、fwupdmgrコマンドにより更新されています。よって単にMOTDメッセージを表示したくないだけであれば、/etc/
以下にあるpam_
すべてコメントアウトすれば大丈夫です。
update-motdによるMOTDの生成
再びUbuntuのMOTD自動生成機能の話に戻ります。これは/etc/
」
00-header
:「Welcome to ...」 の1行を表示 10-help-text
:各種ドキュメントのリンクを表示50-landscape-sysinfo
:ロードアベレージ等のシステム情報の表示50-motd-news
:「https:// motd. 」ubuntu. com の内容を表示 85-fwupd
:/run/
に記録されているfwupdmgrの結果を表示motd. d/ 85-fwupd 88-esm-announce
:/var/
の内容を表示lib/ ubuntu-advantage/ messages/ motd-esm-announce 90-updates-available
:/var/
の内容、主に更新可能なパッケージの数に加えて、Ubuntu Proが提供するESMの宣伝を表示lib/ update-notifier/ updates-available 91-contract-ua-esm-status
:/var/
以下の、主にUbuntu Proの状態を表示lib/ ubuntu-advantage/ messages/ 91-release-upgrade
:rootアカウントなら/usr/
を実行して、より新しいUbuntuのバージョンを表示lib/ ubuntu-release-upgrader/ release-upgrade-motd 92-unattended-upgrades
:/usr/
を実行して、自動アップグレードされなかったパッケージ情報等を表示share/ unattended-upgrades/ update-motd-unattended-upgrades 95-hwe-eol
:/usr/
を実行して、HWEのEOL状態の表示lib/ update-notifier/ update-motd-hwe-eol 97-overlayroot
:ルートファイルシステムがoverlayrootならその情報を表示[1]98-fsck-at-reboot
:/usr/
を実行して、次回再起動時にfsckが行われるかを表示lib/ update-notifier/ update-motd-fsck-at-reboot 98-reboot-required
:/usr/
を実行して、更新を適用するために再起動が必要かどうかを表示lib/ update-notifier/ update-motd-reboot-required
このように列挙すると、ログイン時に毎回表示すべきかどうか疑問に感じるメッセージや、管理者でないユーザーにとってはあまり関係のないメッセージも多く存在します。全部表示しない場合は、pam_
をコメントアウトするだけで良いのですが、上記から取捨選択することも可能です。詳細な手順は後ほど解説します。
systemdのサービスファイルによるMOTDの生成
update-motdは原則として
- aptによるリポジトリ情報の更新や自動アップグレード機能の結果
- 日曜日の午前6時に実行されるupdate-notifier-motd.
timer経由での /usr/
の実行により、より新しいUbuntuのバージョンをlib/ ubuntu-release-upgrader/ release-upgrade-motd /var/
に保存lib/ ubuntu-release-upgrader/ release-upgrade-available - 1日2回実行されるmotd-news.
timer経由での /etc/
の実行により、update-motd. d/ 50-motd-new 「https:// motd. 」ubuntu. com の内容を /var/
に保存cache/ motd-news
ひとつめは次のようなメッセージが表示されます。またUbuntuのバージョンや設定によってはこの前後にUbuntu ProやESMの宣伝項目が含まれます。
2 updates can be applied immediately. To see these additional updates run: apt list --upgradable
ふたつめは、次のリリースが出たときのみ表示される項目です。具体的には次のようなメッセージが表示されます。通常リリースなら次のリリースが出たあとぐらいから、LTSなら次のLTSの最初のポイントリリースが出たあとぐらいに表示されるようになります。
New release '22.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
最後は、実際にURLにアクセスして表示されるメッセージをそのまま保存しているだけです。これもUbuntuやCanonicalの宣伝がメインとなります。
各種MOTDの抑制方法
ここまでで、何がどのように出力されているかを確認したので、ここからはそれぞれ個別のメッセージを抑制する方法を紹介しましょう。
fwupdmgrによるMOTD生成の無効化
最初に、update-motdではない、fwupdmgrによるメッセージを無効化する方法について説明します。fwdupdmgrは/etc/
等でその挙動を変更できます。具体的には次の部分でMOTD生成のオン・
# Update the message of the day (MOTD) on device and metadata changes
UpdateMotd=true
上記の行をUpdateMotd=false
」/run/
を削除すれば、次回ログイン時から表示が行われなくなります。
また、fwupdmgr自体の定期実行をやめるという方法もあります。その場合は、systemctlを使ってタイマーを無効化するだけです。
$ sudo systemctl disable fwupd-refresh.timer $ systemctl list-timers | grep fwupd => 何も表示されないことを確認する
この場合も生成済みの/run/
は削除しておくと良いでしょう。
update-motdの汎用的な無効化方法
update-motdの全体的な無効化は、pam_
をコメントアウトすることです。ただしこの方法だと、/etc/
以下のすべての情報が表示されなくなります。また、/etc/
以下のスクリプトによっては、設定ファイルで表示を抑制できるものも存在します。ただし、すべてがすべて対応しているわけではありません。
そこで今回はもう少し汎用的で、粒度を細かく設定できる方法として、/etc/
以下を編集する方法を紹介しましょう。一番手っ取り早いのは、関連するファイルを削除する方法です。一般的に正しく作られたパッケージを利用しているのであれば、/etc
以下のファイルがパッケージの更新によって上書きされることはありません。
もし、元のファイルを残しておきたいのであれば、拡張子を付けてしまいましょう。Ubuntuのpam_
は、/etc/
以下のスクリプトをrun-parts --lsbsysinit
」--lsbsysinit
」
.dpkg-old
、.dpkg-dist
、.dpkg-new
、.dpkg-tmp
で終わっているファイル名は実行しない- 小文字の英数字のみのファイル名は実行する
(LANANA指定の名前空間) - アンダースコアか小文字の英数字、ピリオドで始まり、小文字の英数字が続くファイル名は実行する
(LSBの名前空間) - 小文字・
大文字の英数字とアンダースコア、ハイフンで構成されるファイル名は実行する (Debianのcronスクリプトの名前空間)
最初の項目はDebianのパッケージ管理システムが設定ファイルの差分を確認した時に自動的に退避するためのファイルです。手動で生成しても良いのですが、将来的な混乱の元なのでやめておきましょう。
ポイントは
$ sudo mv /etc/update-motd.d/10-help-text{,.orig}
これで次回ログイン時から、退避したファイルのメッセージは表示されませんし、必要であればすぐに復活できます。
MOTD用ファイルの生成の無効化
update-motdで無効化したとしても、いくつかのMOTD用の出力ファイルは自動生成を続けます。もともと表示しないのであれば、自動生成も意味がないので無効化したいと思うかもしれません。前述の
まず
残りの項目についてはsystemctlでdisableしてしまえば良いだけです。
$ sudo systemctl disable update-notifier-motd.timer $ sudo rm /var/lib/ubuntu-release-upgrader/release-upgrade-available $ sudo systemctl disable motd-news.timer $ sudo rm /var/cache/motd-news
どちらも単に情報を取得するだけなので、不要なら無効化しておいても問題ないでしょう。
Ubuntu Pro関係のメッセージの無効化
MOTDとは直接は関係ありませんが、2023年のはじめぐらい前からaptコマンドを実行すると、Ubuntu ProやESMの宣伝が入るようになりました。
apt update時にたまに表示されるメッセージ: The following security updates require Ubuntu Pro with 'esm-apps' enabled: imagemagick libopenexr25 libmagick++-6.q16-8 libmagickcore-6.q16-6-extra libmagickwand-6.q16-6 imagemagick-6.q16 libmagickcore-6.q16-6 imagemagick-6-common apt upgradeする時に表示されるメッセージ: # # News about significant security updates, features and services will # appear here to raise awareness and perhaps tease /r/Linux ;) # Use 'pro config set apt_news=false' to hide this and future APT news. #
前者はUbuntu Proのesm-appsを有効化することで利用できる、universeパッケージのセキュリティアップデートを紹介しています。なぜuniverseのセキュリティアップデートがesm-appsで提供されているのかについての詳細はUbuntu Weekly Topicsの2023年1月27日号や2023年2月10日号を参照してください。後者は単なるUbuntu Proの宣伝です。
ただ、通常サポート期間のUbuntuを個人が使う限りにおいて、Ubuntu Proが必要になるケースはあまりありません。もちろんシャットダウンしづらいマシンであればLivepatchは有効ですし、universeパッケージを使っている環境ならesm-appsも有効でしょう。ただパッケージの更新の度に導入を促されるほどでもないはずです。
前者についてはaptコマンド時のフックスクリプト/etc/
)
$ sudo mkdir /etc/apt/apt.conf.d/old $ sudo mv /etc/apt/apt.conf.d/{,old/}20apt-esm-hook.conf $ sudo touch /etc/apt/apt.conf.d/20apt-esm-hook.conf
後者については、メッセージの中に記述があるように、次のコマンドで無効化できます。
$ sudo pro config set apt_news=false
このようにUbuntuには