はるかぜ

気ままてきとう雑記。 本HPは左のHP紹介欄バナーから。

ASUS MeMO Pad 7に、Debian Linuxを導入した話


 ASUS MeMO Pad 7に、Debian Linuxを導入しました。
Androidタブレットのくせして、UEFIに入れるという、
わけのわからないタブレットだからこそできる業。
この時代に、いったい誰に刺さるのかという内容ですが、
筆者にしたって自己満足でやっているわけですから、
説明のしようもありません。
自分用のメモにしかならない予感。
経緯や四方山話を書くと大変なことになりそうですので、
いつもどおり、作業内容を先に書いていこうと思います。

▼ 必要なものはこちら:
Android 5にアップデートされたASUS MeMo Pad 7
ASUS MeMO Pad 7用のStock ROMファイル
タブレットに給電できるmicroBタイプのUSBハブ
・USBディスク(2つあるとよい)
・USBイーサネットアダプタ
・USBキーボード
・USBマウス
・Arch Linuxの導入されたPC
・ADB/FASTBOOT環境が導入されたPC
・できれば32GBのmicroSDカードが1枚、なければ32GBのUSBディスク

・時間


▼ 作業
Linuxを入れるための区画を作る
タブレット側のデータは初期化されます。
ADB/FASTBOOT環境が導入されたPCを使います。
Stock ROM(検索すると結構出てきて苦労はしません)を解凍し、
partition.tblを編集します。

Linuxの区画を7.25GBとする場合、
21行目を

add -b 6791208 -s 8789942 -t data ...


に変更、
21行目と22行目の間に、新たに

add -b 15581150 -s $calc($lba_end-33) -t data -u ...-00000000000B -l linux ...


を挿入し、保存します。
タブレットを、adbデバッグを有効にしてPCと接続し、
adb reboot fastbootでfastboot環境に入り、
PC側で、debrick-flashall-no_wipeを実行します。
しばらくするとタブレットは再起動がかかり、
ユーザ領域4.19GBの激狭Androidが立ち上がります。

・me176c-bootを導入する
引き続き先程のPCでの作業です。
導入方法は、
https://github.com/me176c-dev/me176c-boot
のinstallation節にとてもわかり易く説明されているので割愛。

Debian Linux導入の下準備
まずは、タブレット本体での作業です。
ここではArch Linuxのインストールディスクを使います。
USBハブにArch LinuxのインストールUSBディスクとUSBキーボードを挿して、
ブートしたら、ファイルシステムの初期化をします。
mkfs.ext4 /dev/disk/by-partlabel/linux
mkfs.fat -F 32 /dev/disk/by-partlabel/APD
これでタブレット本体の下準備は完了です。

つぎに、Arch Linuxでの作業です。
me176c関連のパッケージを2つ作ります。
aurから取得するのは、
me176c-factoryとme176c-firmwareの2つです。
git clone https://aur.archlinux.org/me176c...と複写して、
ディレクトリに入り、makepkg -sします。
パッケージができたら、
Debianのインストールディスク内に適当なディレクトリを作って、
そこに展開しておきます。
これで、Arch Linuxでの下準備は完了です。

・Dabian Linux導入
amd64版を導入します。
一般の導入方法と違うところだけを紹介します。
といっても、Dabian Linuxを初めて導入したのがつい先日なので、
あまり自信はないですが…

microBで給電できるタイプのハブが必要です。
給電できないタイプで試していないのでわかりませんが、
導入はできたとして、再起動後はOTGアダプタが使えませんので、
そこで手詰まりになる可能性が大です。
USB-AのセルフパワーのハブとOTGアダプタの組み合わせは、
なんだか動作しそうな気がしてきますが、
家に持ち合わせがないので、その可否は不明です。

USBハブには、
Debian LinuxのインストールUSBディスク、
USBイーサネットアダプタ、
USBキーボードを接続しておきます。

インストールUSBディスクからのブートは、
Advanced optionsから、Expert Installを選びます。

無線LANは認識せず、ファームウエアを要求されます。
USBイーサネットアダプタが必要なのはこのためです。

区画分けでは、手動を選びます。
ESP区画が2つ自動で認識されてしまうので、
どちらの区画も利用しないようにさせます。
いちばん最後に、最初の手順で作成された区画があるので、
これをext4で初期化し、ルートにマウントするよう設定します。
ESP区画とスワップ区画について尋ねられますが、
どちらの警告も無視して進めます。

ソフトウェアの選択ですが、
1GBのメモリではメモリ不足になることが考えられるので、
ここでは各デスクトップ環境や標準システムユーティリティは導入しません。

GRUBは導入せずに、インストールの完了をさせます。
そして、再起動の前に!!!
ALT+F2でコンソール画面へ移動します。
/target/bootの内容をlsで確認し、メモします。
/dev/mmcblk2(※数字"2"は変化する場合があります)p13を/mntにマウントし、
/target/boot/*を/mnt/に複写します。
作業後/mntはアンマウントして、
今度は/dev/mmcblk2p3を/mntにマウントします。
エディタnanoで/mnt/loader/entries内に、debian.confを作成します。
内容は:

title Debian GNU/Linux
volume 80868086-8086-8086-8086-000000000007
linux /vmlinuz-さっき確認したやつ
initrd /initrd.img-さっき確認したやつ
options root=PARTUUID=80868086-8086-8086-8086-00000000000b ro


として保存します。

ついでに、/mnt/loader/loader.confを編集します。
defaultはdebianに、
timeoutはお好みで、私は3秒にしておきました。
/mntをアンマウントしたら、
ALT+F1でインストーラに戻り、保留していた再起動をします。

・起動後のコンソールでの作業
真っ先に入れなければならないのが、zram-toolsです。
これでスワップ領域をメモリ内に作ります。
最初だけなので、rootでログインしてしまいます。
apt-get install zram-toolsでソフトウェアを導入したら、
/etc/default/zramswapを編集、
圧縮方式はzstdに、容量は2048MBと指定し、
優先度はコメントアウトだけして保存します。
そののち、service zramswap reloadで、変更を反映させます。
これで一応、デスクトップ環境運用に耐えうる環境が整いました。

デスクトップ環境を導入します。
うちはXfceを導入しました。
とりあえずということで、導入したソフトウェアは、

sudo
network-manager bluez network-manager-gnome blueman bluez-tools
xserver-xorg xfce4 xfce4-notifyd xfce4-power-manager gvfs autofs
xfce4-terminal xfce4-systemload-plugin xfce4-cpugraph-plugin
alsa-utils pulseaudio pavucontrol
fcitx fcitx-mozc
lightdm lightdm-gtk-greeter
synaptic gedit
onboard


でした。
導入後、/etc/network/interfacesを編集、
# The primary network interface
以下をコメントアウトしておきます(たぶん消していい
あと、gpasswd -a ユーザ名 sudoで、
導入時に作成した一般ユーザでsudoを使えるようにしておきます。
そののち再起動すると、lightdmのログイン画面が起動します。
ほっと一息です。

・デスクトップ環境起動後の作業
このままでは動作しない致命的な機能がいくつかあります。
バッテリ残量表示機能、OTG機能、Wi-Fi/Bluetooth機能です。

しかし、まずはこの先の作業を楽にするために、各種設定をします。
電源設定では、ロックにまつわるものをすべて無効にします。
/etc/lightdm/lightdm.confを編集、
# greeter-hide-users=falseと
# autologin-user-timeout=0をアンコメント、
# autologin-user=をアンコメントし、
導入時に作成した一般ユーザ名を書き加えて保存します。
タブレットPCで、パスワードログインはつらい。
念には念を入れて、
/etc/lightdm/lightdm-gtk-greeter.confを編集、
keyboard=onboard -e
keyboard-position = 50%,center -0;100% 22%
を追記しておきます。
これでロックされても不意にログアウトしても、
いちおうスクリーンキーボードで戻ってこられます。

Wi-Fi/Bluetooth機能を解決していきます。
刺したままのUSBディスクにある、Arch Linuxで複写しておいたブツを、
Arch Linuxにのみ関係のあるPaxHeaderや.BUILDINFOなど以外を
ルートディレクトリに複写します。
私はズボラなので、sudo thunarで複写しました…
複写後、chmodで属性を変えていきます。
chmod 755するのが

/opt/asus
/opt/asus/me176c
/opt/asus/me176c/upi_ug31xx(ここまでは要らない気がする
/usr/lib/me176c
/usr/lib/me176c/me176c-factory


chmod 644するのが、

/usr/lib/firmware/brcm/BCM2076B1.hcd
/usr/lib/firmware/brcm/brcmfmac43362-sdio.txt
/usr/lib/systemd/system/me176c-factory-bdaddr@.service
/usr/lib/systemd/system/me176c-factory-wifiaddr@.service
/usr/lib/systemd/system/me176c-factory.service
/usr/lib/udev/rules.d/99-me176c-factory.rules


そののち、
/usr/lib/systemd/system/me176c-factory-bdaddr@.service
を編集、
ExecStartの手前の行に、
ExecStartPre=/bin/sleep 10
を追加し、保存します。
systemctlでサービスme176c-factoryを有効にし、再起動すると、
Wi-Fi/Bluetooth機能が使えるようになります。

バッテリ残量表示とOTGは、カーネルのビルドが必要です。
寝る前にやるのが吉。
手順はこちらの記事が分かりやすいので、ほぼ丸投げにするとして…
apt-get install build-essential libncurses-dev fakeroot dpkg-dev
apt-get build-dep linux
でビルド環境を用意し、
apt-get install linux-sourceでソースを入手。
ソースは/usr/srcないにあるので、それを
用意しておいた32GBのSDカード(充電しながら作業できるので良い)か、
USBディスクに複写し、tar xvf linux-...と展開します。
基本となる.configは/boot内のconfig-...を、
ソース展開先のディレクトリに.configとして複写します。
make menuconfig にて追加で有効にする箇所は;

Power management and ACPI options --->
 [*] ACPI (Advanced Configration and Power Interdace) Support --->
  [*] Intel DPTF (Dynamic Platform and Thermal Flamework) Support

Device Drivers --->
 -*- Power supply class support --->
  <M> uPI uG3105 battery monitor driver
 <M> External Connector Class (extcon) support --->
  <M> Intel INT3496 ACPI device extcon driver


この設定でmenuconfigを終了させ、
make -j4 KCFLAGS=-march=native bindeb-pkg
でパッケージをビルドします
(並列ジョブは4でちょうど遊ぶか遊ばないかのギリギリでした)。

パッケージができたらば、
linux-headers-...とlinux-libc-...をdpkg -i linux-...と導入し、
linux-image-...を導入します。
導入後、
/dev/mmcblk2p13を/mntにマウントし、
/boot内を/mntに複写します。
複写後アンマウントし、
/dev/mmcblk2p3を/mntにマウント。
/mnt/loader/entries/debian.confを編集、
linux /vmlinuz-さっき導入して増えたやつ
initrd /initrd.img-さっき導入して増えたやつ
と変更して保存します。
変更する前の.confをdebian_bak.confとして複写しておいてもいいと思います。
そして再起動。

ようやく作業は終了のはずです。
お疲れ様さまでした。

------------

intel入ってるAndroidタブレットはゴマンとあれど、
UEFIに入れるAndroidタブレットは、ほかにまだ聞いたことがありません。
このへんちくりんなタブレット
目をつけたかたはそこそこあるようで、
Arch LinuxWikiには専用のページもあるほど。
そりゃあだって、面白そうですもんね。
ただ、労力に見合わないからなのか、
ほとんど放置されていて、現状半分ほどしか参考になりません。
といっても、重要な情報は残されているので、
活用しつつArch Linuxを導入してみたのですが…

いくつか問題がありまして。

・起動時にzramの作成に失敗することがある。
Arch Linuxのページにあるとおり、
スワップ区画をストレージに作ろうものなら、
おそらく書き換え回数が限界突破して、すぐに故障するものと思われます。
ってなことで、zramを活用するというわけなのですが、
なんべんかに一回はzramの作成に失敗してしまいます。
仮想スワップ領域が作成されずに立ち上がった暁には、
デスクトップ環境が起動してから数十秒でハングするため、
起動時に流れるログを流し読みして、
zramの作成に失敗した赤字が確認できたら、
速攻で再起動しないといけませんでした。

Bluetoothは一見有効になっているようだが、何も拾わない。
bluemanを見る限り、いちおう送受信レートに動きはあるのですが、
何にも表示してくれません。
まあ…使わなければいいということなのですが、
本来使えるものが使えないというのは、やはりちょっと面白くない。
Debian Linuxのほうはといえば、
Arch Linuxのme176c-factoryをそのまま導入した場合だと、
デスクトップ環境が起動した直後に、
Bluetoothのアイコンが消える現象が発生しました。
journalctl -u me176c-factory-bdaddr@hci0で確認をすると、
どうもサービス起動のタイミングが早すぎるために失敗しているようで、
これはサービスにExecStartPre=/bin/sleep 10を挿入することで解決しました。
もしかArch Linuxでも、これで解決していた可能性もありますが…

・でかいAURパッケージが導入できない。
me176c関連のAURパッケージなら、特段問題はなかったのですが、
Google Chrome等の比較的大きなAURパッケージをmakepkgすると、
最後の最後、圧縮のフェーズで動かなくなります。
時間かかるだけかと思いきや、
CPU使用率だけ一丁前に1/2食いながら、
待てど暮らせど作業が終わりまてん。
致命的。

そこで、何かいい方法はないものか…というので、
辿り着いた軽量LinuxDebian Linuxだったのでした。
正直マニュアルメージが煩雑で読む気が失せていたのですが、
よく考えたら、最初に触れたのがGentoo Linux
お次がArch Linuxだったわけで、
Debianは流し読みでなんとか…なりませんかねと…

システムの導入自体は特に難しいところはありませんでしたが、
こちらはこちらで問題が。

FAT32は/bootとしてマウントできない。
me176cにとっては厄介な縛りで、
me176c-bootはsystemd-bootがベースであるため、
ブートできるファイルシステムFAT12・16・32のみ。
対して、Debianは/bootを別区画にする場合、ext2を使うらしく、
FAT32区画を指定すると怒られて先に進みません。
私の場合は、導入後、
既存の/bootの名前を/boot_に変更し、
新たに/bootを作って/dev/mmcblk2p13をマウントし、
/boot_を/bootへ複写、
fstabに/dev/mmcblk2p13を/bootとしてマウントするように記述しました。
どうもカーネルを上書きインストールする際に、
ルートディレクトリにあるvmlinuz.bakを作成できないようで、
一度パッケージを削除してから再導入することでエラーを回避しています。
今後どうなることやら。

・固有のパッケージの導入手順が煩雑。
もとはといえば、Arch Linux発の活用方法であり、
かつそこから他所に発展しなかったために、
Arch Linuxでパッケージを作る必要があります。
ファームウェアは正直、/dev/mmcblk2p15をマウントすれば見つかるので、
それを複写すればいいのですが、
実行ファイルの/usr/lib/me176c/me176c-factoryとかは、
どうすれば良いかが分かりません。
手っ取り早いのが、Arch Linuxで作ってしまうというというのが、
現時点での私の限界です。
もっと勉強すれば、他ディストリビューションでもビルドできるのかもしれません。

カーネルのビルドが必要。
Arch Linuxの6.x系カーネルは、バッテリ残量表示もOTGも問題なく動作しましたが、
Debian Linuxは、そうはいきませんでした。
どのモジュールを有効にすればいいかを絞るために、
lsmodの出力結果を比較してモジュールを推測し、
なんとか最小手順で目的のカーネルをビルドできました。
分かればなんてことはないのですが、
なんともならないのがビルド時間です。 おそい。
ビルドするのに30GB弱の区画も必要なので、
必然的に外部ストレージに頼ることになります。
時間もマシンパワーも使うので、
環境が整った後はSDカード一択になるんじゃないかなと思います
(うちにはマウスコンピュータのWN1001があるので、それでスボラしましたが)。

・右クリックのエミュレートは…
調べています。
他のデスクトップ環境だと設定項目があるとかいうことですが、
果たして、この貧弱なタブレットに通常のデスクトップ環境を入れて、
使用に耐えるのかが疑問です。
evdev-right-click-emulationが惜しい感じで、
長押しでコンテキストメニューが出るのですが、
指を離すとメニューも消えてしまい、項目を押すことができません。
なんかいい手はないものか…。

とにもかくにも、
一部を除き、まあまあ使えるようにはなりました。
chromiumはタッチパネルと相性が良く、快適です。
Bluetoothが使えるので、
この記事を書いたときのように、文章も楽々入力ができます(タブレットとは
しばらくはいいおもちゃになりそうです。
ネットラジオに最適。
…うーん。
頑張ったわりに、うまい活用方法が思いつかないなあ。


余談ですが。
書いていて思ったのですが、
いろんな記事を見て、肝腎なところ…
特に環境を整えるあたりが書いていないってことがよくあるのですが、
あれ。
面倒だからってのもあるでしょうが、
数をやりすぎていて、なまじ環境を整えたのが結構前であるため、
自分でもどうやって環境を整えたのかがわからないんじゃないでしょうか。
少なくとも、私はそうだなあ。
はい、割・愛