kraftsrv.net

Raspberry Pi 上の OpenBSD 環境に Apache/PHP/MariaDB のインストール

Raspberry Pi 3 Model B+ 上の OpenBSD 7.0 環境に Apache/PHP/MariaDB をインストールする手順です。
Apache/PHP/MariaDB の基本的な設定変更までを行います。

MariaDB のインストール

バイナリパッケージのインストール

パッケージをインストールします。

raspberrypi# pkg_add mariadb-server
quirks-4.53 signed on 2021-10-15T18:58:49Z
quirks-4.53: ok
mariadb-server-10.6.4p2v1:nghttp2-1.44.0: ok
mariadb-server-10.6.4p2v1:curl-7.79.0: ok
mariadb-server-10.6.4p2v1:xz-5.2.5: ok
mariadb-server-10.6.4p2v1:libiconv-1.16p0: ok
mariadb-server-10.6.4p2v1:libxml-2.9.12: ok
mariadb-server-10.6.4p2v1:lz4-1.9.3p0: ok
mariadb-server-10.6.4p2v1:lzo2-2.10p2: ok
mariadb-server-10.6.4p2v1:snappy-1.1.8: ok
mariadb-server-10.6.4p2v1:mariadb-client-10.6.4v1: ok
mariadb-server-10.6.4p2v1:p5-Params-Util-1.07p2: ok
mariadb-server-10.6.4p2v1:p5-Math-Base-Convert-0.11p0: ok
mariadb-server-10.6.4p2v1:p5-Clone-0.45: ok
mariadb-server-10.6.4p2v1:p5-Module-Runtime-0.016p0: ok
mariadb-server-10.6.4p2v1:p5-SQL-Statement-1.414: ok
mariadb-server-10.6.4p2v1:p5-Net-Daemon-0.48p1: ok
mariadb-server-10.6.4p2v1:p5-PlRPC-0.2020p0: ok
mariadb-server-10.6.4p2v1:p5-FreezeThaw-0.5001p0: ok
mariadb-server-10.6.4p2v1:p5-MLDBM-2.05p0: ok
mariadb-server-10.6.4p2v1:p5-DBI-1.643: ok
mariadb-server-10.6.4p2v1:p5-DBD-MariaDB-1.21p3: ok
mariadb-server-10.6.4p2v1:bzip2-1.0.8p0: ok
mariadb-server-10.6.4p2v1:pcre2-10.36: ok
mariadb-server-10.6.4p2v1: ok

起動スクリプトは /etc/rc.d ディレクトリ以下に配置されます。

raspberrypi# ls -l /etc/rc.d/mysqld
-rwxr-xr-x  1 root  bin  206 Sep 27 10:51 /etc/rc.d/mysqld

設定ファイルは /etc ディレクトリ以下に配置されます。

raspberrypi# ls -l /etc/my.cnf
-rw-r--r--  1 root  wheel  452 Oct 21 22:48 /etc/my.cnf

設定ファイルの編集

本稿では以下の方針例の通り設定ファイルの編集 (各設定値の変更) を行うこととします。

バッファプールのサイズ 64M に変更
同時接続数 15 に変更
文字コードの設定 UTF8 に変更

以下は編集後の /etc/my.cnf の内容例となります。

[client-server]
#socket=/var/run/mysql/mysql.sock
#port=3306

# This will be passed to all MariaDB clients
[client]
#password=my_password
default-character-set=utf8

# The MariaDB server
[mysqld]
# To listen to all network addresses, use "bind-address = *"
bind-address=localhost
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#general-log
#slow_query_log
character-set-server=utf8
innodb_buffer_pool_size=64M
max_connections=15

起動

MariaDB データディレクトリを初期化して、システムテーブルを作成します。

raspberrypi# /usr/local/bin/mariadb-install-db
Installing MariaDB/MySQL system tables in '/var/mysql' ...
OK

MariaDB を起動します。

raspberrypi# rcctl start mysqld
mysqld(ok)

MariaDB に root ユーザで接続します。
※パスワードは設定されていないため指定不要です。

raspberrypi# /usr/local/bin/mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.4-MariaDB OpenBSD port: mariadb-server-10.6.4p2v1

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

root ユーザのパスワードを設定します。
以下はパスワードを『Password1234』の文字列に設定する場合の例となります。

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password1234';
Query OK, 0 rows affected (0.025 sec)

MariaDB [(none)]>

MariaDB との接続を切断します。

MariaDB [(none)]> quit
Bye

自動起動設定

MariaDB の自動起動が行われるようにする場合は、rcctl コマンドで mysqld を有効化します。

raspberrypi# rcctl enable mysqld

/etc/rc.conf.local に以下の設定が追加されます。

pkg_scripts=mysqld

ログローテーション

MariaDB のログファイルは切り替え後にフラッシュ操作が必要となるため、本稿では手動でログローテーションを行うこととします。
※newsyslog の設定だけではログローテーションは完結しない形となります。

ログファイルの切り替えを行います。
本稿では日付 (_YYYYMMDD) のサフィックスを付与することとします。

raspberrypi# mv /var/mysql/raspberrypi.err /var/mysql/raspberrypi.err_`/bin/date '+%Y%m%d'`

フラッシュ操作を行います。
mysqladmin flush-logs コマンド実行後、パスワード入力のプロンプトが表示されます。
パスワードを入力します。

raspberrypi# /usr/local/bin/mysqladmin -u root -p flush-logs
Enter password:

新規ログファイルの作成とオープンが行われます。

raspberrypi# ls -l /var/mysql/raspberrypi.err*
-rw-rw----  1 _mysql  _mysql     0 Oct 21 23:00 /var/mysql/raspberrypi.err
-rw-rw----  1 _mysql  _mysql  1500 Oct 21 23:00 /var/mysql/raspberrypi.err_20211021

Apache のインストール

バイナリパッケージのインストール

パッケージをインストールします。

raspberrypi# pkg_add apache-httpd
quirks-4.53 signed on 2021-10-15T18:58:49Z
apache-httpd-2.4.51:apr-1.6.5p0: ok
apache-httpd-2.4.51:db-4.6.21p7v0: ok
apache-httpd-2.4.51:apr-util-1.6.1p2: ok
apache-httpd-2.4.51:jansson-2.13.1: ok
apache-httpd-2.4.51:pcre-8.44: ok
apache-httpd-2.4.51:brotli-1.0.9p0: ok
apache-httpd-2.4.51: ok

MPM のデフォルトは prefork となります。

raspberrypi# /usr/local/sbin/httpd2 -V
Server version: Apache/2.4.51 (Unix)
Server built:   Oct 11 2021 16:10:37
Server's Module Magic Number: 20120211:118
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/var/www"
 -D SUEXEC_BIN="/usr/local/sbin/suexec2"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/httpd2.conf"

起動スクリプトは /etc/rc.d ディレクトリ以下に配置されます。

raspberrypi# ls -l /etc/rc.d/apache2
-rwxr-xr-x  1 root  bin  351 Oct 12 07:18 /etc/rc.d/apache2

設定ファイルは /etc/apache2 ディレクトリ以下に配置されます。

raspberrypi# ls -l /etc/apache2/httpd2.conf
-rw-r--r--  1 root  wheel  21671 Oct 21 23:06 /etc/apache2/httpd2.conf

設定ファイルの編集

/etc/apache2/httpd2.conf の『ServerName』の設定を変更します。
以下は ServerNameを『raspberrypi』とする場合の例となります。

#ServerName www.example.com:80
ServerName raspberrypi

起動

Apache を起動します。

raspberrypi# rcctl start apache2
apache2(ok)

DocumentRoot (/var/www/htdocs ディレクトリ) に配置された index.html にアクセスします。
以下例の通り HTML ソースが表示されることを確認します。

raspberrypi# /usr/local/bin/curl http://localhost/index.html
<html><body><h1>It works!</h1></body></html>

自動起動設定

Apache の自動起動が行われるようにする場合は、rcctl コマンドで apache2 を有効化します。

raspberrypi# rcctl enable apache2

/etc/rc.conf.local の『pkg_scripts=mysqld』の既存の設定に『apache2』が追加されます。

pkg_scripts=mysqld apache2

ログローテーション

/etc/newsyslog.conf にログローテーションの設定を追加します。
本稿では OpenBSD のデフォルト Web サーバ用の既存の設定を流用することとします。
以下は /var/www/logs/access_log と /var/www/logs/error_log に対して、毎日 00:00 に gzip 圧縮を行い 7 世代保存を行う場合の例となります。

#/var/www/logs/access.log               644  4     *    $W0   Z "pkill -USR1 -u root -U root -x httpd"
#/var/www/logs/error.log                644  7     250  *     Z "pkill -USR1 -u root -U root -x httpd"
/var/www/logs/access_log                644  7     *    @T00  Z "pkill -USR1 -u root -U root -x httpd2"
/var/www/logs/error_log                 644  7     *    @T00  Z "pkill -USR1 -u root -U root -x httpd2"

PHP

バイナリパッケージのインストール

パッケージをインストールします。
本稿では PHP のバージョンは 7.4 を選択することとします。
また mysqli の拡張モジュールも併せてインストールすることとします。

raspberrypi# pkg_add php-apache-7.4.24 php-mysqli-7.4.24
quirks-4.53 signed on 2021-10-15T18:58:49Z
php-apache-7.4.24:femail-1.0p1: ok
php-apache-7.4.24:femail-chroot-1.0p3: ok
php-apache-7.4.24:argon2-20190702: ok
php-apache-7.4.24:libsodium-1.0.18p1: ok
php-apache-7.4.24:oniguruma-6.9.7.1: ok
php-apache-7.4.24:gettext-runtime-0.21p1: ok
php-apache-7.4.24:php-7.4.24: ok
php-apache-7.4.24: ok
php-mysqli-7.4.24: ok

設定ファイルは /etc ディレクトリ以下に配置されます。

raspberrypi# ls -l /etc/php-7.4.ini
-rw-r--r--  1 root  wheel  72586 Oct 21 23:17 /etc/php-7.4.ini

設定ファイルの編集

/etc/php-7.4.ini の『date.timezone = UTC』の設定をコメントアウト (または削除) して、『date.timezone = Asia/Tokyo』の設定を追加します。

;date.timezone = UTC
date.timezone = Asia/Tokyo

/etc/php-7.4.ini に『mbstring.language = Japanese』の設定を追加 (コメントアウトを解除) します。

;mbstring.language = Japanese
mbstring.language = Japanese

mysqli の拡張モジュールをロードする設定を追加します。
設定ファイルの雛型をコピーして /etc/php-74/mysqli.ini を新規作成します。

raspberrypi# cp -p /etc/php-7.4.sample/mysqli.ini /etc/php-7.4/mysqli.ini

Apache の設定追加

PHP モジュールをロードする設定と PHP ファイルに関するハンドラの設定を追加します。
設定ファイルの雛型をコピーして /var/www/conf/modules/php-7.4.conf を新規作成します。

raspberrypi# cp -p /var/www/conf/modules.sample/php-7.4.conf /var/www/conf/modules/php-7.4.conf

設定の反映 (Apache の再起動) を行います。

raspberrypi# rcctl restart apache2
apache2(ok)
apache2(ok)

MariaDB との連携確認

/var/www/htdocs/test.php を新規作成します。
以下は内容例となります。

<?php
$link = mysqli_connect( "localhost", "root", "Password1234" );

if( mysqli_connect_errno() ){
    printf( "Connect failed: %s\n", mysqli_connect_error() );
    exit();
}

printf( "Server version: %s\n", mysqli_get_server_info($link) );

mysqli_close( $link );
?>

test.php にアクセスします。
以下例の通り MariaDB のバージョンが表示されることを確認します。

raspberrypi# curl http://localhost/test.php
Server version: 5.5.5-10.6.4-MariaDB