会社で仕事をするのに、メインマシンはMacを使っているのだけれど、どうしてもWindowsも使う必要があるので、VMware FusionにWindows 7を入れて使っている。
vmwareにはホストのディレクトリをゲストからアクセスするためのhgfsと言う仕組みがあるのだが、こいつがいまいち使えないのでMacのファイル共有を有効にして、Windowsからマウントして使っていた。
が、どうもこの OS X 標準のファイル共有には問題があるらしく、svn checkoutがうまくいかないとか、PowerPointのファイルが開けないとか変な動作をしていた。
そこで、ファイル共有を捨てて、sambaを使ってみることに。
参考にしたのは、スタジオとぅえいん アーカイブス | Lion/Mountain Lion環境下でSambaを起動するための手順メモ
参考手順だと、netbiosdとsmbdを止めることになっているが、Macの設定でファイル共有をoffにするとsmbdは死んでくれる。netbiosdは生き続けるようだ。
で、brewからsambaをインストール。本日時点では samba-3.6.20がインストールされた。/usr/local/Celler/samba/3.6.20ディレクトリに入る。
他のサイトとかを見ていると、古いFormulaだとprivateディレクトリが作られない問題があったらしいが、現時点のものだとprivateディレクトリは作成された。
/usr/local/Celler/samba/3.6.20/etc/smb.confも作成されるようだが、中身は空だった。
そこで、/Library/Caches/Homebrew/samba-3.6.20.tar.gz を展開し、中からexamples/smb.conf.default を取り出して/usr/local/Celler/samba/3.6.20/etc/smb.confにコピー。
smb.confの中身を適宜修正。
  • workgroupを適当に修正
  • server stringを適当に修正
  • load printers を no に修正(プリンタは別で共有していたので)
  • [global]セクションに以下を追加
    unix charset = UTF-8-MAC
    
  • [printers]セクションを全部コメントアウト
気になったのは、log file のところで /usr/local/samba/var を指定していたこと。brewでインストールすると /usr/local/samba ディレクトリは存在しない。
ここを/usr/local/Celler...に修正しても良いのだが、将来バージョンが変わった時のことを考えて、/usr/local/Celler/samba/3.6.20 から /usr/local/samba にシンボリックリンクを張った。
この状態で、手でnmbdとsmbdを起動してみる。
# /usr/local/sbin/nmbd -D
# /usr/local/sbin/smbd -D
で、psコマンドで見てみるとsmbdはいるがnmbdがいない。/usr/local/Celler/samba/3.6.20/var/log.nmbdを見ると、
[2014/01/10 14:18:52,  0] nmbd/nmbd.c:861(main)
  nmbd version 3.6.20 started.
  Copyright Andrew Tridgell and the Samba Team 1992-2011
[2014/01/10 14:18:52,  0] lib/util_sock.c:667(open_socket_in)
  bind failed on port 137 socket_addr = 0.0.0.0.
  Error = Address already in use
とか出てる。ポート137がLISTENできないらしい。
おそらく、nmbdの役目をnetbiosdがやっているのだろう。
参考サイトの手順通りにnetbiosdを止めても良かったのだが、ここはnetbiosdにまかせてみることにする。
後は、smbpasswd -a でアクセスしたいユーザを追加し、パスワードを設定してやると、無事にWindowsからアクセスできた。
特に文字コード系の設定はsmb.confには入っていないのだが、日本語のファイル名もちゃんと見えている。「が」みたいなMac特有のNFD/NFCの問題も大丈夫そうだ。(実は、最初unix charset=UTF-8-MACを書かなかったら、見た目は問題なかったがブリーフケースによるファイルの同期で問題があった)
後は、OSの起動時に起動して欲しいので、参考サイトに従ってsmbd用のplistファイルを作成し、一度smbdを殺した後、launchctl load でlaunchdから起動できるようにした。
一応plistファイルとコマンドラインを転載しておく。
org.samba.smbd.plist

上記ファイルを /Library/LaunchDaemons/に置き、
# launchctl load -w /Library/LaunchDaemons/org.samba.smbd.plist
で有効化。
参考サイトだと、smbdの起動オプションが-Dになっていたけど、それだとlaunchdがsambaが死んだと思って10秒置きに再起動してくれる。
2014/01/10 16:29:55.831 com.apple.launchd[1]: (org.samba.smbd) Throttling respawn: Will start in 10 seconds
んで、samba側は死んでいないので、ERROR: smbd is already running. とか言い続ける。
-Dオプションの代わりに、-Fオプションを使うようにすれば、launchdに死んだと誤解されないようになった。
さらにlog.smbdを見ていると、以下のログが出ている。
[2014/01/10 18:41:25,  0] smbd/server.c:1072(main)
  smbd version 3.6.20 started.
  Copyright Andrew Tridgell and the Samba Team 1992-2011
[2014/01/10 18:41:25.999537,  0] smbd/server.c:1128(main)
  standard input is not a socket, assuming -D option
[2014/01/10 18:41:26.005124,  0] lib/util.c:1723(set_maxfiles)
  set_maxfiles: setrlimit for RLIMIT_NOFILE for 16404 files failed with error Invalid argument
最初の standard input is not a socket, assuming -D option の方は、launchdが標準入力を与えてくれないせいだと思うので、ほっておいて良いと思われる。
次の、set_maxfilesの方は、一度に開けるファイルの上限を16404にしようとして失敗したよ?というもので、実際にWindowsで大量のファイルをコピーしようとしたら失敗した。
調べてみると、MacでHomeBrewのSambaは使えました(ちょっと面倒)。:毎回サブタイトル考えるの面倒いなぁ:So-net blogと言うページがヒット。
ここから(とか他のところを見て)わかったことは、
  • smb.confにmax open filesと言うパラメータがあるが、16404より小さくできないこと。
  • macの場合、setrlimitでRLIMIT_NOFILEに設定できる値の上限はkern.maxfilesperprocになっていること
そして、実際に試してみてわかったことは、kern.maxfilesperprocはkern.maxfilesに依存していること。(これは、ulimit -nが失敗するかどうかで判断したので、本当はmaxfilesの方は不要かもしれない)
と、言うわけで、以下を実行してからsmbdを再起動したら、このメッセージは出なくなった。
sysctl -w kern.maxfiles=16404
sysctl -w kern.maxfilesperproc=16404
sysctl -w で設定した内容は、再起動したら消えてしまうので、/etc/sysctl.confに以下を書いておいた。(Macの場合、デフォルトではこのファイルは存在していないが、あれば読んでくれるらしい。試してないけど)
kern.maxfiles=16404
kern.maxfilesperproc=16404

しっかし、この16404って言う数字、Windows 7から来てるらしいけど、なんでそんなに大きくしたかねえ。(ちなみに、macのデフォルトは12288/10240だった。)

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: Macでsamba

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3110

コメントする

このブログ記事について

このページは、falseが2014年1月10日 15:00に書いたブログ記事です。

ひとつ前のブログ記事は「asteriskの導入 (3)」です。

次のブログ記事は「TeraStationの最期」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1