Rocky Linuxに webalizer をインストールする

Linux

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/*

設定する項目は、自サイトの表示結果で判断してください。