Armadilloフォーラム

イメージのカスタマイズによるSambaの導入について

tanaka

2014年8月7日 9時32分

お世話になっております。
田中と申します。

使用環境:Windows7、VMware、ATDE5、Armadillo-840

使用ファイル:atmark-dist-20140602.tar.gz、linux-3.4-at8.tar.gz、loader-armadillo840-nor-v3.2.4.bin

状況:
armadillo-840のマニュアル(21.Howto)を参考に、ユーザランドコンフィギュレーションを変更してSambaを導入しようとしましたが、images/romfsを作成することができませんでした。

コンフィギュレーション内では
SAMBA/samba、smbd、nmbd、smbmount、smbumount
SMBFS/smbmount、smbumount
を選択しました。
ビルドエラーは添付画像のように起こりました。

確認状況:
コンフィギュレーション内でのDefault all settingでは、linux.bin.gz、romfs.img.gzともに作成可能。

勉強不足のため基本的な質問かもしれませんが、回答よろしくお願い致します。

ファイル ファイルの説明
errorlog.png
コメント

中村です。

800シリーズ用のカーネルソースにinclude/linux/smb_fs.hが
ありませんね。
たぶん、ユーザランド(atmark-dist)のsambaが800シリーズの
カーネルに対して古すぎるのだと思います。

800ではなくて400ですが、SMBのクライアントを実装する
必要があったときは、atmark-distのものは使わず(記録を
あまり残していなかったのでハッキリしないのですけど、
いろいろと不具合があったような...)、別のものを入れました。

--
なかむら

田中です。

ご返信ありがとうございます。

勉強不足で、中村様の返信を理解できないでおります。
もう少しわかりやすく説明していただくことは可能でしょうか。

> 800シリーズ用のカーネルソースにinclude/linux/smb_fs.hが
> ありませんね。
> たぶん、ユーザランド(atmark-dist)のsambaが800シリーズの
> カーネルに対して古すぎるのだと思います。

ここまでは理解できました。

> 800ではなくて400ですが、SMBのクライアントを実装する
> 必要があったときは、atmark-distのものは使わず(記録を
> あまり残していなかったのでハッキリしないのですけど、
> いろいろと不具合があったような...)、別のものを入れました。

「別のものを入れる」という処理でパニックになっております。

atmark-distと同じdebianのカーネルで使用可能であるsambaのパッケージをatmark-distクロスコンパイルする。
もしくは、debianで動作確認できたsambaとそれに依存するライブラリを他デバイスにコピーして、ライブラリパスを通してコンフィグ設定を更新するという認識で間違っていないでしょうか。

田中です。

連投して申し訳ありません。

前回投稿したsambaをマウントしたUSB上にコピーする方法でsambaを動作させようとしておりますが、実行ができなくて困っております。

作業内容:

1.SDブートで起動したdebianでsambaの動作確認。
2.動作確認済みのsambaに依存関係あるファイルとライブラリをUSBにコピー。
3.ライブラリのパスを設定。
4.init.d/sambaをUSB内の対応ファイルに書き換え。

問題点:
1~4の処理を行ったのですが、sambaの実行ができません。

確認事項:

実行後

Starting Samba daemons : nmbd smbd failed

と出力されます。起動スクリプトを見る限り、smbdが動作していないと思われます。

start-stop-daemon --start --quiet --oknode --exec /mnt/sbin/nmbd -- -D

と単独でも実行されません。
--verboseオプションでもエラーは出力されません。

コピーしたファイル、フォルダ:
init.d/samba、smb.conf、etc/default/samba、/var/run/samba、/usr/sbin/nmbd、/usr/sbin/smbd、/lib/lsb/init-function、arm-linux-gnueabihf

どうかご助言の方宜しくお願い致します。

中村です。

田中さんの質問への回答ではないですが・・・
必要なのはSAMBAのサーバですか?クライアントですか?
Armadilloのような装置でサーバとクライアントの両方が
必要になることはそうはないと思っています。
(そういう場合もあるかもしれませんけど・・・)

それから、田中さんの最初の投稿に
> コンフィギュレーション内では
> SAMBA/samba、smbd、nmbd、smbmount、smbumount
> SMBFS/smbmount、smbumount
> を選択しました。

とあります。
SAMBAの下のsmbmount,smbumountと、
SMBFSの下のsmbmount,smbumountは排他だと思います。

ほとんど調べてなくて想像なのですけど、SMBFSはクライアントだけの
かなり古い実装で、SAMBAはサーバとクライアントを一緒にした
SMBFSよりはちょっとだけ新しい実装のような気がします。
(違ってたらゴメンナサイ)

私が400シリーズでSMBのクライアントを動かしたときの方法の
作業メモはあるのですけど、そのまま公開できる形には
なっていないので、整理できるかどうか考えてみます。
少しお時間をください。

--
なかむら

田中です。

ご返信ありがとうございます。
説明不足で申し訳ございません。

> 必要なのはSAMBAのサーバですか?クライアントですか?

必要なのはサーバになります。

> それから、田中さんの最初の投稿に
> > コンフィギュレーション内では
> > SAMBA/samba、smbd、nmbd、smbmount、smbumount
> > SMBFS/smbmount、smbumount
> > を選択しました。
>
> とあります。
> SAMBAの下のsmbmount,smbumountと、
> SMBFSの下のsmbmount,smbumountは排他だと思います。
>
> ほとんど調べてなくて想像なのですけど、SMBFSはクライアントだけの
> かなり古い実装で、SAMBAはサーバとクライアントを一緒にした
> SMBFSよりはちょっとだけ新しい実装のような気がします。
> (違ってたらゴメンナサイ)

SAMBAとSMBFSは実装の時期に違いがあったのですね。
それではSMBFSは必要なさそうですね。
イメージファイルのカスタマイズの手法でも検討してみようと思います。

中村です。

> 必要なのはサーバになります。

ということは、
SAMBAの下のsmbmount,smbumountも、
SMBFSの下のsmbmount,smbumountも、どちらも不要ですね。

コンパイルエラーになっているのはsmbmountですから、
私の400での話も関係ないということで・・・

2つ前の田中さんの投稿では、SDブートのDebianの話になってます。
これが最終目標ですか?
最初の質問では、atmark-distでromfsを作る話でした。

atmark-distでSAMBA(サーバ)を入れたromfsを作るのでしたら、
400でのこの説明が参考になるかもしれません。

ブログ » at_takuya.sasakiさんのブログ » Armadillo-400シリーズでsambaを使う
https://armadillo.atmark-techno.com/blog/750/779

--
なかむら

田中です。

ご返信ありがとうございます。

> SAMBAの下のsmbmount,smbumountも、
> SMBFSの下のsmbmount,smbumountも、どちらも不要ですね。
>
> コンパイルエラーになっているのはsmbmountですから、
> 私の400での話も関係ないということで・・・

私の説明不足のために、説明を準備をさせてしまい大変申し訳ないです。

> 2つ前の田中さんの投稿では、SDブートのDebianの話になってます。
> これが最終目標ですか?
> 最初の質問では、atmark-distでromfsを作る話でした。

現状では、SDブートのDebianではsambaを利用できています。
atmark-dist上でsambaを動作させることが最終目標になります。
カーネルの機能がないということで、(同一のカーネルイメージでsambaの動作確認ができている)debianのバイナリを利用するのが一番効率的かなと思い試行錯誤しておりました。

> atmark-distでSAMBA(サーバ)を入れたromfsを作るのでしたら、
> 400でのこの説明が参考になるかもしれません。
>
> ブログ » at_takuya.sasakiさんのブログ » Armadillo-400シリーズでsambaを使う
> https://armadillo.atmark-techno.com/blog/750/779

参考にして、romfsを作成してみようと思います。
ありがとうございました。

田中です。

中村様の方法で無事にsambaを導入することができました。(かなり回り道でしたが)
これからは段階の一つ一つを丁寧に開発していこうと感じました。

詳細で明快な解説を本当にありがとうございました。

お世話になっております。
田中です。

先日、 sambaを使用できたと報告させていただきましたが、上手くいっていなかったようです。

> atmark-distでSAMBA(サーバ)を入れたromfsを作るのでしたら、
> 400でのこの説明が参考になるかもしれません。
>
> ブログ » at_takuya.sasakiさんのブログ » Armadillo-400シリーズでsambaを使う
> https://armadillo.atmark-techno.com/blog/750/779

ブログを参考に して、smbdを起動できたということで報告させていただきました。
しかし、本日改めてsmbdをデーモンとして起動して、ps auxコマンドで確認したところ起動していないようでした。
前回での確認では、grepコマンドなどでsmbdが出ているのを勘違いした可能性があります。

確認事項:

・電源offによる初期化によって、設定を先日と同じ手順(ブログの手順)を踏みましたが、smbdは起動していませんでした。
→先日のps auxでの見間違いの可能性が高いと思われます。
→初期化のため、ディレクトリの作成、パーティション設定などの再設定も行っています。

・debianのdefault向けにsambaがdefaultされている可能性があると思い、/etc/config/smb.confのシンボリックリンクを/etc/samba/内に作成しましたが効果はありませんでした(sambaフォルダは自分で作成)。

何度も投稿して申し訳ありませんが、気づいた点があれば何でもおっしゃってくれると嬉しいです。
宜しくお願い致します。

at_takuya.sasaki

2014年8月19日 0時24分

佐々木(拓)です。

ブログは400シリーズのものですが、過去にArmadillo-810でも同様の手順でできた記憶があります。
/var/log/log.smbというログファイルができていると思うのですが、/bin/smb -Dをたたいた時に、
何かログが出ていないでしょうか?

当時の記憶では、コマンドラインにはなにも出ずに、このログファイルにソケット周りのエラーが出ており、
ブログの手順2を追加した記憶があります。

一応、/etc/inetd.confや、netstatコマンドなどで、smbが使うポートを誰かがつかんでいないかを
見てみたほうがよいかと思います。

#なお、ブログタイトルをSamba Serverに変更しておきます・・

以上です。

> お世話になっております。
> 田中です。
>
>
> 先日、 sambaを使用できたと報告させていただきましたが、上手くいっていなかったようです。
>
>
> > atmark-distでSAMBA(サーバ)を入れたromfsを作るのでしたら、
> > 400でのこの説明が参考になるかもしれません。
> >
> > ブログ » at_takuya.sasakiさんのブログ » Armadillo-400シリーズでsambaを使う
> > https://armadillo.atmark-techno.com/blog/750/779
>
> ブログを参考に して、smbdを起動できたということで報告させていただきました。
> しかし、本日改めてsmbdをデーモンとして起動して、ps auxコマンドで確認したところ起動していないようでした。
> 前回での確認では、grepコマンドなどでsmbdが出ているのを勘違いした可能性があります。
>
> 確認事項:
>
> ・電源offによる初期化によって、設定を先日と同じ手順(ブログの手順)を踏みましたが、smbdは起動していませんでした。
> →先日のps auxでの見間違いの可能性が高いと思われます。
> →初期化のため、ディレクトリの作成、パーティション設定などの再設定も行っています。
>
> ・debianのdefault向けにsambaがdefaultされている可能性があると思い、/etc/config/smb.confのシンボリックリンクを/etc/samba/内に作成しましたが効果はありませんでした(sambaフォルダは自分で作成)。
>
>
> 何度も投稿して申し訳ありませんが、気づいた点があれば何でもおっしゃってくれると嬉しいです。
> 宜しくお願い致します。
>
>
>
>

田中です。
返信ありがとうございます。

> /var/log/log.smbというログファイルができていると思うのですが、/bin/smb -Dをたたいた時に、
> 何かログが出ていないでしょうか?
> 当時の記憶では、コマンドラインにはなにも出ずに、このログファイルにソケット周りのエラーが出ており、
> ブログの手順2を追加した記憶があります。

smbdのオプションのログを見たところ、ネットワークインターフェースのエラーが出ておりました。
eth0を有効にするのを忘れていたようです。
ifupで有効にしたところエラーは消えて、smbdは起動することができました。
起動はできたのですが、windows7から共有ファイル(\\192.168.0.1\hda)を確認することができませんでした。

> 一応、/etc/inetd.confや、netstatコマンドなどで、smbが使うポートを誰かがつかんでいないかを
> 見てみたほうがよいかと思います。

netstat -anp | grep smbd → ポート139がLISTEN状態であることを確認できました。
netstat -anp | grep 139  → ポートの重複がないのは確認できました。

telnet 192.168.0.1(サーバ側のipアドレス) 139
telnet 192.168.0.24(仮想マシンを起動しているwindows側のipアドレス) 139
は2つとも接続できませんでした。

139ポートの解放ができていないようなので
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp -d 0/0 --dport 139 -j ACCEPT
など試してみましたが、上手くいっておりません。

何卒ご教示宜しくお願い致します。

田中です。

連投して申し訳ございません。

放置しているとエラーのログが出ておりました。
UDPソケットに関するエラーでした。

エラーの表示を添付しております。

ソケットに関するエラーとなりますと、makeによるromfsの作成から調査が必要になりそうですかね。
その辺をもっと調べてみようと思います。

ファイル ファイルの説明
errorlog_var_log_log.smb_.png

at_takuya.sasaki

2014年8月20日 9時52分

佐々木(拓)です。

> 起動はできたのですが、windows7から共有ファイル(\\192.168.0.1\hda)を確認することができませんでした。

一応コメントしておくと、もしデフォルトのsmb.confのままで、ブログの手順通りにしている場合、アクセスする
フォルダ名はpublicになります。なので \\192.168.0.1\publicにアクセスする必要があります。

> telnet 192.168.0.1(サーバ側のipアドレス) 139
> telnet 192.168.0.24(仮想マシンを起動しているwindows側のipアドレス) 139
> は2つとも接続できませんでした。

私も同じIPアドレスにしてArmadillo-840で試してみましたが、\\192.168.0.1\publicで共有フォルダに
接続できました。
またDOSプロンプトからtelnet 192.168.0.1 139 も接続できました。(といっても、DOS窓には何も表示されませんが)

念のため確認ですが、Windows PCからのpinigは通りますか?

/etc/config/smb.confの[host allow]を有効化していて、192.168.0.x系をはじいているのかとも
思ったのですが、私が試したところでは、telnet 192.168.0.1 139は接続できたので、これも違いそうです。

/etc/inetd.confの内容、ifconfig eth0の結果、netstat -apnコマンドの結果、iptables -Lの結果などをいただけると
何かわかるかもしれません。

田中です。
ご返信ありがとうございます。

> 一応コメントしておくと、もしデフォルトのsmb.confのままで、ブログの手順通りにしている場合、アクセスする
> フォルダ名はpublicになります。なので \\192.168.0.1\publicにアクセスする必要があります。

誤記です申し訳ありません。\\192.168.0.1\publicにアクセス致しましたが、接続できませんでした。

> > telnet 192.168.0.1(サーバ側のipアドレス) 139
> > telnet 192.168.0.24(仮想マシンを起動しているwindows側のipアドレス) 139
> > は2つとも接続できませんでした。
>
> 私も同じIPアドレスにしてArmadillo-840で試してみましたが、\\192.168.0.1\publicで共有フォルダに
> 接続できました。
> またDOSプロンプトからtelnet 192.168.0.1 139 も接続できました。(といっても、DOS窓には何も表示されませんが)

同条件のイメージファイルと基盤で佐々木様の動作が正常ということは、やはり何か設定の記載を間違えているということですね。

> 念のため確認ですが、Windows PCからのpingは通りますか?

はい、pingは通るので物理的には接続できていると思われます。

> /etc/config/smb.confの[host allow]を有効化していて、192.168.0.x系をはじいているのかとも
> 思ったのですが、私が試したところでは、telnet 192.168.0.1 139は接続できたので、これも違いそうです。

はい、/etc/config/smb.confでは初期状態でも確認しましたので、問題はないかと思われます。

> /etc/inetd.confの内容、ifconfig eth0の結果、netstat -apnコマンドの結果、iptables -Lの結果などをいただけると
> 何かわかるかもしれません。

これらの結果を添付させていただきます。
ご確認宜しくお願い致します。

ファイル ファイルの説明
etc_config_smbconf.log /etc/config/smbd.confの内容
etc_inetdconf.log /etc/inetd.confの内容
ifconfig_eth0.log ifconfig eth0 の出力
iptables_L.log iptables -L の出力
netstat_anp.log netstat -anp の出力
var_log_log_smb.log /var/log/log.smbの内容

田中です。

申し訳ございません。
添付したファイルが大変見難い形式になっておりました。
再添付致します。

ファイル ファイルの説明
etc_config_smbconf.txt /etc/config/smbd.confの内容
etc_inetdconf.txt /etc/inetd.confの内容
ifconfig_eth0.txt ifconfig eth0 の出力
iptables_L.txt iptables -L の出力
netstat_anp.txt netstat -anp の出力
var_log_log_smb.txt /var/log/log.smbの内容

at_takuya.sasaki

2014年8月21日 22時52分

佐々木(拓)です。

添付いただいた設定ファイルと、ログを見てみました。
私の環境と同じで、特に問題らしき箇所は見当たりませんでした。

ただ1点気になることがあります。

var_log_log_smb.txtを見ると、デバッグレベル3を指定したときのログになっているようです。
しかしetc_config_smbconf.txtには [ log level ] という設定項目がなく、この場合はデバッグレベルは1になるはずです。

以下が頂いたsmb.confを使って私の環境でsmbdを立ち上げた時のログです。

[Sat Jan  1 10:52:00 2000, 1] smbd/server.c:main(647)
  smbd version 2.0.7 started.
  Copyright Andrew Tridgell 1992-1998
[Sat Jan  1 10:52:00 2000, 1] smbd/files.c:file_init(216)
  file_init: Information only: requested 10000 open files, 4086 are available.
[Sat Jan  1 10:52:00 2000, 0] lib/charset.c:load_client_codepage(215)
  load_client_codepage: filename /home/samba/codepages/codepage.850 does not exist.
[Sat Jan  1 10:52:00 2000, 0] lib/util_unistr.c:load_unicode_map(435)
  load_unicode_map: filename /home/samba/codepages/unicode_map.850 does not exist.

送付いただいたsmb.confもしくはlog.smbが古いということはないでしょうか?
#log levelが3でも、smbd version情報などが出力されていないのも気になりました。

以上です

田中です。
ご返信ありがとうございます。

色々試行錯誤しましたが、どうも上手くいかないみたいです。
・/etc/config/smb.confでの、security=shareにしない方がよい 
http://www.atmarkit.co.jp/flinux/special/samba_n/samba_nb.html
・inetdの/etc/hosts.allow、/etc/host.denyの設定
・wiresharkでの通信の確認
・oplocksによる不具合報告など

佐々木様はarmadillo840でも動作可能だったということで全く同じ環境を作りたいです。

イメージファイル作成ファイルのバージョン、
コンフィギュレーションで導入したプログラム、
操作PCのOSの情報など
をもし控えておいでならば、教えていただきたいです。

>
> 添付いただいた設定ファイルと、ログを見てみました。
> 私の環境と同じで、特に問題らしき箇所は見当たりませんでした。
>
> ただ1点気になることがあります。
>
> var_log_log_smb.txtを見ると、デバッグレベル3を指定したときのログになっているようです。
> しかしetc_config_smbconf.txtには [ log level ] という設定項目がなく、この場合はデバッグレベルは1になるはずです。
>
> 以下が頂いたsmb.confを使って私の環境でsmbdを立ち上げた時のログです。
>
>

> [Sat Jan  1 10:52:00 2000, 1] smbd/server.c:main(647)
>   smbd version 2.0.7 started.
>   Copyright Andrew Tridgell 1992-1998
> [Sat Jan  1 10:52:00 2000, 1] smbd/files.c:file_init(216)
>   file_init: Information only: requested 10000 open files, 4086 are available.
> [Sat Jan  1 10:52:00 2000, 0] lib/charset.c:load_client_codepage(215)
>   load_client_codepage: filename /home/samba/codepages/codepage.850 does not exist.
> [Sat Jan  1 10:52:00 2000, 0] lib/util_unistr.c:load_unicode_map(435)
>   load_unicode_map: filename /home/samba/codepages/unicode_map.850 does not exist.
> 

>
> 送付いただいたsmb.confもしくはlog.smbが古いということはないでしょうか?
> #log levelが3でも、smbd version情報などが出力されていないのも気になりました。
>
ログのチェック有難うございます。
確認しましたところ、一つ前の作業でのログだったようです。
再確認したところ、佐々木様と同じログにUDPエラーが加えられたものになっておりました。
対応しているものを添付させていただきます。

ご返信宜しくお願いいたします。

ファイル ファイルの説明
smb_conf.txt smb.confの内容
wireshark.png wiresharkで確認した通信状況
log_smb.txt log.smbの内容

at_takuya.sasaki

2014年8月25日 17時35分

佐々木(拓)です。

添付していただいたwireshark.pngを確認してみました。

Armadillo-840側の139ポートは穴があいてるようですが、
どうもTCPのスリーウェイハンドシェイクが確立していないようです。

具体的にはwireshark上で

No.4618 WindowsPC(192.168.0.24) → Armadillo-840(192.168.0.1) へのSYNC
No.4619 Armadillo-840(192.168.0.1) → WindowsPC(192.168.0.24) へのSYNC ACK

までは確認できますが、最後に WindowsPCからArmadillo-840へ送られるはずのACKが出ていません。
私の環境では、問題なくスリーウェイハンドシェイクができているのがwiresharkで確認できています。
他のWindows PCを使って試してみるのも手かと思います。

私が試した環境は以下になります。

> イメージファイル作成ファイルのバージョン、

atmark-dist ver 20140602
Linux Kernel v3.4-at8

> コンフィギュレーションで導入したプログラム、

HowToで有効化したsamba関係以外はデフォルト設定のままです。

> 操作PCのOSの情報など

以下の2つのPCから接続できることを確認しました。

- Windows 8.1 pro 64bit
- Windows 7 Home Preminum 64bit

以上です

田中です。

返信有難うございます。
返事が遅くなり申し訳ございません。

> Armadillo-840側の139ポートは穴があいてるようですが、
> どうもTCPのスリーウェイハンドシェイクが確立していないようです。
>
> 具体的にはwireshark上で
>
> No.4618 WindowsPC(192.168.0.24) → Armadillo-840(192.168.0.1) へのSYNC
> No.4619 Armadillo-840(192.168.0.1) → WindowsPC(192.168.0.24) へのSYNC ACK
>
> までは確認できますが、最後に WindowsPCからArmadillo-840へ送られるはずのACKが出ていません。
> 私の環境では、問題なくスリーウェイハンドシェイクができているのがwiresharkで確認できています。
> 他のWindows PCを使って試してみるのも手かと思います。

ACKが返ってこない要因などはあるのでしょうか。

>
> 私が試した環境は以下になります。
>
> > イメージファイル作成ファイルのバージョン、
>
> atmark-dist ver 20140602
> Linux Kernel v3.4-at8
>
> > コンフィギュレーションで導入したプログラム、
>
> HowToで有効化したsamba関係以外はデフォルト設定のままです。
>
> > 操作PCのOSの情報など
>
> 以下の2つのPCから接続できることを確認しました。
>
> - Windows 8.1 pro 64bit
> - Windows 7 Home Preminum 64bit

私の環境と全く同じようです。
念のため、再度イメージファイルを作成して書き込みましたが、同じ結果になりました。

試した処理
・windows7とsamba2.xでは必要らしいLANManagerの認証レベルの変更設定。
・別PC(windows7、macOSX)による同手順を行いましたが、ファイル共有はできませんでした。
・NAS(samba3.x使用)を用いて、windows7×2台、macOSXでのファイル共有可能を確認。

上記を試しましたが、改善は見られませんでした。
クライアント側には問題ないように感じました。

色々試しましたが、他に手立ても思いつきませんので、
debian用のsambaをクロスビルドする方向も模索していきたいと思います。