Kindle Tablet 10 2017(suez)にLineage OS 16を焼いてハマった話
記事の概要
Kindle tablet HD 10 2017(以下suez)に、カスタムROMであるLineageOS 16を焼きこんだが、Opengappsが焼きこめないトラブルに遭遇した。
結論から言うと、/system領域の不足が原因で、パーティションの領域再作成が必要だった。方法は別機種のナレッジを参考としつつ解決した。参考記事では、/chache領域を/systemに転用すると良いとの情報があったが、suezではOSの挙動が不安定となったため、ユーザデータ領域も含めてパーティション調整が必要だった。
前置き
一昨日、押入れの掃除をしていたところ、なくしたはずのKindle 10 2017を発見した。購入当初カスタムROMの焼きこみが難しかったが、分解しテストポイントをショートすることでブートローダがアンロック可能ということがわかり、ブートローダをアンロックしLineageOS 12を導入していた。しかし2年くらいほったらかしている間に、Lineage OS12は古くなりすぎて、Webexなどの主要アプリは対応しない状況になってしまっていた。ちょうど、社のMTGに参加する際、私物のiPadを使用しているのを何とかしたいと思っており、このタブレットを再生することに決めた。
前提条件
suezのブートローダをアンロックし、TWRPを導入していること。下記ROMのダウンロードページから、最新のTWRPを導入していること。現在何らかのカスタムROMをFlashしていること。
ROMのダウンロード
最新のLineage OS 16ベースのカスタムROMは、https://forum.xda-developers.com/t/rom-testing-suez-lineage-16-0-05-july-2022.4232785/ より入手できる。GoogleDriveのリンクからダウンロード可能。解凍すると、いくつかのROMバージョンが同梱されていることが分かった。今回は、lineage-16.0-20220705-UNOFFICIAL-suez.zipとlineage-16.0-20220412-UNOFFICIAL-suez.zipに関して調査を行った。すると、0705版では、OpengappsのPicoを導入すると、エラーコード70を吐いて止まってしまう。TWRPでパーティション情報を修正すると良いという情報もあったが、うまくいかなかった。0412版ではうまくいったことから、単純に0705版では/systemが肥大化したのではないかと考えられる。0705版では、Bluetoothやマイクの動作が可能となっているため、0705版でOpengappsを導入する方法を探した。
パーティションの再作成
https://forum.xda-developers.com/t/guide-increase-your-nexus-4s-system-partition-for-more-space.3800264/ に有益な情報がある。概要としては、upされているARMビルドのpartedをADBで端末に送り、端末からパーティションを再定義するというもの。ここでのミソは、/system周辺のパーティションが触れる領域であるかどうかということ。suezのパーティション情報を調べたところ、/system付近は下記のようになっていた。
13 107MB 1800MB 1693MB ext2 system
14 1800MB 2244MB 445MB ext4 cache
15 2244MB 31.0GB 28.8GB ext4 userdata
16 31.0GB 31.2GB 115MB boot
17 31.2GB 31.3GB 115MB recovery
system chache userdata と並んでいるため、ほかの大事そうな領域を潰すことなくパーティションをいじることができる。
再作成1ラウンド目⇒失敗
まず、上記の記事を参考に、chacheを大幅に縮めた構成でパーティションを切ってみた。コマンドは下記の通り(抜粋)
./parted /dev/block/mmcblk0 mkpart primary 107 2144
./parted /dev/block/mmcblk0 mkpart primary 2144 2244
/systemと/chache全体の領域は変化せず、107MB~2244MBに取っており、/chacheだけ約100MBに縮小させた。この状態でOpengappsはインストール可能であったが、OSの挙動が不安定で、Playstoreが頻繁に落ちるなどするようになってしまった。そこで、userdataも縮めて/chacheの領域を少し広めにとることにしてみる。
再作成2ラウンド目
# system
./parted /dev/block/mmcblk0 mkpart primary 107 2144
#cache 990MB
./parted /dev/block/mmcblk0 mkpart primary 2144 3134
#userdata
./parted /dev/block/mmcblk0 mkpart primary 3134 31.0GB
/systemも広げ、/chacheも元の倍程度広げて余裕を持たせた。この状態でOSを起動すると、動作が非常に安定し、いい感じで運用できるようになった。
コマンド全文は下記の通り
# partedを実機に送る
adb push parted /
chmod +x parted
# パーティション情報を確認する
./parted /dev/block/mmcblk0 p
# マウントしている領域をアンマウント
umount /data
umount /sdcard
umount /cache
# system chache userdataを消す
./parted /dev/block/mmcblk0 rm 13
./parted /dev/block/mmcblk0 rm 14
./parted /dev/block/mmcblk0 rm 15
#パーティションの再作成
# system
./parted /dev/block/mmcblk0 mkpart primary 107 2144
#cache 990MB
./parted /dev/block/mmcblk0 mkpart primary 2144 3134
#userdata
./parted /dev/block/mmcblk0 mkpart primary 3134 31.0GB
# マウントポイント名称を付ける
./parted /dev/block/mmcblk0 name 13 system
./parted /dev/block/mmcblk0 name 14 cache
./parted /dev/block/mmcblk0 name 15 userdata
# フォーマット
mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p13
mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p14
mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p15
# 再マウント
mount -a
exit
この後、再起動し再度TWRPを起動し、ROMを焼く。ROMを焼くと、パーティション情報が再び狂ってしまうため、fsckを実行して修復する必要があるらしい。
参考記事の下記内容に従い、修復を行う。
You'll want to reboot TWRP, and flash a new ROM. You can now use a much bigger Google Apps package, without any worries.Do note, however, that flashing a ROM will "resize" system to be smaller, but this isn't a huge deal. After flashing a ROM, while still in TWRP, you'll want to go to Wipe > Advanced Wipe > check "system" then head to "Repair or Change File System", > then tap on "Resize File System." If you encounter any errors while trying to resize, try remounting system or rebooting TWRP. Afterwards, you should be able to flash your Google Apps package. I'm not sure if you need to repeat these steps after flashing things other than ROMs, but repeating this process within TWRP should work just as well.
(簡易訳)
TWRPで、ワイプ⇒Advanced wipe ⇒systemにチェック⇒Rapair or Change File systemを選択⇒Resize File Systemを選択。
(補足)
最新版ではUIが多少違う可能性があるが、大体同じなので問題はないと思われる。
所管等
partedを使うということで、ミスすればタブレットが文鎮になるリスクがある。そこで、あらかじめ実行するコマンドを控えてから投入するようにした。わかってしまえば非常にシンプルかつ、効果的な手法であることが理解できた。コマンド1つ1つが何をやっているかわからない人は避けたほうがよさそう。少なくとも、基礎的なLinuxコマンドが使える人でないとやらないほうがいい。
2017年のタブレットだが、web会議の参加については処理能力も十分で、10インチと比較的余裕のある液晶サイズを生かすことができている。何度も風呂場に落としているにもかかわらず、マイクが生きていることが分かったのは嬉しかった。これからしばらくの間、雑用タブレットとして利用していきたいと思っている。
10年以上前からあるadbコマンドがいまだに存在することに感慨深い気持ちとなった。
Discussion