Androidにまともなターミナル環境(Ubuntu on Termux)を作った話

前々から試行錯誤してたAndroidのターミナル環境作りが一段落したので, そのメモ. ようやく, まともに使える&使いやすい環境を作ることができた.

何をしたか, なぜしたのか

アプリ「Termux」上に, Ubuntuの仮想環境を作る. root化はしてません.

Android上でUbuntuが動くので, 出かけ先にPCを持っていく必要があまりなくなる. 電車の中で, git commitできる.

Termuxのインストール

Termux - https://termux.com/

まず, 大元となる端末はTermuxを用いる. 端末エミュレータでない理由は, Termuxはpkgが使えるから. TermuxはGoogle PlayF-Droidよりインストールできる. (ここでF-Doridも挙げるのはHUAWEIユーザーだから…?)

特に特別なことをすることなく, インストールできる. ちなみに私の環境ではErrorでGoogle Playからインストールできなかったので, F-Droidよりインストールした.

Ubuntu仮想環境の構築

Termux上にUbuntuの仮想環境を導入する. 導入にはAnLinuxを利用するが, 導入に使うのは下のコマンドのみ. アプリに付属する他の機能が必要なければ, インストールせずに下のコマンドを実行するだけでも十分.

$ pkg install wget openssl-tool proot -y
$ hash -r
$ wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Ubuntu/ubuntu.sh
$ bash ubuntu.sh

しばらくすると, 上のコマンドを実行したディレクトリに, start-ubuntu.shができる. このシェルスクリプトを実行すると…

$ ./start-ubuntu.sh
root@localhost:~# 

Ubuntuが起動した! root化していないAndroid上でUbuntuが動いている.
ちなみに, バージョンは,

root@localhost:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04 LTS (Bionic Beaver)"
...

Ubuntu 18.04 LTS (Bionic Beaver). しっかりUbuntu(何度目

これでUbuntuが導入できた. ひと段落. が, まだ色々と気になるところがあったので, 整えていく.

諸々の設定

Termux側の.bashrcに追加

Ubuntuの起動はstart-ubuntu.shを実行する必要がある. が, 起動のたびにソフトキーボードでポチポチこれを入力するのは鬱陶しいので, .bashrcで自動的に実行するように設定する.

$ echo "./start-ubuntu.sh" >> ~/.bashrc

これで, Termux起動のたびにすぐにUbuntuが実行する. ちなみに, Termux bashに戻ったいときは, exitで戻れる.

一般ユーザーの追加

Ubuntuを起動すると, rootとしてログインされる. しかし, 無条件でrootになるのは少し怖いので, 一般ユーザーを追加する.

~# apt update
~# apt dist-upgrade
~# apt install sudo    # sudoのインストール
~# adduser <user_name>    # ユーザー追加(Passwordを設定)
~# gpasswd -a <user_name> sudo    # 作成したユーザーをsudoグループに追加
~# echo "su <user_name>" >> ~/.bashrc    # 自動的にログインするように設定
~# su <user_name>    # 一般ユーザーにログイン
<user_name>@localhost:/root$ 

参考 : ubuntu ユーザを追加して sudo 権限をつける - Qiita

これで, 従来のUbuntuと同じようにsudoが使えるようになる. なお, これでsudoが使えない場合は, visudoで直接ユーザーを追加する. まあ, 本末転倒が…()

~# apt install vim    # visudoにはvimなどが必要
~# visudo
...
root ALL=(ALL:ALL) ALL
<user_name> ALL=(ALL:ALL) ALL #追加
...

参考 : How to Fix “Username is not in the sudoers file. This incident will be reported” in Ubuntu

以降, 全てsudoを用いて設定をする.

fishのインストール

fishをインストールする. 標準のbashでも十分に使えるのが, fishだと強力な補完機能があり, Androidでポチポチ使うにはこちらのほうが便利.

$ sudo apt-get install apt-file    # apt-add-repositoryを使うための準備
$ sudo apt-file update
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt-get update
$ sudo apt-get install fish    # fishのインストール
$ echo "fish" >> ~/.bashrc    #自動的にfishを起動
$ fish
~>

参考 : 自宅のubuntu-16.04マシンのシェルをfishに変更した - takapiのブログ

fishのインストールには数分かかる. Shellの変更は通常chsh -s /usr/bin/fishなのが, なぜかエラーが出た. なので, ~/.bashrcに追加して間接的に起動をする.

gitのインストール・設定

本命, gitのインストールが, 普通のUbuntuでのgitのインストールと何ら変わりません. ラクチン.

> sudo apt install git
> ssh-keygen #Password設定あり
> cat ~/.ssh/id_rsa.pub

表示された公開キーをコピペし, Github等のサイトのSSH keys設定に貼り付ける.

参考 : GitHubの初期設定(SSH接続からリポジトリへのpushまで) - Qiita

Androidからサイト開いて貼り付けるのがやりにくいので, 私はLINEで一人グループを作り, それで送信してPCで貼り付け作業を行いた. スマホならではの使い方?

設定次第ではGUIも動かせるっぽい. ~~けど, ここまでで既にストレージを圧迫し始めているのでやめておく. ~~スマホ買い換えたい

(追記 : 2019/8/25)

環境構築のやり直しをやりやすくするために1行にまとめてみた

Ubuntuのインストール (終了後, 自動的に起動)

pkg install wget openssl-tool proot -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Ubuntu/ubuntu.sh && bash ubuntu.sh && echo "./start-ubuntu.sh" >> ~/.bashrc && ./start-ubuntu.sh