週刊これは夢?!

それとも…。
すぐ忘れちゃうので備忘録用ブログ。
週1ペースで書くことを、ゆるい目標にしていました。

サーバ起動後、sambaにアクセスできない:4:対処法

2015-06-10 | 電脳
サーバ起動後にsambaにアクセスできない件について、対処ができた(と思う)ので報告。
経緯:サーバ起動後、sambaにアクセスできない追記解決(できてなかった)

□症状まとめ
FreeBSD で samba3.6 (現在は、portsの samba36-3.6.25)を利用。
sambaのインストール、起動、接続は問題なく行える。
FreeBSDマシンを再起動した際、/etc/rc.confの samba_enable=YES の設定により、
自動でsambaも起動する。
smbd, nmbdのプロセスは動いているが、windowsから接続しようとすると、
「ローカルデバイス名は既に使用されています」というエラーメッセージが出て接続できない。
# service samba restart
によって、sambaを再起動すると問題なく接続できるようになる。

□問題点と対処法
FreeBSDマシンが起動直後のプロセス中に起動するsambaには接続できない。
その後でsambaを再起動すれば接続できる。

今迄は、根本的な解決策を探していたが、みつけることができなかった。
じゃぁ、マシンを起動した後で再起動すれば良いじゃない。(← ここ)

(1) 普通に samba の設定をする。
(2) /etc/crontab に次の設定をする。

@reboot root /bin/sleep 20; /usr/sbin/service samba restart

"@reboot" はマシンを起動した時。
"root" は権限。
"sleep 20 .... restart" は、20秒待機した後、sambaサービスを再起動。
20秒は適当。マシンによって変更できると思う。

ちなみに、標準出力の処理はしていないので、再起動する度にメールが届く。
知らない間に再起動した時に通知が欲しかったので、このままにしておく。



□以下、試行錯誤の備忘録

マシン再起動後、sambaに接続できないので困る。
(鳥頭なのでsambaを再起動しないといけないことをすぐ忘れる)

日本sambaユーザー会のSambaが動作しないときの診断方法を参考に検証作業を行う。

結論:windowsマシンから名前の解決ができない。
(昔もやったことをすっかり忘れていた。前やった時と同じ結論。)

nmbd のログを確認する。

libsmb/nmblib.c:856(send_udp)
Packet send failed to 192.168.xxx.255(137) ERRNO=No route to host
nmbd/nmbd_packets.c:179(send_netbios_packet)
send_netbios_packet: send_packet() to IP 192.168.xxx.255 port 137 failed
nmbd/nmbd_nameregister.c:522(register_name)
register_name: Failed to send packet trying to register name HOGEHOGE

こんな感じのエラーがでてる。

これまでは根本的な解決策を探していたのだが、長いこと解決できていない。
(1) 以前、inetdを利用すると問題が生じなかった。
(2) service samba restart で接続できるようになる。
(3) nmbd にエラーがでている。

以上から、マシンの起動時にsambaが開始されると、nmbdあたりで不具合が生じている可能性が高いと判断した。
nmbdの問題を解決できれば一番良いが、これの解決法はわからない。
またマシン起動時でなければ、問題は生じない可能性が高い。

そこで、対処法として、(a)マシン起動後のsamba起動を遅らせることを考えた。
自動で開始されるサービスの順番を変更したり遅延させる方法で、簡単にできる方法がよくわからない。

システムが想定しているのは、/etc/rc.confに sambad_enable=yesをする設定。
(a)の場合、このあたりを含めてsambaの起動プロセスに手を加える必要が生じる。
問題は、うまくいってると特別な設定をしたことを忘れること(経験則)。
sambaのバージョンアップなどの際に、思わぬ問題が生じる可能性もある。

そこで、これまで通り(b)マシン起動直後にsambaを起動し、しばらくしてからsambaを再起動する、ということを考えた。
これなら、sambaのインストール・起動・設定についてはこれまでのままで良い。
sambaを再起動する設定を加えるだけでいい。
これなら再起動する、ということ以外の影響はなくなる。

今回はcronに起動時の実行する設定があるため、それを利用することにした。
今のところ、これで上手く動いている。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。