Rocky Linuxをインストールした Raspberry Pi 4 Model B に、webalizerをインストールした記録です。
Rocky Linuxにはwebalizerのパッケージが有りませんので、ソース・ファイルをコンパイルしました。
DNSの逆引きを利用しなければ、エラーとなりません。が、DNSの逆引きを利用するならソースファイルを修正しないと利用できません。
webalizerを取得する。
ソースファイルが見つけにくいのでここ置きました。
ソースを展開する。
# tar xvfz webalizer-2.23-08-src.tgz
configureを実行する。
# ./configure --enable-dns --with-dblib=/lib --enable-bz2 -with-langage=japanese --build=arm
※-with-langage=japanese を指定しいますが、langディレクトリの配下のファイルは内容が英語なので指定不要です。
※–build=arm を指定していますが、アーキテクチャのチェックが無いので指定不要です。
make する(が、エラーとなる)。
/usr/bin/ld: dns_resolv.o:(.bss+0x1e58): multiple definition of `buffer'; webalizer.o:(.bss+0x5c20): first defined here /usr/bin/ld: dns_resolv.o:(.bss+0xe58): multiple definition of `tmp_buf'; webalizer.o:(.bss+0x4c20): first defined here /usr/bin/ld: dns_resolv.o:(.bss+0x2e58): multiple definition of `host_table'; hashtab.o:(.bss+0x0): first defined here /usr/bin/ld: dns_resolv.o:(.bss+0xcd0): multiple definition of `system_info'; webalizer.o:(.bss+0x940): first defined here collect2: エラー: ld はステータス 1 で終了しました make: *** [Makefile:47: webalizer] エラー 1 #
「定義が複数ある」と怒っています。
ソースを修正する。
# cp -p dns_resolv.c dns_resolv.c_org # vi dns_resolv.c # diff -c dns_resolv.c_org dns_resolv.c *** dns_resolv.c_org 2013-02-26 14:37:27.000000000 +0900 --- dns_resolv.c 2024-02-14 20:44:20.440310744 +0900 *************** *** 78,88 **** struct dns_child child[MAXCHILD]; /* DNS child pipe data */ ! DNODEPTR host_table[MAXHASH]; /* hostname/ip hash table */ ! char buffer[BUFSIZE]; /* log file record buffer */ ! char tmp_buf[BUFSIZE]; /* used to temp save above */ ! struct utsname system_info; /* system info structure */ int raiseSigChild = 1; --- 78,88 ---- struct dns_child child[MAXCHILD]; /* DNS child pipe data */ ! extern DNODEPTR host_table[MAXHASH]; /* hostname/ip hash table */ ! extern char buffer[BUFSIZE]; /* log file record buffer */ ! extern char tmp_buf[BUFSIZE]; /* used to temp save above */ ! extern struct utsname system_info; /* system info structure */ int raiseSigChild = 1;
この定義は、「他のソースに同様の定義がある」と宣言します。
再度makeする。
正常にmakeできた。
インストール先は、configureコマンドで指定しないため「/usr/local」配下になります。
設定ファイルは、「/usr/local/etc/webalizer.conf」です。
WEBサーバのログを切り替え(ローテイト)させる。
日付が変わった時点でWEBサーバのログを切り替えることにより、日単位でのログになるので管理が便利である。
また、ログを切り替えてすぐに圧縮してしまうと、webalizerで読み込ませる前に解凍が必要になるので、圧縮処理は一日ずら様にする。
他のログの切り替えの説明であるがここを参考にしてください。
webalizerを実行するシェルを作成し実行する。
以下に参考シェルを示します。
# cat /usr/local/sbin/webalizer.sh #!/bin/bash # 前日ログが当日日付でアーカイブされる DATE=`date "+%Y%m%d"` /usr/local/bin/webalizer -c /usr/local/etc/webalizer.conf /var/log/nginx/access.log-${DATE} # # chmod 755 /usr/local/sbin/webalizer.sh #
crontabに登録する。
# crontab -e 5 0 * * * /usr/local/sbin/webalizer.sh
手動でシェルを実行し、シェルが正しく動作するか確認する。また、webalizer.confファイルの設定が正しいか確認する。
webalizer.confファイルの修正
数日実行すると結果表示サイトに「Total URLs」の情報が色々表示される。
*.xmlや*.webpのファイル情報や、/wp-admin/*や/wp-content/plugins/*などの情報が表示されるが投稿URLのみ表示させたいので非表示にする必要がある。
よって、webalizer.confファイルの修正が必要になる。
# Usually you want to hide these : HideURL *.svg HideURL *.xml HideURL *.webp IgnoreURL /wp-content/plugins/* IgnoreURL /feed/* IgnoreURL /wp-admin/* IgnoreURL /wp-json/*
設定する項目は、自サイトの表示結果で判断してください。