M1 MacにUTMを使ってウェブ開発(LAMP)環境を構築する 【5】(MariaDB11.4・phpMyAdmin5.2)

開発環境

MariaDB11.4のインストール

このあたりを参考に。
【公式】Installing MariaDB with yum/dnf
MariaDB 11.4 をインストールした
この後のphpMyAdminのセットアップをスムーズに行うために、なるべく以下の通りにした方がいいかな。

  • rootパスワードは空で。
  • Switch to unix_socket authentication [Y/n] これは"n"で。

phpMyAdmin5.2のインストール

まずはインストールして設定ファイルをごにょごにょ

phpMyAdminはこのページ
How to Install and use phpMyAdmin on Rocky Linux

とりあえずインストールして、virtualhost設定してhosts記入してなど済ませて、設定ファイルをいじる。

# blowfish用に32桁の乱数を作っておく
# ローカルのみでセキュリティー関係なしなら何でもいいから32桁
# セキュアでランダムな32桁はこれで
$ tr -dc 'A-Za-z0-9!@#$%^&*()-_=+<>?' < /dev/urandom | head -c 32
# よくある以下の関数だと32桁以上の文字列が出来ちゃうから文字数を削る必要あるよ
$ openssl rand -base64 32
T9WycDvhuwOWKnhmrTBqeGYnm4YOdyKaVLNi4qAAl/s= # ほら45文字も!!削って32文字にしたら大丈夫!

# とりあえず設定ファイルをコピー&リネームして
$ sudo cp confit.sample.inc.php config.inc.php
# 編集するYO
$ sudo vim config.inc.php

編集する行は

/* blowfish */
$cfg['blowfish_secret'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ // xxxのところに32文字の文字列

/* ルートユーザーのパスワード無しログイン許可 */
$cfg['Servers'][$i]['AllowNoPassword'] = false; // trueに書き換える

/* ディレクトリ設定 */
/**
 * Directories for saving/loading files from server
 */
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
$cfg['TmpDir'] = '/tmp/'; // ← この行を加える

/* 言語設定 */
// $cfg['DefaultLang'] = 'en'; ←アンコメントして 'ja' に書き換え

これぐらいでいいと思われ。
そしてブラウザからアクセスすると・・・真っ白画面・・・ソースも真っ白・・・

phpインストール時に入れ忘れてたパッケージを入れる

そういえば、phpインストールする時に本体のことしか考えてなかった・・・
足りてないパッケージをインストールしていくぅっ!

多分、以下があれば大丈夫だと思う。

  • php-mbstring
  • php-xml
  • php-xmlrpc
  • php-gd
  • php-pecl-mcrypt
  • php-pecl-mysql
  • php-mysqlnd
  • php-opcache ← 追加!!

まずは、PHPのバージョン(今回は8.4)と合ったものが入ることを確認

$ sudo dnf info php-mbstring php-xml php-xmlrpc php-gd php-pecl-mcrypt  php-pecl-mysql php-mysqlnd
Rocky Linux 9 - BaseOS                                                                                     2.6 kB/s | 4.1 kB     00:01    
Rocky Linux 9 - AppStream                                                                                  5.9 kB/s | 4.5 kB     00:00    
Rocky Linux 9 - CRB                                                                                        5.0 kB/s | 4.5 kB     00:00    
Rocky Linux 9 - Extras                                                                                     2.6 kB/s | 2.9 kB     00:01    
Installed Packages
Name         : php-gd
Version      : 8.4.2
Release      : 1.el9.remi
Architecture : aarch64
Size         : 197 k
Source       : php-8.4.2-1.el9.remi.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : A module for PHP applications for using the gd graphics library
URL          : http://www.php.net/
License      : PHP-3.01
Description  : The php-gd package contains a dynamic shared object that will add
             : support for using the gd graphics library to PHP.

Name         : php-mbstring
Version      : 8.4.2
Release      : 1.el9.remi
Architecture : aarch64
Size         : 1.2 M
Source       : php-8.4.2-1.el9.remi.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : A module for PHP applications which need multi-byte string handling
URL          : http://www.php.net/
License      : PHP-3.01 AND LGPL-2.1-only AND OLDAP-2.8
Description  : The php-mbstring package contains a dynamic shared object that will add
             : support for multi-byte string handling to PHP.

Name         : php-mysqlnd
Version      : 8.4.2
Release      : 1.el9.remi
Architecture : aarch64
Size         : 532 k
Source       : php-8.4.2-1.el9.remi.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : A module for PHP applications that use MySQL databases
URL          : http://www.php.net/
License      : PHP-3.01
Description  : The php-mysqlnd package contains a dynamic shared object that will add
             : MySQL database support to PHP. MySQL is an object-relational database
             : management system. PHP is an HTML-embeddable scripting language. If
             : you need MySQL support for PHP applications, you will need to install
             : this package and the php package.
             : 
             : This package use the MySQL Native Driver

Name         : php-pecl-mcrypt
Version      : 1.0.7
Release      : 2.el9.remi.8.4
Architecture : aarch64
Size         : 78 k
Source       : php-pecl-mcrypt-1.0.7-2.el9.remi.8.4.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : Bindings for the libmcrypt library
URL          : https://pecl.php.net/package/mcrypt
License      : PHP-3.01
Description  : Provides bindings for the unmaintained libmcrypt.
             : 
             : Package built for PHP 8.4.

Name         : php-pecl-mysql
Version      : 1.0.0
Release      : 0.26.20210423.ca514c4.el9.remi.8.4
Architecture : aarch64
Size         : 83 k
Source       : php-pecl-mysql-1.0.0-0.26.20210423.ca514c4.el9.remi.8.4.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : MySQL database access functions
URL          : https://pecl.php.net/package/mysql
License      : PHP
Description  : This extension provides the mysql family of functions that were provided
             : with PHP 3 to 5. These functions have been superseded by MySQLi and PDO_MySQL,
             : which continue to be bundled with PHP 7 and newer.
             : 
             : Although it should be possible to use this extension with PHP 7 or 8, you are
             : strongly encouraged to port your code to use either MySQLi or PDO_MySQL,
             : as this extension is not maintained and is available for historical reasons only.
             : 
             : Package built for PHP 8.4.

Name         : php-xml
Version      : 8.4.2
Release      : 1.el9.remi
Architecture : aarch64
Size         : 3.8 M
Source       : php-8.4.2-1.el9.remi.src.rpm
Repository   : @System
From repo    : remi-modular
Summary      : A module for PHP applications which use XML
URL          : http://www.php.net/
License      : PHP-3.01
Description  : The php-xml package contains dynamic shared objects which add support
             : to PHP for manipulating XML documents using the DOM tree,
             : and performing XSL transformations on XML documents.

remiリポジトリを有効化してない場合は有効化して

$ sudo dnf info --enablerepo=remi php-mbstring・・(以下ry

で。

全て8.4用のパッケージになってるので、いざ実行!

$ sudo dnf -y install php-mbstring php-xml php-xmlrpc php-gd php-pecl-mcrypt  php-pecl-mysql php-mysqlnd

一応、MariaDBとApacheを再起動して

sudo systemctl restart mariadb
sudo systemctl restart httpd

再度ブラウザからphpMyAdminにアクセスすると・・・出た!

rootでのパスワードなしログインができない!?

phpMyAdminの設定ファイル config.inc.php で

$cfg['Servers'][$i]['AllowNoPassword'] = true;

にしてあるのにrootユーザーでパスワードなしログインが出来ない場合、以下のように進める。

まずはサーバー側でMariaDBにログインして

$ sudo mariadb -u root

MariaDBのrootユーザーの認証方式を確認

> SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

結果のpluginが mysql_native_password になってたらOK。

+------+-----------+-------------+
| user | host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

pluginがunix_socketまたはauth_socketになっている場合、MariaDBはrootのログインをOSユーザーrootに限定しているため、認証方式を変更してやる。

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;

認証方式をパスワードにしたら、rootユーザーのパスワードを空に設定して権限をflushする。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');
FLUSH PRIVILEGES;

これでOK! rootのパスワードなしログインが可能になる。
一応、MariaDBとApacheを再起動しておく。

sudo systemctl restart mariadb
sudo systemctl restart httpd

ブラウザ側からphpMyAdminにパスワード無しrootでログインして確認。
あといろんな設定などは後でやるとして、あとはユーザー作ってrootのパスワード無しログインをfalseにしたりとちょこちょことやることある。後回し。

後で落ち着いたら現在の開発環境のデータベースをまるっと持ってくる予定。

その他のアプリケーション

Gitのインストール

バージョン確認

$ dnf info git
Last metadata expiration check: 0:31:38 ago on Wed Jan  1 20:51:39 2025.
Available Packages
Name         : git
Version      : 2.43.5
Release      : 2.el9_5
Architecture : aarch64
Size         : 50 k
Source       : git-2.43.5-2.el9_5.src.rpm
Repository   : appstream
Summary      : Fast Version Control System
URL          : https://git-scm.com/
License      : GPLv2
Description  : Git is a fast, scalable, distributed revision control system with an
             : unusually rich command set that provides both high-level operations
             : and full access to internals.
             : 
             : The git rpm installs common set of tools which are usually using with
             : small amount of dependencies. To install all git packages, including
             : tools for integrating with other SCMs, install the git-all meta-package.

最新が2.47.0。ま、いっか。
前回CentOSでyumでインストールした時はソースコードからmakeしなきゃいけなかったのでdnfエラい。

$ sudo dnf -y install git
$ git -v
git version 2.43.5

完了!

chronyのインストール

なぜか前回はntpにこだわったらしい私。謎。

$ sudo dnf install -y chrony
Last metadata expiration check: 0:39:06 ago on Wed Jan  1 20:51:39 2025.
Package chrony-4.5-3.el9.aarch64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

#状態の確認
$ chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 202.182.111.234.vultruse>     2   8   377    62   +113us[  +55us] +/-   15ms
^- time.cloudflare.com           3   8   377   148   -293us[ -357us] +/-   79ms
^+ v4.cloud.ntp.admtan.jp        2   8   377   131  -3694us[-3756us] +/-   27ms
^- sv1.localdomain1.com          2   8   377   260   +697us[ +625us] +/-   36ms

一番上の * が付いているサーバーが現在採用されているようなんだけど、上記4つのサーバーのうちどれがいいのかChatGPTに聞いてみた。

この`chronyc sources`コマンドの出力から、ChronyがNTPサーバーとどのように同期しているかを評価できます。

### 各列の意味
- **MS**: サーバーの状態を示します。`^` はサーバーとして使用中、`*` は現在の基準サーバーを表します。
- **Name/IP address**: サーバーの名前またはIPアドレス。
- **Stratum**: NTPサーバーの階層を示します。低いほど基準時計に近いです(1が最高)。
- **Poll**: ポーリング間隔(2の累乗秒)。
- **Reach**: 接続成功のビットフィールド(8回の試行結果を示します)。377は成功している状態。
- **LastRx**: 最後に応答があった秒数。
- **Last sample**: サーバーとの時刻差と統計情報。`[ ]`内がフィルタ後の補正値、`+/-`は信頼範囲。

---

### 評価
1. **基準サーバー**
   - `^* 202.182.111.234.vultruse>`が現在の基準サーバーです。
   - 補正量が`+113us`(マイクロ秒)と小さいため、正確な時刻を提供していることが分かります。
   - 信頼範囲(`+/- 15ms`)も狭く、信頼性が高いと評価できます。

2. **他のサーバーの状態**
   - `^- time.cloudflare.com`
     - 信頼度が基準サーバーより低い(`^-`)ですが、時刻差`-293us`と大きなズレはありません。
     - 信頼範囲(`+/- 79ms`)はやや広いです。
   - `^+ v4.cloud.ntp.admtan.jp`
     - 補助的なサーバー(`^+`)として同期されています。
     - 時刻差`-3694us`はやや大きいですが、補正可能な範囲です。
     - 信頼範囲(`+/- 27ms`)は適切です。
   - `^- sv1.localdomain1.com`
     - 信頼性が低く、時刻差`+697us`で補正可能。
     - 信頼範囲(`+/- 36ms`)は平均的。

3. **全体の評価**
   - Chronyは現在、正確な基準サーバー(202.182.111.234.vultruse>)を選択し、適切に同期しています。
   - 他のサーバーも補助的な役割を果たしており、ネットワーク全体の信頼性を高めています。
   - 全体的に状態は良好です。

---

### 改善案(必要なら)
- サーバーのリストを確認し、信頼性が低いサーバーを削除して信頼性の高いサーバーを追加するとさらに良い状態になります。
- 必要に応じて、ポーリング間隔を調整して負荷を軽減できます。

ChatGPTマジエラいwww

ということで、ひとまずこれで最低限必要なアプリケーションは揃ったかな。(Nginxどこいったww)

次は苦手なオレオレ証明書関係をやんなきゃね。久しぶりの作業なので知識が薄れちまってる。また勉強し直し・・・頑張ろうw

2025/01/02開発環境Apache,chrony,Linux,MariaDB,php,phpMyAdmin,RockyLinux,UTM

Posted by YANAGIDAryosuke