androidアプリTermuxはroot奪取しなくてもスマホにLinux環境を構築できることを知りましたので、さっそくやってみました。
このアプリが非常に優秀で、apacheやpythonもインストールできます。
ということは、簡易Webサーバがスマホ上に構築できるのです。
フォルダ構成が一般のLinuxと違ったり、使えないコマンドもありますが、今の私には十分すぎる性能です。
環境
スマホ Galaxy S24
Androidバージョン14
アプリのインストール
Termuxのダウンロードインストール(無料です)
GooglePlayから「Termux」をダウンロード&インストールします。
本日時点では4.4が最新でした。

設定
アプリを起動するとこんな感じです。

縦長のターミナルが斬新ですw キーボードは慣れれば案外使えます。
とりあえずは、恒例のアップデートから次のコマンドで最新の環境にアップデートします。
$ > apt update
$ > apt upgrade
フォルダ構成はざっくりとこんな感じです
# ホームディレクトリ
$ > cd ~
$ > pwd
/data/data/com.termux/files/home
# 環境変数が指定されている
$ > cd $HOME
$ > pwd
/data/data/com.termux/files/home
$ > cd $PREFIX
$ > pwd
/data/data/com.termux/files/usr
$ > cd $PREFIX/etc
$ >pwd
/data/data/com.termux/files/usr/etc
$ > cd $prefix/bin
$ > pwd
/data/data/com.termux/files/usr/bin
PCからSSH接続するまで
androidでキーボードが打ちにくいので、WindowsからSSH接続して、Windowsからコマンド入力をしています。
ソフトウェアキーボードの達人には不要かもしれません。
①Termuxにsshをインストール、パスワードの設定等
次のコマンドでSSHをインストールします
# opensshのインストール
$ > apt install openssh
:
# パスワードの設定
$ > passwd
New password:[新しいパスワードを作成]
:
# ユーザ名の確認
$ > id
udi=10441(u0_a441) gid=10441(u0_a441) groups=10441…
# [u0_a441]がユーザ名
# sshサーバの起動
$ > sshd
# サーバのIP確認
$ > ifconfig
:
inet 192.168.0.244 …
# [192.168.0.244]がサーバのIP
②クライアントからの接続
今回はWindowsから接続します。
スマホと同じLANに接続しているWindowsから次のコマンドで接続します。
# windows コマンドプロンプト
# ssh -p 8022 [ユーザ名]@[サーバIP]
c:\ > ssh -p 8022 u0_a441@192.168.0.244
The authenticity of host '[192.168.0.244]:8022 ([192.168.0.244]:8022)' can't be established.
ED25519 key fingerprint is SHA256:*********************************
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
# 初めて接続するけど大丈夫? yes
u0_a441@192.168.0.244's password:********
# パスワードを入力
Welcome to Termux
:
Report issues at https://bugs.termux.com
$ >
再インストールを行ったり、設定が変わると次のような表示が出ます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:***************************************
Please contact your system administrator.
Add correct host key in C:\\Users\\******/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\******/.ssh/known_hosts:6
Host key for [192.168.0.244]:8022 has changed and you have requested strict checking.
Host key verification failed.
# 前に接続したときと違う端末ではないですか? 騙されていませんか? という内容
こんな時には、
C:\\Users\\[ユーザ名]/.ssh/known_hosts
C:\\Users\\[ユーザ名]/.ssh/known_hosts.old
ファイルを削除してもう一度接続してください。
これでWindowsからSSH接続でスマホ上のターミナルを操作できます。
Apacheのインストールと簡単な確認
①apacheのダウンロード
次のコマンドでapacheをダウンロードできます
# apacheのインストール
$ > apt install apache2
# confファイルの編集
$ > nano $PREFIX/etc/apache2/httpd.conf
# listenポートの変更や、モジュールの追加変更等必要に応じて
# version確認
$ > apachectl -v
Server version: Apache/2.4.63 (Unix)
Server built: Jan 25 2025 09:47:17
# apacheの起動
$ > apachectl start
AH00558: httpd: 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
# サーバ名が指定されていないというエラーが出ますが、起動しています
# 関係コマンド
$ > apachectl restart # apacheの再起動
$ > apachectl stop # apacheの停止
# 接続テスト
$ > curl 127.0.0.1:8080
<html><body><h1>It works!</h1></body></html>
# ブラウザから[http://192.168.0.244]

②コンテンツの編集
htdocsの編集は次のコマンドで行うことができます
$ > nano $PREFIX/share/apache2/default-site/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
↓
<html><body><h1>android server!</h1></body></html>
修正後は、ctrl+S(上書き保存) ctrl+X(終了) してください。
もう一度、ブラウザからandroidサーバ(http://192.168.0.244:8080)に接続すると

変更が反映されています。
③ログの確認
apacheログの確認は次のコマンドで行うことができます。
# apacheログの確認
$ > cat $PREFIX/var/log/apache2/access_log
127.0.0.1 - - [12/Mar/2025:22:19:17 +0900] "GET / HTTP/1.1" 200 45
192.168.0.145 - - [12/Mar/2025:22:20:22 +0900] "GET / HTTP/1.1" 200 45
192.168.0.145 - - [12/Mar/2025:22:20:22 +0900] "GET /favicon.ico HTTP/1.1" 404 196
192.168.0.145 - - [12/Mar/2025:22:35:30 +0900] "GET / HTTP/1.1" 200 51
# 恒例のtail -fも使えました
$ > tail -f $PREFIX/var/log/apache2/access_log
:
Pythonのインストールと実行
pythonは次のコマンドでインストールできます
# pythonのインストール
$ > apt install python
:
# これだけです
# version確認
$ > python -V
Python 3.12.9
# 簡単なプログラムの実行
$ > cd ~
$ > mkdir py
$ > cd py
$ > echo "print(123)" > test.py
$ > python test.py
123
問題と課題
Android端末を使って、LAN内に公開できるWebサーバを構築することはできたのですが、このサーバをSIMに割り振られたグローバルIPで公開するにはどうしたらいいのかわかりません。
確認くんなどを使って、携帯電話SIMに割り振られているグローバルIPとホスト名を確認し、バーチャルホストで接続すればいいのかと思い、CURLから接続実験をしてみたのですが、グローバルに公開することはできませんでした。
携帯電話は、基地局に割り振られたIPを使っているので、そもそも公開することを前提に設計されていないのかもしれませんね。
なんにせよ、これでしばらく遊べそうです。