adiary on RaspPi

Raspberry Pi に adiary をインストールする手順を、メモ程度に公開します。

adiary on Raspberry Pi

前提条件

この手順は、以下の条件がすでに完了していることを前提としています。

・Raspberry Pi 3 Model B へ Raspbian をインストールおよびアップデート済み
・SSH でのアクセスが可能
・DNS にドメイン設定済み

想定する利用者

読み手は CUI での操作が可能で、TCP/IP の基礎知識をもち、ある程度 Linux に慣れていることを想定しています。
そのため、割と不親切*1です。

*1 : 前提条件の「DNS 設定済み」は、それなりにハードルが高いはずです。あとで読み返して「自分が分かれば良い」を目安にしています。

Raspberry Pi 環境

Raspbian をインストール直後で構築しようとしている想定で、この手順書を書いています。
そのため、まず adiary 以外の設定を確認したり、設定したりしています。

環境確認

Raspbian バージョン
今回の構築手順で検証に利用した Raspbian のバージョン情報です。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
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"
$

raspi-config

最低限の設定変更をしておきます。
$ sudo raspi-config
1 Change User Password
2 Hostname
    ttm.jimba.ddo.jp
3 Boot Options
    B1 Desktop / CLI
4 Localisation Options
    I1 Change Locale
    I2 Change Timezone
    I4 Change Wi-fi Country
5 Interfacing Options
    P2 SSH
$
・pi ユーザパスワードを変更する。
・ホスト名を変更する。
・起動オプションで CLI に変更する。
・ロケールを日本にする*2
・SSH が有効であること確認する。

OS アップデート

前提条件にはあるけど、念のため。
$ sudo apt-get update
$ sudo apt-get upgrade

関連ソフトウェア設定

httpd (Apache2)
Apache2 をインストールしておきます。
$ sudo apt-get install apache2 apache2-doc
Apache2 インストールで Raspbian に登録される httpd ユーザを確認します。
$ grep www /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
$
ここで確認できた www-data ユーザで adiary を動かす権限を管理すると、運用が楽になります。


次は adiary が動くように CGI の動作設定をします。
$ cd /etc/apache2/mods-available
$ cp -p {,/tmp/}mime.conf
$ sudo vi mime.conf
$ diff {,/tmp/}mime.conf
219c219
<       AddHandler cgi-script .cgi
---
>       #AddHandler cgi-script .cgi
$
次の Module 有効化も cgi の動作設定です。
$ sudo apache2ctl -M | grep cgi
$ sudo a2enmod cgi
$ sudo apache2ctl -M | grep cgi
 cgid_module (shared)
adiary.cgi を消したいときに使うモジュール rewrite を読み込んでおきます。
$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2
$ sudo systemctl restart apache2
apache2 のバージョン情報を表示させないように秘匿する設定です。
$ grep -i includeoptional /etc/apache2/apache2.conf
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
$ cd /etc/apache2/conf-available
$ sudo cp -p security.conf{,_$(date +%Y%m%d)}
$ sudo vi security.conf
(書き換え)
$ sudo diff security.conf{,_$(date +%Y%m%d)}
25c25
< #ServerTokens OS
---
> ServerTokens OS
27d26
< ServerTokens Prod
36,37c35,36
< ServerSignature Off
< #ServerSignature On
---
> #ServerSignature Off
> ServerSignature On
$
$ sudo systemctl reload apache2
他の設定は、後で行います。
dhcpcd (Static IP address)
静的 IP アドレスの設定です。
$ sudo cp -p /etc/dhcpcd.conf{,_$(date +%Y%m%d)}
$ sudo vi /etc/dhcpcd.conf
--- 以下を追記 ---
interface eth0
static ip_address=192.168.0.2/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
static domain_name=jimba.jp
------------------
$ sudo diff /etc/dhcpcd.conf{,_$(date +%Y%m%d)}
$ sudo shutdown -r now
IPアドレス等は、構築時に読み替えます。
設定項目設定例意味
interfaceeth0eth0 の IP アドレスを指定します。
static ip_address192.168.0.2/24IPアドレスを静的に指定します。
/24 は、サブネットマスク 255.255.255.0 を示しています。
static routers192.168.0.1デフォルトゲートウェイを静的に指定します。
static domain_name_servers192.168.0.1DNS (Domain Name System) を静的に指定します。
static domain_namejimba.jpホストが属するドメイン名を静的に指定します。
Web で設定するドメイン (URL) とは別物です。
hcpcd の reload でも良さそうだけど、上記は ssh での操作なのでどちらにせよ IP アドレスが変更されて接続が切れるため、リブートしてます。
NTPd
ログの出力時刻を正しく読み取るため、NTP を ntp.nict.jp に設定します。

パッケージをインストールします。
$ sudo apt-get install ntp ntp-doc ntpdate dnsutils
設定するドメインが名前解決できるか確認します。
$ dig ntp.nict.jp +short
ntp でのやりとりができるか確認します。
$ ntpdate -q ntp.nict.jp
server 2001:df0:232:eea0::fff4, stratum 0, offset 0.000000, delay 0.00000
server 2001:df0:232:eea0::fff3, stratum 0, offset 0.000000, delay 0.00000
server 133.243.238.164, stratum 1, offset 0.000458, delay 0.03119
server 133.243.238.163, stratum 1, offset 0.000286, delay 0.03084
server 133.243.238.244, stratum 1, offset 0.000657, delay 0.03125
server 133.243.238.243, stratum 1, offset -0.000104, delay 0.03133
 8 Feb 16:40:43 ntpdate[18685]: adjust time server 133.243.238.163 offset 0.000286 sec
$
出力内容から stratum が 0 でなければ OK です。
0 がエラーです。
1 以上は、NTP サーバの階層を示します。

NTP 設定を行います。
$ sudo cp -p /etc/ntp.conf{,$(date +%Y%m%d)}
$ sudo diff /etc/ntp.conf{,$(date +%Y%m%d)}
$ sudo vi /etc/ntp.conf
---------------------------------------------------------
(pool をコメントアウトして、serverに ntp.nict.jp を指定する)
---------------------------------------------------------
$ sudo diff /etc/ntp.conf /etc/ntp.conf.$(date +%Y%m%d)
20,24c20,24
< #pool 0.debian.pool.ntp.org iburst
< #pool 1.debian.pool.ntp.org iburst
< #pool 2.debian.pool.ntp.org iburst
< #pool 3.debian.pool.ntp.org iburst
< server ntp.nict.jp iburst
---
> pool 0.debian.pool.ntp.org iburst
> pool 1.debian.pool.ntp.org iburst
> pool 2.debian.pool.ntp.org iburst
> pool 3.debian.pool.ntp.org iburst
>
$ sudo systemctl stop ntp
$ sudo ntpdate ntp.nict.jp
$ sudo systemctl start ntp
$ ntpq -p

関連コマンド

git
git でのファイルダウンロードは公式でのやり方なので、それに倣います。
$ type git > /dev/null 2>&1 || sudo apt install git
Image::Magick (PerlMagic)
adiary にあると便利な Image::Magick を先にインストールしておきます。
$ sudo apt-get install perlmagick
Net::SSLeay
adiary にあると便利な Net::SSLeay を先にインストールしておきます。
$ sudo apt-get install libnet-https-any-perl

ユーザ設定

運用ユーザの作成
運用で使うユーザを登録しておきます。
$ sudo useradd -d /home/example -m -g 1000 -s /bin/bash example
$ sudo passwd example
$ sudo vigr
-> pi と同じ場所に example を追記
$
$ sudo su -
# cd /etc/sudoers.d
# cp -p 010_{pi,example}-nopasswd
# vi 010_example-nopasswd
:%s/pi/example/
:x
# exit
$
ユーザ example は、環境に応じて読み替えてください。
運用ユーザでログインおよび sudo 可能なことを確認しておきます。
pi ユーザの不活性化
ユーザ pi を使えなくして、運用ユーザで作業するようにします。
$ sudo usermod -s /sbin/nologin pi

*2 : 特に Wi-Fi Country は、日本で認められていない周波数の電波(違法電波)を出さないようにする設定が楽。

adiary 環境構築

基本的には、公式サイトにある 自前サーバへのインストール を参照すれば足ります。
このページは adiary をインストールする Raspberry Pi の環境を整備する部分に価値があると思っています。

adiary インストール

adiary を git で /var/www/ にダウンロードします。
$ cd /var/www
$ sudo git clone https://github.com/nabe-abk/adiary
$
$ cd adiary
$ cp adiary.conf.cgi{.sample,}
$ cd ../
$
$ sudo chown -R 33:33 adiary
$ sudo chmod -R 750 adiary
$ sudo find adiary -name "*.png" -or -name "*.gif" -or -name "*.txt" -exec chmod 640 {} \;
$
adiary ディレクトリ全体が apache2 のユーザ権限 www-data (ユーザID 33) で動作するので、750 で良い。
画像やテキストファイルは実行権限不要なので 640 に一括変換しておく。

Apache2 設定

adiary のインストール後でなければ行えない Web 公開設定を行います。
設定ファイル作成のための事前調査
adiary が制限を入れたいディレクトリは .htaccess ファイルが置かれています。
自分の設定では .htaccess ファイルを無効にし、すべて apache の設定ファイルに記述するようにしているため、ファイルを探しておきます。
$ sudo find /var/www/adiary -name .htaccess
/var/www/adiary/skel/.htaccess
/var/www/adiary/data/.htaccess
/var/www/adiary/__tool/.htaccess
/var/www/adiary/plugin/.htaccess
/var/www/adiary/__cache/.htaccess
/var/www/adiary/info/.htaccess
/var/www/adiary/lib/.htaccess
/var/www/adiary/skel.local/.htaccess
設定ファイルの作成
上記の制限内容を踏まえて、設定ファイルを作成します。
$ cd /etc/apache2/sites-available
$ sudo vi 201-adiary.conf
(Config writing...)
$ sudo cat 201-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
    </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/__tool>
        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>

    ErrorLog ${APACHE_LOG_DIR}/ttm.error.log
    CustomLog ${APACHE_LOG_DIR}/ttm.access.log combined
</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 a2ensite 201-adiary
Enabling site 201-adiary.
To activate the new configuration, you need to run:
  systemctl reload apache2
$
$ sudo systemctl reload apache2
不要ファイル削除
また、不要になった設定ファイルは、混乱のもとなので消しておきます。
$ sudo rm /var/www/adiary/skel/.htaccess
$ sudo rm /var/www/adiary/data/.htaccess
$ sudo rm /var/www/adiary/__tool/.htaccess
$ sudo rm /var/www/adiary/plugin/.htaccess
$ sudo rm /var/www/adiary/__cache/.htaccess
$ sudo rm /var/www/adiary/info/.htaccess
$ sudo rm /var/www/adiary/lib/.htaccess
$ sudo rm /var/www/adiary/skel.local/.htaccess
ひとつずつ消すのが面倒に思う人は、次のようなコマンドでも良いかもしれません。
$ sudo find /var/www/adiary -name ".htaccess" -exec rm {} \;

Web 上での設定

DNS へ登録した URL (本サイトならば http://ttm.jimba.ddo.jp/) へアクセスして、root アカウント登録や、個別アカウントの登録などを行います。
root アカウント登録
最初のログインに戸惑いますが、ユーザ名 a パスワード a 等、適当に入力してログインすると root でログインしたことになります。
個別アカウント登録
ブログを更新するユーザ等、個別にアカウントを作成します。

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
ボットに公開/非公開したい情報を教える設定です。

以下は Google bot 以外のクロウラを拒絶する例です

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

User-agent: *
Disallow: /

adiary アップデート

基本的には、公式サイトのコマンドでいけるはず。
$ sudo su -s /bin/bash www-data
$ cd ~/adiary
$ git fetch

その他

その他の設定に興味あるかたは、ツイッター等で質問いただくと反映することがあります。