macportsでインストールしたapache2が自動起動しない件

相変わらず需要が読めないんですが macports ネタ。記憶の限りでは随分昔のバージョンでは所定の手順で launchctlload すれば macports でインストールした apache2 もOS起動時に自動起動できたはずなのですが、いつの間にかそういう設定にはならなくなったようで。

ただ、実際には OS 起動時にちゃんと load はされてるようで、

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
org.macports.apache2: Already loaded

と返ってきます。ps で確認すると

ps aux | grep httpd
_www             133   0.0  0.0  2436172    704   ??  S    火08PM   0:00.00 /usr/sbin/httpd -D FOREGROUND
root              25   0.0  0.0  2436172   4324   ??  Ss   火08PM   0:07.01 /usr/sbin/httpd -D FOREGROUND

MacOS X 標準の apache2 は立ち上がってるみたいですが macports でインストールした apache2 は動いてない……。macports を利用されてる場合、このケースで悩んでる方がそれなりにいるんじゃないかなぁ?と想像してます。僕自身がしばらくそうだったので。

ということで結構今更感あるのですが、macports 経由で apache2 をインストールして自動起動の設定を施すまでをおさらいしてみようと思います。

macports は既にインストール済ってところから話を始めます。パッケージ管理ツールを入れるところからということなら、今なら homebrew を利用されることをお勧めしときます。ウチでも結構昔にがっつり macports で構築したサーバ用途の MacOS X 以外はもぅ homebrew を利用してます。

sudo port selfupdate

最初から、ということなので前準備から一応書いていきますね。まずは macports 自身のアップデート確認から。macports は 各port のバージョンや依存関係といった情報をローカルで保持するので、この情報が更新されないと色々面倒が起こります。のでこまめに selfupdate しとくのは忘れないように。ウチでは cron で定期的に実行させてます。

sudo port install apache2

次は apache2 のインストール。この例では特にオプションの指定はしてませんのでその辺りはお好みで設定ください。

apache2 のインストールが完了すると /opt/local/etc/LaunchDaemons/org.macports.apache2 に org.macports.apache2.plist が作られるので、

sudo ln -s /opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist /Library/LaunchDaemons/org.macports.apache2.plist

という感じで /Library/LaunchDaemons にシンボリック・リンクを張っときます。で、まぁ本来ならここで launchctl で読み込み設定しておくと一件落着のはずなんですが、それがうまくいかないのがこの件の現象なので、とりあえず org.macports.apache2.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>org.macports.apache2</string>
<key>ProgramArguments</key>
<array>
    <string>/opt/local/bin/daemondo</string>
    <string>--label=apache2</string>
    <string>--start-cmd</string>
    <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
    <string>start</string>
    <string>;</string>
    <string>--stop-cmd</string>
    <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
    <string>stop</string>
    <string>;</string>
    <string>--restart-cmd</string>
    <string>/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper</string>
    <string>restart</string>
    <string>;</string>
    <string>--pid=none</string>
</array>
<key>Debug</key><false/>
<key>Disabled</key><true/>
<key>KeepAlive</key><true/>
</dict>
</plist>

結論から言うと、このファイルの最後の方の Disabledtrue になってるのがそもそもの原因です。この値を false に変更してから

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

を実行すると無事OS起動時にmacportsでインストールした apache2 も起動されるようになります。ただ、MacOS X 標準の apache2 あるいは macports で入れた apache2 それぞれで Listen するポート番号は競合しないように、くれぐれも気をつけてください

また、「macports で入れた apache2 を動かすんだったら MacOS X 標準の apache2 は止めちゃえばいいんじゃね?」と Web共有 をばっさりオフにするとHTTP経由の接続そのものがばっさり閉ざされるので、そこも気をつけてください。

参照URL