TermuxにUbuntuをインストール

スマホ上にTermuxを入れて遊んでいるのですが、go言語がうまくインストールできないので、ゲストOSとしてUbuntuをインストールして、Ubuntu上にGo言語をインストールしました。
(Termux上にgo言語を入れると、リモート接続では実行できるのにローカルホスト上では実行できないという症状に悩まされていました)

環境

携帯電話 Galaxy S24
 Android 14
 ホストOS(ということにします) Termux

ゲストOSのインストール

 TermuxにゲストOSをインストールする方法を調べたところ、linux環境を構築するためのproot-distroコンテナを使うのが一般的のようです。
 次のコマンドでインストールできました。

# Termux の端末から実行
# aptを最新にする
$ > pkg update
$ > pkg upgrade

# proot-distroのインストール
$ > pkg install proot-distro
Selecting previously unselected package proot-distro.
(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 35642 files and directories currently installed.)
Preparing to unpack .../proot-distro_4.23.0_all.deb ...
Unpacking proot-distro (4.23.0) ...
Setting up proot-distro (4.23.0) ...

# proot-distroを使ってubuntuをインストール
# インストール可能なディストリビュージョンが表示される
$ > proot-distro list

Supported distributions (format: name < alias >):
:
  * Pardus < pardus >
  * Rocky Linux < rockylinux >
  * Ubuntu (24.04) < ubuntu >
:
$ > proot-distro install ubuntu
:
インストール開始
# Log in:     proot-distro login ubuntu
# Reinstall:  proot-distro reset ubuntu
# Uninstall:  proot-distro remove ubuntu
$ > proot-distro login ubuntu
# ↓コンソールの表示が次のように変わればUbuntuが起動しています
root@localhost:~# > 

# ubuntuを終了するには
root@localhost:~# > exit

# ubuntuを起動するには
$ > proot-distro login ubuntu

確認

インストールしたUbuntuについて簡単に確認しました。

注 Termuxは、SCP接続でリモートコマンド入力ができますが、proot-distroはリモート接続ができません
  SFTP接続もできないようです。ウムーどうやってファイルを送信したらいいんでしょうか。

# バージョンの確認
$ > cat /etc/issue
Ubuntu 24.04.2 LTS \n \l
# 24.04のLTSがインストールされている

# nano が入っていないのでインストールしました
$ > apt install nano

$ > pwd
/root
# homeディレクトリは、/root (cd ~ でも/rootに移動)

$ > id
uid=0(root)gid=0(root) group=0(root)…
# root権限があるように見えますが、コンテナ内のrootなのでコンテナ外で悪いことはできません
# スマホ内のフォルダにもアクセスできない(SDカードはマウントできません)

go言語をインストール

goのインストールは次の通りです。
ubuntuなのでaptを使いました。

# apt を最新に
$ > apt update
$ > apt upgrade

# go言語のインストール
$ > apt install golang
$ > go version
go version go1.22.2 linux/arm64

# サンプルの実行
$ nano hello.go

# hello.go の内容
# package main
# import "fmt"
# func main() {
#     fmt.Println("hello world")
# }

$ > go run hello.go
hello world
$ > go build hello.go
$ > ls
hello  hello.go
$ > ./hello
hello world

go 言語を初めて使った感想は、PythonよりC言語ライクな感じに親近感を持ちました。
ビルドのことを未だにコンパイルと呼んでいる人きっといますよね。
実行ファイルがちょっと大きいのが気になりますが、不要なパッケージを外してコンパイ…ビルドすれば実行ファイルが小さくなるとのこと。

最後に

 Termuxだけでも色々できたのですが、proot-distroと組み合わせるとやりたいことが ホボ なんでもできるようになりました。
 今までは、出先でLinuxPCが使えなかったのでノートパソコンを購入しようか悩んでいましたが、スマホにデスクトップ用のキーボードをつないで、簡易Linuxとして使い始めたところ、これで充分だと感じていますw
 画面が小さいのが難点ですが、思ったより処理速度が速いので、これでいいかも。
 

 ●スマホを簡易Linuxとして使うための問題点
   キーボードから日本語入力切替ができない(画面をタップすれば入力できる)
   109日本語キーボードのキートップと記号があわず「;:¥~(){}」等が非常に打ちにくい   
   一般のキーボードを繋ぐために、マイクロUSB→USB変換アダプタを持ち歩く必要がある
   (小型の無線キーボードは、記号を入力させる気合が感じられない)
   職場の人に冷たい目で見られる