Armadilloフォーラム

Windowsの共有フォルダにファイルを出力について

masa

2014年8月17日 18時45分

山田と申します。

Armadillo-420からWindows7 64Bitの共有フォルダにファイルを書き込みたく、以下のリンクや他のページを参照して格闘しているのですが、
「Armadillo-400シリーズでsambaを使う」
https://armadillo.atmark-techno.com/blog/750/779

以下のIPアドレスでマウントすると、
smbmount //192.168.1.202/Temp /mnt/win -o username=user,password=user

以下のメッセージが出て接続に失敗します。
load_client_codepage: filename /home/samba/codepages/codepage.850 does not exist.
load_unicode_map: filename /home/samba/codepages/unicode_map.850 does not exist.
session request to 192.168.215.202 failed
session request to *SMBSERVER failed

以下のコンピュータ名で接続すると、
smbmount //WIN7PRO64/Temp /mnt/win -o username=user,password=user

以下のメッセージが出て接続に失敗します。
load_client_codepage: filename /home/samba/codepages/codepage.850 does not exist.
load_unicode_map: filename /home/samba/codepages/unicode_map.850 does not exist.
ERROR: smbfs filesystem not supported by the kernel
Please refer to the smbmnt(8) manual page
smbmnt failed: 255
mount.smbfs: ioctl failed, res=-1
Could not umount /mnt/win: Invalid argument

何か、ヒントをご教授して頂ければ助かります。

利用機器:Armadillo-420
開発環境:ATDE3
Linuxカーネル:v2.6.26-at19
ユーザランド:v20140602

以上,よろしくお願いします.

コメント

y.nakamura

2014年8月17日 19時12分

中村です。

> ERROR: smbfs filesystem not supported by the kernel

カーネルでsmbfsを有効にしていないのではないでしょうか?
カーネルコンフィグレーションの File systems -> Network File Systems の
下にあると思います。

--
なかむら

masa

2014年8月17日 21時20分

中村様。ありがとうございます。

実は、
>カーネルコンフィグレーションの File systems -> Network File Systems
にsmbfs が無かったので、フォーラムに投降したのですが、
明日、debianのパッケージをあたろうと思います。

ただ、IPアドレスダイレクトでは別の症状な為、悩ませています。

y.nakamura

2014年8月18日 2時56分

中村です。

> 実は、
> >カーネルコンフィグレーションの File systems -> Network File Systems
> にsmbfs が無かったので、フォーラムに投降したのですが、

なるほど。そこまで試されているのでしたら、提供できる情報がもう少しあります。

いや・・・あの・・・実はこれ↓
> > ERROR: smbfs filesystem not supported by the kernel
ちゃんと説明しないといけないかなぁ~とは思っていたのですが、
下の方に出てきますので、そこを読んでください。

少し前に別の質問で書く予定だったのですがSMBのサーバ側とのことでしたので、
準備をはじめたけれども書かずに終わってしまったものです。

> 明日、debianのパッケージをあたろうと思います。

ベストかどうかはわかりませんが、私もdebianパッケージを使いました。

● カーネル設定
CIFSを使います。

Linux Kernel Configuration
  File systems  --->
    [*] Network File Systems  --->
      <*>   CIFS support (advanced network filesystem, SMBFS successor)

このカーネルを使って、ユーザランド側で試しに

Userland Configuration
  Filesystem Applications  --->
    --- SAMBA
    [*] samba
    [ ]   smbd
    [ ]   nmbd
    [*]   smbmount
    [*]   smbumount

のsmbmountを動かしてみたところ
ERROR: smbfs filesystem not supported by the kernel
というエラーになってしまいました。CIFSではダメなようです。
ユーザランドのSAMBAが古すぎるのでしょう。

なのでこれはあきらめて、上に書いたようにdebianパッケージです。

● Debian/lennyのsmbfsパッケージ
次のものを使いました。
http://archive.debian.org/debian/pool/main/s/samba/smbfs_3.2.5-4lenny15…

● バイナリの取り出し
$ dpkg -x smbfs_3.2.5-4lenny15_armel.deb hoge

'hoge'の下には次のように展開されます。

./hoge
|-- sbin
|   |-- mount.cifs
|   |-- mount.smbfs
|   `-- umount.cifs
`-- usr
    |-- bin
    |   |-- smbmount -> /sbin/mount.smbfs
    |   `-- smbumount -> /sbin/umount.cifs
    |-- sbin
    |   `-- cifs.upcall
    `-- share
        この下は省略

ROMFSINSTするだけのMakefileを作って、
この sbin, usr/bin, usr/sbin を romfsの下へコピー。

● bash
sbin/mount.smbfsは配列を使っているためbashが必要です。
が・・・mount.smbfsはラッパなので、これを使わず、
/sbin/mount.cifsを直接呼び出せば、bash不要です。

bashのDebian lennyのパッケージは試してません。
bashの最新ソースからビルド(クロスコンパイル)は試しましたが、
ここでは省略します。

atmark-distのuser/bashを使う場合は、

  Userland Configuration
    Core Applications  --->
      (Other) Shell Program

となっているので、これを
(bash) Shell Program
と変更して、user/bash/Makefileのromfs部分を次のように修正。

--- user/bash/Makefile-orig
+++ user/bash/Makefile
@@ -595,8 +595,9 @@
 # Targets that actually do things not part of the build
 
 romfs:
-       $(ROMFSINST) -e CONFIG_USER_BASH_BASH bash /bin/sh
-       $(ROMFSINST) -e CONFIG_USER_BASH_BASH -l $(ROMFSDIR)/bin/sh /bin/bash
+#      $(ROMFSINST) -e CONFIG_USER_BASH_BASH bash /bin/sh
+#      $(ROMFSINST) -e CONFIG_USER_BASH_BASH -l $(ROMFSDIR)/bin/sh /bin/bash
+       $(ROMFSINST) -e CONFIG_USER_BASH_BASH /bin/bash
 
 installdirs:
        @${SHELL} $(SUPPORT_SRC)mkdirs $(bindir)

この修正は、/bin/shへのインストールはせず(/bin/shはbusyboxのashを使い)、
/bin/bashだけをインストールするようにしています。
どこかに変な影響がでてしまうのが怖いので、/bin/shをbashにはしません。

● クロスライブラリ追加

atmark-distでの make romfs の前にクロス開発用ライブラリの
libpopt.so.0を開発環境ATDE3に入れておきます。

$ sudo apt-cross --arch armel --suite lenny --install libpopt0

● 操作(マウント)の例

# smbmount //192.168.0.12/foo /mnt/hoge -o username=foo
# mount.cifs //192.168.0.12/foo /mnt/hoge -o username=foo

# smbmount //192.168.0.12/foo /mnt/hoge -o username=foo,password=xxxx,ro
# mount.cifs //192.168.0.12/foo /mnt/hoge -o username=foo,password=xxxx,ro

usernameとpasswordはuserとpassでも可。
パスワードは環境変数"PASSWD"で与えることも可。
(パスワードに","を含んでいるときには環境変数で与える以外に方法はない)

日本語ファイル名
# smbmount //192.168.0.12/foo /mnt/hoge -o iocharset=utf8,username=foo,password=xxxx,ro

以上、参考になれば幸いです。

--
なかむら

masa

2014年8月18日 13時33分

中村様、大変丁寧な解説ありがとうございます。
早速試してみます。

--
山田

y.nakamura

2014年8月19日 10時35分

中村です。

先日のは作業メモを元にして、それに手を入れて投稿しましたが、

> ● バイナリの取り出し
> $ dpkg -x smbfs_3.2.5-4lenny15_armel.deb hoge
>
> 'hoge'の下には次のように展開されます。
...
> ROMFSINSTするだけのMakefileを作って、
> この sbin, usr/bin, usr/sbin を romfsの下へコピー。

の部分の訂正です。

sbinの下はコピーですが、usr/binの下はコピーするのではなくて
romfsの下でシンボリックリンクをつくります。
それから、usr/sbinの下のcifs.upcallは、私は使っていませんでした。
(cifs.upcallはromfsには入れていません)

--
なかむら

masa

2014年8月19日 15時16分

中村様。度々ありがとうございます。

別件で追われて作業を中断しいましたが、時間が取れ次第、再チャレンジしようと考えています。

ありがとうございます。
山田

masa

2014年8月19日 15時18分

中村様。度々ありがとうございます。

別件で追われて作業を中断しいましたが、時間が取れ次第、再チャレンジしようと考えています。

ありがとうございます。
山田