adiary on RPi 12

2023/12/14 22:09 OS別::Linuxその他::技術情報
別途 adiary on RaspPi という記事で Raspberry Pi OS に adiary をインストールして、利用するところまで記事にしていますが、バージョンが上がったことでいくつか不都合があったり、仕様に手を入れたりしているので、新しく記事にしてみます。

前提条件

この記事を作るにあたって、以下の読者を想定しています。
  • CUI でのコマンド操作ができる。
  • TCP/IP の基礎知識をもっている。
  • 記事の内容を、自身の環境に読み替えることができる。

環境

筐体

Raspberry Pi 3 Model B を利用します。

Raspberry Pi OS バージョン

Debian 系 OS である、Raspberry Pi OS を利用します。
バージョン等は、以下の通りです。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
NAME="Raspbian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

注意点

Debian 系で cgi を動作させる場合、通常は /usr/lib/cgi-bin/ に置くものなのですが、自身の都合で環境設定を変更しています。

環境準備

Raspberry Pi OS インストール

以下の順番で、手順を参照してください。
  1. RPi OS インストール

Raspberry Pi OS 管理外

DNS 設定および HTTPS 設定 (TLS) については、ドメインのレジストリ/レジストラや証明書の発行機関が関わるため、ここでは記載しません。

端末からテスト的に名前解決したい場合は hosts に記載すると良いでしょう。
対象のファイルパスは、以下の通りです。
C:\Windows\System32\drivers\etc
例えば、192.168.10.10 が Raspberry Pi サーバで、example.jp という名前でアクセスしたい場合、上のファイルに次のように記載します。
192.168.10.10 example.jp
この設定を行った端末からは、192.168.10.10 に対して example.jp という名前でアクセスできるようになります。

Raspberry Pi OS 各種設定

以下の順番で、手順を参照してください。
  1. Raspberry Pi OS raspi-config
  2. Raspberry Pi OS 実行環境整備
  3. Raspberry Pi OS IPv4 静的設定
  4. Raspberry Pi OS NTP 設定

前提パッケージのインストール

以下の順番で、手順を参照してください。
  1. apache2 設定
  2. adiary 関連ライブラリ

adiary パッケージインストール(tar ボウル利用)

バージョンごとにしばらくバックアップ環境を残したいので、基本的にはこちらを利用しています。

ログ出力ディレクトリ作成

デフォルトより1段下げてログ出力したいので、専用ディレクトリを作成します。
$ sudo mkdir /var/log/apache2/adiary
ちなみに、apache の環境設定ファイルで $APACHE_LOG_DIR と書きますが、/var/log/apache2/ を指します。

作業準備

作業環境を整備します。
$ grep www /etc/passwd
$ cd /var/
$ ls -ld /var/www
drwxr-xr-x 3 root root 4096  7月  9 17:37 /var/www
$ sudo chown www-data:adm www
$ ls -ld /var/www
drwxr-xr-x 3 www-data www-data 4096  7月  9 17:37 /var/www
$ sudo su -s /bin/bash - www-data
$ pwd
/var/www
$ cp /etc/skel/.bashrc .
$ vi .bashrc
# umask
umask 027
$ diff .bashrc /etc/skel/.bashrc
114,116d113
<
< # umask
< umask 027
$ . .bashrc

ダウンロード(tar ボウル)

https://adiary.org/pub/adiary/image/download/release/ にアクセスして、最新版を取得します。
ここでは、執筆時に最新版であった adiary-3.50h.tar.bz2 を利用します。
$ curl https://adiary.org/pub/adiary/image/download/release/adiary-3.50h.tar.bz2 --output adiary-3.50h.tar.bz2
$ ls -l
合計 4324
-rw-r----- 1 www-data www-data 4421745 12月 12 21:26 adiary-3.50h.tar.bz2
drwxr-xr-x 2 root     root        4096 12月 12 21:32 html
$ sha256sum adiary-3.50h.tar.bz2
fb3beaea3ae1efdd3ed9855cd2f0ea2fe8c11299a9bc8864710591f80842f1a6  adiary-3.50h.tar.bz2
$ tar tvf adiary-3.50h.tar.bz2
$ tar xf adiary-3.50h.tar.bz2
$ ls -l
合計 4328
drwxr-x--- 13 www-data www-data    4096 10月 16 11:28 adiary-3.50h
-rw-r-----  1 www-data www-data 4421745 12月 12 21:26 adiary-3.50h.tar.bz2
drwxr-xr-x  2 root     root        4096 12月 12 21:32 html
$ ln -s adiary-3.50h adiary
$ ls -l
合計 4328
lrwxrwxrwx  1 www-data www-data      12 12月 12 21:34 adiary -> adiary-3.50h
drwxr-x--- 13 www-data www-data    4096 10月 16 11:28 adiary-3.50h
-rw-r-----  1 www-data www-data 4421745 12月 12 21:26 adiary-3.50h.tar.bz2
drwxr-xr-x  2 root     root        4096 12月 12 21:32 html
$ exit

adiary 環境構築

ここからは、初期設定を記述します。

サーバ移行とかシステム復旧のような、データを上書きする場合はここで処理を止めます

Apache2 設定

adiary のインストール後でなければ行えない Web 公開設定を行います。
設定ファイル作成のための事前調査
adiary が制限を入れたいディレクトリは .htaccess ファイルが置かれています。
.htaccess ファイルを無効にし、すべて apache の設定ファイルに記述するようにしているため、ファイルを探しておきます。
$ sudo find /var/www/adiary -name .htaccess
./adiary-3.50h/lib/.htaccess
./adiary-3.50h/skel.local/.htaccess
./adiary-3.50h/info/.htaccess
./adiary-3.50h/plugin/.htaccess
./adiary-3.50h/__cache/.htaccess
./adiary-3.50h/data/.htaccess
./adiary-3.50h/skel/.htaccess
設定ファイルの作成
上記の制限内容を踏まえて、設定ファイルを作成します。
$ cd /etc/apache2/sites-available
$ sudo vi 001-adiary.conf
(Config writing...)
$ sudo cat 001-adiary.conf
<VirtualHost *:80>
    ServerName  ttm.jimba.ddo.jp
    ServerAdmin xxx@jimba.ddo.jp
    DocumentRoot /var/www/adiary

    <Directory /var/www/adiary>
        Options ExecCGI
        AllowOverride None

        # Rewite module
        RewriteEngine   On
        RewriteCond     %{REQUEST_FILENAME}  !-f
        RewriteRule     ^(.*)$               adiary.cgi/$1   [L]

    </Directory>

    <Directory /var/www/adiary/__cache>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/data>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/skel>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/plugin>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/info>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/lib>
        order allow,deny
        deny from all
    </Directory>

    <Directory /var/www/adiary/skel.local>
        order allow,deny
        deny from all
    </Directory>

    ## CustomLog
    # Variable setting - IP address
    SetEnvIf Remote_Addr 192.168.  local_network suppres-log

    # Variable setting - Crawler
    SetEnvIf User-Agent "BLEXBot"        crawler suppres-log
    SetEnvIf User-Agent "bingbot"        crawler suppres-log
    SetEnvIf User-Agent "Googlebot"      crawler suppres-log
    SetEnvIf User-Agent "Twitterbot"     crawler suppres-log
    SetEnvIf User-Agent "Applebot"       crawler suppres-log
    SetEnvIf User-Agent "DataForSeoBot"  crawler suppres-log
    SetEnvIf User-Agent "DotBot"         crawler suppres-log
    SetEnvIf User-Agent "Bytespider"     crawler suppres-log
    SetEnvIf User-Agent "GPTBot"         crawler suppres-log
    SetEnvIf User-Agent "LivelapBot"     crawler suppres-log

    # Variable setting - Site (Directory)
    SetEnvIf Request_URI "/coffee"       coffee suppres-log

    ErrorLog ${APACHE_LOG_DIR}/ttm/error.log

    # Log output
    CustomLog ${APACHE_LOG_DIR}/adiary/local-access.log combined env=local_network
    CustomLog ${APACHE_LOG_DIR}/adiary/crawler-access.log combined env=crawler
    CustomLog ${APACHE_LOG_DIR}/adiary/coffee-access.log combined env=coffee
    CustomLog ${APACHE_LOG_DIR}/adiary/access.log combined env=!suppres-log

</VirtualHost>
【参考情報】/var/www/adiary/.htaccess に書きたい内容は、上記主設定ファイル (201-adiary.conf) の <Directory /var/www/adiary> ~ </Directory> の中に書く。

根拠は、apache2 公式サイトより引用した以下の通り。
普通は可能であれば .htaccess ファイルの使用は 避けてください。.htaccess ファイルに書こうと考えるようなすべての設定は、サーバの主設定ファイルの セクションで同じように行なうことができます。
Apache HTTP Server Tutorial: .htaccess files - Apache HTTP Server Version 2.4
ログローテーション設定
デフォルトのディレクトリにログを出力していれば不要なのですが、分かりやすさ優先で階層を作ったので、ログローテーション設定を追加します。
$ sudo cp -p /etc/logrotate.d/apache2 /etc/logrotate.d/adiary
$ vi /etc/logrotate.d/adiary
$ diff /etc/logrotate.d/apache2 /etc/logrotate.d/adiary
1c1
< /var/log/apache2/adiary/*.log {
---
> /var/log/apache2/*.log {
$ sudo systemctl status logrotate
特にサービス再起動とかは不要のよう。
設定ファイル有効化
設定ファイルを有効化する。
$ sudo a2ensite 001-adiary
Enabling site 201-adiary.
To activate the new configuration, you need to run:
  systemctl reload apache2
$ sudo apachectl configtest
$ sudo systemctl reload apache2
不要ファイル削除
また、不要になった設定ファイルは、混乱のもとなので消しておきます。
$ sudo find /var/www/adiary -name ".htaccess" -exec rm {} \;

Web 上での設定

DNS へ登録した URL (本サイトならば http://ttm.jimba.ddo.jp/) へアクセスして、root アカウント登録や、個別アカウントの登録などを行います。
root アカウント登録
案内にしたがって、管理者登録を行います。
http://ttm.jimba.ddo.jp/adiary.cgi?user/add
登録すると、登録した管理者ユーザでログインし直すようアナウンスがあるので、ログインし直します。
個別アカウント登録
ブログを更新するユーザ等、個別にアカウントを作成します。

Web での設定後

初期画面からのリダイレクト設定
初期画面から作成したブログ画面へ移動するため index.html を書き換えます。
$ cd /var/www/adiary
$ cp -p index.html{,_backup_$(date +'%Y%m%d')}
$ cat /dev/null > index.html
$ vi index.html
(書き換え)
$ cat index.html
<html>
  <head>
    <meta http-equiv="Refresh" content="0;URL=adiary.cgi">
  </head>
</html>
$ 
robots.txt
ボットに公開/非公開したい情報を教える設定。

以下はすべてのクロウラを拒絶する例

/var/www/adiary/robots.txt
User-agent: *
Disallow: