ASUS ZenPad S8.0 chroot環境作成3

投稿者: | 2016年4月19日

気がつけば三ヶ月もあいてしまいましたが続きです。

仮想環境の使用方法は作成時とほぼ同じです。
1.作った仮想イメージ(ubuntu.img)をSDカードに入れてZenPadに挿入。
2.ターミナルアプリからubuntu.imgを適当な場所にループバックマウント
3.必要なデバイスファイルをつなぐ
4.root権限でchrootを実行
これでubuntu環境にログインできます。

準備

chrootは標準では入っていないので(Complete Linux Installer(Linux on Android))のbusyboxを使わせてもらいます。
このアプリをストアから入れると
/data/data/com.zpwebsites.linuxonandroid/files/busybox
にbusyboxがインストールされます。

それから毎回コマンドを打つのも面倒なので起動/終了(デバイスのアンマウント)用スクリプトを書いておきます。

ZenPadでは外部SDは”/storage/MicroSD”にマウントされるのでubuntuの仮想イメージ
は”/storage/MicroSD/ubuntu.img”にあることになります。
マウントポイントは”/storage/MicroSD/ubuntu”にすることとします。
root取得後のシェルは “/tmp-mksh/tmp-mksh” のようなので以下のようにしました。

start_ch.sh (起動用)

#!/tmp-mksh/tmp-mksh

#ファイル位置指定
BBOX=/data/data/com.zpwebsites.linuxonandroid/files/busybox
SD=/storage/MicroSD
UBUNTU=$SD/ubuntu
USER=ichinomoto

#マウントポイントが無ければ作成
if [ ! -e $UBUNTU ]; then
  mkdir $UBUNTU
fi

#マウント
cd $SD
mount -t ext4 -o loop $SD/ubuntu.img $UBUNTU

mount -o bind /dev/ $UBUNTU/dev/
mount -t devpts devpts $UBUNTU/dev/pts
mount -t proc proc $UBUNTU/proc
mount -t sysfs sysfs $UBUNTU/sys

#環境設定を行ってchrootの実行
$BBOX env -i TERM=linux SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin DISPLAY=localhost:0 PULSE_SERVER=tcp:localhost:4712 $BBOX chroot $UBUNTU /bin/bash

stop_ch.sh (停止後のunmount用)

#!/tmp-mksh/tmp-mksh

SD=/storage/MicroSD
UBUNTU=$SD/ubuntu

umount $UBUNTU/sys
umount $UBUNTU/proc
umount $UBUNTU/dev/pts
umount $UBUNTU/dev
umount $UBUNTU

どちらのスクリプトも実行前にsuでrootになってから実行する必要があります。
このためにその1でrootを取得しています。

start.shを実行すればchroot環境のubuntu内に居ることになるので、あとは普通に使うだけです。
そのままだとCUIしか使えない状態ですが裏でサーバーを動かしたいとかvimを使いたいなどという最小限の要望であればこれでも十分。
ソフトをパッケージ管理できるだけでもかなりの利点かと。

GUIを使えるようにする

CUI環境だけでも良いですが、せっかくなのでXを使えるようにします。
こういう環境でGUIを使う場合はよくxvfb+vncを使いますが、AndroidではGooglePlayにXserver SDLというXサーバーがあるのでこれを使います。
XServer XSDL

前回ユーザーを作ったので、以降はそのユーザーで操作することを前提に記載します。

XSDLに接続するための設定として

$export DESKTOP=localhost:0
$export PULSE_SERVER=tcp:localhost:4712

が必要なのですが、上で書いた起動スクリプトの以下の部分に既に記載済みです。

#環境設定を行ってchrootの実行
$BBOX env -i TERM=linux SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin DISPLAY=localhost:0 PULSE_SERVER=tcp:localhost:4712 $BBOX chroot $UBUNTU /bin/bash

マシンパワーもストレージサイズもそこそこあるのでxubuntuのデスクトップ環境をまるごと入れるのも有りです。
#unityは重そうなのと、デスクトップでも使っていないのでubuntu-desktopは試していませんが動くとは思います。

$sudo apt-get install xubuntu-desktop
$xfce4-session

Xでつながってしまえばあとは大体通常のubuntuと同様です。
ここまでするとマウスとキーボードがほしくなるのでAndroid側でBTマウスやキーボードを接続しておくと良いかと思います。
こんな感じになります。普通のPCとほぼ変わりません。ストレージが遅いのとマウスの動作が怪しいですが…
chroot3
 
まあせっかく作ったんですが実はあまり活用されてなかったり。
Android環境で十分なんですよねえ。
 
 
 
 

以下メモ

wineを入れてみる

せっかくなのでwineを入れてみます。
といっても手順は通常のデスクトップPCでインストールするのと同じ。

準備
archをamd64にした場合、必要なi386パッケージの参照先がsources.listに無くインストールできないのでapt-getの対象アーキテクチャにi386を追加。
参考:How to run 32-bit app in Ubuntu 64-bit?

#dpkg --add-architecture i386
#apt-get update
#apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

この次でwineのppaリポジトリを追加するのにadd-apt-repositoryコマンドが無いといわれるので先に入れておきます。

#apt-get install software-properties-common

wineのリポジトリを追加してインストール

#add-apt-repository ppa:ubuntu-wine/ppa
#apt-get install wine1.8

 
 


[2016/5/12 修正]
XServerSDLで使用するPULSE_SERVERの接続ポート番号が間違っていたのを修正
誤)PULSE_SERVER=tcp:localhost:4217
正)PULSE_SERVER=tcp:localhost:4712

ASUS ZenPad S8.0 chroot環境作成3」への3件のフィードバック

  1. yama

    はじめまして。こちらの情報を参考に(というより真似させていただいて)、私のところでも無事xubuntuが動きました!情報ありがとうございました!
    ただ、もしかしてなのですが、Xサーバの番号、4217ではなく4712ではありませんか?私のところではこの番号でサーバに接続できず、サーバ画面を確認したら4712だったのですが、個体差でしょうか?
    いずれにせよ、貴重な情報をおしげもなく公開していただいて、本当にありがとうございました!これから日本語化してみたいと思います。(Xubuntuの設定のLanguage設定を押しても起動しないのが??です)

    返信
  2. ichinomoto 投稿作成者

    ミスの指摘ありがとうございます。
    こちらでも画面を確認したところPULSE_SERVERのポート番号は4712でした… 修正しておきます。
    PULSE_SERVERのポートが間違っている場合おそらく音が鳴らないだけで、DISPLAYの方が合っていれば画面は出ていたのではないかと思います。

    基本的にここに書いているのは備忘録的な次にやる時のための自分用メモなのですが、お役に立ったのであれば何よりです。

    返信
  3. yama

    なるほど、私のところで画面が出なかったのはまた別の問題だったかもしれないですね。いずれにせよ感謝感謝です。ありがとうございました:)

    返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です