西川和久の不定期コラム

root化せず気軽にAndroidスマホでLinux「Termux」!PHP+Apache+MariaDBを入れてWordpressを動かしてみる

AndroidスマホへTermuxをインストールし、PHP+Apache+MariaDBを起動。Wordpress@iPhoneが作動中

 ここのところLinuxネタが続いているが、今回はAndroid搭載のスマホやタブレットでLinuxを動かし、確認としてWordpressを起動するところまでをご紹介したい。OpenSSHサーバーを使ってほかのマシンからssh接続すると、まさかサーバーがスマホとは思わないだろう(笑)。

Termuxとは?

 ご存じのように、AndroidはLinux上で動いているが、ユーザーの全権限を取ってアクセスする方法をroot化と呼んでいる。ただ一歩間違うと起動しなくなるし、セキュリティ面も含め危険でお勧めできる手段ではない。

 そこで登場するのがこのTermux。これはAndroid用の端末エミュレーターの一種となる。普通の端末エミュレータだと外のサーバーへ接続して使うだけだが、Termuxはアプリ内にLinuxライクなシステムを抱えており、そこへ接続可能。スマホやタブレットなどAndroid搭載デバイス単体で完結するLinux環境を得ることができる。

 もちろんリアルなLinuxではないため、大小様々な違いがあるものの、Linuxとの一番の違いはシングルユーザーと言うことだろうか(従ってrootユーザー、su/sudoコマンドはない)。とは言え、タイトルのようにWordpressを動かす程度のことはできる。

 アプリ自体はPlayストアに載っており、簡単にインストール/起動が可能。加えて専用のパッケージがtermux / termux-packagesで公開され、apt(もしくはpkg) Installが使えるため容易にシステム構築することが可能だ。

PlayストアのTermux
Termux起動直後

 早速Playストアからインストールして起動。直後の画面は画面キャプチャにあるような感じとなる。取り急ぎいつもの

$ apt update
$ apt upgrade

を行なったところ、apt updateでリポジトリが使えずエラーで落ちる。いろいろ検索してみると、Playストアのものは2020年9月29日以降更新されておらず、最新はF-Droidにあるとのこと。Google公式のストアではないが、Android向けアプリがダウンロードできるサイトとなる。とは言え、Google的には非公認。セキュリティ面など不安な人は以降、話だけ読んでいただきたい。

 まずF-DROIDアプリをダウンロードしインストール/実行、Termuxを検索/インストール。この時、セキュリティの関係でインストールができない……的なメッセージが出た場合は、設定で許可をする。実行すると先と同じような画面になるので、気を取り直してapt update、 apt upgradeを行なう。

F-DROID
F-DROID > Termux
F-DROIDからダウンロードしたTermux
今度はapt updateがうまくいったのでapt upgradeする。途中何度か聞かれるが全て[Enter]で続ければOK

 今度は問題なく実行できた。これで環境が整ったので、次に進むことにする。

設定1 - スマホ画面での操作は面倒なのでOpenSSHサーバーをインストール

 まずスマホの画面からコマンド入力はさすがに面倒なので、OpenSSHサーバーをインストールし、macOSやWindowsからsshで接続したい。インストールは

$ pkg install openssh
$ pkg install iproute2
※ip -4 aで使用

で行なえる。この時、接続するIPアドレス(Wi-Fi接続)とユーザー名が分からないとどうにもならないため以下で確認。

# IPアドレス確認
$ ip -4 a
inet 192.168.11.20/24
※Android側の設定 > ネットワークとインターネット > Wi-Fi > 接続済みの横にある歯車アイコン > 詳細設定 でもIPアドレスを確認できる
# ユーザー確認uid=xxxxx(u0_axxx)を探す/u0_axxxがユーザー名
$ id
uid=10435(u0_a435)
# パスワード設定
$ passwd
※任意のパスワードを設定する
# OpenSSHサーバー起動
$ sshd

これで例えばmacOSやWindowsから

ssh u0_a435@192.168.11.20 -p 8022
※IPアドレスとユーザー名/パスワードは実行中のシステムに合わせる

これで接続できる。以降はホストがスマホなのかPC/Armサーバーなどかは関係なく、普通にコマンドラインでの操作となる。

macOSからsshでTermuxへログイン

設定2 - PHP+Apache+MariaDBをインストール

 ここから先は普通のPHP+Apache+MariaDBをインストールする一般的な? 手順となる(もちろんApacheの替わりにNginxも使えるが設定が面倒なので)。まずPHPとApacheから。

$ pkg install php php-apache
$ php -v
PHP 8.1.3 (cli) (built: Apr 13 2022 04:18:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies

$ pkg install apache2
$ httpd -v
Server version: Apache/2.4.53 (Unix)
Server built:   Mar 15 2022 06:47:59

ここでApacheの設定を触る必要があるのだが、Termuxのディレクトリ構造は、ルートディレクトリが

/data/data/com.termux/files/usr

になっており、例えば /etc/apache2 は

/data/data/com.termux/files/usr/etc/apache2

となる。長くて面倒だが、$PREFIXを使い代替え可能。httpd.confを編集するには

$ nano $PREFIX/etc/apache2/httpd.conf

でOKだ。見るとデフォルトのポートが8080、PHP関連の設定がなく、以下の修正を加える。

LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
※デフォルトだと上がコメントアウトになっているので外して、下をコメントアウトする

DirectoryIndex index.php index.html
※index.phpを加える

LoadModule php_module libexec/apache2/libphp.so
AddHandler php-script .php
※ファイルの最後の方に適当に加える(正規の位置ではないが仮なので)

 編集後、Apacheを起動。Webブラウザからhttp://192.168.11.20:8080/へアクセスすると作動が確認できるハズだ。

$ apachectl start
※再起動はapachectl restart。停止はapachectl stop
http://192.168.11.20:8080/ で「It works!」を表示。これでApacheは動いている

 次はサイト自体の設定だ。htmlやphpを置くDocumentRootは

$PREFIX/share/apache2/default-site/htdocs

にあるので、例えばここにinfo.phpを新規で作り中身を <?php phpinfo(); ?> として、Webブラウザでhttp://192.168.11.20:8080/info.phpとすると、PHPに関するいろいろな情報が表示される。これでApache+PHPまでは準備が整った。

http://192.168.11.20:8080/info.phpでPHPに関するいろいろな情報を表示

最後にデータベース、MariaDBをインストールする。

$ pkg install mariadb
※MariaDBのインストール

$ nano $PREFIX/etc/my.cnf.d/server.cnf
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
※ファイルを新規作成。デフォルト文字コードを設定

$ mysqld&
※DB起動

$ mysql -u u0_a435
※作動確認。sshのユーザー名でログインする

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.6.7-MariaDB MariaDB Server

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)]> set password for 'u0_a435'@'localhost' = password('testtest');

 簡易なので、u0_a435のパスワードは適当に。ついでにWordpress用のデータベースを作っておく。文字コードもutf8mb4になっているのが分かる。これでWordpressをインストールする準備が整った。

MariaDB [(none)]> create database wptest;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> select * from INFORMATION_SCHEMA.SCHEMATA where SCHEMA_NAME='wptest';
+--------------+-------------+----------------------------+------------------------+----------+----------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | SCHEMA_COMMENT |
+--------------+-------------+----------------------------+------------------------+----------+----------------+
| def          | wptest      | utf8mb4                    | utf8mb4_general_ci     | NULL     |                |
+--------------+-------------+----------------------------+------------------------+----------+----------------+
1 row in set (0.003 sec)

設定3 - Wordpressをインストールして起動!

 以降は普通にWordpressを設置する手順だ。最新版をダウンロード、展開し、DocumentRootへwordpressフォルダごと移動、wp-config-sample.phpをwp-config.phpへコピーし、DB名など必要な項目を編集する。

 この時、MySQLのホスト名は通常localhostなのだが、Termuxはlocalhostが使えないので、127.0.0.1を指定する。後は、Webブラウザでhttp://192.168.11.20:8080/wordpressへアクセスすれば、セットアップが開始される。

$ pkg install wget
※wgetがない場合
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar -zxvf latest-ja.tar.gz
$ mv wordpress $PREFIX/share/apache2/default-site/htdocs
$ cd $PREFIX/share/apache2/default-site/htdocs/wordpress
$ cp wp-config-sample.php wp-config.php
$ nano wp-config.php
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wptest' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'u0_a435' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'testtest' );
/** MySQL のホスト名 */
define( 'DB_HOST', '127.0.0.1' );
/**#@+
 * 認証用ユニークキー(https://api.wordpress.org/secret-key/1.1/salt/で得られた値と入れ替える)
  */
Wordpressのセットアップ画面
Wordpressの管理画面

 いかがだろうか。Linuxを知っている人から見れば、割とあっさり動いてしまったことに驚かれたのではないだろうか。

$ ps ax
  PID TTY      STAT   TIME COMMAND
14602 pts/0    S<s+   0:00 /data/data/com.termux/files/usr/bin/bash -l
16690 ?        S<s    0:00 sshd
18045 ?        R<s    0:00 /data/data/com.termux/files/usr/bin/sshd -R
18077 pts/1    S<s    0:00 /data/data/com.termux/files/usr/bin/bash -l
19295 ?        S<s    0:00 /data/data/com.termux/files/usr/bin/httpd -k start
19298 ?        S<     0:01 /data/data/com.termux/files/usr/bin/httpd -k start
19299 ?        S<     0:01 /data/data/com.termux/files/usr/bin/httpd -k start
19300 ?        S<     0:00 /data/data/com.termux/files/usr/bin/httpd -k start
19301 ?        S<     0:00 /data/data/com.termux/files/usr/bin/httpd -k start
19302 ?        S<     0:00 /data/data/com.termux/files/usr/bin/httpd -k start
19325 pts/1    S<l    0:00 mysqld
19366 ?        S<     0:00 /data/data/com.termux/files/usr/bin/httpd -k start
19437 pts/1    R<+    0:00 ps ax
※bash、sshd、httpd、mysqldが裏で動いているのが分かる

Ubuntuも動く!

 今回は素のままのTermux上でWordpressを動かしたが、ディレクトリ/ファイル構造などに癖があるため使いにくいケースもあるだろう。そんな時は、Ubuntuなどをインストールすることも可能だ。方法は以下の通り超簡単!

$ pkg install proot
$ pkg install proot-distro
$ proot-distro install ubuntu
$ proot-distro login ubuntu
root@localhost:~#
※exitで元のTermuxに戻る

root@localhost:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
※最新のUbuntu 22.04 LTSが入った!

 インスール可能なLinuxはproot-distro listで確認できる(以下リスト)。Ubuntuだけ既にインストール済みなのでStatus: installedとなっている。

Supported distributions:
  * Alpine Linux (edge)
    Alias: alpine
    Status: NOT installed
  * Arch Linux
    Alias: archlinux
    Status: NOT installed
  * Debian (bullseye)
    Alias: debian
    Status: NOT installed
  * Fedora (35)
    Alias: fedora
    Status: NOT installed
  * Manjaro AArch64
    Alias: manjaro-aarch64
    Status: NOT installed
    Comment: Only for AArch64 hosts.
  * OpenSUSE (Tumbleweed)
    Alias: opensuse
    Status: NOT installed
  * Ubuntu (jammy)
    Alias: ubuntu
    Status: installed
  * Void Linux
    Alias: void
    Status: NOT installed

Install selected one with: proot-distro install <alias>

 最後にこのUbuntu上でsysbench --test=cpu run(apt install sysbenchで入る)を動かした結果を掲載する。ターゲットはRaspberry Pi4/4GB@20.04.4 LTS、Lenovo Tab P11 Pro(Snapdragon 730G)@Termux、Xperia 1 II(Snapdragon 865)@Termux。

 Snapdragon 865を搭載したXperia 1 IIがSnapdragon 730Gを搭載したTab P11 Proより遅いのは謎だが、Tab P11 Proの方がRaspberry Pi4より速いという結果になっている。実際sshなどで触った感じと一致する。

 今回sysbench上は一番遅いXperia 1 IIで作業を行なったが、Wordpressの管理画面も使えないほど遅いわけではない(そこそこ使える速度)。sshでアクセスする分にはまさかサーバーがスマホだとは思わないだろう(笑)。

sysbench --test=cpu runの結果
・Raspberry Pi4/4GB@20.04.4 LTS
CPU speed:
    events per second:  1786.52
General statistics:
    total time:                          10.0003s
    total number of events:              17872

・Lenovo Tab P11 Pro(Snapdragon 730G)@Termux
CPU speed:
    events per second:  2534.60
General statistics:
    total time:                          10.0004s
    total number of events:              25363

・Xperia 1 II(Snapdragon 865)@Termux
CPU speed:
    events per second:   886.26
General statistics:
    total time:                          10.0014s
    total number of events:              8866

 以上のようにTermuxは、Android搭載のスマホやタブレットで簡単にLinuxを動かせる端末エミュレータだ。最近ではWindowsでWSLが使えるようになり、Linuxも身近なものとなったため、あえてAndroid搭載デバイスで動かす必要性は? と聞かれると何とも答えられないが、そこは趣味の世界(笑)。

 今回はWordpressを動かすところまでとしたが、検索すると情報山盛り! この記事を読んで「お!」っと思った人は是非いろいろ試していただきたい。