Debian化玄箱HGにNTFSの読み書きマウント
- すずか
- 2016/09/24 21:54
お世話になっております。
Debian化玄箱HGにNTFSの読み書きマウントにチャレンジしておりますが、
うまくいきません。アドバイスを賜りたくお願いいたします。
1.やりたいこと
玄箱HGにDebian/Squeezeをインストールした環境下で
NTFSの外付けHDDを読み書き可能でマウントしたい
2.うまくいったこと
・http://siruko.com/kuro/debian.html
のとおりに、Debian/Squeezeをインストール。
概要:ブートは、loader.o を使用
カーネルは、2.6.25.1
(コンパイル済みのkernelimage-2.6.25.1-kuroHG.tgz, modules-2.6.25.1-kuroHG.tgzを使用)
sambaのインストールも apt-getにより成功
・ntfs-3gをインストール
# apt-get install ntfs-3g
を実行し、特に問題なし。
3.問題現象
# ntfs-3g -o umask=0,locale=ja_JP.utf8 /dev/sda1 /mnt/samba_share/usb_hdd
を実行したところ、
FATAL: Module fuse not found.
ntfs-3g-mount: fuse device is missing, try 'modprobe fuse' as root
となってしまう。
メッセージどおりに
# modprobe fuse
とやっても、
FATAL: Module fuse not found.
と表示される。
4.推測
いろいろ調べたところ、fuseはapt-getなどでインストールするものではなく、カーネル内もしくは
モジュールとして組み込まれている必要があるが、
適用したカーネルイメージとモジュール(kernelimage-2.6.25.1-kuroHG.tgz, modules-2.6.25.1-kuroHG.tgz)
には、fuseのモジュールが含まれていないと思われる。
<<文字数制限により、以下、コメントにつづく>>
コメント
<<つづきです>>
5.トライしたこと
fuseモジュールだけをコンパイルして組み込むことはできないか、と、
ネット上でソースファイルを探したが、2.6.25.1のソースは見あたらず、2.6.25が入手できた。
(以下、各種ネット情報を参考に、理解できないながらも見様見真似で作業)
.configにおいて、CONFIG_FUSE_FS=m と編集し、
# make oldconfig
# make modules_prepare
# cd /usr/src/linux_tmp/linux-2.6.25/fs/fuse
# make -C /usr/src/linux_tmp/linux-2.6.25 M=`pwd` modules
# make -C /usr/src/linux_tmp/linux-2.6.25 M=`pwd` modules_install
と実行することで、fuse.koを作ることは出来た。
(コンパイル作業をしたディレクトリ配下に、
/usr/src/linux_tmp/linux-2.6.25/fs/fuse/fuse.ko
として出来ている。)
しかし、fuse.koをどのディレクトリに置いてよいか分からない。
兄弟関係にあると思われるfat.koが
/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fat/fat.ko
にあるため、同様に
/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/fuse.ko
として置いてみたが、
# modprobe fuse
→ FATAL: Module fuse not found.
となってしまう。
恐らく、fuseモジュールに「パスを通す」的なことをしないといけないと思われる。
ほとんど理解していない状況ではあるが、
# cd /lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse
# insmod fuse.ko
としてみたところ、
insmod: error inserting 'fuse.ko': -1 Invalid module format
となってしまう。
<<さらにつづく>>
<<さらにつづきです>>
6.教えて頂きたいこと
・作成したfuse.koをモジュールとして有効にするにはどうしたらよいか。
・また、それを起動時に自動的にするには、どうしたらよいか。
・5.でトライしたことがバージョン違いであり動くはずがない、
ということであれば、fuseを有効にするにはどうしたらよいか。
ただ、私の技術力的制約として以下の状況です。①は無理として②③を打開しないといけないのでしょうか?
①シリアルコンソールが必要なやり方は無理。
②ブートに関しては、調べたところ
・loader.oを用いる方法
・u-bootを用いる方法
・FLASH ROM を書き換える方法
があるようですが、私の技術力では、既に実現できているloader.o以外ではリスクが高そう。
③カーネルを自力でコンパイルする方法は、諸々の問題が出現すると思われ、
自分にはハードルが高そう。
長文になり、恐れ入ります。
ご教示頂きたく、よろしくお願いします。
>>2
すずか様
ご苦労なさっていることが手に取るように解るご質問ですね。
さてせっかく作成したカーネル・モジュールの fuse.ko が認識出来ないとのことですが、モジュールの依存性の解決(depmod)を行ってみてはどうでしょう?
オ プション無しで単純に depmod コマンドを実行させると、モジュールが存在しているディレクトリ内のツリーをさかのぼってモジュールの依存関係を解決しようとします。正常に作成されたモ ジュールであれば登録されると思います。この depmod コマンドを実行したあとに、fuse.ko の挙動がどのようになるか確認してみてください。
すずかです。
いつも素早いご回答を頂き有り難うございます。
depmodやってみます。
その際、、、
作業用ディレクトリ/usr/src/linux_tmp/linux-2.6.25/fs/fuse
には、fuse.koの他に、いくつか.oと.koが出来ていますが、
これらを全て
/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/
に移したうえで、depmodすればよろしいでしょうか?
>>4
すずか様
fuse ディレクトリ内の全てのカーネル・モジュール .ko(カーネル・オブジェクト・ファイルの略)をコピーします。そして depmod コマンドを実行させてください。
ちなみに .o(オブジェクト・ファイルの略)は C コンパイラでコンパイルしたままの生成物です。これをカーネルへリンク処理とロケート(配置)処理したものがカーネル・モジュールとなります。.o のコピーは不要です。
これで上手く動作すればすれば良いのですが。
すずかです。 アドバイスありがとうございます。
depmodやりました。ご報告します。
まず、.oは7個ありましたが、.koはfuse.koの1個だけでした。
で、fuse.koを/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/にコピーして
depmodを実行したところ、、、
# cd /lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/
# depmod
→メッセージは何も無し。
# modprobe fuse
→FATAL: Error inserting fuse (/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/fuse.ko): Invalid module format
# ntfs-3g -o umask=0,locale=ja_JP.utf8 /dev/sda1 /mnt/samba_share/usb_hdd
→FATAL: Error inserting fuse (/lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/fuse.ko): Invalid module format
ntfs-3g-mount: fuse device is missing, try 'modprobe fuse' as root
となってしましました。insmodと同じ結果です。
どうも、コンパイルがうまくいっていないっぽいです。
うーむ、次は何を試そうか。。ちょっと考えます。。
>>6
すずか様
上手く出来ませんでしたか。それは残念です。
「Invalid module format」(モジュールの形式間違い)とあるようにカーネル・モジュールに何か問題があるようですね。
私 も genbako さんのカーネル 2.6.25 をダウンロードして、カーネルの設定ファイル(.config)を menuconfig で確認してみました。やはり fuse 関係は「無効」となっていました。製作者さんの何らかの意図があっての設定だと思います。
この fuse の部分を「有効」に切り替えてカーネル・ビルドを試みてみましたが、Debian Jessie の環境ではビルドが難しいようです。Debian Squeeze か Lenny の世代の開発環境でなければ、すんなりとビルドしてくれないようです。
Debian Jessie の環境でビルドが出来ていれば、カーネルともども Fuse 環境の整った状態で成果を提供したかったのですが、残念ながら提供できませんでした。
何か他に良い方法があればよいのですが・・・。
Livingstonさま
すずかです。お世話になっております。
再度モジュールコンパイルしたら、ご教示のdepmodでまく行きましたので、ご報告します。
以下にまとめます。
○fuseモジュールのコンパイルと有効化
・カーネルソースと玄箱HG用パッチのダウンロード
(2.6.25.1の玄箱HG用ソースが見あたらないため、2.6.25で代用)
# wget http://www.kernel.osrg/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2
# wget http://genbako.vodapone.com/kurobox-sources-2.6.25.patch
# wget http://genbako.vodapone.com/kurobox-section-mismatch2625.patch
・展開とパッチ当て(安全のためtmpディレクトリ、一般ユーザで作業)
# tar -jxpvf linux-2.6.25.tar.bz2
# cd linux-2.6.25
# patch -Np1 < ../kurobox-sources-2.6.25.patch
# patch -Np1 < ../kurobox-section-mismatch2625.patch
・.configの編集
# cp -p config_kuroboxhg .config
# vi .config
# CONFIG_FUSE_FS is not set ⇒ CONFIG_FUSE_FS=m
・fuseモジュールのみのコンパイル
# export ARCH=ppc (★前回はこれをやっていなかったと思います)
# make oldconfig
# make modules_prepare
# cd fs/fuse
# make -C /usr/src/linux_tmp/linux-2.6.25 M=`pwd` modules
・fuseモジュールを/lib配下に移しdepmodする。(ここから先はrootユーザで)
(2.6.25で作成したモジュールを、無理矢理2.6.25.1の環境下へ配置し有効化する)
# cp /usr/src/linux_tmp/linux-2.6.25/fs/fuse/fuse.ko /lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/
# cd /lib/modules/2.6.25.1-kuroboxHG/kernel/fs/fuse/
# depmod
# modprobe fuse (★メッセージなし!(前回はここでエラーメッセージ)これはいけるぞ!)
# ntfs-3g -o umask=0,locale=ja_JP.utf8 /dev/sda1 /mnt/samba_share/usb_hdd
→メッセージなし。成功!
・sambaで共有しているディレクトリ配下にマウントし
Windows10端末から、読み書きを確認しました。
これで、大容量のNAS環境が作れました。
○さいごに
カーネルやモジュールや依存関係について、全く理解できていない状況で、
Livingstonさまにご教示頂いた魔法のことばdepmodで全て解決致しました。
ほんとうにありがとうございました。
>>8
すずか様
FUSE モジュールの組み込み成功!おめでとうございます。
今回の件は、私も大変参考にありました。どうもありがとうございます。