« 2015年11月 | トップページ | 2016年1月 »

2015年12月27日 (日)

squid 3.5.12-20151128-r13959 失敗編

Raspberry Pi2でsquid 3.5.12-20151128-r13959 をビルドし、動かしたときに出た不具合です。

・rockを初期化しようとするとエラー …対応済み
・キャッシュディレクトリ作成がエラー …対応済み
・2GB以上のrockが作れない …対応済み
・cache.logにワーニングが記録される …放置
・たくさんログローテーションしてしまう …対応済み
・マルチインスタンス時、cachemgrの表示がおかしい …放置

rockを初期化しようとするとエラー


現象


キャッシュディレクトリ作成(squid -z)でエラー
$ sudo squid -z
----
2015/12/07 01:12:07| assertion failed: ../../src/ipc/AtomicWord.h:88: "Enabled()"
----

起動もエラー
----
$ sudo service squid start
[warn] Starting Squid HTTP Proxy: squid[....] Creating Squid HTTP Proxy cache structure ... (warning).
2015/12/07 01:14:17| assertion failed: ../../src/ipc/AtomicWord.h:88: "Enabled()"
Aborted
Aborted
failed!
----

原因と対策


C++11でコンパイルしていない。
configureのオプションにCXXFLAGS='-std=c++11'を追加する。

キャッシュディレクトリ作成がエラー


現象


$ sudo -u proxy squid -z
----
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid2| Creating missing swap directories
2015/12/08 20:35:05 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:05 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.020 user + 0.020 sys
Maximum Resident Size: 39408 KB
Page faults with physical i/o: 0
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid3| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid3| Creating missing swap directories
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:05 kid1| Set Current Directory to /var/cache/squid
2015/12/08 20:35:05 kid1| Creating missing swap directories
WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:08 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:08 kid2| Creating missing swap directories
2015/12/08 20:35:08 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:08 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.030 user + 0.010 sys
Maximum Resident Size: 39568 KB
Page faults with physical i/o: 0

WARNING: Cannot write log file: /var/log/squid/cache.log
/var/log/squid/cache.log: Permission denied
messages will be sent to 'stderr'.
2015/12/08 20:35:14 kid2| Set Current Directory to /var/cache/squid
2015/12/08 20:35:14 kid2| Creating missing swap directories
2015/12/08 20:35:14 kid2| Creating Rock db: /var/lib/squid/rock
2015/12/08 20:35:14 kid2| ERROR: Failed to initialize Rock Store db in /var/lib/squid/rock; create error: (13) Permission denied
FATAL: Rock Store db creation error
Squid Cache (Version 3.5.12-20151128-r13959): Terminated abnormally.
CPU Usage: 0.040 seconds = 0.030 user + 0.010 sys
Maximum Resident Size: 39568 KB
Page faults with physical i/o: 0
----

原因と対応


/var/run/squidのオーナーがrootになっているのが問題らしい

$ ll /var/run
----
drwxr-xr-x 2 root root 40 12月 7 00:38 squid
----

オーナーをproxyに変更する
$ sudo chown proxy.proxy /var/run/squid

2GB以上のrockが作れない


現象


キャッシュディレクトリ作成時にエラー
$ sudo -u proxy squid -z
----
ERROR: Failed to initialize Rock Store db in /var/cache/squid/rock; truncate error: (22) Invalid argument
----

原因と対応


ビルド時に2GB以上のファイルサポートを有効にしていない。
configureオプションに以下を追加する。
----
--with-large-files
----

cache.logにワーニングが記録される


現象


$ sudo view /var/log/squid/cache.log
----
WARNING: disk-cache maximum object size is too large for mem-cache: 4096.00 KB > 512.00 KB
----

原因と対応


不明。特に問題に問題ないのでそのまま使う。

たくさんログローテーションしてしまう


現象


一度に何世代もローテーションしてしまい、ログがめちゃめちゃになる。
$ ll /var/log/squid
----
-rw-r----- 1 proxy proxy 0 12月 13 06:25 access.log
-rw-r----- 1 proxy proxy 0 12月 13 06:25 access.log.0
-rw-r----- 1 proxy proxy 4360875 12月 14 01:09 access.log.1
-rw-r----- 1 proxy proxy 29476 12月 10 22:55 access.log.2
-rw-r----- 1 proxy proxy 76167 12月 7 20:28 access.log.3
-rw-r----- 1 proxy proxy 4465767 12月 13 06:24 access.log.4
-rw-r----- 1 proxy proxy 536326 12月 7 06:23 access.log.5
---

原因と対応


squid3.5ではsquid -k rotate 時にプロセスの数だけローテーションするため。
cache.log、access.log、cache_swap_logにはプロセス番号を付けるなど別ファイルに分けておく。
必要の無いログは出さないのも有効か。

$ sudo vi /etc/squid/squid.conf
----
cache_swap_log /var/log/squid/cache_swap_${process_number}.log
access_log none
cache_log /var/log/squid/cache_${process_number}.log
----

マルチインスタンス時、cachemgrの表示がおかしい


現象


cache_memで指定したサイズが表示されない。
$ sudo squidclient cachemgr mgr:info
----
Storage Mem size: 2128 KB
Storage Mem capacity: 51.9% used, 48.1% free
----

原因と対応


原因不明。コーディネータの情報だけが表示されているのではないか。
※その後、マルチインスタンスは使用しないことにしましたので、詳細不明です。

ということで、今回でsquid3.5ネタは一旦終了します。

2015年12月26日 (土)

squid 3.5.12-20151128-r13959 解説編Ⅱ(ビルド)

squid 3.5.12-20151128-r13959 ビルド時に明示的に指定したconfigureのオプションとその理由を書いておきます。
オプションの方針としては以下になります。

・Raspbian 2015-05-05のsquid3のビルドオプション流用
・プラス squid3.5特有の修正(C++11/14対応)

参考にしたURL:
http://wiki.squid-cache.org/SquidFaq/CompilingSquid

省略したオプションについてはコメントしてません。

configureのオプション(再掲)

./configure --prefix=/usr \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--datadir=${prefix}/share/squid \
--sysconfdir=/etc/squid \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid \
--with-large-files \
--with-build-environment=POSIX_V6_ILP32_OFFBIG \
--enable-inline \
--enable-async-io=8 \
--enable-storeio=rock,ufs,aufs,diskd \
--enable-removal-policies=lru,heap \
--enable-delay-pools \
--enable-cache-digests \
--enable-underscores \
--enable-esi \
--enable-zph-qos \
--enable-wccpv2 \
--enable-linux-netfilter \
--enable-follow-x-forwarded-for \
CC=gcc-4.8 \
CXX=g++-4.8 \
CFLAGS='-O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' \
LDFLAGS='-fPIE -pie -Wl,-z,relro -Wl,-z,now' \
CPPFLAGS='-D_FORTIFY_SOURCE=2' \
CXXFLAGS='-std=c++11 -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security'

まずはRaspbianの付属squid3から引き継いだ設定から。

--prefix=/usr \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--datadir=${prefix}/share/squid \
--sysconfdir=/etc/squid \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid

Debian/Ubuntuで使う場合はこれをデフォルトにすべきらしい。ということでそのまま指定。
元ネタは、http://wiki.squid-cache.org/SquidFaq/CompilingSquid#Debian.2C_Ubuntu

--enable-storeio=rock,ufs,aufs,diskd

ディスクキャッシュを行う場合に指定する。全部入り。もちろん必要なものだけでいい。

--with-large-files

2Gバイト以上のファイルを使えるようにする。ディスクキャッシュでrockを使う場合は有効にするといいと思う。というか、たぶんそれ以外で2GB超えのファイルは使わないよね?

--enable-inline

インライン展開を有効にする。プロダクションビルドの場合は有効にすると若干性能がアップするかも?デバッグ時には代わりに--disable-inlineを。

--enable-async-io=8

非同期IOのスレッド数。Raspbian付属のsquid3が8を指定してたのでそのまま。

--enable-removal-policies=lru,heap

キャッシュの削除ポリシー。たぶんLRUしか使わないけど、これもRaspbian付属のsquid3が指定してたのでそのまま。

--enable-delay-pools

ディレイプールを使う。たぶん使わないけど、以下略。

--enable-cache-digests

キャッシュダイジェストを使う。PEERを組む場合に必要。

--enable-underscores

ホスト名に_(アンダースコア)を使えるようにする。本来RFC2396ではホスト名に_(アンダースコア)は使えない。

--enable-esi

リバースプロキシーでエッジアクセラレーションが効く。

--enable-zph-qos

Zero Penalty Hit QoS を使う。

--enable-wccpv2

Ciscoルータのプロキシ機能と多段構成する場合に必要。

--enable-linux-netfilter

透過プロキシを使う場合に必要。

--enable-follow-x-forwarded-for

X-Forwarded-For ヘッダを有効にする。

CFLAGS='-O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' \
LDFLAGS='-fPIE -pie -Wl,-z,relro -Wl,-z,now' \
CPPFLAGS='-D_FORTIFY_SOURCE=2' \
CXXFLAGS='-std=c++11 -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security'

ここは(多少遅くなっても)セキュアなバイナリを生成するためのオプションになる。
http://d.hatena.ne.jp/yupo5656/20060625/p4を参考にしました。
大事なことなので1項目ずつメモっておく。

-fstack-protector
スタック破壊時にトレースしやすくなる

--ssp-buffer-size=4
4バイトを超えてスタック破壊したときに検出する

Wall
ワーニングはすべて表示する

Werro=format-security
format-securityはエラーとして表示する

-fPIE
-pie

Position Independent Executable。
プログラムをロードする際に毎回異なるアドレスにロードする。

-Wl,-z,relro
-Wl,-z,now

どちらもGOT overwrite attackを回避するための設定。
実行領域をReadonlyにする。

CPPFLAGS=-D_FORTIFY_SOURCE=2
不正実行防止のセキュリティ対策。
printfの書式に%nが指定されたときにエラーにする


ここからsquid 3.5特有の設定になります。

CC=gcc-4.8
CXX=g++-4.8

コンパイラにgcc4.8とg++4.8を使う。これは環境に合わせればいいと思うが
後述のとおりC++11/14がほぼ必須なので4.8以降を入れておいた方がいいのでは。

CXXFLAGS=-std=c++11

C++11を有効にする。
指定しないと、rockを初期化がassertion failedで失敗してしまう。
こんな感じ↓

$ sudo squid -z
----
2015/12/07 01:12:07| assertion failed: ../../src/ipc/AtomicWord.h:88: "Enabled()"
----
※当初ここで躓いてしまい、ものすごく時間が掛かってしまいました。

configure 小ねた

・ディレクトリへ移動して./configure --help でオプションの一覧とヘルプが表示できる。
squid -v でsquidのビルドオプションが表示できる。
----
Squid Cache: Version 3.5.12-20151128-r13959
Service Name: squid
configure options: '--prefix=/usr' '--localstatedir=/var' '--libexecdir=/lib/squid' '--datadir=/share/squid' '--sysconfdir=/etc/squid' '--with-default-user=proxy' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--enable-storeio=rock,aufs' '--with-large-files' '--with-build-environment=POSIX_V6_ILP32_OFFBIG' '--enable-inline' '--enable-async-io=8' '--enable-storeio=rock,ufs,aufs,diskd' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-esi' '--enable-zph-qos' '--enable-wccpv2' '--enable-linux-netfilter' '--enable-follow-x-forwarded-for' 'CC=gcc-4.8' 'CXX=g++-4.8' 'CFLAGS=-O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-std=c++11 -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security' --enable-ltdl-convenience
----

squid 3.5.12-20151128-r13959 解説編Ⅰ(起動・設定)

squid2系から乗り換えたのでいろいろ変わっていて戸惑いました。戸惑ったところを解説。

(1) cossが無くなりrockになった

不安定なので・・・ということらしい。キャッシュファイルに互換性は無いので、キャッシュディレクトリごと再作成する必要がある。

(2) 起動するプロセス数が違う。マルチインスタンスやSMPを意識しなくても複数起動する

psコマンドで確認するとずいぶんたくさん起動する。

$ ps -ef|grep squid
root 29463 1 0 12月23 ? 00:00:00 /usr/sbin/squid -YC -f /etc/squid/squid.conf
proxy 29465 29463 0 12月23 ? 00:01:10 (squid-coord-3) -YC -f /etc/squid/squid.conf
proxy 29466 29463 0 12月23 ? 00:01:24 (squid-disk-2) -YC -f /etc/squid/squid.conf
proxy 29467 29463 0 12月23 ? 00:19:38 (squid-1) -YC -f /etc/squid/squid.conf

squid-1が今までのsquidに相当する。メモリとcache_dirのaufs担当。
squid-disk-2は、cache_dirのrock担当。
squid-coord-3は、コーディネーターと呼ばれるプロセス。

数字部分は、squid.confで ${process_number}に紐付く。
ログやキャッシュマネージャの出力ではkidXと表現される。

(3) プロセスが増えた分、ログも分けるのが吉

access.log,cache_logが1つでも動くことは動きます。しかしログローテーションするときプロセスの数だけローテーションするので、よくわからないことになります。例えば、今回のようにプロセスが4つあると、いきなりaccess.log.0,access.log.1,access.log.2,access.log.3の4つが出来てしまう。しかも同時にローテートしているので0バイト。事情がわからずバグかと思った。
なので、squid.confのログ名定義はプロセス番号を入れると良いと思う。

squid.conf
----
access_log /var/log/squid/access_${process_number}.log
cache_log /var/log/squid/cache_${process_number}.log
cache_swap_log /var/log/squid/cache_swap_${process_number}.log
----

(4) rockのチューニングは必要

http://wiki.squid-cache.org/Features/RockStoreに書いてあるけど、rockはチューニングしないとパフォーマンスが出ないらしい。

ディスクIOが間に合わないと取りこぼす。cache.logにこんなメッセージが出る。
----
2015/12/15 22:24:26 kid1| WARNING: abandoning 22 /mnt/jetflash2/squid/rock I/Os after at least 7.00s timeout
---
なので、そうならないように制限する。

max-swap-rateの目安
1秒当たりのスワップ数の平均IO回数の上限。
一般的には200、速いディスクなら300、それほど速くないディスクなら100が目安。

swap-timeoutの目安
スワップするときのIO待ちのms(ミリ秒)。あまり小さくするとタイムアウトしてディスクに書き込めないし、読み出せない。つまりキャッシュミスになる。逆に大きくしすぎるとHIT時の待ち時間が長くなる。
よくわからなければ、300くらいから始めてみる。

TranscendのJETFLASH750というUSBメモリを使っているが、以下設定だと1%程度のエラーが出る。
cache_dir rock /mnt/jetflash2/squid 8000 max-size=65536 max-swap-rate=320 swap-timeout=350

僕の環境ではmax-sizeを調整することも結構有効だった。512KBくらいまで上げるとエラーが1桁アップする。

結果はsquidclientコマンドで確認できる。
$ squidclient cachemgr mgr:store_io
----
Store IO Interface Stats
create.calls 17830
create.select_fail 75
create.create_fail 114
create.success 17641
----

(5) 起動時、disk-cacheとmem-cacheのよくわからないワーニングが出る

$ sudo grep -i warn cache_1*
----
2015/12/23 01:21:03 kid1| WARNING: disk-cache maximum object size is too large for mem-cache: 131072.00 KB > 32.00 KB
----
これは調べてみたけど、よくわからない。そのまま使っている。

とりあえずこんな感じかな。
次回は、解説編Ⅱ(ビルド)の予定。

2015年12月24日 (木)

squid 3.5.12-20151128-r13959 のビルド(成功手順編)

raspberrypiで squid3.5.12をビルドしたのでメモ(成功編)。
まずは、最小限の手順と結果だけを書きます。解説編、失敗編はのちほど。

前提
raspbian: 2015-05-05-raspbian-wheezy.img
squid: squid-3.5.12-20151128-r13959

開発ツールインストール
$ sudo apt-get install automake perl gcc-4.8 g++-4.8

ソースダウンロード
$ cd
$ wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.12-20151128-r13959.tar.gz
$ tar zxf squid-3.5.12-20151128-r13959.tar.gz
$ cd squid-3.5.12-20151128-r13959

ビルド
$ ./configure --prefix=/usr \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--datadir=${prefix}/share/squid \
--sysconfdir=/etc/squid \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid \
--with-large-files \
--with-build-environment=POSIX_V6_ILP32_OFFBIG \
--enable-inline \
--enable-async-io=8 \
--enable-storeio=rock,ufs,aufs,diskd \
--enable-removal-policies=lru,heap \
--enable-delay-pools \
--enable-cache-digests \
--enable-underscores \
--enable-esi \
--enable-zph-qos \
--enable-wccpv2 \
--enable-linux-netfilter \
--enable-follow-x-forwarded-for \
CC=gcc-4.8 \
CXX=g++-4.8 \
CFLAGS='-O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' \
LDFLAGS='-fPIE -pie -Wl,-z,relro -Wl,-z,now' \
CPPFLAGS='-D_FORTIFY_SOURCE=2' \
CXXFLAGS='-std=c++11 -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security'

$ make -j4
$ sudo make install

initスクリプトの作成と権限付与
$ cd /etc/init.d
$ sudo vi squid
----
※後述
----
$ sudo chmod +x squid

squid.confの作成と権限付与
$ cd /etc/squid
$ sudo vi squid.conf
----
※※後述
----
$ chown proxy.proxy squid.conf

ログディレクトリの権限付与
$ sudo chown proxy.proxy /var/log/squid

PIDディレクトリの権限付与
$ sudo chown proxy.proxy /var/run/squid

キャッシュディレクトリ初期化
$ sudo -u proxy squid -z

squid起動
$ sudo service squid start

cachemgr確認
$ sudo squidclient cachemgr mgr:info

以上

/etc/init.d/squid
http://wiki.squid-cache.org/SquidFaq/CompilingSquid#KnowledgeBase.2FDebian.Init_Script
----
#! /bin/sh
#
# squid Startup script for the SQUID HTTP proxy-cache.
#
# Version: @(#)squid.rc 1.0 07-Jul-2006 luigi@debian.org
#
# pidfile: /var/run/squid.pid
#
### BEGIN INIT INFO
# Provides: squid
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Squid HTTP Proxy version 3.x
### END INIT INFO

NAME=squid
DESC="Squid HTTP Proxy"
DAEMON=/usr/sbin/squid
PIDFILE=/var/run/$NAME.pid
CONFIG=/etc/squid/squid.conf
SQUID_ARGS="-YC -f $CONFIG"

[ ! -f /etc/default/squid ] || . /etc/default/squid

. /lib/lsb/init-functions

PATH=/bin:/usr/bin:/sbin:/usr/sbin

[ -x $DAEMON ] || exit 0

ulimit -n 65535

find_cache_dir () {
w=" " # space tab
res=`$DAEMON -k parse -f $CONFIG 2>&1 |
grep "Processing:" |
sed s/.*Processing:\ // |
sed -ne '
s/^['"$w"']*'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
t end;
d;
:end q'`
[ -n "$res" ] || res=$2
echo "$res"
}

grepconf () {
w=" " # space tab
res=`$DAEMON -k parse -f $CONFIG 2>&1 |
grep "Processing:" |
sed s/.*Processing:\ // |
sed -ne '
s/^['"$w"']*'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
t end;
d;
:end q'`
[ -n "$res" ] || res=$2
echo "$res"
}

create_run_dir () {
run_dir=/var/run/squid
usr=`grepconf cache_effective_user proxy`
grp=`grepconf cache_effective_group proxy`

if [ "$(dpkg-statoverride --list $run_dir)" = "" ] &&
[ ! -e $run_dir ] ; then
mkdir -p $run_dir
chown $usr:$grp $run_dir
[ -x /sbin/restorecon ] && restorecon $run_dir
fi
}

start () {
cache_dir=`find_cache_dir cache_dir`
cache_type=`grepconf cache_dir`
run_dir=/var/run/squid

#
# Create run dir (needed for several workers on SMP)
#
create_run_dir

#
# Create spool dirs if they don't exist.
#
if test -d "$cache_dir" -a ! -d "$cache_dir/00"
then
log_warning_msg "Creating $DESC cache structure"
$DAEMON -z -f $CONFIG
[ -x /sbin/restorecon ] && restorecon -R $cache_dir
fi

umask 027
ulimit -n 65535
cd $run_dir
start-stop-daemon --quiet --start \
--pidfile $PIDFILE \
--exec $DAEMON -- $SQUID_ARGS < /dev/null
return $?
}

stop () {
PID=`cat $PIDFILE 2>/dev/null`
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
#
# Now we have to wait until squid has _really_ stopped.
#
sleep 2
if test -n "$PID" && kill -0 $PID 2>/dev/null
then
log_action_begin_msg " Waiting"
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 24 ]
then
log_action_end_msg 1
return 1
fi
sleep 5
log_action_cont_msg ""
done
log_action_end_msg 0
return 0
else
return 0
fi
}

cfg_pidfile=`grepconf pid_filename`
if test "${cfg_pidfile:-none}" != "none" -a "$cfg_pidfile" != "$PIDFILE"
then
log_warning_msg "squid.conf pid_filename overrides init script"
PIDFILE="$cfg_pidfile"
fi

case "$1" in
start)
res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL .*"`
if test -n "$res";
then
log_failure_msg "$res"
exit 3
else
log_daemon_msg "Starting $DESC" "$NAME"
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if stop ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
reload|force-reload)
res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL .*"`
if test -n "$res";
then
log_failure_msg "$res"
exit 3
else
log_action_msg "Reloading $DESC configuration files"
start-stop-daemon --stop --signal 1 \
--pidfile $PIDFILE --quiet --exec $DAEMON
log_action_end_msg 0
fi
;;
restart)
res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL .*"`
if test -n "$res";
then
log_failure_msg "$res"
exit 3
else
log_daemon_msg "Restarting $DESC" "$NAME"
stop
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
fi
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit 3
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
exit 3
;;
esac

exit 0
----


※※squid.conf
----
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

# 2015-12-07 add
acl snmppublic snmp_community public

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/cache/squid 100 16 256
# 2015-12-07 add
cache_dir rock /mnt/jetflash2/squid 8000 max-size=65536 max-swap-rate=320 swap-timeout=350
cache_dir aufs /mnt/jetflash3/squid 12000 16 256 min-size=65537

# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
#
refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i \.index.(html|htm)$ 0 40% 10080
refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320
refresh_pattern . 0 40% 40320
#refresh_pattern . 0 20% 4320

# 2015-12-07 add
cache_swap_log /var/log/squid/cache_swap_${process_number}.log
access_log none
cache_log /var/log/squid/cache_${process_number}.log
maximum_object_size 128 MB
maximum_object_size_in_memory 32 KB
ftp_user hogehoge@hogehoge.jp
snmp_port 3401
snmp_access allow snmppublic localhost
snmp_access deny all
ipcache_size 4096
via off
forwarded_for off
#pipeline_prefetch 3
shutdown_lifetime 5 seconds
----

« 2015年11月 | トップページ | 2016年1月 »

最近のトラックバック

2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
フォト
無料ブログはココログ