1.ユーザランドへのインストール方針
レンタルサーバ(sakura)にGeoIPプラグインを有効にしたawstatsをインストールしたのでそのメモ。
日本用にカスタマイズされたawstasが以下のサイトで公開されている。
AWStatsをFreeBSDで動かす
sakuraのようなレンタルサーバでは、ユーザランドでの動作となるので以下のような工夫が必要となる。
- 必要なPerlモジュール(CPAN利用)のユーザランドへインストール
- GeoIP(IPから接続元の地域がわかる)のユーザランドへのインストール
- awstats.plに上記モジュールのパス追加
2.CPANを利用して必要モジュールインストール3>
・ホームディレクトリ下にlocalとlocal/srcを作成
$ cd ~
$ mkdir -p local/src
・CAPN初期設定
$ cd ~
$ mkdir -p local/src
まずは初期設定。
$ perl -MCPAN -e shell
質問に答える。とりあえず全部デフォルト。
/home/USERNAME/.cpan/CPAN/MyConfig.pmが設定ファイル。これを編集。ここを参考にした。
'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local],
'makepl_arg' => qq[INSTALLDIRS=site INSTALL_BASE=$ENV{HOME}/local LIB=$ENV{HOME}/local/lib/perl5],
'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local],
'urllist' => [q[ftp://ftp.u-aizu.ac.jp/pub/CPAN], q[ftp://ftp.kddilabs.jp/CPAN/]],
※TIPS:間違えた場合はCAPN>o conf init で初期化できる。
自分の環境はbashに変えてあるので.bashrcにパスなどを書き込み
$ echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
$ echo 'export PERL5LIB=$HOME/local/lib/perl5:$HOME/local/lib/perl5/site_perl' >> ~/.bashrc
FreeBSDのportsと連携する仕組みであるBSDPANでエラーがでないよう調整。
$ echo 'export PKG_DBDIR=$HOME/local/var/db/pkg' >> ~/.bashrc
$ echo 'export PORT_DBDIR=$HOME/local/var/db/pkg' >> ~/.bashrc
$ echo 'export INSTALL_AS_USER=' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=$HOME/local/lib' >> ~/.bashrc
$ mkdir -p ~/local/var/db/pkg
設定を有効にする。
$ source ~/.bashrc
・モジュールインストール
$ perl -MCPAN -e shell
CPAN[1]>install HTML::Entities::Numbered
CPAN[2]>install Unicode::Japanese
CPAN[3]>install Jcode
・CAPNを最新にアップデートする。
$ cpan -i Bundle::CPAN
3.GeoIPのインストール
おそらくCPANでもインストールできる(Geo::IP)が、CAPI(高速動作するらしい)を使用したかったのでソースからインストールした。
・GeoIPのCAPI(C言語で書かれたAPI)ダウンロード、インストール
$ cd ~/local/src
$ wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz
$ tar zxvf GeoIP-1.4.6.tar.gz
$ cd GeoIP-1.4.6
$ ./configure --prefix=/home/USERNAME/local/
$ make
$ make check
$ make install
コマンドがあるので試してみる。
% geoiplookup 124.83.147.202 (www.yahoo.co.jp)
GeoIP Country Edition: JP, Japan
% geoiplookup www.google.com
GeoIP Country Edition: US, United States
・GeoIPのPerlモジュールダウンロード、インストール
$ wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.38.tar.gz
$ tar zxvf Geo-IP-1.38.tar.gz
$ cd Geo-IP-1.38
$ perl Makefile.PL LIBS='-L/home/USERNAME/local/lib' INC='-I/home/USERNAME/local/include' PREFIX='/home/USERNAME/local'
$ make
$ make test
$ make install
・GeoIP用最新データダウンロード
GeoIP用データは月に一度更新されるらしい。とりあえず最新版にしておく。
最新版の国別IPデータをダウンロードする。
$ cd ~/local/src
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ gunzip GeoIP.dat.gz
$ mv GeoIP.dat ~/local/share/GeoIP/GeoIP.dat
最新版の地域別IPデータをダウンロードする。
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ mv GeoLiteCity.dat ~/local/share/GeoIP/GeoLiteCity.dat
※有償版は以下のコマンドで自動アップデート可能
$ geoipupdate -d /home/USERNAME/local/share/GeoIP
4.awstatsのインストール
以下のディレクトリにインストールする。
~/local/awstats-6.95-jp
~/local/awstats-6.95-jp/wwwroot以下をWebに公開することにする(~/local/www/awstatsからのシンボリックリンクを作成)。
・日本用にカスタマイズされたawstatsをダウンロード・インストール
AWStatsをFreeBSDで動かすサイトのawstats695t_jpn.zipを使用する。
awstats.model.confはawstats.HOSTNAME.confなどに変更する。HOSTNAMEのところが各種コマンド実行時の-configオプションの指定と一致するようにする。
$ mkdir awstats-6.95-jp
$ cd ~/local/awstats-6.95-jp
$ wget http://hobbit.ddo.jp/html/awstats695t_jpn.zip
$ unzip awstats695t_jpn.zip
$ cd wwwroot/cgi-bin/
$ cp awstats.model.conf awstats.www.hogepage.net.conf
Perlソースの改行コードがCRLFになってる。これだとInternal Server Errorが発生する。また、windowsで作成したらしいのでパーミッションがおかしい。
以下のように修正。
$ cd ~/local/awstats-6.95-jp
$ find ./ -name *.pl | xargs nkf -w -Lu --overwrite
$ find ./ -name *.pl | xargs chmod 755
・confの設定
awstats.www.hogepage.net.confの編集
#日本語用のawstatsはUTF-8に変換したログを指定。
LogFile="/home/USERNAME/log/access_log.utf8"
#オリジナルのawstats使用の場合はこちらを指定。
#LogFile="/home/USERNAME/log/access_log_%YYYY-24%MM-24%DD-24"
SiteDomain="www.hogepage.net"
DirData="/home/USERNAME/local/awstats-6.95-jp/wwwroot/data"
DirCgi="/awstats/cgi-bin"
DirIcons="/awstats/icon"
StyleSheet="/awstats/css/awstats_bw.css"
Lang="jp"
LoadPlugin="geoip GEOIP_STANDARD /home/USERNAME/local/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /home/USERNAME/local/share/GeoIP/GeoLiteCity.dat"
GeoIPのPluginは2つ設定してあるが、それぞれ国別、地域別(都道府県など)用のPluginである。
解析データ保存用ディレクトリ、静的なHTML用ディレクトリを作成。
$ mkdir ~/www/awstats/data
$ mkdir ~/www/awstats/html
※awstatsは統計情報を毎回動的にHTML出力するのは負荷になるので、静的なHTMLに変換できる。
・apacheの設定
$ cd ~/www
$ ln -s ../local/awstats-6.95-jp/wwwroot awstats
$ cd awstats
$ cat .htaccess
AddHandler cgi-script pl
AuthUserFile /home/USERNAME/.htpasswd
AuthGroupFile /dev/null
AuthName "awstats login"
AuthType Basic
require valid-user
アクセス制限用アカウント登録。sakuraはDigest認証が使えないのでBasic認証の設定を行う。
$ htpasswd -c ~/.htpasswd admin
・ユーザランドのCPAN、GeoIPモジュールのインクルード
awstats.plの最初の方に以下追加。
use lib '/home/USERNAME/local/lib/perl5';
use lib '/home/USERNAME/local/lib/perl5/site_perl/5.8.9/mach';
またawstats.plの先頭の「#!c:/perl/bin/perl」を削除。
・画面表示
画面表示してみる。
http://HOSTNAME/awstats/cgi-bin/awstats.pl
なんか以下のエラーが。。
※error_logが見れない状況では「use CGI::Carp ‘fatalsToBrowser’;」をファイルの先頭付近に記述すると幸せになる。
該当箇所に「};」というゴミがあったので削除。
syntax error at /home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm line 4472
syntax error at /home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm line 4512, near "else"
再度表示。空のアクセス解析画面が表示されればOK
・アクセス解析
オリジナルのawstatsは、以下のコマンドでログを解析する。
/home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/awstats.pl -config=www.hogepage.net -update
しかし、これではサーチエンジンのキーワードなどが文字化けする場合がある。
付属のawstats.shやawstats.cronにログをUTF-8形式にする方法が載っているが、sakuraのようにログがaccess_log_20100101のような日付形式になっている場合に対応していない。
access_log_20100101のような日付がついかアクセスログに対応できるスクリプトがここにあったので使わせて頂く(感謝)。以下、自分の環境用に書き換えたモノ。
/home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh
#!/bin/sh
# www.hogepage.nt - AWStats
# ENV
PERL5LIB=/home/USERNAME/local/lib/perl5:/home/USERNAME/local/lib/perl5/site_perl
HDIR="/home/USERNAME"
AWDIR=${HDIR}"/local/awstats-6.95-jp"
WWWDIR=${HDIR}"/www/awstats"
HOSTNAME="www.hogepage.net"
DATE=`/bin/date -v -1d +%Y%m%d`
MONTH=`/bin/date -v -1d +%m`
YEAR=`/bin/date -v -1d +%Y`
if [ -f "${HDIR}/log/access_log_${DATE}" ];
then
# check
if [ ! -d "${WWWDIR}/html/${YEAR}${MONTH}" ];
then
/bin/mkdir ${WWWDIR}/html/${YEAR}${MONTH}
fi
if [ -f "${HDIR}/log/access_log.utf8" ];
then
/bin/rm -f ${HDIR}/log/access_log.utf8
fi
# Can't locate awstats_host.plのエラーが発生するので、${AWDIR}/toolsに移動
cd ${AWDIR}/tools
# url decode
${AWDIR}/tools/utf8_decode.pl < ${HDIR}/log/access_log_${DATE} \
> ${HDIR}/log/access_log.utf8
# update
${AWDIR}/wwwroot/cgi-bin/awstats.pl \
-config=$HOSTNAME -update
# static report index
${AWDIR}/wwwroot/cgi-bin/awstats.pl \
-config=$HOSTNAME -output -staticlinks \
-year=${YEAR} \
-month=${MONTH} > ${WWWDIR}/html/${YEAR}${MONTH}/index.html
# static report page
${AWDIR}/tools/awstats_buildstaticpages.pl \
-config=$HOSTNAME -lang=jp -year=${YEAR} -month=${MONTH} \
-awstatsprog=${AWDIR}/wwwroot/cgi-bin/awstats.pl \
-diricons=/awstats/icon -dir=${WWWDIR}/html/${YEAR}${MONTH}
# delete logfile
if [ -f "${HDIR}/log/access_log.utf8" ];
then
/bin/rm -f ${HDIR}/log/access_log.utf8
fi
fi
~/local/awstats-6.95-jp/tools/awstats_host.plの書き換え
$Myhost = "www\.hogepage\.net";
実行してみる。エラーがでなければ成功。
/home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh
/home/USERNAME/www/wordpress/awstats/dataにファイルができていれば成功。
・cronへの登録
% crontab -e
# awstats
30 1 * * * /home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh > /dev/null
これで毎日01:30にデータが更新される。