squidでTigerなWebProxyを構築してみる。

 MacOSXでサーバー構築の一環。ターゲットはMacOS X 10.4.2DeveloperToolsをインストールしておかないといけない事忘れてたよorz...
 まずはアーカイブをここからダウンロードする既にインストールされているかな、とも思ったのだがそう甘くは無いらしい・・・。2005/ 7/11日現在のバージョンは、squid-2.5.STABLE10。今回はソースからコンパイルするので、squid-2.5.STABLE10.tar.gzを使用する。
 次に解凍。適当な場所で、

% tar xzf squid-2.5.STABLE10.tar.gzgzip -dc squid-2.5.STABLE9.tar.gz | tar xvf - なんて方法もあるが、個人的にはtar一発の方が好き。

とすると解凍されてディレクトリが出来上がるので、そこに移動してconfigureをかける。ここでデフォルトでは/usr/local/squidにインストールされてしまうのだが、せっかく/usr/local/binがあるので、

% ./configure --prefix=/usr/local/bin/squid

としておくsquidのフォルダが出来てその下にインストールされるので、デフォルトでもいいような気がしてきた(-_-;)。次にコンパイルとインストール。

% make
% sudo make install

 sudoでは当然パスワードを聞いてくるので入力。
 次に設定。設定ファイルは/usr/local/bin/squid/etc/やっぱりデフォルトで良かったorz...にある。mime.confはひとまずそのまま。squid.confをバックアップしてから、以下の部分を編集する。

cache_mem 16 MB
cache_dir ufs /usr/local/bin/squid/var/cache 512 32 256
acl allow_client src 192.168.0.0/255.255.255.0
http_access allow allow_client
maximum_object_size 40960 KB
cache_effective_user squid
cache_effective_group squid

 ま、この辺は好みだから(^^; あと見直しそうなパラメータとしてはcache_access_log、cache_log、cache_store_logあたりかな? あ、ftp_userを設定するのは礼儀かも。
 cache_effective_user、cache_effective_groupを変更しているので、このユーザーとグループをNetInfoマネージャで作成しておく。といっても下手に作るとセキュリティ的にヤバイshellとか気をつけておかないと万が一乗っ取られた時にヤバイ。ので、同じような感じ【笑】のsshdから複製して作成する。
sshdからの変更点としてはユーザーが、

uid 520
home /Library/squid
gid 520
name squid
realname WebProxy

グループは、

realname WebProxy
name squid
gid 520

 さらに/usr/local/bin/squid/のオーナーとグループもsquidに変更しておく。

sudo chown -R squid:squid /usr/local/bin/squid/

 ここまでやったら一度squidを初期化。

sudo /usr/local/bin/squid/sbin/squid -z

 Creating Swap Directoriesと表示され、正常終了すればOK。これで一度、squidのデーモンを起動してみる。

sudo /usr/local/bin/squid/sbin/squid

 起動しているかどうかを確認。

ps wwaux | grep squid

 なぜかrootで実行してるんですけど・・・ これはこれでOKなのかも知れない。実際キャッシュしてそうなプロセスはsquidで動いてるし。
 最後に、Mac起動時にsquidが自動的に起動するように設定する。10.4からはlaunchdを使用する事になる。

辺りを参考に。

 によると、

In step three, launchd scans through a few different directories for jobs to run. There are two different folders types that are scanned. The LaunchDaemons folders should contain items that will run as root, generally background processes. The LaunchAgents folders should contain jobs, called agent applications, that will run as a user or in the context of userland. Often these can be scripts, other foreground items, and they can even include a user interface. When we get to our example we will be creating a user-specific LaunchAgent job. These directories are all kept in the typical Libraries of Mac OS X.

とある。LaunchDaemonsはrootユーザーでバックグラウンド、LaunchAgentsはユーザーとしてフォアグラウンドとあるのだが、squidはユーザーでバックグラウンドなんだけども・・・orz... ひとまず/System/Library/LaunchDaemons/に起動用のファイルorg.squid-cache.plistを置く事にする。んで、その内容なんだけども、

てなところを参考にしつつ、以下のような感じにしてみた。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.squid-cache</string>
<key>Program</key>
<string>/usr/local/bin/squid/sbin/squid</string>
<key>OnDemand</key>
<false/>
</dict>
</plist>

 これでひとまず動作する事を確認。だがこれでホントにいいのかどうかは不明【爆】 コンソールを見ると、

launchd: org.squid-cache: respawning too quickly! throttling
launchd: org.squid-cache: 8 more failures without living at least 60 seconds will cause job removal
launchd: org.squid-cache: will restart in 10 seconds
squid[155]: Squid Parent: child process 157 started
launchd: org.squid-cache: exited with exit code: 1

 と、何やらエラーがでながらも、一応squidは起動しているようには見える。psしてみてもちゃんとプロセスは生きてる感じ。まぁダメな時はlaunchctlで自分で起動するってコトで・・・【木亥火暴】もうちょっと調べてみないとダメね(__)

# launchctl stop org.squid-cache
# launchctl unload org.squid-cache
# launchctl load org.squid-cache
# launchctl start org.squid-cache

 ちなみにunloadとloadは念のためにやっておくだけで、あまり意味はないかも・・・てか、launchctl listで見ると、ちゃんとloadされてるんだけども・・・(?_?)

squidでTigerなWebProxyを構築してみる。” に対して2件のコメントがあります。

  1. fenrir より:

    はじめまして、ここの情報を参考にsquidの自動起動をしました。大変参考になりました、ありがとうございます。
    一点気になったことがあるのですが、squidはバックグラウンドでsquidを開始するフロントエンドのコマンドなので、一度だけ起動すればよいようです。書かれたとおり実行してみましたところ、squid/var/cache.logの中に『Squid is already running! Process ID XXX』がたくさん発生しておりました。そこでOnDemandをtrueに、新たにRunAtLoadをtrueに設定したところ、この現象は収まりました。以上ご報告まで、よろしくお願いします。

  2. Wakui3 より:

    fenrirさん、コメントありがとうございましたm(__)m
    自分でも試行錯誤の結果なので信憑性は???なんですけどね(^^; お役に立てたなら幸いでした。
    squidってフロントエンドだったんですねぇ・・・ なんて程度のレベルなんです、自分も(^^; RunAtLoadと言うキーは知りませんでした。
    こちらこそありがとうございましたm(__)m

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です