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

RPi OS NTP 設定

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

パッケージ

インストール

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

名前解決確認

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

NTP 設定

設定差分の読み替え設定

$ . /etc/os-release
$ pNtpConfDir="/etc/ntpsec/ntp.conf"

設定ファイル修正

$ 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)}
20c20
< #tos maxclock 11
---
> tos maxclock 11
34,38c34,37
< #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
< pool 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
52c51
< #restrict ::1
---
> restrict ::1

設定の反映

$ sudo systemctl status ntpsec
$ sudo systemctl stop ntpsec
$ sudo ntpdate ntp.nict.jp
$ sudo systemctl start ntpsec
$ sudo systemctl status ntpsec
もし 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.nict.jp                             .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
*ntp-a2.nict.go.jp                       .NICT.           1 u    -   64  377   4.4718   1.3757   3.6481
-ntp-b2.nict.go.jp                       .NICT.           1 u   13   64  377   5.0246   1.0815   3.5915
+ntp-a3.nict.go.jp                       .NICT.           1 u    1   64  377   4.9172   1.4364   3.4305
+ntp-k1.nict.jp                          .NICT.           1 u    2   64  377  16.5057   0.5122   3.4384
+ntp-b3.nict.go.jp                       .NICT.           1 u    -   64  377   4.5500   5.6319   4.4448
 ntp-a3.nict.go.jp                       .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
 2001:ce8:78::2                          .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
 ntp-a2.nict.go.jp                       .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
ntp は、ホスト名に * が付いているサーバに同期している。
また、IPアドレスで確認したい場合は、オプションに -n を追加して ntpq -np 等とする。

その他

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

更新履歴

日付内容
2024.6.19Linux 12 (bookworm) 用に設定内容を変更した*1

*1 : Raspbian GNU/Linux 11 (bullseye) と Raspbian GNU/Linux 12 (bookworm) では、設定ファイルだけではなく、設定内容も微妙に変更が必要で同期しなかったため。

RPi OS IPv4 静的設定

2024/05/26 22:06 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

RPi OS 実行環境整備

2024/05/26 22:05 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 .bash_aliases
# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

RPi OS raspi-config

2024/09/17 01:59 OS別::Linuxその他::技術情報
Raspberry Pi を利用したサーバの、初期に行うべき手順で raspi-config を実行します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。


raspi-config

以前までの Raspberry Pi OS では raspi-config の nonint モードで全て設定できたのですが、Raspbian GNU/Linux 12 (bookworm) では、変更されたパッケージの影響等で以前のバージョンから利用できなくなっている nonint モードがあるので CUI で一通り設定します。
No項目説明
1System OptionsConfigure system settings
2Display OptionsConfigure display settings
3Interface OptionsConfigure connections to peripherals
4Performance OptionsConfigure performance settings
5Localisation OptionsConfigure language and regional settings
6Advanced OptionsConfigure advanced settings
8UpdateUpdate this tool to the latest version
9About raspi-configInformation about this configuration tool
7 が飛んでいますが、表示上も存在しません。

1 System Options

No項目説明
S1Wireless LANEnter SSID and passphrase
S2AudioSelect audio out through HDMI or 3.5mm jack
S3PasswordChange password for the 'jimba' user
S4HostnameSet name for this computer on a network
S5Boot / Auto LoginSelect boot into desktop or to command line
S6Splash ScreenChoose graphical splash screen or text boot
S7Power LEDSet behaviour of power LED
S8BrowserChoose default web browser
サーバー用途として設定するので、RPi OS インストール の通りに設定している場合は、上記項目 S5 のみが対象になると思います。
S5 Boot / Auto Login
ここでは B1 を選択して <了解> します。
No項目説明
B1ConsoleText console, requiring user to login
B2Console AutologinText console, automatically logged in as 'example' user
B3DesktopDesktop GUI, requiring user to login
B4Desktop AutologinDesktop GUI, automatically logged in as 'example' user

2 Display Options

以下の設定項目がありますが、特に設定変更するものはありません。
No項目説明
D1UnderscanRemove black border around screen
D2Screen BlankingEnable/disable screen blanking
D3VNC ResolutionSet resolution for headless use
D4CompositeEnable/disable composite output

3 Interface Options

以下の設定項目がありますが、RPi OS インストール の通りに設定している場合は、特に設定変更するものはありません。
No項目説明
I1SSHEnable/disable remote command line access using SSH
I2VNCEnable/disable graphical remote desktop access
I3SPIEnable/disable automatic loading of SPI kernel module
I4I2CEnable/disable automatic loading of I2C kernel module
I5Serial PortEnable/disable shell messages on the serial connection
I61-WireEnable/disable one-wire interface
I7Remote GPIOEnable/disable remote access to GPIO pins

4 Performance Options

以下の設定項目がありますが、特に設定変更するものはありません。
No項目説明
P2Overlay File System Enable/disable read-only file system

5 Localisation Options

以下の設定項目がありますが、RPi OS インストール の通りに設定している場合は、L4 のみの設定変更となります。
No項目説明
L1LocaleConfigure language and regional settings
L2TimezoneConfigure time zone
L3KeyboardSet keyboard layout to match your keyboard
L4WLAN CountrySet legal wireless channels for your country
L4 WLAN Country
「JP Japan」を選択して <了解> すると、次のメッセージが表示されます。
Wireless LAN country set to JP
これは、Wi-Fi で使う電波(周波数)の範囲を、それぞれの国の事情に合わせて指定するもののようです。
そのため設定しない場合、違法電波を出力することがあります。

6 Advanced Options

以下の設定項目がありますが、RPi OS インストール の通りに設定している場合は、特に設定変更するものはありません。
No項目説明
A1Expand FilesystemEnsures that all of the SD card is available
A2Network Interface NamesEnable/disable predictable network i/f names
A3Network Proxy SettingsConfigure network proxy settings
A6WaylandSwitch between X and Wayland backends
A7Audio ConfigSet audio control system

8 Update

以下のコマンドを実行したのと同じく、Raspberry Pi OS をアップデートします。
$ sudo apt -y update && sudo apt -y upgrade
どこかで実行する必要があるので、ここで update を実行しておきます。

もし、次の警告メッセージが表示されたら、とりあえず対象キーを mv してみてください。
W: http://raspbian.raspberrypi.com/raspbian/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the
私が行った作業は、以下の通りです。
$ sudo apt update
Hit:1 http://archive.raspberrypi.com/debian bookworm InRelease
Get:2 http://raspbian.raspberrypi.com/raspbian bookworm InRelease [15.0 kB]
Fetched 15.0 kB in 3s (5,431 B/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
W: http://raspbian.raspberrypi.com/raspbian/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
$ sudo mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
$ sudo apt update
Hit:1 http://archive.raspberrypi.com/debian bookworm InRelease
Get:2 http://raspbian.raspberrypi.com/raspbian bookworm InRelease [15.0 kB]
Fetched 15.0 kB in 3s (5,970 B/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
参考URL
This worked for me...
Code: Select all

sudo cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d

I ended up using the same thing, except I'm doing a mv instead of a cp. I'm thinking of including this in the ansible scripts I use for building a new Raspberry Pi setup.
Just a moment...

9 About raspi-config

raspi-config についてメッセージが表示されます。
記事を作成した時点では、raspi-config は Version: 20231108 でした。