Mac mini サーバーの外付け HD をホームディレクトリにする
作業メモ。サーバーを Mac mini にリプレースするにあたり、内蔵 HD にはシステムのみ入れて、ホームディレクトリ以下のデータの置き場は外付け HD 上にしようと思った。HD は Mac mini にベストマッチの LaCie mini。で、普通に Leopard をインストールして、ユーザーのホームディレクトリを外付け HD 内に用意したディレクトリに変更(変更方法はこちら参照)。各種サービスの設定をして再起動。自動ログインはオフにしておいても各サービスはデーモンとして動作しているのでユーザーがログインしなくても稼働している。試しに HTTP でアクセスしてみると…見えない。サーバーには到達するが、httpd が正しく動いていない。確かに httpd.conf はいじったけど、apachectl configtest はパスしたしなぁ、と思って SSH でログインしてみると…ホームディレクトリが無いと言われた…。apache も「DocumentRoot が無いよ!」とエラーを吐いている。df してみるとボリュームが無い。diskutil mount /dev/disk1s2 してみると…ガリガリっと外付け HD がマウントされる音がして、apache も正常動作した。そうか、考えてみれば誰もログインしてないのに勝手にディスクをマウントするわきゃない。自動ログインを有効にしておいて、再起動時に GUI でログインするようにしておけばいいんだろうけど、なんかサーバーっぽくなくてイヤだ。てことで、システム起動時に自動で外付け HD をマウントするようにしてみる。
色々と情報を調べる。最近の Mac OS X では /etc/fstab や /etc/rc 等の使用は非推奨。rc の代わりに LaunchDaemons というのを使うのが流儀らしい。てことで各種デーモンプロセスの起動時にディスクをマウントするコマンドを差し込む作戦で行くことにする。他にもっと良い方法がありそうだけど良く分からない。LaunchDaemons について主に参考にしたのはこちら。
書いた plist は以下の通り。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.SoG.automount</string>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/Volumes/Users/SoG</key>
<false/>
</dict>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/diskutil</string>
<string>mount</string>
<string>/dev/disk1s2</string>
</array>
</dict>
</plist>
KeepAlive に PathState キーを持たせているのは、KeepAlive -> false で起動時に1回呼び出しただけだとちゃんとマウントされなかったので。おそらく FireWire コントローラーの読み込みとの順番とかそんなんのせいだと思うけど良く分からない。KeepAlive -> true だとずっとマウントを繰り返してしまう。それ自体は大して害は無いと思うけど、ログが無駄に膨らむので避けたい。てことで、外付け HD 内の特定のディレクトリ(/Volumes/Users/SoG)の有無を見て、無ければ KeepAlive する(マウントを繰り返す)ようにしたらうまくいった。
KeepAlive
trueまたはfalse、または以下のサブキーを持つディクショナリ
このlaunch.plistで定義されるジョブが、1度起動したら継続的に実行されるのか、あるいはリクエストの度ごとに起動されるのかといった情報を定義する。
デフォルトではfalseが設定されており、リクエストごとに指定のプログラムが起動される。
trueの場合は、1度起動したらそれが終了するまで次のプログラムは実行されない。
true、falseではなくディクショナリが値として設定された場合、ディクショナリの中の条件のどれかが成立した時にプログラムが実行されていなければそれを起動する
あと起動時にキーボードとマウスを接続していないと、Bluetooth がいつまでも入力デバイスを検索し続けてしまうので、同じく LaunchDaemons の Bluetooth Daemon を切っておく。こちらを参考にさせてもらった。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.blued.plist
てことで無事 Mac mini はサーバとして絶賛稼働中。
March 20th, 2009 at 9:06 am
[…] Switched-off Blog » Blog Archive » Mac mini サーバーの外付け HD をホームディレクトリにする […]