ジャンル不定の日記です。

Android上のchrootなLinuxでXfceを起動しようとしたが・・・

Android上のchrootなLinuxでGUIを起動している先人たちがいるので真似したが、現時点でうまく行ってない。
とりあえず、メモも兼ねて現状までまとめる。

SDカードの第2パーティションがext4になっててAndroid上で /storage/ext4sd にマウントされるようになってる。
/storage/ext4sd/.linux 以下にArch Linux(armv7)のrootfsを展開してある。


cd /storage/ext4sd
まず、ディレクトリ移動。

mount -o bind /dev .linux/dev
mount -o bind /proc .linux/proc
mount -o bind /sys .linux/sys
chroot環境の構築でカーネルは共有なので、システムが作成するディレクトリはmountでハードリンクする。

busybox busybox chroot .linux env -i bash
chrootする。
chrootの第1引数は新しいルートディレクトリだが、第2引数で実行するコマンドが指定できるので、env -iで環境変数を初期化する。
envの引数で更に実行するコマンドを指定できるので、bashを起動する。

groupadd -g 3003 aid_inet
gpasswd -a root aid_inet
idが3003のグループに所属していないとAndroidのカーネルによる制限でネットワーク(socket)が使えない。
ネットワークを使うには3003のグループを作成してユーザーを所属させる必要がある。

su -
chrootした時点でプロンプトが[#]だが、suしないとグループ権限が使えない様でネットワーク使えないらしい。

rm /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf
DNSで名前解決をするためには /etc/resolv.conf にネームサーバーのアドレスを書いておけばいいが、
Arch Linux ではsystemdで動的に書き換えるようで /etc/resolv.conf がシンボリックリンクになってる。
削除してから書き込む。
8.8.8.8はGoogleの公開ネームサーバー。

pacman -Syu
Arch Linuxのアップデート。

pacman -S xfce4
pacman -S xorg-server
pacman -S xf86-video-fbdev
xfceを使うために必要そうなパッケージのインストール。
ビデオデバイスは、fbdevを使うぽい。


Xfceは startxfce4 コマンドで起動できるようなんだが、 /dev/tty0 ないと言われて起動できない。startxコマンドでも同じ。
Android上で /dev を確認しても、 /dev/tty0 じゃなくて名前が違うぽい。
わからないんで、とりあえず現時点ではここまで。


あと、今回は /dev /proc /sys の3つをAndroid環境からハードリンクしている。
上記3つはメモリだからリブートすれば復活すると思うが、
先日、ネットワークの使い方がわからなくて試行錯誤している際に /system/bin をハードリンクして、
後始末の際にシンボリックリンクと間違えて rm -r で消しちゃってAndroidのROM焼きしなきゃ復旧できない事態になった。
後始末で消すときは、きちんとumountするか端末リブートするかで慎重にやらんとね。