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のモジュールが含まれていないと思われる。

<<文字数制限により、以下、コメントにつづく>>


コメント

    • 1.すずか
    • 2016/09/24 21:56

    <<つづきです>>

    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
     となってしまう。


    <<さらにつづく>>

    • 2.すずか
    • 2016/09/24 21:57

    <<さらにつづきです>>

    6.教えて頂きたいこと
     ・作成したfuse.koをモジュールとして有効にするにはどうしたらよいか。
     ・また、それを起動時に自動的にするには、どうしたらよいか。
     ・5.でトライしたことがバージョン違いであり動くはずがない、
      ということであれば、fuseを有効にするにはどうしたらよいか。
     
      ただ、私の技術力的制約として以下の状況です。①は無理として②③を打開しないといけないのでしょうか?
      ①シリアルコンソールが必要なやり方は無理。
      ②ブートに関しては、調べたところ
       ・loader.oを用いる方法
       ・u-bootを用いる方法
       ・FLASH ROM を書き換える方法
       があるようですが、私の技術力では、既に実現できているloader.o以外ではリスクが高そう。
      ③カーネルを自力でコンパイルする方法は、諸々の問題が出現すると思われ、
       自分にはハードルが高そう。

    長文になり、恐れ入ります。
    ご教示頂きたく、よろしくお願いします。

    • 3.Livingston
    • 2016/09/25 20:36

    >>2
    すずか様

    ご苦労なさっていることが手に取るように解るご質問ですね。

    さてせっかく作成したカーネル・モジュールの fuse.ko が認識出来ないとのことですが、モジュールの依存性の解決(depmod)を行ってみてはどうでしょう?

    オ プション無しで単純に depmod コマンドを実行させると、モジュールが存在しているディレクトリ内のツリーをさかのぼってモジュールの依存関係を解決しようとします。正常に作成されたモ ジュールであれば登録されると思います。この depmod コマンドを実行したあとに、fuse.ko の挙動がどのようになるか確認してみてください。

    • 4.すずか
    • 2016/09/26 11:03

    すずかです。
    いつも素早いご回答を頂き有り難うございます。

    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すればよろしいでしょうか?

    • 5.Livingston
    • 2016/09/26 21:21

    >>4
    すずか様

    fuse ディレクトリ内の全てのカーネル・モジュール .ko(カーネル・オブジェクト・ファイルの略)をコピーします。そして depmod コマンドを実行させてください。

    ちなみに .o(オブジェクト・ファイルの略)は C コンパイラでコンパイルしたままの生成物です。これをカーネルへリンク処理とロケート(配置)処理したものがカーネル・モジュールとなります。.o のコピーは不要です。

    これで上手く動作すればすれば良いのですが。

    • 6.すずか
    • 2016/09/28 22:01

    すずかです。 アドバイスありがとうございます。

    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と同じ結果です。
    どうも、コンパイルがうまくいっていないっぽいです。

    うーむ、次は何を試そうか。。ちょっと考えます。。

    • 7.Livingston
    • 2016/09/29 20:00

    >>6
    すずか様

    上手く出来ませんでしたか。それは残念です。

    「Invalid module format」(モジュールの形式間違い)とあるようにカーネル・モジュールに何か問題があるようですね。

    私 も genbako さんのカーネル 2.6.25 をダウンロードして、カーネルの設定ファイル(.config)を menuconfig で確認してみました。やはり fuse 関係は「無効」となっていました。製作者さんの何らかの意図があっての設定だと思います。

    この fuse の部分を「有効」に切り替えてカーネル・ビルドを試みてみましたが、Debian Jessie の環境ではビルドが難しいようです。Debian Squeeze か Lenny の世代の開発環境でなければ、すんなりとビルドしてくれないようです。

    Debian Jessie の環境でビルドが出来ていれば、カーネルともども Fuse 環境の整った状態で成果を提供したかったのですが、残念ながら提供できませんでした。

    何か他に良い方法があればよいのですが・・・。

    • 8.すずか
    • 2016/10/02 19:10

    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で全て解決致しました。
     ほんとうにありがとうございました。

    • 9.Livingston
    • 2016/10/02 20:00

    >>8
    すずか様

    FUSE モジュールの組み込み成功!おめでとうございます。

    今回の件は、私も大変参考にありました。どうもありがとうございます。