Androidスマホ・タブレットは何でもできる！Termuxで動かすアレコレまとめ

「使ってないAndroidスマホ，タブレットがある」
「これサーバーにできないかな？」

その夢，**かなえられます。**

少々めんどくさい作業もありますが，やっていけば必ずできます。

# どうやって動かすか
Androidには「Termux」というアプリがあります。
これを使うと，Linuxを動かすことができます。
パッケージもAPTで管理されていて，豊富です。

https://play.google.com/store/apps/details?id=com.termux&hl=ja

また，GBoardなどのキーボードですと不便を感じるかもしれません。
「Hacker's Keyboard」がおすすめです。

https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&hl=ja

## 下ごしらえ
Linuxに触れたことのある方は慣れていると思います。

まず，Termuxが端末内のファイルにアクセスできるようにするには権限を与える必要があります。

```bash
$ termux-setup-storage
```

これを実行すると，Android 8以降では権限ダイアログが出ますので許可してください。

Termuxではaptのエイリアスとして「pkg」コマンドが用意されています。

|コマンド|説明|
|----------|-----------|
|pkg update|apt updateを実行後apt upgradeを行う|
|pkg install \<package...\>|apt install \<package...\>|
|pkg remove|apt remove \<package...\>|

他にもコマンドがあります。```pkg```だけ実行するとヘルプを見れます。

さっそく，パッケージを最新にします。

```bash
$ pkg update
```

アップデートが完了したら，下ごしらえはおしまいです。

# Termuxの基本
## ディレクトリ
Termuxの中では，ルートディレクトリは /data/data/com.termux/files/usr になっています。
これは，```$PREFIX```で表せます。
以下に例を挙げます。

|本来のディレクトリパス|Termuxでのパス|
|--------------------|-------------|
|/etc                |$PREFIX/etc  |
|/usr/share          |$PREFIX/share|
|/bin                |$PREFIX/bin  |

## エディタ
nanoが標準でついています。

```bash
$ nano filename
```

で起動できます。

よく使うキーボード操作を挙げておきます。

|キーボード入力|意味|
|------------|----|
|Ctrl + X    |終了|
|Ctrl + O    |保存|

## 使用できるポートの制限
Termuxは **1024～65535** の範囲で使用できます。
80や443などは使えませんので，インターネットに公開する場合はポート変換が必要になる場合があります。

# あれこれ
## PCからシェルに入る (telnet)
**本来はTelnetはネットに公開しちゃいけないものです。ローカルで使うだけにしておきましょう。**

```bash
$ pkg install busybox
```

busyboxをインストールしたら

```bash
$ busybox telnetd -p 5888
```

とします。``` -p 数字```はポート番号です。
TeraTermなどで，アクセス可能です。

## HTTPサーバーを建てる
### パッケージのインストール
Termuxにも apache2 (httpd)，nginxパッケージがありますので，インストールできます。
PHPも使いたい場合は，apache2の場合は ```php``` と ```php-apache``` が必要です。
nginxの場合は ```php``` と ```php-fpm``` が必要です。

【apache2の場合】

```bash
$ pkg install apache2 php php-apache
```

【nginxの場合】

```bash
$ pkg install nginx php php-fpm
```

### 設定を変える (apache2)
設定ファイルは ```$PREFIX/etc/apache2/httpd.conf``` です。

PHPを使う場合，設定の変更が必要です。

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

でエディタを起動します。

まず，先頭に ```ServerRoot "..."```という項目があると思います。
その次の行に

```
HostnameLookups On
```

を記述します。これは，ログにホスト名を表示させるようにするための設定です。

次に，

```
LoadModule mpm_worker_module xxxxxxxx
```

と書いてある行があるはずです。それはコメントアウトします。
代わりに，その行の一つ上にある

```
#LoadModule mpm_prefork_module xxxxxxx
```

のコメントアウトを解除します (#を外します)

次に，どんどん下へ行くと ```DocumentRoot "..."```の行が見えてくると思います。
その周辺にある

```
Options Indexes FollowSymLinks
```

の行に，```ExecCGI``` を書き足します。書き足すと

```
Options Indexes FollowSymLinks ExecCGI
```
となります。
その下の

```
DirectoryIndex indexうんたら
```

も

```
DirectoryIndex index.php index.html index.htm
```

に変えます。

最後に，ファイルの一番最後の行に

```
LoadModule php7_module libexec/apache2/libphp7.so
AddHandler php7-script .php
```

を追加しておしまいです。
**Ctrl+Oで保存するのを忘れずに！**

### 設定を変える (nginx)
httpdより，少し厄介かもしれないですね。

設定ファイルは ```$PREFIX/etc/nginx/nginx.conf``` です。

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

でエディタを起動します。

まず，

```
location / {
 ...
}
```

という行があると思います。その中の

```
index index.html index.htm;
```

を

```
index index.php index.html index.htm;
```

にします。

次に

```
# pass the PHP script ほにゃららら
#
location ~ \.php$ {
 ...
}
```

という行があると思います。
コメントアウトされているはずですので，その部分すべて外します。

その後，その部分は以下のように置き換えます

```
location ~ \.php$ {
 root (任意のディレクトリ);
 fastcgi_pass unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
}
```

**Ctrl+X**で保存して，エディタを終了します。

次にPHPの設定をします。

```bash

$ nano $PREFIX/etc/php-fpm.d/www.conf
```

でエディタを起動します。

スクロールしていくと， ```listen = ....```という行があります。
そこを

```
listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock
```

に書き換えます。
**Ctrl+O**で保存して，おしまいです。

### httpdを起動
httpdを起動させるには

```bash

$ httpd
```

だけでいいです。何かログを吐きますが特に気にする必要はありません。
止める時は

```bash

$ httpd -k stop
```

または

```bash


$ killall httpd
```
です。

### nginxを起動
nginxは

```bash

$ nginx
```

とするだけです。

なお，PHPを使う場合は ```nginx``` を実行する前に

```
$ php-fpm
```

を実行する必要があります。

止める時は

```bash
$ killall nginx
```
です。 

## DiscordBot (Python)を動かす
PythonでBotを作ったのであれば，それもTermuxで動かせます。

Pythonは3.8をインストールできます。

```bash

$ pkg install python make automake autoconf clang build-essential git
```

なお，このインストール作業には約500MBを消費します。ストレージに**2GB以上の空き**があるか確かめてください。

その後，

```bash

$ pip install wheel requests
$ pip install -U "discord.py[voice]"
```

を実行します。
途中PyNaClのビルドが行われます。スマートフォン・タブレットの性能によっては，完了するまで2～5分かかる場合があります。時間に余裕をもって行ってください。

さきほどgitもインストールしたので，リポジトリからプログラムを下ろしたりできます。

### GitHubからプログラムを下ろす
Gitの使い方に慣れている人は説明はいらないと思います。
ということで，事前に使い方を知っているものとしてコマンドを記載します。

```bash

$ git config --global user.name "Your Name"
$ git config --global user.email "youremail@example.com"
$ git config --global crediential.helper "cache"
$ git clone https://github.com/xxxx/xxxx.git
```

### botを起動
起動するプログラムがあるディレクトリにいる状態で

```bash
$ python filename.py
```
とします。

## Minecraft (PC版) のサーバーを建てる
なんと，TermuxではJavaを動かせます。

さっそくインストールしましょう。
ここでは有志の方のものを使います。なお，OpenJDK 8となります。

```bash

$ pkg install wget && wget https://raw.githubusercontent.com/MasterDevX/java/master/installjava && bash installjava
```

ダウンロードが終わるまで時間がかかるかもしれません。気長に待ちます。
その後，```java``` と打ってヘルプが出てきたら完了です。

### server.jar をダウンロードする

サーバーは https://mcversions.net/ からダウンロードできます。
使用法については割愛します。
建てたいバージョンにあったサーバープログラムをダウンロードします。

|バージョン|URL|
|---------|---|
|1.15.1|https://launcher.mojang.com/v1/objects/4d1826eebac84847c71a77f9349cc22afd0cf0a1/server.jar|
|1.15.2|https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar|
|1.16|https://launcher.mojang.com/v1/objects/a0d03225615ba897619220e256a266cb33a44b6b/server.jar|
|1.16.1|https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar|

上のURLをコピーして，

```bash

$ cd ~
$ mkdir mcserver
$ cd mcserver
$ wget コピーしたURL
```

を実行します。
貼り付けは，画面のどこかを長押しして出る「PASTE」を押すとできます。
ダウンロードできたら

```bash

$ echo "eula=true" > eula.txt
$ java -jar server.jar
```

とします。
いろいろログが出て，ワールドの生成が行われます。
あまりにも性能が低いと，クラッシュする場合がありますので注意してください。

また，Android 8以降ではこのままだと

```bash

$ java -jar server.jar
Bad system call
$
```
となってしまいますので，このコマンドを実行する前に

```bash
$ proot -0
```

を実行してください。

# おわりに
いかがでしたか？結構できること，ありましたね。
ネットにはもっと詳しいことが書いてありますので，ぜひ挑戦してみてください。
それではよいTermuxライフを！