前回、FreeBSD 9.1でSambaサーバのNetBIOS名が引けないという話を書きました。その後、使用するネットワークインターフェースをre0からオンボードのae0に変えてみたりしましたが、やっぱり事象は同じ。根本的な原因は難しそうなので、それ以上は調べてません。

ひとつ言えそうなのは、nmbdの起動タイミングがもうちょっとだけ遅かったらうまく行くんじゃね? ということ。マシン起動後に手動でSambaを再起動してやればうまく動くわけですし、起動時はSambaをオフにしといて起動後に手動スタートしてもうまく動きます。

だったら、ということで、試しに /usr/local/etc/rc.d/samba の samba_start_precmd() の冒頭に「sleep 30」を入れてみたら、バッチリ起動直後からNetBIOS名が引けるようになりました。sleepの秒数をどんどん短くしてみると、「sleep 1」だとダメ、「sleep 2」ならOKみたいです。2秒程度なら起動が遅くなってもあんまり影響はないので、じゃあこの手で行くかと。

ただ、/usr/local/etc/rc.d/samba を直接編集すると、Sambaのバージョンアップのたびに補正が必要だったりして面倒なので、nmbdの起動より前に2秒スリープするだけの、簡単なrc.dスクリプトを作ってみました。

#!/bin/sh

# PROVIDE: delay_nmbd
# BEFORE: nmbd

. /etc/rc.subr

name="delay_nmbd"
rcvar=`set_rcvar`
command=":"
start_cmd="echo Sleeping 2 secs...; sleep 2"

load_rc_config $name
run_rc_command "$1"

上記の内容を /usr/local/etc/rc.d の中に delay_nmbd という名前で保存して、

chmod 555 delay_nmbd

で実行フラグを立て、/etc/rc.confに

delay_nmbd_enable="YES"

という行を追加しておけば、nmbdより前に2秒の待ちが入るようになります。

所詮は一時しのぎですが、使用感はいままでと同じになったので、まあよいかと……。

※バージョンメモ

  • FreeBSD 9.1-RELEASE-p0 amd64
  • samba36-3.6.12