今回は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.