« squid 3.5.12-20151128-r13959 解説編Ⅰ(起動・設定) | トップページ | squid 3.5.12-20151128-r13959 失敗編 »

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 解説編Ⅰ(起動・設定) | トップページ | squid 3.5.12-20151128-r13959 失敗編 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/143173/62941973

この記事へのトラックバック一覧です: squid 3.5.12-20151128-r13959 解説編Ⅱ(ビルド):

« squid 3.5.12-20151128-r13959 解説編Ⅰ(起動・設定) | トップページ | squid 3.5.12-20151128-r13959 失敗編 »

最近のトラックバック

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            
フォト
無料ブログはココログ