1 – matoken's blog https://matoken.org/blog Is there no plan B? Tue, 18 Mar 2025 09:49:48 +0000 ja hourly 1 https://wordpress.org/?v=6.9 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg 1 – matoken's blog https://matoken.org/blog 32 32 Debian sidでEncFSが動かなくなった https://matoken.org/blog/2025/03/18/encfs-stopped-working-on-debian-sid/ https://matoken.org/blog/2025/03/18/encfs-stopped-working-on-debian-sid/#respond Tue, 18 Mar 2025 09:42:09 +0000 https://matoken.org/blog/?p=4467

Debian sid amd64環境で暗号化ファイルシステムのEncFSが Segmentation fault を返すようになり動かなくなりました.
One-Time PasswordのTOTP(Time-based One-time Password)の共有シークレットを書いたファイルをEncFSの領域に置いてoathtoolを使ったscriptでOTPを出力しているので困ります.

$ encfs ${HOME}/Nextcloud_matoken@files.matoken.org/Documents/encfs ${HOME}/fuse/encfs
Segmentation fault

とりあえず別の端末では動いたのでそちらでしのぎつつ原因を調べます.

はじめencfsコマンドのタイムスタンプが3/10なので最近の更新で壊れたのかなと思いましたがよく見ると去年の3/10なので関係なさそうです.

$ ls -l `which encfs`
-rwxr-xr-x 1 root root 57184 Mar 10  2024 /usr/bin/encfs

COREを履くようにして,gdbで確認すると /lib/x86_64-linux-gnu/libtinyxml2.so.10 が怪しそうです.

$ ulimit -c unlimited
$ encfs ${HOME}/Nextcloud_matoken@files.matoken.org/Documents/encfs ${HOME}/fuse/encfs
Segmentation fault (コアダンプ)
$ gdb encfs core.2007082
GNU gdb (Debian 16.2-7) 16.2
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from encfs...
(No debugging symbols found in encfs)
[New LWP 2007082]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/bin/encfs /home/matoken/Nextcloud_matoken@files.matoken.org/Documents/encfs /home/matoken/fuse/encfs'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f9f83f536ce in tinyxml2::XMLDocument::Identify(char*, tinyxml2::XMLNode**, bool) () from /lib/x86_64-linux-gnu/libtinyxml2.so.10
(gdb) backtrace
#0  0x00007f9f83f536ce in tinyxml2::XMLDocument::Identify(char*, tinyxml2::XMLNode**, bool) () from /lib/x86_64-linux-gnu/libtinyxml2.so.10
#1  0x00007f9f83f54646 in tinyxml2::XMLNode::ParseDeep(char*, tinyxml2::StrPair*, int*) () from /lib/x86_64-linux-gnu/libtinyxml2.so.10
#2  0x00007f9f83f522e7 in tinyxml2::XMLDocument::Parse(char const*, unsigned long) () from /lib/x86_64-linux-gnu/libtinyxml2.so.10
#3  0x00007f9f84060a1f in encfs::XmlReader::load(char const*) () from /usr/lib/encfs/libencfs.so.1.9
#4  0x00007f9f8404ded6 in encfs::readV6Config(char const*, encfs::EncFSConfig*, encfs::ConfigInfo*) () from /usr/lib/encfs/libencfs.so.1.9
#5  0x00007f9f8404c0d7 in encfs::readConfig_load(encfs::ConfigInfo*, char const*, encfs::EncFSConfig*) () from /usr/lib/encfs/libencfs.so.1.9
#6  0x00007f9f8404c508 in encfs::readConfig(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, encfs::EncFSConfig*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/encfs/libencfs.so.1.9
#7  0x00007f9f8405a459 in encfs::initFS(encfs::EncFS_Context*, std::shared_ptr<encfs::EncFS_Opts> const&) () from /usr/lib/encfs/libencfs.so.1.9
#8  0x000055a7bd21ca92 in main ()

パッケージを確認すると libtinyxml2-10 のようです.

$ apt-file search -x /lib/x86_64-linux-gnu/libtinyxml2.so.10$
libtinyxml2-10: /usr/lib/x86_64-linux-gnu/libtinyxml2.so.10

http://packages.debian.org/libtinyxml2-10 から辿って古いバージョンのパッケージを入手したいと思いましたがこのときは 503 が帰ってきて利用できませんでした.
パッケージリポジトリでディレクトリを辿り https://ftp.debian.org/debian/pool/main/t/tinyxml2/ を見て libtinyxml2-10_10.0.0+dfsg-2+b2_amd64.deb を入手,インストールすることでEncFSが動くようになりました.

$ w3m -dump https://ftp.debian.org/debian/pool/main/t/tinyxml2/ | grep -E libtinyxml2 | grep amd64 | grep -v dev
[ ]         libtinyxml2-6a_7.0.0+dfsg-1_amd64.deb         2018-11-14 18:47  29K
[ ]         libtinyxml2-8_8.0.0+dfsg-2_amd64.deb          2020-05-14 06:28  30K
[ ]         libtinyxml2-9_9.0.0+dfsg-3.1_amd64.deb        2022-05-17 07:13  31K
[ ]         libtinyxml2-10_10.0.0+dfsg-2+b2_amd64.deb     2024-10-29 09:17  30K
[ ]         libtinyxml2-10_10.1.0+dfsg-1_amd64.deb        2025-03-14 06:57  30K
$ wget https://ftp.debian.org/debian/pool/main/t/tinyxml2/libtinyxml2-10_10.0.0+dfsg-2+b2_amd64.deb
$ sudo apt install ./libtinyxml2-10_10.0.0+dfsg-2+b2_amd64.deb

EncFSコマンドも動くようになりました :)

$ encfs ${HOME}/Nextcloud_matoken@files.matoken.org/Documents/encfs ${HOME}/fuse/encfs
EncFS Password:
$ ls ${HOME}/fuse/encfs/
secret-file
$ fusermount -u ${HOME}/fuse/encfs
$ 2auth-cli.sh word
EncFs Password:
matoken.org/blog(wordpress) : 209062

BTSしておこうと思ったら報告済でした.こっちを先に見たほうが解決まで早かったですね.

]]>
https://matoken.org/blog/2025/03/18/encfs-stopped-working-on-debian-sid/feed/ 0
KSMBDでSMB共有 https://matoken.org/blog/2024/12/13/smb-share-with-ksmbd/ https://matoken.org/blog/2024/12/13/smb-share-with-ksmbd/#respond Thu, 12 Dec 2024 15:48:18 +0000 https://matoken.org/blog/?p=4274

AndroidスマートフォンからLinux Boxのファイルにアクセスしたい.AndroidからだとSMBがいいのかな?でも今回に用途にsambaは大袈裟な感じということで久々にKSMBDを設定したメモです.

ホストはRaspberry Pi bookworm armhfとDebian sid amd64で確認しました.
KSMBDはLinux KernelベースのSMBサーバー実装です.Linux kernel 5.11以降に含まれています.

sambaの停止

sambaを動かしている場合停止します.

$ sudo systemctl stop smbd nmbd winbind samba-ad-dc

ksmbd-toolsの導入

KSMBD自体はkernel moduleですが,ユーザランドのksmbd-toolsというツールが別途必要なので導入します.

Debianでは ksmbd-tools というパッケージです.

$ sudo apt install ksmbd-tools
$ dpkg -L ksmbd-tools
/.
/etc
/etc/ksmbd
/etc/ksmbd/ksmbd.conf.example
/usr
/usr/lib
/usr/lib/systemd
/usr/lib/systemd/system
/usr/lib/systemd/system/ksmbd.service
/usr/libexec
/usr/libexec/ksmbd.tools
/usr/sbin
/usr/share
/usr/share/doc
/usr/share/doc/ksmbd-tools
/usr/share/doc/ksmbd-tools/PFIF.txt
/usr/share/doc/ksmbd-tools/README.Debian
/usr/share/doc/ksmbd-tools/README.md.gz
/usr/share/doc/ksmbd-tools/changelog.Debian.gz
/usr/share/doc/ksmbd-tools/copyright
/usr/share/doc/ksmbd-tools/examples
/usr/share/doc/ksmbd-tools/examples/ksmbd.conf.example
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/ksmbd.conf.5.gz
/usr/share/man/man5/ksmbdpwd.db.5.gz
/usr/share/man/man8
/usr/share/man/man8/ksmbd.addshare.8.gz
/usr/share/man/man8/ksmbd.adduser.8.gz
/usr/share/man/man8/ksmbd.control.8.gz
/usr/share/man/man8/ksmbd.mountd.8.gz
/usr/sbin/ksmbd.addshare
/usr/sbin/ksmbd.adduser
/usr/sbin/ksmbd.control
/usr/sbin/ksmbd.mountd

設定ファイルの用意

次に設定ファイルを用意します.

最低限の設定を書いたり.
$ echo '[global]

[share]
  path=/tmp
' | sudo tee /etc/ksmbd/ksmbd.conf
既存のsmb.confを流用したり,
$ sudo cp -p /etc/samba/smbd.conf /etc/ksmbd/ksmbd.conf
ksmbd-toolsに付属のksmbd.conf.exampleをコピーして使ったり,
$ sudo cp -p /etc/ksmbd/ksmbd.conf.example /etc/ksmbd/ksmbd.conf

smb.confとだいたい同じようにかけますが,[homes]のような特殊な共有名や,path = %Hpath = /home/%u のような環境変数はうまく動かない感じです.以下のようなissueがあるので恐らく未実装かなと.

詳細はKSMBD.CONF(5)を.

$ man ksmbd.conf

SMB共有のユーザ,パスワードの設定

ksmbd-tools付属のksmbd.adduserコマンドで共有にアクセスするためのユーザ名とパスワードを設定します.

$ sudo ksmbd.adduser -a <KSMBDアクセス用ユーザ名>

パスワードファイルは /etc/ksmbd/ksmbdpwd.db で, ID:passwordhash のような形式で保存されるようです.

KSMBDモジュールの読み込み

KSMBDモジュールを読み込みます.モジュールがない場合kernel sourceからmenuconfigなどでKSMBDモジュールを有効にします.

$ modinfo ksmbd
filename:       /lib/modules/6.6.64-v7+/kernel/fs/smb/server/ksmbd.ko.xz
softdep:        pre: crc32
softdep:        pre: gcm
softdep:        pre: ccm
softdep:        pre: aead2
softdep:        pre: sha512
softdep:        pre: sha256
softdep:        pre: cmac
softdep:        pre: aes
softdep:        pre: nls
softdep:        pre: md5
softdep:        pre: hmac
softdep:        pre: ecb
license:        GPL
description:    Linux kernel CIFS/SMB SERVER
version:        3.4.2
author:         Namjae Jeon <linkinjeon@kernel.org>
srcversion:     615D8D4CE63537A48C03456
depends:        nls_ucs2_utils,cifs_arc4
intree:         Y
name:           ksmbd
vermagic:       6.6.64-v7+ SMP mod_unload modversions ARMv7 p2v8
$ sudo modprobe -v ksmbd
$ lsmod | grep ksmbd
ksmbd                 249856  1
cifs_arc4              12288  1 ksmbd
nls_ucs2_utils         12288  1 ksmbd

ksmbd.mountdの起動

ユーザー空間用のデーモンを起動します.

$ sudo ksmbd.mountd

共有にアクセス

適当なファイラーや,smbclientなどからアクセス出来るのを確認します.

$ smbclient //192.168.0.23/home
Password for [WORKGROUP\matoken]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Nov 17 06:17:29 2020
  ..                                  D        0  Mon May 20 18:03:24 2024
  nitter                              D        0  Mon Nov 23 23:14:29 2020
  huginn                              D        0  Sat Oct 24 16:03:31 2020
  pi                                  D        0  Mon Aug 12 06:12:17 2024
  matoken                             D        0  Thu Dec 12 22:39:12 2024
  gitea                               D        0  Fri Nov 13 09:43:48 2020

                29948557 blocks of size 4096. 2499637 blocks available

設定の再読込

設定ファイルを編集した場合,設定を反映するために再読込をします.

$ sudo ksmbd.control --reload

KSMBD停止

$ sudo ksmbd.control -s
[ksmbd.control/30908]: INFO: Terminated ksmbd.mountd
[ksmbd.control/30908]: INFO: Killed ksmbd
$ sudo modprobe -r ksmbd

永続化

動いたので次回起動時以降に起動してくるよう永続化します.

sambaの無効化
$ sudo systemctl disable smbd nmbd winbind samba-ad-dc
モジュールの自動読み込み
$ echo ksmbd | sudo tee -a /etc/modules
ksmbdデーモンの自動起動
$ sudo systemctl enable ksmbd

再起動して動作確認.

Androidからのアクセス

まずSMBに対応した動画プレイヤーのVLCで動画再生を試みました.問題なく動作します.

次にPDFを読めるか試そうと思ったのですが,FilesアプリなどではSMBにアクセスできなそうです.F-DroidからCIFS Documents Providerというアプリケションを導入することでSMB内のファイルにアクセスできました.PDFファイルも読めます.しかし一旦ダウンロードしないと読めないようで少し待ち時間が必要でした.探せばストリーミングに対応したアプリはありそうです.

家庭内の個人用ファイルサーバーなんかだとKSMBDが向いているかもしれません.

環境

サーバー1
$ uname -a
Linux raspberrypi 6.6.64-v7+ #1829 SMP Tue Dec 10 20:04:50 GMT 2024 armv7l GNU/Linux
$ apt list ksmbd-tools
Listing... Done
ksmbd-tools/stable,now 3.4.7-1 armhf [installed]
$ lsb_release -dr
No LSB modules are available.
Description:    Raspbian GNU/Linux 12 (bookworm)
Release:        12
$ arch
armv7l
$ grep "^Model" /proc/cpuinfo
Model           : Raspberry Pi 3 Model B Rev 1.2
サーバー2
$ uname -a
Linux tp-l13 6.11.10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.11.10-1 (2024-11-23) x86_64 GNU/Linux
$ apt list ksmbd-tools
ksmbd-tools/unstable,now 3.5.2-3 amd64 [installed]
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
クライアント(Android)
$ adb shell pm list packages --show-versioncode | grep -e vlc -e cifs
package:com.wa2c.android.cifsdocumentsprovider versionCode:29
package:org.videolan.vlc versionCode:13050749
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.product.model
moto g24
]]>
https://matoken.org/blog/2024/12/13/smb-share-with-ksmbd/feed/ 0