今回はSMBサーバーの別実装、KSMBDを紹介します。
SambaとKSMBD
UbuntuでSMB(Server Message Block)サーバーを仕立てる場合は、通常はSambaを使用します。なんならUbuntu誕生前からそうです。
SMBはMicrosoftが策定しているプロトコルで、仕様書が公開されています。したがって、Sambaのような実装の開発が可能となります。
ご存知のとおりSambaは大きくsmbdとnmbdから構成されており、smbdはシングルスレッドで動作しています。また、ユーザースペースで動作するデーモンであり、SMBの仕様書にある内容をすべて実装するのが困難です。
そんな中登場したのがKSMBDです。こちらはカーネルスペースで動作しており、Sambaが抱えるいくつかの問題を解決します。そのうちの1つはマルチスレッド化による高速化です。ただしSambaを置き換えることを目標に開発されているわけではありません。
KSMBDはUbuntu 22.04 LTSで採用されたカーネルのバージョンである5.15からメインラインにマージされました。その後カーネル6.6で安定版とされました。24.04 LTSのカーネルは6.8以降なので、KSMBDを使用するにはちょうどいいタイミングです。なお、少なくとも24.04 LTSではKSMBDはカーネルモジュールとしてビルドされています。
KSMBDを動作させるには、ユーザースペースで動作するユーティリティであるksmbd-toolsも必要です。カーネルモジュールについては特に気にする必要はなく、使用するのはもっぱらこちらです。
動作環境
前述のとおり、カーネル6.6から安定版とされたことにより、使用するUbuntuのバージョンは24.04.2 LTSです。カーネルのバージョンは6.11で、ksmbd-toolsのバージョンは3.5.1です。
なお、特徴上Sambaとは同居できず排他利用です。したがって、Sambaが動作していない24.04 LTSを用意するのがおすすめです。
インストールと初期設定
では進めていきましょう。まずインストールですが、前述のとおりksmbd-toolsが対象です。
$ sudo apt install ksmbd-tools
次に設定ファイルを編集します。Sambaだと/etc/samba/smb.confですが、KSMBDでは/etc/ksmbd/ksmbd.confです。ただしデフォルトでは存在せず、/etc/ksmbd/ksmbd.conf.exampleがあるので、これをコピーします。
$ sudo cp /etc/ksmbd/ksmbd.conf.example /etc/ksmbd/ksmbd.conf
あとはksmbd.confを編集していきます。
ksmbd.confは、中身を見るとわかるのですが、smb.confと書式が似ています。
もちろん違いもあって、SambaとKSMBDでは機能が違うので[global]セクションの項目には違いがあります。また、変数は使用できません。具体的には、smb.confでは%hはホスト名を表す変数ですが、ksmbd.confにはこの機能はありません。したがってnetbios nameはデフォルトではKSMBD SERVERですが、ここはホスト名に変えておくといいでしょう。
共有設定に関しては、よほど凝ったことをしていなければそのままコピー&ペーストすると動きます。
Sambaにはsmb.confの設定を確認するtestparmコマンドがありますが、KSMBDにはこれに類するものはありません。
設定を書き換えたら、適用します。
$ sudo systemctl restart ksmbd.service
エラーが出なければ成功です。
Windowsはデフォルトの設定だとユーザーアカウントなしでのログインはできないため、ログインユーザーを作成します。
$ sudo ksmbd.adduser –add $USER
名前解決
これで共有フォルダーとしては使用できるようになりましたが、Ubuntuの「ファイル」やWindowsのエクスプローラーなどからは共有フォルダーとしては見えません。Sambaにあるnmbdに相当するものがKSMBDにはないため、他の方法を用意します。
avahi
Ubuntuで見えるようにするためには、Avahiに設定を追加します。Ubuntu Serverにはインストールされないので、avahi-daemonパッケージをインストールしてください。そして/etc/avahi/services/smb.serviceを次の内容で作成します。
WACOCA: People, Life, Style.