ksmbd 소개 #
ksmbd는 리눅스 커널에서 작동하는 SMB 서버이다.
리눅스 커널 5.4부터 지원하고 5.15부터 mainline에 병합되었다.
ksmbd-tools는 사용자 영역에서 작동하는 ksmbd를 관리하는 도구이다.
ksmbd 설치 #
패키지 관리자 사용 #
패키지 관리자를 사용해서 설치하면 커널 모듈과 ksmbd-tools 둘 다 설치해준다. 배포판별 상황은 repology에서 확인할 수 있다.
주의할 점이라면 데비안에서 ksmbd-tools, samba 둘 중 하나만 있을 수 있는지 한쪽을 설치하면 나머지 한쪽이 지워지는 것으로 보인다.
예시
sudo apt install ksmbd-tools # 데비안 계열
sudo apk add ksmbd-tools # Alpine
직접 빌드 #
ksmbd 커널모듈 빌드 #
C 컴파일러와 Make가 필요하고 리눅스 커널 모듈을 빌드하는 것이기 때문에 커널의 헤더파일이 필요한데 데비안의 build-essential, 레드햇의 kernel-devel, kernel headers 같은 배포판별로 있을 커널 헤더 관련 패키지를 설치하면 된다.
소스 다운로드
git clone https://github.com/cifsd-team/ksmbd
빌드, 설치
make
sudo make install
커널 모듈 수동으로 로드
sudo modprobe ksmbd
ksmbd-tools 빌드 #
https://github.com/cifsd-team/ksmbd-tools
빌드 환경 구축 #
문서에는 데비안계열과 레드햇 계열 대포판에서 설치해야할 패키지 이름을 알려준다.
sudo apt install git gcc pkgconf autoconf automake libtool make meson ninja-build gawk libnl-3-dev libnl-genl-3-dev libglib2.0-dev
sudo dnf install git gcc pkgconf autoconf automake libtool make meson ninja-build gawk libnl3-devel glib2-devel
확인해본 결과 rocky(를 비롯한 RHEL을 따라가는 배포판)에서 meson과 ninja-build를 설치하려면 crb 저장소를 추가해야 한다. autotools로 빌드할 것이라면 meson이 필요 없을 것이고 meson으로 빌드하면 autoconf와 automake가 필요 없다.
소스 다운로드 #
git clone https://github.com/cifsd-team/ksmbd-tools.git
또는 https://github.com/cifsd-team/ksmbd-tools/releases 에서 다운로드
디렉토리로 이동
cd ksmbd-tools
빌드와 설치 #
설치 옵션(일부) #
| 설명 | 옵션 | 기본값 |
|---|---|---|
| 설치 위치 | –prefix | /usr/local/sbin |
| 설정 파일 위치 | –sysconfdir | /usr/local/etc |
| run 경로 | –with-rundir또는-Drundir | /run |
| systemd 유닛 경로 | --with-systemdsystemunitdir또는-Dsystemdsystemunitdir |
systemd가 있는 것이 확인되면 설치하면서 자동으로 systemd 서비스를 추가하는 것 같다.
autotools를 사용한 빌드 #
빌드 구성
./autogen.sh
./configure 옵션 # 예시 ./configure --with-rundir=/run
./configure에서 옵션을 붙여주면 된다
빌드,설치
make
sudo make install
meson을 사용한 빌드 #
mkdir build
cd build
meson 옵션 .. # 예시 meson -Drundir=/run ..
meson 명령어 에서 옵션을 붙여주면 된다 여기선 소스 디렉토리에서 바로 빌드가 안되고 별도의 디렉토리(여기선 build)를 만들어줘야 한다. 그리고 meson 명령어에서 소스 디렉토리가 상위 디렉토리라는 것을 알려주는 ..을 반드시 인수로 넣어줘야 한다.
빌드,설치
ninja
sudo ninja install
man page #
man 8 ksmbd.addshare
man 8 ksmbd.adduser
man 8 ksmbd.control
man 8 ksmbd.mountd
man 5 ksmbd.conf
man 5 ksmbdpwd.db