西川和久の不定期コラム

Playストアからダウンロードできるもう1つのAndroid上Linux!「UserLAnd」

~起動直後からいきなりUbuntu 20.04な環境でより便利に

AndroidスマホでUbuntu 20.04が起動!

 前回ご紹介した「Termux」は、Playストアにあるにはあるが、最新版はF-Droidと言うことで、セキュリティ面で二の足を踏んでいる読者の方も多かったのではないだろうか。そこで今回は100% Playストアからダウンロードできる「UserLAnd」をご紹介したい。ゴールは同じくWordpressの起動!

UserLAndとは?

 「UserLAnd」は、大雑把にはTermuxと同じだ。基本的に端末エミュレータだが、外へsshするだけなく、内部にLinuxライクなシステムを抱えることによって、危険なroot化することなく、Androidを搭載したスマホやタブレットでLinuxを動かすことが可能となる。

 このAndroidマシンのLinux化、技術的にはprootを使いroot権限を擬似的に得ている(Termuxも同様)。ただしprootはptraceと呼ばれる子プロセスが実行したシステムコールの監視/制御が行なわれるため、素のrootより速度が落ちる(特にファイルアクセス)。これが最大の弱点となるが、root化せずにLinuxが使える方がはるかにメリットがあると思われる。

 冒頭に書いたようにPlayストアにあるためインストールは容易&安心。ここからインストールし起動。ディストリビューションにAlpine、Arch、Debian、Kali、Ubuntuがあるので好みで選ぶ(なぜかRed Hat系はない)。筆者は慣れているUbuntuにしたが、馴染みのものを選んでもよい。その場合、以降の手順が変わると思われるが、そこは個人の技量でカバーして欲しい。

PlayストアのUserLAnd
UserLAndアプリを起動 / Ubuntuを選ぶ
ユーザー名、パスワード、vncパスワードを入力
ssh接続を選ぶ
Ubuntu@UserLAndが起動した

 Ubuntuを選ぶとユーザー名、パスワード、そしてvncパスワードの設定となる。これからも分かるようにvncからでも操作可能だ。今回は安易なsshでの操作とした。たったこれだけでUbuntuが起動する。$ cat /etc/os-releaseで確認するとバージョンは20.04.4 LTS(Focal Fossa)。既に22.04が出てるので古めだが、ここは仕方ないところか。

 早速いつものおまじないsudo apt update、sudo apt upgradeを実行したところ問題なく完了した。なおTermuxとは違いrootユーザーが存在するので、この手の作業はsudoで行なう必要がある。逆にこの方が普通なので扱いやすいだろう。

$ sudo apt update
$ sudo apt upgrade

 IPアドレスを確認する方法は何パターンかあるが、筆者はついifconfigと打ってしまうのでnet-toolsをインストール。確認したところ192.168.11.49となっていた。

$ sudo apt install net-tools
$ ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.49  netmask 255.255.255.0  broadcast 192.168.11.255
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 3000  (UNSPEC)

 スマホからだと文字入力が面倒である。Termuxと違い、この状態で既にssh-serverが動いているので、早速sshで接続する。

knishika@M1-Macmini ~ % ssh -p 2022 pcwatch@192.168.11.49
pcwatch@192.168.11.49's password: (設定したパスワード)
pcwatch@localhost:~$
macOSからsshで接続

 取り急ぎ編集に必要なvim(nanoでもよい)をインストール。vimに関してはそのままだと日本語が文字化けするので一手間。これで準備は整った。

$ sudo apt install vim
$ vi ~/.vimrc
set encoding=utf-8
set fileencodings=iso-2022-jp,sjis,utf-8
※文字化け対策

設定1 - PHP+Apache2+MariaDBをインストール

 今回もゴールはTermuxと同じくWordpressを動かすことだ。Termuxの時はPHP+Apache+MariaDBを1つ1つインストールしたが、今回は一気に全て行なう。と言っても並べるだけなので、難しい話ではない。

$ sudo apt install apache2 php php-mysql mariadb-server

 確認はApache2から。UserLAndもポート80が使えないので8080へ変更。またsystemctlがないため、昔ながらの/etc/init.d/xxxx start|stop|restart|statusを使ってプロセスをコントロールする。スタートするとちょっとしたエラーメッセージが出るが、これは無視して大丈夫だ。

$ apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2022-04-26T18:02:11]

$ sudo vi /etc/apache2/ports.conf
Listen 80からListen 8080
※UserLAndではport 80は扱えないため

$ sudo systemctl enable apache2
↓※ないためこちらで代用
$ sudo /etc/init.d/apache2 start

* Starting Apache httpd web server apache2                                     /usr/sbin/apache2ctl: 99: ulimit: error setting limit (Operation not permitted)
Setting ulimit failed. See README.Debian for more information.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
※これは無視
Apache2の作動確認。http://192.168.11.49:8080でApache2が作動していることを確認

 Ubuntu 20.04なのでPHPは7.4.3が入っている。Apache2のドキュメントルートはデフォルトで/var/www/html/となっており、たとえば/var/www/html/index.phpを作り<?php phpinfo(); ?>を入力、ブラウザから作動を確認する。Termuxではphpが使えるよう一手間必要だったが、sudo apt installした時にこの辺りも書き変わっているので該当ファイルを編集する必要はない。

$ php -v
PHP 7.4.3 (cli) (built: Mar  2 2022 15:36:52) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

$ vi /var/www/html/index.php
<?php phpinfo(); ?>
PHPの作動確認。http://192.168.11.49:8080/index.php でphpinfo()の出力が得られた

 最後はMariaDB。起動後、mysql_secure_installationで不要なアカウントなどを削除する。はじめにrootパスワードを変更するかと聞かれるが、ここは(Ubuntuが管理しているので)そのまま[Enter]、次のSet root password? [Y/n] nとする。以降は[Enter]だけでよい。

$ sudo /etc/init.d/mysql start
 * Starting MariaDB database server mysqld
$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] n
 ... skipping.

.
. ※以降全部[Enter](No)
.

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 続いて、DB操作用のアカウントとパスワードを設定(ここではadmin/password!)。/etc/my.cnfへの記述、リスタート後、Wordpressで使うデータベースの作成(ここではwptest)……と、手順的にはUbuntuのそれと同じとなる。

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

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)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password!' WITH GRANT OPTION;
Query OK, 0 rows affected (0.004 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> exit
Bye

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

$ sudo /etc/init.d/mysql restart
 * Stopping MariaDB database server mysqld                               [ OK ]
 * Starting MariaDB database server mysqld                               [ OK ]

$ mysql -u admin -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

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)]> create database wptest;
Query OK, 1 row affected (0.003 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 |
+--------------+-------------+----------------------------+------------------------+----------+
| def          | wptest      | utf8mb4                    | utf8mb4_general_ci     | NULL     |
+--------------+-------------+----------------------------+------------------------+----------+
1 row in set (0.005 sec)

MariaDB [(none)]>

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

 いつもどおりWordpressを設置する。最新版をダウンロード、展開し、ドキュメントルートへwordpressフォルダごと移動(今回はwpにリネームしている)、wp-config-sample.phpをwp-config.phpへコピーし、DB名など必要な項目を編集する。Termuxとは違いlocalhostも使えるので特別なことは何もない。

 Webブラウザでhttp://192.168.11.20:8080/wpへアクセスすれば、セットアップが開始され、設定したID/パスワードで管理画面にログインできる。

$ wget --no-check-certificate https:/ja.wordpress.org/latest-ja.tar.gz
$ tar -zxvf latest-ja.tar.gz
$ mv wordpress /var/www/html/wp
$ cd /var/www/html/wp
$ cp wp-config-sample.php wp-config.php
$ nano wp-config.php
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wptest' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'admin' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password!' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
/**#@+
 * 認証用ユニークキー(https:/api.wordpress.org/secret-key/1.1/salt/で得られた値と入れ替える)
  */
Wordpressのセットアップ画面
Wordpressの管理画面

 いかがだろうか。TermuxよりUserLAndの方がいきなりUbuntu 20.04が入っている分、いつも使っているUbuntuにより近い操作でWordpressを設定できた。一番の違いはsystemctlがないこと。ここは昔ながらの/etc/init.d/xxxxで代用できるので、結果的に問題はない。

$ ps ax
  PID TTY      STAT   TIME COMMAND
 8103 ?        Ss     0:05 /usr/sbin/apache2 -k start
 8106 ?        S      0:01 /usr/sbin/apache2 -k start
 8107 ?        S      0:01 /usr/sbin/apache2 -k start
 8108 ?        S      0:01 /usr/sbin/apache2 -k start
 8109 ?        S      0:02 /usr/sbin/apache2 -k start
 8110 ?        S      0:02 /usr/sbin/apache2 -k start
14964 ?        S      0:00 /data/user/0/tech.ula/files/support/busybox sh suppor
14983 ?        R      2:03 /data/user/0/tech.ula/files/support/proot -r /data/us
15005 ?        Ss     0:01 dropbear -E -p 2022
15026 pts/0    S<s+   0:00 busybox sh -c /data/user/0/tech.ula/files/support/dbc
15032 pts/0    S<+    0:01 /data/user/0/tech.ula/files/support/dbclient -y -y pc
15034 ?        Ss     0:01 dropbear -E -p 2022
15058 pts/1    Ss+    0:01 -bash
15079 ?        Ss     0:05 dropbear -E -p 2022
15080 pts/2    Ss     0:01 -bash
22817 pts/2    S      0:00 /bin/sh /usr/bin/mysqld_safe
22945 pts/2    S      0:03 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/my
22946 pts/2    S      0:00 logger -t mysqld -p daemon error
23371 ?        S      0:01 /usr/sbin/apache2 -k start
25194 ?        S      0:00 /usr/sbin/apache2 -k start
25195 ?        S      0:00 /usr/sbin/apache2 -k start
25196 ?        R      0:00 /usr/sbin/apache2 -k start
25454 ?        S      0:00 /usr/sbin/apache2 -k start
25936 pts/2    t+     0:00 ps ax
pcwatch@localhost:~$

 簡易ベンチマーク、sysbenchの結果は以下の通り。Termuxではなぜか886.26と遅かったが、今回は3,446.30@Snapdragon 865。Snapdragon 730Gが2,534.60、Raspberry Pi4/4GBが1,786.52だったので妥当な結果となった。Raspberry Pi4/4GBの約倍速だ。

 こうなってくるとRaspberry Pi4を外部用Webサーバーにしている筆者にとって、スマホのType-Cに電源供給可能で、Ethernet付きHubでも付けて固定IPアドレスに設定。サーバーにするのも面白いかも……と思ってしまう(笑)。

sysbench --test=cpu runの結果
CPU speed:
    events per second:  3446.30

General statistics:
    total time:                          10.0011s
    total number of events:              34482

Latency (ms):
         min:                                    0.29
         avg:                                    0.29
         max:                                    1.71
         95th percentile:                        0.29
         sum:                                 9988.31

Threads fairness:
    events (avg/stddev):           34482.0000/0.00
    execution time (avg/stddev):   9.9883/0.00

git、composerは動くがdockerは動かない

 ここまで動くなら……と、調子に乗ってsudo apt installでgit、composer、docker、docker-composeといった開発系のコマンドもインストールしてみた。

$ git --version
git version 2.25.1

$ composer --version
Composer 1.10.1 2020-03-13 20:34:27

$ docker version
Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.2
 Git commit:        20.10.12-0ubuntu2~20.04.1
 Built:             Wed Apr  6 02:16:12 2022
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at unix://var/run/docker.sock. Is the docker daemon running?

$ docker-compose version
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020

 ご覧のように入るには入るものの、dockerが「Cannot connect to the Docker daemon at unix://var/run/docker.sock. Is the docker daemon running?」で動かない。

 sudo dockerdで手動起動するとkernalの問題やらいろいろエラーが出てダメらしい。そもそも仮想化できないので仕方なしと言ったところか。gitとcomposerは動くので、先にインストールしたApache2+PHP+MariaDBがあれば(ほかの言語でも)、それなりの開発もスマホやタブレットで可能となる。

 最後に今回はssh接続としたが、冒頭に書いたようにvncでも接続可能だ。portは5951。つまり、今回のパターンだと

vnc://192.168.11.49:5951

 で接続できる。パスワードは初期起動時に設定したものを使う。ただご覧のようにシンプル過ぎるので、個人的にはssh接続をお勧めしたい。ssh/vncの切り替えはsessionタブで削除も含め行なえる。

vnc接続した場合。ssh/vncの切り替えなどはsessionタブで行なう

Snapdragon 865だとRaspberry Pi4の(プロセッサは)倍速なのでEthernet付きHubを使い固定IPアドレスにして、小型サーバーにするのも面白いかもしれない

 以上のようにUserLAndは、Android搭載のスマホやタブレットで簡単にLinuxを動かせる端末エミュレーターだ。Termuxとは違いPlayストアのみでインストール可能、いきなりUbuntuを起動できるので、ほぼ普段通りの操作が可能……など、Termuxより安心に、そして違和感なくスマホやタブレットでLinuxを使うことができる。

 Termuxは面白そうだけどF-Droidからのダウンロードは不安だった読者の方に是非試して頂きたいソフトだと言えるだろう。