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
以上,よろしくお願いします.
コメント
masa
y.nakamura
中村です。
> 実は、
> >カーネルコンフィグレーションの 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
y.nakamura
中村です。
先日のは作業メモを元にして、それに手を入れて投稿しましたが、
> ● バイナリの取り出し
> $ 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
masa
y.nakamura
2014年8月17日 19時12分
中村です。
> ERROR: smbfs filesystem not supported by the kernel
カーネルでsmbfsを有効にしていないのではないでしょうか?
カーネルコンフィグレーションの File systems -> Network File Systems の
下にあると思います。
--
なかむら