Solaris10でSquidをソースからインストールする手順

Solaris10でSquidをソースからインストールする手順(まとめ)

※ 32ビット版


Solaris10はEntire Distribution(全体ディストリビューション)でインストールしておく。


/usr/sfw/bin、/usr/ccs/bin等にコンパイラ、ツール等がインストールされているのでパスを設定
# PATH=/usr/sfw/bin:/usr/ccs/bin:$PATH
# export PATH


ライブラリ検索パスも同様に追加
# crle -c /var/lf/ld.config -l /lib:/usr/lib:/usr/sfw/lib


ソースをダウンロードして来て
# mkdir src
# cd src
# wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE12.tar.gz


ダウンロードしたソースを解凍して
# gunzip -c squid-3.0.STABLE12.tar.gz | tar xf -


Configureして
# cd squid-3.0.STABLE12
# ./configure --prefix=/usr/local


コンパイル&リンクして
# make


インストール
# make install


続けてSquidを動かす準備
(pidファイル、ログ、キャッシュファイルの置き場を作成)
# mkdir -p /usr/local/var/logs
# mkdir -p /usr/local/var/cache
# cd /usr/local/var
# chown nobody logs
# chown nobody cache


SquidをSMF(Solaris10のサービス管理)に登録
ファイルを作成(/var/svc/manifest/network/squid.xml)
内容は以下の通り
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
        Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
        Use is subject to license terms.

        ident   "@(#)postfix.xml        1.7     04/12/09 SMI"

-->

<service_bundle type='manifest' name='squid'>

<service
        name='network/squid'
        type='service'
        version='1'>

        <create_default_instance enabled='false' />

        <single_instance />

        <dependency name='fs-local'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri
                        value='svc:/system/filesystem/local' />
        </dependency>

        <dependency name='net-loopback'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/network/loopback' />
        </dependency>

        <dependency name='net-physical'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/network/physical' />
        </dependency>

        <dependency name='system-log'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/system/system-log' />
        </dependency>

        <dependency name='config_data'
                grouping='require_all'
                restart_on='restart'
                type='path'>
                <service_fmri
                    value='file://localhost/usr/local/etc/squid.conf' />
        </dependency>

        <exec_method
                type='method'
                name='start'
                exec='/usr/local/sbin/squid'
                timeout_seconds='60'/>

        <exec_method
                type='method'
                name='stop'
                exec='/usr/local/sbin/squid -k shutdown'
                timeout_seconds='60' />

        <exec_method
                type='method'
                name='refresh'
                exec='/usr/local/sbin/squid -k reconfigure'
                timeout_seconds='60' />

        <exec_method
                type='method'
                name='reload'
                exec='/usr/local/sbin/squid -k rotate'
                timeout_seconds='60' />

        <property_group name='startd'
                type='framework'>
                <!-- sub-process core dumps shouldn't restart session -->
                <propval name='ignore_error'
                    type='astring' value='core,signal' />
        </property_group>

        <property_group name='general' type='framework'>
                <!-- to start stop squid -->
                <propval name='action_authorization' type='astring'
                        value='solaris.smf.manage.squid' />
        </property_group>

        <stability value='Unstable' />

        <template>
                <common_name>
                        <loctext xml:lang='C'>
                        Squid Web Proxy Server
                        </loctext>
                </common_name>
                <documentation>
                        <manpage title='squid' section='1M' manpath='/usr/share/man' />
                </documentation>
        </template>

</service>

</service_bundle>



xmllintで文法をチェック
# xmllint --valid --noout /var/svc/manifest/network/squid.xml


svccfgで文法をチェック
# svccfg -v validate /var/svc/manifest/network/squid.xml


svccfgにインポート
# svccfg import /var/svc/manifest/network/squid.xml


Squidのキャッシュファイルを作成
# /usr/local/sbin/squid -z


Squid3.0の素の設定だとイマイチ不安があるため設定を変更
(vi /usr/local/etc/squid.conf)

まず、自ホスト名を登録
visible_hostname my_proxy_host.mydomain
アクセスログを記録する設定とログローテートの設定を追記
access_log /usr/local/var/logs/access.log combined
cache_log /usr/local/var/logs/cache.log
cache_store_log /usr/local/var/logs/store.log
logfile_rotate 100
ローカル環境でWeb閲覧後に他のページを参照した場合、リファラとして自サイトの情報が残るため、その場合はリファラを送信しないように以下を追加
acl local_ref referer_regex ^http://192\.168\. ^http://myhost.mydomain
request_header_access Referer deny local_ref
不要な情報は外部に送信しないように設定
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all


でSMFから起動する
# svcadm enable squid

起動したか確認(起動した例)
# svcs squid
STATE          STIME    FMRI
online       10:58:38 svc:/network/squid:default


起動したか確認(起動していない例)
# svcs squid
STATE          STIME    FMRI
maintenance       10:58:38 svc:/network/squid:default


起動していない場合は原因を確認。
# svcs -xv squid
svc:/network/squid:default (Squid Web Proxy Server)
 状態: 2009年05月10日 10時58分38秒 以降disabledです
原因: 管理者が使用不可にしました。
   参照: http://sun.com/msg/SMF-8000-05
   参照: man -M /usr/share/man -s 1M squid
   参照: /var/svc/log/network-squid:default.log
影響: このサービスは動作していません。

あとは従来通り・・・というか、Solaris9までと変わらないと思いますが、
/var/adm/messagesログや、ps -ef | grep squid等でプロセスの状態を確認するなり
して動作を確認します。