Nexus7(2012)のLineageOSにtermuxを導入する

目的

以下、環境にtermuxを導入するにあたり、当該バージョンで躓いた箇所の解決方法をメモしておこうと思います。

環境

  • H/W: Nexus7(2012)
  • S/W: LineageOS 14.1-20170423(Android7.1.2)
  • termux(0.73)をAPKPureでインストールを想定
  • プロンプトと環境
$ adbコマンドを実行するコマンドプロンプト(Linuxでも可)
grouper:/ # Nexus7にadb shellにログインした状態
% LinuxサーバでdockerでWEBサーバを実行する環境

調査

termuxのパッケージをインストール後、termuxの初期環境の入ったbootstrapファイルのダウンロードが正常に行われなかったため、この原因を調査し解決していこうとおもいます。

bootstrapのファイルのURL

初めに、このbootstrapファイルですが、後でわかったのですが、どうも古いパッケージに埋め込まれたURLと、現在提供中のURLが以下のように異なっているようです。

(新)○ http://termux.net/bootstrap/bootstrap-arm.zip
(旧)× https://termux.org/bootstrap-arm.zip

ログを確認する

Nexus7とPCをUSBで繋いでadbで操作をしていきます。

Nexus7でtermuxを実行したのち、adbで繋いでログを確認すると、以下の通り、間違ったURLへ接続を繰り返している事が確認できました。

Javaのsourceはさすがに修正できないので、URL曲げる方向で検討することにします。

$ adb get-state
$ adb shell
grouper:/ # logcat -t 1000|grep boot
04-22 02:24:10.650 7213 9172 E termux : java.io.FileNotFoundException: https://termux.org/bootstrap-arm.zip

どのファイルがURLを突きに行くのか

Nexus7とPCをUSBで繋いでadbでURLが埋め込まれたファイルを捜索していきます。

$ adb get-state
$ adb shell
grouper:/ $ su
grouper:/ # cd /data/app/com.termux-1/oat/arm
grouper:/data/app/com.termux-1/oat/arm # strings base,odex | grep http
./data/misc/profiles/cur/0/com.termux/primary.prof
0https://dl.bintray.com/termux/termux-packages-24
'https://termux.net/bootstrap/bootstrap-
https://termux.org/bootstrap-
https://wiki.termux.com
&https://wiki.termux.com/wiki/Main_Page

修正

上記より、以下のファイルに接続先が埋め込まれているであろうことがわかりましたので、このファイルを書き換えて行こうと思います。

grouper:/data/app/com.termux-1/oat/arm # pwd
/data/app/com.termux-1/oat/arm

バイナリファイルの書き換え

直接/data/app/com.termux-1/oat/armからファイルを転送することが出来ないので、いったん/storage/self/primary にファイルを移してからとってきます。

$ adb get-state
$ adb shell
grouper:/ $ su
grouper:/ # cd /data/app/com.termux-1/oat/arm
grouper:/data/app/com.termux-1/oat/arm # cp base.odex /storage/self/primary
^D
$ adb pull /storage/self/primary/base.odex ./

ファイルを取ってきた後、PCでbzエディタに base.odex を放り込んで、ASCIIモードで
「https://termux.org/bootstrap-」を検索して
「http:///termux.org/bootstrap-」に書き換えて保存する

$ adb push base.odex /storage/self/primary
$ adb shell
grouper:/ $ su
grouper:/ # cp /storage/self/primary/base.odex /data/app/com.termux-1/oat/arm/

linuxのPCでWEBサーバ起動

% cd /home/saka/ngixn/
% sudo vi default.conf
server {
  server_name termux.org;
  listen 80;
  location /bootstrap-arm.zip {
    proxy_pass http://termux.net/bootstrap/bootstrap-arm.zip;
  }
}

% sudo docker run -d --rm \
  -p 80:80 \
  -v /home/saka/nginx:/etc/nginx/conf.d \
  nginx \
  nginx-debug \
  -g 'daemon off;'

nexus7で/system/etc/hosts設定を変える

hostsファイルはread onlyでマウントされているので直接編集できないので、read writeモードで再マントします

$ adb shell
grouper:/ $ su
grouper:/ # mount|grep system

/dev/block/platform/sdhci-tegra.3/by-name/APP on /system type ext4 (ro,seclabel,relatime,user_xattr,acl,barrier=1)

grouper:/ # mount -o rw,remount \
            /dev/block/platform/sdhci-tegra.3/by-name/APP \
            /system
grouper:/ # mount | grep system

/dev/block/mmcblk0p3 on /system type ext4 (rw,seclabel,relatime,user_xattr,acl,barrier=1)

hostsにtermux.orgのIPアドレスを設定します。このIPアドレス(ここでは192.168.1.122としています)は、WEBサーバを起動したLinux PCの物にしてください。

grouper:/system/etc # cd /system/etc
grouper:/system/etc # cp hosts hosts.org
grouper:/system/etc # echo '192.168.1.112 termux.org' >> hosts
grouper:/system/etc # cat hosts
127.0.0.1 localhost
::1 ip6-localhost
192.168.1.112 termux.org
grouper:/system/etc # ping termux.org
PING termux.org (192.168.1.112) 56(84) bytes of data.
64 bytes from termux.org (192.168.1.112): icmp_seq=1 ttl=64 time=61.8 ms

Nexus7でtermuxを起動

既に起動していたらいちどOS事再起動しておいてください。
termuxを起動して、bootstrapファイルのダウンロードが始まれば完了です٩(^▽^*)


他にもいろいろ試したのですが。。。

bzでURLを正しいものに書き換えたら・・・と思ったけど、あくまでもバイナリデータの編集なので、1byteも漏れなく修正する必要があるので、最小限にとどめる必要があった。

httpsのままにしてはどうか?と思ったけど、正しいURLも元の、httpsからhttpへ変更になったようで、httpsで直接接続が出来ない。また、Proxy用のLinuxで立てたWebサーバでSSLサーバ証明書を持たせるにはオレオレしかありませんが、nexus7のjavaが証明書エラーで接続に失敗するので、httpでのproxy接続とする必要があった。

最新のtermuxをインストールすれば?を検討したけど、Nexus7(2012)にインストールできるLineageOSは上記が限界で、最新のtermuxをインストールすることができなかった。

まぁとりあず、本来の目的はtermuxを使う事なので、手段は出来れば何でも良いかな。hostsとか、いじったところは直しておきましょう!

Nexus7(2012)にKali Linuxをインストールする

Kali-v1.2.1-sfx.exeでのインストールはサポートされなくなった。

以下の方法で、マルチブートさせる手順が主流の様子。やってみる。
Nexus7のOSのバージョンは4系がいいかも。5系だとroot化が面倒かも。
flashbootが使えるようになっていればOSの入れ替えは簡単でそ?!

対象と説明

  • 対象=Nexus 7 2012 Wifi Tablet
  • (PC)…パソコン(Windowsを想定root化ツールが・・・)
  • (PC→TB)…パソコンで操作。タブレット(Nexus7)にアクション
  • (TB)…タブレット(Nexus7)で操作

手順

  1. (PC)adbを使えるようにしておく
  2. (PC)flashbootを使えるようにしておく
  3. (PC→TB)bootloaderをunlockにする
  4. (PC→TB) https://www.offensive-security.com/kali-linux-nethunter-download/ の Nexus 7 2012 LollipopのZIP(nethunter-grouper-lollipop-3.0.zip)をダウンロードしてNexus7に置いとく
  5. (PC→TB) https://download.cyanogenmod.org/?device=grouper の cm-12.1-20160110-NIGHTLY-grouper.zipをダウンロードしてNexus7に置いとく
  6. (PC→TB) [Root]化する….http://www.wugfresh.com/nrt/ ツールはWindowsで動作させる。
  7. (TB) Google PlayStoreでMultiRomをインストール
  8. (TB) MultiRomで必要なファイルをセットアップ。起動時にRoot化許可しますか?の窓が閉まるのが早いので注意
  9. (TB) 再起動しMultiRomが起動するのでAbout BootでCancelする。放置するとすぐにAndroidが起動するので注意
  10. (TB) MultiRomが起動したらMISCを選択
  11. (TB) REBOOTTO RECOVERYを選択してTWRPを起動する
  12. (TB) TWRPが起動したらAdvanceを選択
  13. (TB) MultiROMを選択
  14. (TB) Add ROMを選択
  15. (TB) Nextを選択
  16. (TB) ZIP fileを選択
  17. (TB) cm-12.1-20160110-NIGHTLY-grouper.zip を選択
  18. (TB) インストールが終わったら右下の戻るボタンで一つ画面を戻る
  19. (TB) List ROMsを選択
  20. (TB) cm-12.1-20160110-NIGHTLY-grouper.zipを選択
  21. (TB) Flash ZIPを選択
  22. (TB) nethunter-grouper-lollipop-3.0.zipを選択
  23. (TB) 色々聞いてくる。とりあえず、全部チェックしてインストール。90%辺りで止まったように時間がかかるが我慢
  24. (TB) 成功おめでとうメッセージが出たらreboot

理解用のメモ

  • FastBootモードからよばれるSTARTのブートローダにmultiRomを入れてOSを選択できるようにする。
  • RecoveryModeからよばれるリカバリ用のOSにTWRPをインストールする。
  • TWRPで、マルチブートさせる別のOSをインストールさせることができる。
  • bootイメージ(add boot)にCyanogenmodを使って、中身(flash image)をkali linux nethunterにする