adiary 関連ライブラリ

2023/12/14 15:35 OS別::Linuxその他::技術情報
Raspberry Pi を利用したウェブサーバで adiary を利用する際、あると便利なライブラリが存在します。
そのライブラリに関連するパッケージをインストールします。

対象は、Raspbian GNU/Linux 12 (bookworm) になります。

必須パッケージ

adiary の動作に必要なパッケージをインストールします。
$ sudo apt install perl

指定ライブラリ

adiary を便利に使うために adiary が指定するライブラリをパッケージでインストールします。

Image::Magick (PerlMagic)

存在すれば adiary 内で画像縮小が可能です。
$ sudo apt install perlmagick

Net::SSLeay

外部サイトへの https 通信に必要です。
$ sudo apt install libnet-https-any-perl

CryptX

adiary の push 通知プラグインで使用します。
$ sudo apt install libcryptx-perl

目的によるインストール

当手順では使用しませんが、必要があれば利用することになるためインストール手順を記載します。

git

公式サイトから git でインストールする際に利用します。
$ type git > /dev/null 2>&1 || sudo apt install git

確認方法

パッケージ

$ sudo apt list perl

ライブラリ

$ sudo apt list perlmagick libnet-https-any-perl libcryptx-perl

git

$ sudo apt list git

apache2 設定

2023/12/14 15:04 OS別::Linuxその他::技術情報
Raspberry Pi を利用したウェブサーバに、Apache2 およびモジュールをインストールします。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。

apache2 インストール

パッケージインストール

Debian 系の Apache パッケージ名は apache2 になります。
apache2 のインストール有無を確認して、インストールを実行します。
$ sudo apt list apache2
$ sudo apt -y install apache2 apache2-doc
$ sudo apt -y autoremove

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
$

Apache2 設定反映

$ sudo apachectl configtest
$ sudo systemctl reload apache2
configtest メッセージ
以下のメッセージが表示されることがあります。
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
fully qualified domain name (FQDN) が特定できない、というメッセージなので、特定する設定を入れてあげます。
いくつか方法はあるのですが、ここではシンプルな力技でいきます。
$ sudo vi /etc/apache2/conf-available/fqdn.conf
$ cat /etc/apache2/conf-available/fqdn.conf
ServerName example.jp
$ sudo a2enconf

apache2 モジュールインストール

apache2 を入れた後、必要に応じてモジュールも追加インストールする必要があります。
以下のモジュールを追加インストールします。
項目説明備考
cgidcgi を作動させるためのモジュール
RewriteEngineRewrite Engine を利用するためのモジュール
remoteipログの出力先変更等で IP アドレスを利用するためのモジュール

cgid

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m cgid
cgid (enabled by site administrator)
デフォルトで有効化されるはずですが、モジュールがインストールされていなければ a2enmod で cgid を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod cgid
Module cgid already enabled

RewriteEngine

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m rewrite
rewrite (enabled by site administrator)
モジュールがインストールされていなければ a2enmod で rewrite を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod rewrite
Module rewrite already enabled

remoteip

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m remoteip
remoteip (enabled by site administrator)
モジュールがインストールされていなければ a2enmod で rewrite を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod remoteip
Module remoteip already enabled

モジュール設定の有効化

$ sudo apachectl configtest
$ sudo systemctl reload apache2

Raspberry Pi OS NTP 設定

2023/12/14 13:58 OS別::Linuxその他::技術情報
Raspberry Pi を利用したサーバの、初期に行うべき手順で NTP を設定します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。

パッケージ

インストール

パッケージのインストール状況を確認して、必要であればインストールします。
$ sudo apt list ntp ntp-doc ntpdate dnsutils
$ sudo apt install ntp ntp-doc ntpdate dnsutils

名前解決確認

名前解決ができることを確認します。
$ dig ntp.nict.jp +short

NTP 設定

設定差分の読み替え設定

$ . /etc/os-release
$ pNtpConfDir=""
$ case ${VERSION_ID} in
>   12 ) pNtpConf="/etc/ntpsec/ntp.conf" ;;
>    * ) pNtpConf="/etc/ntp.conf" ;;
> esac

設定ファイル修正

$ sudo cp -p ${pNtpConf}{,$(date +%Y%m%d)}
$ sudo diff ${pNtpConf}{,$(date +%Y%m%d)}
$ sudo vi ${pNtpConf}
---------------------------------------------------------
(pool をコメントアウトして、serverに ntp.nict.jp を指定する)
---------------------------------------------------------
$ sudo diff ${pNtpConf}{,$(date +%Y%m%d)}
23,27c23,27
< #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.jimba.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
>
39c39
< #restrict -6 default kod notrap nomodify nopeer noquery limited
---
> restrict -6 default kod notrap nomodify nopeer noquery limited
43c43
< #restrict ::1
---
> restrict ::1

設定の反映

$ sudo systemctl status ntp
$ sudo systemctl stop ntp
$ sudo ntpdate ntp.nict.jp
$ sudo systemctl start ntp
$ sudo systemctl status ntp
もし status 確認で次のようなエラーが出力されていたら、ディレクトリを作成する。
11月 05 11:01:02 rasp012 ntpd[1385]: statistics directory /var/log/ntpsec/ does not exist or is unwriteable, error No such fi>
$ grep ntp /etc/passwd
ntpsec:x:112:122::/nonexistent:/usr/sbin/nologin
$ sudo mkdir /var/log/ntpsec
$ sudo chown 112:122 /var/log/ntpsec
$ ls -ld /var/log/ntpsec
drwxr-xr-x 2 ntpsec ntpsec 4096 11月  5 11:02 /var/log/ntpsec
$ sudo systemctl status ntp
$ sudo systemctl restart ntp
$ sudo systemctl status ntp
$ ls -l /var/log/ntpsec

設定反映確認

$ ntpq -p
     remote                                   refid      st t when poll reach   delay   offset   jitter
=======================================================================================================
+ntp-a3.nict.go.jp                       .NICT.           1 u   42   64  377   7.1691 9051.364   1.0737
ntp は、ホスト名に * が付いているサーバに同期している。
また、IPアドレスで確認したい場合は、オプションに -n を追加して ntpq -np 等とする。

その他

NTP サーバとして利用するなら追加設定が必要なので、別途 NTP サーバとしての設定を行う。
例えば、次のような認証を行う。
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

Raspberry Pi OS IPv4 静的設定

2023/12/14 11:25 OS別::Linuxその他::技術情報
Raspberry Pi を利用したサーバの、初期に行うべき手順で IPv4 アドレスを固定します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。


IPv6 を有効化していると、ホームルータの NAT に関係なく、インターネットと直接接続できるようになります。
セキュリティ的に設定が面倒なのと、まだ IPv4 が中心なので IPv6 無効化と、静的 IP アドレス設定を行います。

事前準備

IPv6 設定 (無効化)

/etc/sysctl.conf に IPv6 の利用を停止する設定を追記します。
$ sudo cp -p /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
61,62d60
< net.ipv6.conf.all.disable_ipv6 = 1
< net.ipv6.conf.default.disable_ipv6 = 1
$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ ip a

IPv4 設定

ネットワーク設定方法確認

対象のバージョンを確認します。
Raspberry Pi OS が bookworm の場合は、NetworkManager を設定します。
【参考】ネットワーク設定パッケージ
Debian 系ネットワーク設定備考
12bookwormNetworkManager
11bullseyedhcpcd
これは 11 から 12 への変更点のひとつです。
$ 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"

IPv4 アドレス設定(NetworkManager 版)

ここでは、Raspberry pi OS 12 (bookworm) 以降NetworkManager を利用した IP アドレスの設定を行います。
ネットワーク設定の確認
接続情報確認
まずは、DEVICE を確認します。
$ nmcli con show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  0f3c983a-4e89-39f5-b433-aa43b0088c28  ethernet  eth0
$ nmcli device status
DEVICE         TYPE      STATE                   CONNECTION
eth0           ethernet  connected               Wired connection 1
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
NAME が 'Wired connection 1' のものが eth0 となっています。
デバイス情報確認
次に、デバイス毎の詳細情報を、ふむふむと確認しておきます。
$ nmcli device show
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         B8:27:EB:27:55:9C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Wired connection 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.1.198/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 100
IP4.DNS[1]:                             192.168.1.1
IP4.SEARCHES[1]:                        flets-east.jp
IP4.SEARCHES[2]:                        iptvf.jp
IP6.GATEWAY:                            --
IP6.DNS[1]:                             2404:1a8:7f01:b::3
IP6.DNS[2]:                             2404:1a8:7f01:a::3
IP6.SEARCHES[1]:                        flets-east.jp
IP6.SEARCHES[2]:                        iptvf.jp

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          100 (connected (externally))
GENERAL.CONNECTION:                     lo
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            --
IP6.GATEWAY:                            --

GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         B8:27:EB:72:00:C9
GENERAL.MTU:                            1500
GENERAL.STATE:                          30 (disconnected)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.GATEWAY:                            --
IP6.GATEWAY:                            --

GENERAL.DEVICE:                         p2p-dev-wlan0
GENERAL.TYPE:                           wifi-p2p
GENERAL.HWADDR:                         (unknown)
GENERAL.MTU:                            0
GENERAL.STATE:                          30 (disconnected)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
設定変更
接続名変更
これは行わなくてもいいのですが、毎回クォートで括らなければならない接続名(NAME)を 'Wired connection 1' から svnet へ変更しておきます。
逆に言うと、毎回クォートで括れば、設定変更の必要はありません。
$ sudo nmcli con mod 'Wired connection 1' connection.id svnet
$ nmcli con show
ネットワーク設定変更
次に、IP アドレスやルーティングの設定を変更します。

IP アドレスや設定情報は、適当に読み替えてください。
$ sudo nmcli con mod svnet ipv4.address "192.168.10.100/24"
$ sudo nmcli con mod svnet ipv4.gateway "192.168.10.1"
$ sudo nmcli con mod svnet ipv4.dns "192.168.10.1 192.168.10.10"
$ sudo nmcli con mod svnet ipv4.dns-priority 10 ipv6.dns-priority 20
$ sudo nmcli con mod svnet ipv4.dns-search "example.jp"
$ sudo nmcli con mod svnet ipv4.routes "192.168.10.0/24 192.168.10.1"
$ sudo nmcli con mod svnet ipv4.method "manual"
$ sudo nmcli con mod svnet ipv6.method "disabled"
$ sudo nmcli con up svnet
途中、IPv6 は無効にしているのに指定があるのはなぜかというと、IPv6 アドレスに対する名前解決の優先度が下げるためです。
いま接続しているセッションについては接続が切れないようですが、今後は新しい IP アドレスで接続する必要があります。
設定確認
ネットワーク設定を確認する。
$ ip a
$ nmcli connection show
設定反映確認
[反映確認 1] OS 再起動
ネットワーク設定が保存されていることを確認するにはいくつか方法がありますが、すべて一括で反映するには OS を再起動します。
$ sudo reboot
起動後は、設定した IP アドレスに対して Tera Term 等で接続してください。
[反映確認 2] サービス再起動
ネットワーク設定だけを反映したい場合は、対象サービスを再起動します。
$ systemctl status network.service
$ systemctl restart network.service
$ systemctl status network.service
後は、設定した IP アドレスに対して Tera Term 等で接続してください。

設定確認

IP アドレス
$ ip a
/etc/resolv.conf
$ cat /etc/resolv.conf
# Generated by resolvconf
domain example.jp
nameserver 192.168.10.10
nameserver 192.168.10.1
$ ping 192.168.10.1 -c 3

Raspberry Pi OS 実行環境整備

2023/12/14 11:10 OS別::Linuxその他::技術情報
正直なところ、これは個人の好みなのですけれども。
実行環境を、使いやすいように整備します。

テキストエディタ (Vim)

エディタ変更(1)

デフォルトでは nano が選択されているので、これを vim に変更します。
update-alternatives コマンドで、以下のように vim の番号を入力します。
$ sudo update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。

  選択肢    パス             優先度  状態
------------------------------------------------------------
* 0            /bin/nano           40        自動モード
  1            /bin/ed            -100       手動モード
  2            /bin/nano           40        手動モード
  3            /usr/bin/vim.tiny   15        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 3
update-alternatives: /usr/bin/editor (editor) を提供するためにマニュアルモードで /usr/bin/vim.tiny を使います
$

エディタ変更(2)

Debian 系の人は vi がよっぽど嫌いなのか、設定項目としてまだ不足するのでこちらも修正します。
$ select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 2
変更されたかどうかは、以下のリンクを確認します。
$ ls -l /usr/bin/editor
lrwxrwxrwx 1 root root 24  2月 14 00:54 /usr/bin/editor -> /etc/alternatives/editor

vimrc 作成

行の表示等、vi のデフォルト動作を変更したいので作成します。
$ vi --version | grep "vimrc file"
   system vimrc file: "/etc/vim/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
$ cd ~
$ mkdir .vim
$ vi .vim/vimrc
$ cat .vim/vimrc
set nu

.bash_aliases 作成

.bashrc や .bash_profile に追記してもいいのですが、ファイルを置くだけで使えるので利用します。
$ cd ~
$ vi .bash_aliases
$ cat .vim/vimrc
# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'