最近は、ピーターズで使うシステムのOSはUbuntu1択なのですが、これに揃える前に導入したものは、RaspbianやらArmbianといったSBC専用に作られた変わり種OSを使っていました。RaspbianはRaspberry Pi専用のOSという事で信頼して使っていたのですが、DebianベースのためUbuntuと比べると更新などが扱いづらい点を感じ、Ubuntu公式からRaspberry Pi用のイメージが提供されている事から、Ubuntuを使用していく方針に切り替えました。一時期Armbianを利用した理由は、Raspberry Piより安価で高性能なOrange PiやNano Piなどの中華PCで利用できるOSのうちで、唯一、公式サイトからダウンロードできるOSだったためです。しかし、Kubernetesサーバー用としての導入だったため、実際に使用してみてエラーが多発し上手く動かなかったため、サービスインすることなく引退となりました。という経緯もあり、現在はほぼUbuntuに統一しましたが、1つだけUbuntuではインストールできなかったシステムがあります。それが今回の、ファイルサーバーにしているRaspbianです。
Ubuntuでは、カーネル更新が出ると、コンソール画面上に案内や使用すべきコマンドが表示され、直感的に使用しやすいイメージです。また、unattended-upgrades
により定期的に発生するパッチ更新もバックグラウンドで自動で行われる様になりました。といった感じで、Ubuntuのシステムはほぼ最新に更新できているのですが、DebianのRaspbianはapt upgrade
以外の更新は2年以上塩漬け状態でした。さすがに次のカーネルが出る頃が近づいており、SambaやNFSなど重要なデータを格納するサーバーなので、更新してみる事にします。
実際にbullseyeからbookwormへカーネル更新の作業を行いましょう
更新作業を行うにあたり、こちらのDebian公式のカーネル更新手順を参照しました。バックアップは適時行うとして、それ以外は、各パッケージをapt upgrade
で最新にしてから、リポジトリの参照先をbullseye
からbookworm
に変更するだけです。再びapt upgrade
を行う事で、カーネルも含めて更新されるそうですが、一気に行うと不具合がある様なので、2回に分けて行うとよいそうです。
現状の確認
まずは、以下のコマンドで現状のカーネルを確認しましょう。
cat /etc/os-release
「bullseye」を使用している場合は、「PRETTY_NAME=”Debian GNU/Linux 11 (bullseye)”」と表示されていると思います。「bullseye」以外が表記されている場合は、手順が違い以下の方法では正しく更新できませんのでご注意ください。
リポジトリの変更
apt update
などの更新コマンドでは、設定されているリポジトリを読みに行き、更新の有無を確認しています。この読み込み先リポジトリは、カーネルごとに分けられており、これを切り替える事で更新対象のファイルが配信されます。まずは、以下のファイルを編集します。
sudo vi /etc/apt/sources.list
私のRaspbianの場合は、以下の表記がありました。導入した時期やバージョンにより異なりますので、お使いの環境に合わせた修正を行ってください。
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
# Uncomment deb-src lines below then 'apt-get update' to enable 'apt-get source'
# deb-src http://deb.debian.org/debian bullseye main contrib non-free
# deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
引数などに含まれる「bullseye」を全て「bookworm」に書き換えて上書き保存します。「#」から始まる行はコメント行ですので、修正しなくても大丈夫ですが、後に混乱しない様に修正しておいた方がよいかと思います。
viエディターの詳しい使用方法は、別途調べてくださいね。「x」キーで1文字削除、「i」キーで入力モード、「Esc」キーで入力モード終了、「:w」で保存、「:q」でviエディター終了です。
追加のリポジトリも同様に修正します。対象ファイルは、以下のコマンドで確認してください。これらのファイルは、入れたアプリなどにより設定されています。ファイルが無かった場合は、この部分はスキップして大丈夫です。
ls /etc/apt/sources.list.d/
見つかったファイルをそれぞれviエディターで開き、「bullseye」の記載の部分を全て「bookworm」に書き換えます。ファイルによっては、「bullseye」の記載が全くないものもありますが、これは修正不要で大丈夫です。
更新を行っていきましょう
リポジトリの切り替えが済んだら、早速カーネルを含んだ更新を行っていきます。
その前に、まず躓くと思われる必要パッケージを導入しておきましょう。これは、bookwormから配信されるパッケージの圧縮形式が変更になっている様で、入っていない場合はアップグレード中にエラーで止まってしまいます。私の場合は入っていなかったので、作業途中でエラー終了してしまいました。
sudo apt install zstd
システムの最小アップグレードから行っていきます。2回に分ける必要はない様ですが、トラブルが発生した場合は、切り分けや原因究明が比較的用意になります。
sudo apt upgrade --without-new-pkgs
途中でパッケージのリリースノートが出た場合は読んだ後に「q」キーを押して続行します。デフォルトから変更されている設定ファイル類が更新対象になっている場合は、上書きするかスキップするかを聞かれますので、必要な対応を取ってください。
問題なく最小アップグレードが完了した場合は、主要システムのアップグレードを行います。
sudo apt full-upgrade
先ほどと同様に、途中でパッケージのリリースノートが出た場合は読んだ後に「q」キーを押して続行します。デフォルトから変更されている設定ファイル類が更新対象になっている場合は、上書きするかスキップするかを聞かれますので、必要な対応を取ってください。
全ての更新作業が完了すると、カーネル更新は完了です。
再起動する前に
SSH接続で作業している場合は、再起動や今のセッションを切断する前にもう1セッション繋げて問題なく接続できるか確認しましょう。理由としては、カーネルが上がることにより、セキュリティー設定が厳しくなり、今まで出来たことが出来なくなるケースが多いためです。
例えば、1年前くらいの更新時に、Ubuntuではデフォルト設定でパスワード認証によるSSH接続が出来なくなりました。この様な設定変更に気づかずにセッションを切断してしまうと、リモートからは一切接続ができない事態になってしまいます。サーバーが目の前にあれば、キーボードを繋げて作業できますが、データセンターや遠隔地にサーバーを置いている場合は、サーバーまで足を運ばなければいけない事態になりますので、必ず確認する習慣にしましょう。
というのも私のケースの場合は、SSH許可グループ名が変わった様で、SSH接続して正しいパスワードを入力しても、Access Deniedの表記にになってログインできない事態に陥りました。Ubuntuの時はパスワードすら聞かれずに拒否されたので、若干状況が違います。
という事が再起動後に発覚したため、サーバーにキーボードとモニターを接続し、原因究明を行いました。Ubuntuの場合は、/etc/ssh/sshd_config
の設定が問題でしたが、今回はこの部分ではありませんでした。
パスワード入力後のAccess Deniedなので、ログに理由が出ていると考え、/var/log/user.log
を確認したところ、none of user's groups are listed in AllowGroups
とのエラーが出ていました。これは、AllowGroupsに指定されたグループに、ログインしようとしたユーザーが所属していないためログイン拒否されたというエラーログです。
AllowGroupsは、/etc/ssh/sshd_config
で設定を行います。新しい設定を確認したところ、AllowGroupsは以下の通りでした。
AllowGroups root ssh
つまり、rootグループまたはsshグループに所属していれば、SSHログインが可能です。という事で私のアカウントを確認してみたところ、_sshグループが付いていました。所属するグループ名は下記コマンドで確認できます。
groups ユーザ名
推測するに、Raspbianでは_sshグループがSSH接続用グループでしたが、Debian公式の設定ではアンダーバーがないsshグループとなったと考えられます。
この対処法としては、以下の3つの対応方法があります。
- AllowGroupsに記載の「ssh」グループをログインユーザーに付与する
- AllowGroupsに既存の「_ssh」グループを追加する
- AllowGroupsではなく、AllowUsersでログインしたいユーザー名を指定する
但し、2や3の対応をした場合、今後のアップデートなどで/etc/ssh/sshd_config
が変更になった場合は、再び同様の作業が必要になります。という事で、なるべく公式の設定に修正する方が賢いため、1の作業を行いました。ちなみに、Raspbianには「ssh」グループは存在しなかった様で、グループ作成、グループの付与という2段階の作業でした。
sudo groupadd ssh
sudo usermod -aG ssh ユーザ名
usermodのオプションの-Gで副グループを指定できますが、aを付けない場合は追加ではなく変更になります。-aGとする事で、既存の所属グループを消すことなく、追加が可能です。SSHのサービスに設定を読み込ませなおして、無事に接続できる様になりました。
sudo service ssh reload
めでたしめでたし。
同じようなトラブルに見舞われた方の参考になれば幸いです。