argius note

プログラミング関連

Mac miniを常駐マシンに (3) - サービス管理

今更ながら、この手の記事は探すとかなりの数が見つかりますね。本まで出ています。「Mac mini 自宅サーバ」で検索すると多数ヒットします。
ここで紹介しているのは、そういった手順を参考にせず進めていくので、いきあたりばったりで行った場合の例として、そして失敗例として、捉えていただくとよろしいかと思います。


さて、これ以降は、サービス(デーモン)をいくつか起動させますので、いくつかのポートを開ける危険があることにご留意ください。

サービス管理(launchd,lingon)

MacOSX 10.6 (Snow Leopard)の時点では、サービス管理サーバ?*1はinetdではなく、launchdというものを採用しているようです。

Mac OS Xは(Mac OS X v10.2 以降)xinetd を使っていた。Mac OS X v10.4 では、inetd の機能は launchd に統合されている。

inetd - Wikipedia

launchdは設定ファイルを準備するのが面倒そうなので、GUIで管理できるlingonというオープンソースのソフトを使うことにしました。

launchdは、plistという形式の設定ファイル(XML)を使用しており、lingonではこのファイルを簡易XMLエディタで編集でき、これがダイアログの入力とリンクするようになっているようです。

各種デーモン(telnetd,ftpd,httpd)

まずは、httpdを起動してみることにしました。"system daemons"というタブを選択すると、警告が表示され、その後でパスワード入力が要求されます。
この中に、Apache-Httpdが既に設定されていますが、無効になっているので、有効にしてロードしてあげます。他のPCからブラウザでアクセスすると、無事、"It works!"と表示されました。"/Library/WebServer/Documents"がDocumentRootになっています。
telnetdも同様に有効にして、ここからはメイン機で遠隔操作ができるようになりました。ftpdも同様に試しましたが、今の時点では閉じておきます。
"user daemons"を見ると、PostgreSQLが登録されていました。手動で起動したので、これを停止してからlingonにて起動し直しました。

SCMサーバ(cvs-pserver,svn-webdav)

現在運用しているSCMリポジトリは、CVSメイン、CVS作業用、SVNメイン、SVN作業用があります。これらをこのMacに載せようと思います。CVSSVNもインストール済みなので、サービス設定から。
ではCVSから。これが端っから嵌ります。最初に試したときは上手く行ったのに、許可ディレクトリを追加しようとすると追加できません。
あとで冷静になって調べてみたら、やっと解決。それまでの手順は、

  1. ポート2401は既に誰か(おそらくXcode)がcvspserverを起動している。
  2. ポートを変えてやってみるがダメ。
  3. コマンドが間違っているのかと思って変えてみたがダメ。
  4. ようやくsyslodを見るべきことに気づく。どうやらreloadがされていないっぽい。
  5. コマンドラインから直接launchctlでreload。成功。

lingonにも"Unload"はあるのですが、メニューが無効になっていたので、"Save&Load"だけでやっていたのでした。これが解決するまでは、lingonは編集のみで、リロードはコマンドでやることにします。リモートでできますし。

  • cvspserverの設定
<?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>Disabled</key>
        <false/>
        <key>Label</key>
        <string>local.cvspserver</string>
        <key>OnDemand</key>
        <true/>
        <key>Program</key>
        <string>/usr/bin/cvs</string>
        <key>ProgramArguments</key>
        <array>
                <string>cvs</string>
                <string>--allow-root=/opt/local/var/cvs/work</string>
                <string>pserver</string>
        </array>
        <key>RunAtLoad</key>
        <false/>
        <key>Sockets</key>
        <dict>
                <key>Listeners</key>
                <dict>
                        <key>SockPassive</key>
                        <true/>
                        <key>SockServiceName</key>
                        <string>52401</string>
                        <key>SockType</key>
                        <string>stream</string>
                </dict>
        </dict>
        <key>UserName</key>
        <string>root</string>
        <key>inetdCompatibility</key>
        <dict>
                <key>Wait</key>
                <false/>
        </dict>
</dict>
</plist>


SVNは、Apache-Httpdのmod_dav_svn(WebDAVのモジュール)でやってみました。こちらは割とすんなり行きました。以下に挙げた点などを注意すれば大丈夫そうです。

更にHTTPSで接続できるようにしようかと思います。これは今後Apache-Httpdの詳細設定でまとめて行う予定ですので、今回はここまで。

プロジェクト管理システム(Trac,Hudson)

MacPortsにより"trac @0.11.6_0"をインストールします。これはちょうど30分かかりました。

$ trac-admin /var/trac/projects/test initenv
$ tracd --port 8000 /var/trac/projects/test

これで設定完了。表示できました。ですが、各所で使用しているのが日本語版なので、英語版は違和感がありますね...。いろいろ面倒なので、日本語版(Trac_ja 11.5)をインストールし直します。

先ほどインストールしたtrac本体と初期化したディレクトリは、いったんアンインストール/削除しておきます。
Zipファイルを"/var/trac"にディレクトリなしで展開し、"setup.py"を実行します。ディレクトリの所有者は、いまのところはログインユーザにしておきます。

$ sudo python setup.py install
$ trac-admin /var/trac/projects/test initenv

tracdは、今度はlaunchdに登録しています。
これで、日本語版が表示できました。ただし、この状態だと認証設定がないのでログインできません。認証設定は、Apache-Httpdに統合してから行う予定です。


最後に、Hudson。これはMacPortsは使えないので、サイトから直接ダウンロード。バージョンは、安定版の最新1.312です。

起動は以下のコマンド。ポートは80,8080,8000が使用済みなので、8888としています。これをlaunchdに設定します。

java -jar /(install-path)/hudson.war --httpPort=8888

起動しました。作業ディレクトリなど、諸々の詳細設定は、これまでと同様に統合の際にまとめて行います。

次回

まだ続く予定です。残りのサービスの設定などをやっていきます。

*1:スーパーデーモン、スーパーサーバ、デーモン管理デーモン、Wikipediaによるとスーパーサーバ型デーモン、一般的な呼称が分かりません。