smb server (ksmbd)

点击这里查看配套的教学视频

点击跳转到smb课程所有目录

1 参考资料

2 现状

3 环境

Linux内核打开配置CONFIG_SMB_SERVER

安装用户态软件:

apt install -y git gcc pkgconf autoconf automake libtool make meson ninja-build gawk libnl-3-dev libnl-genl-3-dev libglib2.0-dev
dnf install -y git gcc pkgconf autoconf automake libtool make meson ninja-build gawk libnl3-devel glib2-devel
git clone https://github.com/cifsd-team/ksmbd-tools.git
cd ksmbd-tools
./autogen.sh
./configure --with-rundir=/run # --prefix=/usr/local/sbin --sysconfdir=/usr/local/etc
make
sudo make install 

可更改ksmbd-tools/tools/tools.c文件里的日志等级:

--- a/tools/tools.c
+++ b/tools/tools.c
@@ -24,7 +24,7 @@
 #include "management/spnego.h"
 #include "version.h"

-int log_level = PR_INFO;
+int log_level = PR_DEBUG;
 int ksmbd_health_status;
 tool_main_fn *tool_main;

安装的二进制文件为/usr/local/sbin/ksmbd.*,配置文件例子/usr/local/etc/ksmbd/ksmbd.conf.example

以上是使用autotools编译,如果要使用meson编译,查看ksmbd-tools README

用户操作:

mkdir -vp /tmp/s_test
# 生成 ksmbd.conf
sudo ksmbd.addshare --add \
                    --option "path = /tmp/s_test" \
                    --option 'read only = no' \
                    TEST
sudo ksmbd.addshare --update TEST # 填写其他信息
sudo ksmbd.adduser --add root
sudo ksmbd.adduser --delete root # 删除用户

配置文件/usr/local/etc/ksmbd/ksmbd.conf的一个例子如下:

[global]
        writeable = yes
        public = yes

[TEST]
        comment = xfstests test dir
        ; 注意路径后面不要有空格,我被路径后的空格坑过
        path = /tmp/s_test

执行脚本ksmbd-svr-setup.sh启动内核的ksmbd server。

sudo ksmbd.control --shutdown # 关闭
sudo ksmbd.mountd # 启动,不会自动加载ksmbd.ko
sudo systemctl start ksmbd.service # 会自动加载ksmbd.ko
journalctl -u ksmbd -b # 查看服务的日志
journalctl -u ksmbd -b --no-pager > log.txt # 查看服务的日志,重定向到文件
# rm -rf /var/log/journal/* # 日志太多可以清空
sudo mount -o user=root //127.0.0.1/TEST /mnt