西川和久の不定期コラム
root化せず気軽にAndroidスマホでLinux「Termux」!PHP+Apache+MariaDBを入れてWordpressを動かしてみる
2022年5月17日 06:16
ここのところ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ストアからインストールして起動。直後の画面は画面キャプチャにあるような感じとなる。取り急ぎいつもの
$ apt update
$ apt upgrade
を行なったところ、apt updateでリポジトリが使えずエラーで落ちる。いろいろ検索してみると、Playストアのものは2020年9月29日以降更新されておらず、最新はF-Droidにあるとのこと。Google公式のストアではないが、Android向けアプリがダウンロードできるサイトとなる。とは言え、Google的には非公認。セキュリティ面など不安な人は以降、話だけ読んでいただきたい。
まずF-DROIDアプリをダウンロードしインストール/実行、Termuxを検索/インストール。この時、セキュリティの関係でインストールができない……的なメッセージが出た場合は、設定で許可をする。実行すると先と同じような画面になるので、気を取り直してapt update、 apt upgradeを行なう。
今度は問題なく実行できた。これで環境が整ったので、次に進むことにする。
設定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サーバーなどかは関係なく、普通にコマンドラインでの操作となる。
設定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
次はサイト自体の設定だ。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までは準備が整った。
最後にデータベース、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/で得られた値と入れ替える)
*/
いかがだろうか。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を動かすところまでとしたが、検索すると情報山盛り! この記事を読んで「お!」っと思った人は是非いろいろ試していただきたい。