adiary on RaspPi
2024/04/26 09:58
adiary on Raspberry Pi
前提条件
この手順は、以下の条件がすでに完了していることを前提としています。・Raspberry Pi 3 Model B へ Raspbian をインストールおよびアップデート済み
・SSH でのアクセスが可能
・DNS にドメイン設定済み
想定する利用者
読み手は CUI での操作が可能で、TCP/IP の基礎知識をもち、ある程度 Linux に慣れていることを想定しています。そのため、割と不親切*1です。
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-docApache2 インストールで 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 apache2apache2 のバージョン情報を表示させないように秘匿する設定です。
$ 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 nowIPアドレス等は、構築時に読み替えます。
設定項目 | 設定例 | 意味 |
---|---|---|
interface | eth0 | eth0 の IP アドレスを指定します。 |
static ip_address | 192.168.0.2/24 | IPアドレスを静的に指定します。 /24 は、サブネットマスク 255.255.255.0 を示しています。 |
static routers | 192.168.0.1 | デフォルトゲートウェイを静的に指定します。 |
static domain_name_servers | 192.168.0.1 | DNS (Domain Name System) を静的に指定します。 |
static domain_name | jimba.jp | ホストが属するドメイン名を静的に指定します。 Web で設定するドメイン (URL) とは別物です。 |
NTPd
ログの出力時刻を正しく読み取るため、NTP を ntp.nict.jp に設定します。パッケージをインストールします。
$ sudo apt-get install ntp ntp-doc ntpdate dnsutils設定するドメインが名前解決できるか確認します。
$ dig ntp.nict.jp +shortntp でのやりとりができるか確認します。
$ 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
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