#freeze
 squid は プロキシキャッシュのサービス。&br;
 オープンソース(ライセンスは GPL)。クラスプラットフォーム。ヤリイカだそうです。
 
 - [[squid(公式/英語):http://www.squid-cache.org/]]
 -- [[Squid Versions(Download):http://www.squid-cache.org/Versions/]]
 - [[Squid cache (Wikipedia):http://ja.wikipedia.org/wiki/Squid_cache]]
 
 ソースは 2.x まで C、3.0 から C++ になっているので注意。&br;
 3.x 系の安定バージョンは 2010年 05月 現在 3.1.3。
 3.x 系の最新(安定?)バージョンは 2010年 05月 現在 3.1.3。
 
 #contents
 
 ** とりあえず使ってみる [#pf8edc27]
 Fedora 12 などの最近の Linux には squid をインストール時に組み込めたりする。&br;
 インストールで導入してない場合は、パッケージをインストールして使ってみる。
 
 + スーパーユーザになる。
  $ su
 + squid をインストールする。
  # yum install squid
 + /etc/squid/squid.conf を開いて、次の項目を変更、追加。&br;
 -- "acl CONNECT method CONNECT" の次の行くらいに以下を追記。&br;
  acl example_net src 192.168.0.0/255.255.255.0
 ※"example_net" は何でも良い。下の http_access allow の記述に合わせる。&br;
 ※この IP はローカル使用を想定してます。
 -- "http_access deny all" の前の行に以下を追記。&br;
  http_access allow example_net
 ※"example_net" は何でも良い。上の acl の記述に合わせる。
 -- "http_access deny all" の次の行くらいに以下を追記。&br;
  forwarded_for off
 -- 次の行を追記。(多分どこでも良い)&br;
  visible_hostname squid.example.com
 ※ローカルで使用する名前なら何でも良い。
 -- 次の行を追記。(多分どこでも良い)&br;
  request_header_access X-Forwarded-For deny all
  request_header_access Via deny all
  request_header_access Cache-Control deny all
 + /etc/squid/squid.conf を設定
 -- 後述参照
 + 「システム」→「管理」→「ファイアーウォール」を開く。
 + 画面左ペインから「その他のポート」を選択。
 + 画面右ペインで「追加」を押して 3128 番(squid)を選択して「OK」。
 + 「適用」を押して設定画面を閉じる。
 + squid を起動。
  /etc/rc.d/init.d/squid start
 + 自動起動の設定もしておく(任意)
  # chkconfig squid on
 
 これで、このサーバを介してインターネットに接続してみる。
 
 IE8 なら、「ツール」→「インターネットオプション」→「接続」タブ→「LANの設定」で「プロキシサーバ」のチェックボックスを ON にして、アドレスに上記で設定した Linux サーバの IPを、ポートに 3128 を設定。
 
 Firefox の場合も 「ツール」→「オプション」→「詳細」タブ→「ネットワーク」タブの接続グループに同様の設定がある。
 
 上記設定をして、どこかインターネットのページ(www.yahoo.co.jp とか)を開いてみる。開ければ、とりあえず動いてるということ。
 
 ** コンパイルして実行してみる [#p052867c]
 今度は yum ではなく、squid のソースから導入してみる。
 
 + まず、ダウンロード。
 -- [[squid downlad:http://www.squid-cache.org/Versions/]]
 -- どこでもいいけど、ここは /home/(ユーザ名)/download に squid-3.1.x.tar.gz として保存したとする。
 + スーパーユーザになる。&br;
  $ su
 + カレントを移動する。
  # cd /home/(ユーザ名)/download
 + ダウンロードした書庫を展開する。
  # tar zxvf squid-3.1.x.tar.gz
 ※squid-3.1.x というディレクトリができる。
 + カレントを移動する。
  # cd squid-3.1.x
 + configure して Makefile をつくる。
  # ./configure
 インストール先はデフォルトで /usr/local/squid になるので、これを変えたい場合は prefix オプションで指定する。&br;
  # ./configure --prefix=/hoge/squid
 とか。
 + make する。
  # make
 + 特にエラーがなければインストールする。
  # make install
 + ここまでで、/usr/local/squid にインストールされているはずなので、確認。
  # ls /usr/local/squid
 + squid 用のグループがあるか確認。
  # grep squid /etc/group
 -- 見つかれば、すでにあるということ。私の環境には以下のようなグループが既にあった。
  squid:x:23:
 ※yum で squid を入れると勝手に作成されるのかな。。ちとよくわからん。
 -- ない場合は作成。
  # groupadd squid
 + squid 用のユーザがいるか確認。
  # grep squid /etc/passwd
 -- 私の環境には以下のようなユーザが既にいた。
  squid:x:23:23::/var/spool/squid:/sbin/nologin
 -- いない場合は作成。
  # useradd -g squid -s /sbin/nologin squid
 ※明示的なログインを不可にするので、ホームディレクトリはいらんでしょう。多分。
 + キャッシュディレクトリを作成。
  # mkdir /usr/local/squid/var/cache
 + ロック用のディレクトリを作成。
  # mkdir /usr/local/squid/var/lock
 + ログディレクトリを作成。
  # mkdir /usr/local/squid/var/logs
 ※これは多分インストールで作成されてると思う。
 //+ PID 用のディレクトリを作成。
 // # mkdir /usr/local/squid/var/run
 // # mkdir /usr/local/squid/var/run/subsys
 //※これは /var/run とかにした方がいいかもしれないけど。
 //+ ロック用のディレクトリを作成。
 // # mkdir /usr/local/squid/var/lock
 //+ ログディレクトリを作成。
 // # mkdir /usr/local/squid/var/logs
 //※これは多分インストールで作成されてると思う。
 + キャッシュとログのディレクトリのオーナーを squid に変更する。
  # chown squid /usr/local/squid/var/cache
  # chown squid /usr/local/squid/var/logs
  # chown squid /usr/local/squid/var/run
  # chown squid /usr/local/squid/var/lock
  # chown squid.squid /usr/local/squid/var/cache
  # chown squid.squid /usr/local/squid/var/logs
  # chown squid.squid /usr/local/squid/var/run -R
  # chown squid.squid /usr/local/squid/var/lock
 或いは、こうかな。
  # chown -R squid /usr/local/squid/var
 + squid.conf を設定する。
 -- 上記 yum で設定したものがあれば /usr/local/squid/etc にコピー。
  # mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.org ← 一応バックアップ
  # cp /etc/squid/squid.conf /usr/local/squid/etc/squid.conf
 -- なければ、上記を参考に設定。
  # vi /usr/local/squid/etc/squid.conf
 -- 上記に加えて、以下も設定。
 --- cache_dir の設定を変更。
  # chown -R squid.squid /usr/local/squid/var
 + squid.conf を設定。
 -- 後述参照
 + キャッシュディレクトリを作成。
  # cd /usr/local/sbin  (←インストールしたところ)
  # ./squid /usr/local/squid/sbin/squid -z
 
 ここまでで、一応動くようになっているはず。
 
 squid ユーザで、とりあえずログ出力させながら起動してみる。
  # sudo squid /usr/local/squid/sbin/squid -N -d1
 
 ※-Nd1 というのは、非デーモン、デバッグログを出力するモードで起動する、というオプションです。&br;
 ※実行後プロンプトに復帰しないので、停止させる場合は Ctrl + C で。
 
 特にエラーが出ていないようなら、Windows などの PC で接続してみる。&br;
 Windows 側のインターネットの設定方法は、上述と同じで。
 
 ** squid.conf の設定 [#fa7398a7]
 
 いっぱいあるけど、とりあえず動かす為にやっておいた方が良い設定だけ。
 
 - アクセスコントロールの設定&br;
  acl example_net src 192.168.0.0/255.255.255.0
 ※"acl CONNECT method CONNECT" の次の行くらい。&br;
 ※"example_net" は何でも良い。下の http_access allow の記述に合わせる。&br;
 ※この IP はローカル使用を想定してます。
 - アクセス許可&br;
  http_access allow example_net
 ※"http_access deny all" の前の行。&br;
 ※"example_net" は何でも良い。上の acl の記述に合わせる。
 - ローカルIPを見えなくする設定&br;
  forwarded_for off
 ※多分どこでも良い
 - プロキシの表示名設定&br;
  visible_hostname squid.example.com
 ※多分どこでも良い。&br;
 ※ローカルで使用する名前なら何でも良い。
 - プロキシを通過したことを隠す場合は以下を設定&br;
  request_header_access X-Forwarded-For deny all
  request_header_access Via deny all
  request_header_access Cache-Control deny all
 ※多分どこでも良い。
 - cache_dir の設定を変更&br;
  #cache_dir ufs /var/spool/squid 100 16 256
  cache_dir ufs /usr/local/squid/var/cache 1024 16 256
 ※コメントになってるので、有効にしてパスとサイズを書き換える。&br;
 ※ここは サイズ 1G としてますが、お好みで。
 --- coredump_dir の設定変更。
 - coredump_dir の設定変更&br;
  #coredump_dir /var/spool/squid
  coredump_dir /usr/local/squid/var/cache
 + キャッシュディレクトリを作成させる。
  # sudo squid /usr/local/squid/sbin/squid -z
 ※ユーザ squid が所有者となるように sudo で実行。
 ※cache_dirと同じところに。
 - squidを実行するグループとユーザを設定&br;
  cache_effective_user squid
  cache_effective_group squid
 
 ここまでで、一応動くようになっているはず。
 ** Windows でコンパイルしてみる [#w0346b02]
 
 squid ユーザで、とりあえずログ出力させながら起動してみる。
  # sudo squid /usr/local/squid/sbin/squid -NCd1
 Windows で squid をコンパイルする場合は、主に MinGW(+ msys)を使う方法と、Cygwin を使う方法がある。それぞれの環境の導入方法などは [[こちら>UNIX on Windows]] を参考に。Visual Studio でもコンパイラを GCC にすればいけるかもしれないけど、私は試してない。
 
 ※-NCd1 というのは、非デーモン、デバッグモードで起動する、というオプションです。&br;
 ※実行後プロンプトに復帰しないので、停止させる場合は Ctrl + C で。
 基本的なやり方は Linux でのやり方(上述)と同じだが、[[公式サイトの解説:http://wiki.squid-cache.org/SquidFaq/CompilingSquid]] によれば、それぞれ configure に次のオプションをつけた方が良いらしい。
 
 特にエラーが出ていないようなら、Windows などの PC で接続してみる。&br;
 Windows 側のインターネットの設定方法は、上述と同じで。
 ''MinGW の場合''
  $ ./configure \
  --disable-wccp \
  --disable--wccpv2 \
  --enable-win32-service \
  --enable-default-hostsfile=none
 
 ''Cygwin の場合''
  $ ./configure \
  --disable-wccp \
  --disable--wccpv2
 
 ''Windows でのコンパイルについて''
 disable-wccp というのは、Windows は POSIX が使えないので、それを無効にするオプションらしい。 enable-win32-service は Windows のサービスとしてコンパイルするということだと思う。
 
 Windows 上で MinGW を使ってコンパイルを試みたが、結論からいうと上手くいかない。&br;
 [[公式サイトの通り:http://wiki.squid-cache.org/SquidFaq/CompilingSquid#MinGW_.28Windows.29]] にやってみたら、configure までは問題なさそうなんだけど、make でコケる。
 *** msys での起動パス [#j1659e52]
 msys で squid を起動しようとすると、パスがおかしいためか起動できない。(どう見てもあるはずのファイルがないよと怒られる)
 
 どうやら、sys/ipc.h, sys/shm.h, sys/msg.h という 3 つのファイルが Linux の GCC にはついているようだが、MinGW にはこれらがない。squid はこれらを include しているようで、make しようとすると、そんなファイルはないと怒られてしまう。
 デフォルトでは、インストール先が /usr/local/squid となるが、これは msys が指す /usr/local(実パスは (msysインストールフォルダ)\local )ではなく、C:\usr\local を指している為。
 
 もう少し調べてみよう...
 なので、インストールフォルダをまるまる C:\usr\local\squid にコピーして DOS プロンプトで起動してやれば動く。
 
 *** 起動スクリプトをつくる [#d0567eff]
  C:\> cd C:\usr\local\squid\sbin
  C:\usr\local\squid\sbin> squid -z
  C:\usr\local\squid\sbin> squid
 
 ちなみに、Cygwin ならそのまま動作するようだ。
 
 *** 3.1.x はコンパイルできない? [#qb4bd8be]
 [[squid-2.7.STABLE9:http://www.squid-cache.org/Versions/v2/2.7/]] や [[squid-3.0.STABLE25:http://www.squid-cache.org/Versions/v3/3.0/]] であれば、特に問題なくコンパイルできた。configure も make もエラーなし。ただ、現時点(2010/05/19)の最新バージョンである [[squid-3.1.3:http://www.squid-cache.org/Versions/v3/3.1/]] は上手くコンパイルできない。これは MinGW でも Cygwin でも同様。ただ、エラーの内容が両者で異なる。MinGW の場合、sys/ipc.h, sys/shm.h, sys/msg.h が見つからない、というエラー。これらのファイルは Linux の GCC にはついているようだが、MinGW にはない。 Cygwin の場合、compat/os/mswin.h のコンパイルで、定義の衝突やら未定義やらのエラーが大量に出る。STABLE じゃないから?
 
 どちらも何か調整が必要なのかもしれない。もう少し調べてみよう...
 
 ** 起動スクリプトをつくる [#d0567eff]
 
 yum でインストールされたスクリプトを参考に、以下のようなスクリプトを書いてみた。
 
 #code(sh){{
 #!/bin/bash
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
 # install dir
 prefix=/usr/local/squid
 # exec dir
 exec_prefix=${prefix}
 # program name
 progname=squid
 # lock file
 lockfile=/usr/local/squid/var/lock/subsys/$progname
 lockfile=${prefix}/var/lock/subsys/${progname}
 # program path
 prog=/usr/local/squid/sbin/squid
 prog=${prefix}/sbin/squid
 # config file path
 conffile=/usr/local/squid/etc/squid.conf
 conffile=${prefix}/etc/squid.conf
 # log file
 logfile=/usr/local/squid/var/logs/squid.out
 logfile=${prefix}/var/logs/squid.out
 # PID file
 pidfile=/usr/local/squid/var/run/squid.pid
 pidfile=${prefix}/var/run/squid.pid
 # shutdown timeout
 stoptimeout=20
 stoptimeout=120
 
 RETVAL=0
 
 start() {
 	echo -n $"Starting $prog: "
 	echo -n $"Starting $progname: "
 	$prog -f $conffile >> $logfile 2>&1
 	RETVAL=$?
 	[ $RETVAL -eq 0 ] && touch $lockfile
 	[ $RETVAL -eq 0 ] && echo_success
 	[ $RETVAL -ne 0 ] && echo_failure
 	echo
 	return $RETVAL
 }
 
 stop() {
 	echo -n $"Stopping $prog: "
 	echo -n $"Stopping $progname: "
 	$prog -k shutdown -f $conffile >> $logfile 2>&1
 	RETVAL=$?
 	if [ $RETVAL -eq 0 ] ; then
 		rm -f $lockfile
 		timeout=0;
 		while : ; do
 			[ -f $pidfile ] || break
 			if [ $timeout -ge $stoptimeout ]; then
 				RETVAL=1
 				break
 			fi
 			sleep 1 && echo -n "."
 			timeout=$((timeout+1))
 		done
 		echo_success
 		echo
 	else
 		echo_failure
 		if [ ! -e $lockfile ]; then
 			RETVAL=0
 		fi
 		echo
 	fi
 	return $RETVAL
 }
 
 reload() {
 	$prog -k reconfigure -f $conffile
 }
 
 restart() {
 	stop
 	start
 }
 
 rhstatus() {
 	status $prog && $prog -k check -f $conffile
 }
 
 
 case "$1" in
 start)
 	start
 	;;
 
 stop)
 	stop
 	;;
 
 reload|force-reload)
 	reload
 	;;
 
 restart)
 	restart
 	;;
 
 
 status)
 	rhstatus
 	;;
 
 *)
 	echo $"Usage: $0 {start|stop|status|reload|force-reload}"
 	exit 2
 esac
 
 exit $?
 }}
 
 これを /usr/local/squid/var/bin に squid.debug などとして保存して実行してみる。
 
  # /usr/local/squid/var/bin/squid.debug start
 
 多分、キャッシュに書き込み権限がないと怒られて、うまく起動できない。
 上手く動いたらバンザイ。
 
 root で実行してるのに権限がないとは何事か!と悩んだのだけど、最近の Linux には SELinux という権限を管理するモジュールが組み込まれていて、これが有効だと root といえども、他人が所有権を持っているファイルを自由にできないらしい。
 *** 参考サイト [#f6813d62]
 - [[シェルスクリプト(Bash):http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html]]
 
 一番簡単なのは、SELinux 自体を無効にしてしまうことだが、乱暴過ぎるので、squid を実行するユーザを squid.conf に設定する。
 ** Cache Manager を使えるようにする [#j4b4ce7a]
 
 ということで、squid.conf を開く。
 キャッシュマネージャというのは、squid がとっているログ情報を Web 上で閲覧できるようにするスクリプト。squid をインストールすると、漏れなく付属してくるが、デフォルトのままでは使えない。
 
  # vi /usr/local/squid/etc/squid.conf
 あと、Web サーバの Apache の設定もする必要がある。多分。
 
 適当なところに以下の2行を追加。(多分どこでも良い)
 + Apache がない場合は、まずインストール。
  # rpm -qa | grep httpd
 して、何も表示されない場合は未インストールなので入れる。&br;
  # yum install httpd
 + スクリプトを置くディレクトリを作成。&br;
  # mkdir /var/www/cgi-bin/squid
 ※ /var/www/cgi-bin は Apache をインストールすれば作成されているはず。
 + スクリプトが実行できるように、httpd.conf を編集。
  # vi /etc/httpd/conf/httpd.conf
 &br;
 以下の設定を追加。
  <Directory "/var/www/cgi-bin/squid">
    order allow,deny
    allow from all
  </Directory>
 ※ アクセス元を限定する場合は allow from の後に指定する。
 + cachemgr.cgi を スクリプトディレクトリにコピー。
 -- cachemgr.cgi は /usr/local/squid/libexec の下にある。&br;
  # cp /usr/local/squid/libexec/cachemgr.cgi /var/www/cgi-bin/squid
 + cachemgr.conf を設定。
 -- /usr/local/squid/etc の下の cachemgr.conf には デフォルトで localhost だけが設定されているので、これにポート番号をつける。
  # vi /usr/local/squid/etc/cachemgr.conf
 &br;
  localhost:3128
 ※ ポート番号は squid が使っているポート番号。
 + squid.conf で、キャッシュマネージャにアクセスできるように設定。
 -- ここは LAN 内の接続からならアクセスできるようにする。&br;
  acl example_nw src 192.168.0.0/24
 という定義を追加して、http_access deny manager という行の直前に&br;
  http_access allow manager example_nw
 を追加する。&br;
 ※ example_nw という名前は何でも OK。
 
  cache_effective_user squid
  cache_effective_group squid
 これでキャッシュマネージャは使えるようになってるはずなので、Apache と squid をリロードして確認。
 
 これで、squid というユーザで実行されるようになる。
  # /etc/rc.d/init.d/httpd restart
  # /usr/local/squid/sbin/squid -k reconfigure
 
 *** 参考サイト [#f6813d62]
 - [[シェルスクリプト(Bash):http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html]]
 これで、ブラウザから http://(プロキシサーバ)/cgi-bin/squid/cachemgr.cgi にアクセスしてみる。
 
 ** 参考 [#id28b92e]
 「Cache Manager Interface」の画面が出たら、そのまま「continue」ボタンを押す。ユーザは設定してないので、Manager name と Password は空で OK。
 
 統計情報の一覧が表示されれば、設定完了。
 
 *** Permission denied が出る場合 [#e5307bd2]
 環境によっては上記の設定だけだとパーミッションで蹴られる。
 
  Cache Manager Error
  (プロキシサーバ) (13) Permission denied
 
 /usr/local/squid/var/cache や /logs のパーミッションを確認しても問題なさそうという場合は SELinux が疑われる。
 
 /var/log/audit/audit.log を確認してみて、
 
  type=AVC msg=audit(1274851190.959:27996): avc:  denied  { name_connect } 
  for  pid=4083 comm="cachemgr.cgi" dest=3128 
  scontext=unconfined_u:system_r:httpd_sys_script_t:s0 
  tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket
  type=SYSCALL msg=audit(1274851190.959:27996): arch=40000003 syscall=102 
  success=no exit=-110 a0=3 a1=bf83cb70 a2=8615078 a3=3 items=0 ppid=2537 
  pid=4083 auid=500 uid=48 gid=489 euid=48 suid=48 fsuid=48 egid=489 sgid=489 
  fsgid=489 tty=(none) ses=1 comm="cachemgr.cgi" exe="/var/www/cgi-bin/squid
  /cachemgr.cgi" subj=unconfined_u:system_r:httpd_sys_script_t:s0 key=(null)
 
 みたいなログが出てたら、SELinux がクロ。
 
 GNOME なら、「システム」→「管理」→「SELinux Management」を開いて、左ペインから「システムドメイン」を選択し、右ペインで「httpd_sys_script」を選択して「許容」しておくと幸せになれるかも。
 
 *** 参考サイト [#kb2ef0c1]
 - [[Squidの設定 【Squid Web プロキシ & キャッシュ】:http://squid.robata.org]]
 -- [[キャッシュマネージャ:http://squid.robata.org/faq_9.html]]
 
 ** カスタマイズしてみる [#gfc242ed]
 
 作業しやすいように Eclipse CDT に取り込んでみるよ。
 
 Eclipse CDT はこちら。
 
 - [[Eclipse C/C++ Development Tooling - CDT:http://www.eclipse.org/cdt/]]
 
 + squid-3.x.x.tar.gz を適当なディレクトリに展開。
 -- ここは /home/hoge/tmp とする。&br;
  $ mkdir /home/hoge/tmp
  $ cp (ダウンロードした場所)/squid-3.x.x.tar.gz /home/hoge/tmp
  $ cd /home/hoge/tmp
  $ tar zxvf squid-3.x.x.tar.gz
  $ ls
  squid-3.x.x squid-3.x.x.tar.gz
 + Eclipse を起動。
 + 「ファイル」→「新規」→「C++ Project」を選択。以下を設定。
 -- プロジェクト名 : squid (何でも OK)
 -- Project Type : 「''Makefile project''」 → 「Empty project」&br;
 Makefile は configure でつくるので、Makefile project にすること!&br;
 ここで Executable にしてしまうと、CDT が勝手にオレオレ Makefile をつくってしまう。
 + 画面左ペインのプロジェクト名を右クリックして「新規」→「フォルダ」で「src」というフォルダを作成。
 + 「src」フォルダを右クリックして「インポート」を選択。
 -- 「一般」→「ファイルシステム」で上記で展開した /home/hoge/tmp/squid-3.x.x ディレクトリを指定。&br;
 → ガッツリとソースがインポートされる。
 + 画面左ペインのプロジェクト名を右クリックして「新規」→「フォルダ」で「build」というフォルダを作成。&br;※名前は何でも良い。
 + 画面左ペインのプロジェクト名を右クリックして「新規」→「フォルダ」で「app」というフォルダを作成。&br;※名前は何でも良い。
 + 「プロジェクト」→「プロパティ」を選択して以下を設定。
 -- 「C/C++ Build」を選択して「Build Settings」タブで以下を設定。
 --- 「Build Location」の「Build Directory」で、上記で作成した「build」フォルダを指定。&br;
 → ${workspace_loc/squid/build}
 + ここでちょっと Eclipse を離れてターミナル操作。
 + Eclipse のワークスペースディレクトリに build ディレクトリが作られているはずなので、そこをカレントにする。
 -- ワークスペースを /home/hoge/workspace とすると、&br;
  $ cd /home/hoge/workspace/squid/build
 + build ディレクトリで configure を実行する。
  $ ../src/configure --prefix=/home/hoge/workspace/squid/app
 ※ これ以外のオプションはお好みでつけてネ。
 + Eclipse に戻って、プロジェクト名を右クリックして「更新」してみる。
 -- 「build」フォルダに Makefile ができているはず。
 + 「build」フォルダを右クリックして「Make Target」→「Create」を選択。以下を設定。
 -- Target Name : 「all」(分かれば何でも OK)
 -- Make Target : 「all」(こっちは「all」とすること)
 + 「build」フォルダを右クリックして「Make Target」→「Create」を選択。以下を設定。
 -- Target Name : 「install」(分かれば何でも OK)
 -- Make Target : 「install」(こっちは「install」とすること)
 + 「プロジェクト」→「Make Target」→「Build」で、「all」を選択して「Build」実行。
 -- 「build」フォルダに出力ファイルがドバーッと出る。
 + 「プロジェクト」→「Make Target」→「Build」で、「install」を選択して「Build」実行。
 -- 「app」フォルダに出力ファイルがドバーッと出る。
 + 「app」フォルダ →「etc」フォルダにある squid.conf ファイルを適切に設定。
 -- 設定方法は上記インストール時の設定と同じ要領で。
 + ターミナルで以下を実行。
  $ cd /home/hoge/workspace/squid/app/sbin
  $ squid -z
 これでキャッシュディレクトリが作成される。
 + 「実行」→「デバッグの構成」を選択して以下を設定。
 -- 「C/C++ Application」を選択。
 --- 名前に「squid Debug」とでも設定。(何でも良い)
 --- 「Main」タブの「C/C++ Application」で「Search Project...」から「squid」(本体)を選択。
 --- 「Arguments」タブの「Program arguments」に以下を設定。&br;
  -Nd1
 ※ これは非サービスモード、デバッグログを出力するオプション。&br;
 ※ オプションの意味が分かれば他にもいろいろ追加して OK。
 --- 「Debugger」タブの「Debugger」に「gdb/mi」を選択。&br;
 ※ デフォルトは「gdb Debugger」なので、そのままでもいいかもしれない。
 + ツールバーの「デバッグ」→「お気に入りの編成」で、上記で作成した構成「squid Debug」を追加する。
 + ツールバーの「デバッグ」か F11 などでデバッグ実行してみる。
 -- 特に問題なければ squid が起動し、main.cc の先頭でブレークする。
 
 後は好きなところにブレークはったり変数いじったりしながら squid を研究するなり料理するなりする。
 
 ちなみに、プログラミングガイドはこれ。
 - [[Squid 3.x  Developer Programming Guide :http://squid.treenet.co.nz/Doc/Code/index.dyn]]
 
 英語ダケドネー。(~_~;
 
 *** 参考サイト [#w2cbd157]
 - [[Eclipse Platformを使用したC/C++ 開発:http://www.ibm.com/developerworks/jp/opensource/library/os-ecc/]]
 - [[CDT デバッガーとのインターフェース: 第 1 回 C/C++ デバッガーのインターフェースを理解する:http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-cdt-debug1/index.html]]
 - [[CDT デバッガーとのインターフェース: 第 2 回 Eclipse の CDT と MI を使って gdb にアクセスする:http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-cdt-debug2/]]
 
 ** その他小ネタ [#r17b344b]
 *** COSS? [#q37b10ad]
 squid 3.x 系は、%%キャッシュディレクトリのタグ(cache_dir)を記述しないことで、Cyclic Object Storage System(COSS)という仕組みが動くようになるらしい%% 動作不安定版らしいです。現状、COSS を使うなら 2.6 以降の 2系が良さそう。
 
 これは何かというと、squid は通常 cache_dir に設定されたディレクトリ配下にサブディレクトリを掘って、そこにキャッシュを格納する。そうではなく、キャッシュを 1つのファイルとして確保し、そのファイル内にある長さで区切られた構造を持たせて、そこから読み書きを行うというのが COSS 。キャッシュ探索が1つのファイル内でのシークとなるので、ディレクトリで階層化した従来の方式より、かなりの速度向上が見込めるらしい。
 
 COSS 自体は squid 2.6 くらいから設定によって利用できるらしいよ。
 
 '''参考'''
 - [[cossとは - はてな:http://d.hatena.ne.jp/keyword/coss]]
 - [[Squid/キャッシュストレージとして COSS を使う:http://www.maruko2.com/mw/Squid/%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%A8%E3%81%97%E3%81%A6_COSS_%E3%82%92%E4%BD%BF%E3%81%86]]
 
 ** 外部リンク [#id28b92e]
 - [[プロキシサーバー構築(Squid):http://fedorasrv.com/squid.shtml]]
 - [[Fedora 12 でプロキシサーバー構築(squid):http://ytooyama.spaces.live.com/blog/cns!916D80FD288EB35A!902.entry]]
 - [[Proxyキャッシュサーバ設定術―Squidの設定:http://arika.org/doc/sd.200112]]
 - [[squidのインストールと設定:http://www.rose.sannet.ne.jp/nterasim/linux/squidinst.html]]
 
 - [[Squid プロキシサーバの設定:http://unixlife.jp/unixlife/linux/s-squid.jsp]]
 - [[システム/サーバ構築:http://www.stackasterisk.jp/tech/systemConstruction/index.jsp]]
 -- [[プロキシサーバSquid:http://www.stackasterisk.jp/tech/systemConstruction/squidSat01_01.jsp]]
 -- [[SquidGurardによるアクセス制御:http://www.stackasterisk.jp/tech/systemConstruction/squidGuard01_01.jsp]]
 -- [[squidの統計情報:http://www.stackasterisk.jp/tech/systemManagement/squidStat01_01.jsp]]
  
 
 
 -----
 [[MLEXP. Wiki]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS