Ubuntu Weekly Recipe

第256回新春特別企画・Android上でUbuntu…ではなくDebianを使う

明けましておめでとうございます。Ubuntu Japanese Team代表の小林です。このUbuntu Weekly RecipeおよびUbuntu Weekly Topicsの連載が始まって、今月で丸5年となります。読者のみなさま、編集の高橋様、そして執筆していただいた皆さんに感謝しております。今後とも本連載をよろしくお願いいたします。

さて、⁠記念すべき第256回」ということで、⁠特別企画でもやりませんか」と執筆陣のひとりである柴田さんに振られました。そこで、前からやってみたかった「AndroidでUbuntuを動かすネタでもやるか!」と思って取りかかったのですが…うまくいかず挫折しました。幸いDebianは問題なく動いていますので、今回はそのセットアップ方法を紹介します。root化されたAndroidデバイスが必要となりますので、誰にでもお勧めできる内容ではないかもしれませんが、特別企画ということでご容赦ください。

Note:
私としては「連載256回です!16進数で100回ですよ!」って言うのは、ちょっと恥ずかしい感じがあるんですよね。こういうのは、16進数を意識するコーディングをバリバリやってる人が言い出したことじゃないかと思うんですよ。おそらく、そういう人は16進だとピッタリとかゾロ目になる数字をみたら自然と「おっ」となるんでしょう。私はそんな世界とは無縁ですので、まったく思いません。そんな私が「ちょうど256回です!!!」とか書くと、なんだか体がかゆくなってしまいます。

Ubuntu Phone OS発表

本題に入る前に触れておきたいのですが、今月3日にUbuntu Phone OSが発表されました。シャトルワースの紹介動画がうまくできていて分かりやすく、各所で話題になっているようです。

Ubuntuの初リリースは2004年10月ですので、その頃はiPhoneやiPad、そしてAndroid Phoneも登場していませんでした。Ubuntuのバグ管理システムに最初に登録されたバグは「PC市場においてMicrosoftのシェアが大きすぎる」というものですが第120回参照⁠⁠、もはやPCの重要性は相対的に低くなってしまいました。多くの「普通の人」がPCよりもスマートフォンやタブレットでインターネットを活用している今日の状況をみれば、⁠フリーソフトウェアで構成された、自由で無料のOSを広く普及させる」という目標をかかげるUbuntuが、スマートフォン向けOSの開発を進めるのは当然の流れでしょう。

さて、Ubuntu Phone OSなんて聞かされると、すでに手持ちのAndroidデバイスでUbuntuを使いたいなと思いますよね。私は思いました。できるという話も聞いたことがありますし、やってみようと思ったんです。その時は、茨の道にはまりこむとは思いもしませんでしたが。

増殖するAndroidデバイス

また、Androidデバイスが最近とても安くなっています。私もNexus 7を買って毎日使っています。

他に便利に使っているのが、このところ増えてきたHDMIスティック型のAndroid端末です。昨年、⁠MK802」「MK808」を買いました。7,000~8,000円くらいだったと思います。このAndroidスティック、テレビに刺せば大画面Android端末に早変わりという優れものです。タブレットやスマートフォンを自室に置いたままでも、リビングでニュースやメールを簡単にチェックできて重宝しています。PCやタブレットを出さなくても、家族と大画面でYouTubeを見られるのも良い点です。リモートデスクトップクライアントを入れて、離れた部屋にあるPCを遠隔操作するという使い方も便利でしょう。

そんなこんなで、昨年は自宅内のAndroidデバイスが大幅に増えてしまいました。

図1 気がつけば増えているAndroidデバイスと関連機器
図1 気がつけば増えているAndroidデバイスと関連機器

最近Androidデバイスを使っていてよく思うのが、⁠普通のLinuxアプリも使えたらいいのに」ということです。普段からUbuntuを使い慣れていることに加え、トラックボールやトラックポイント付きのキーボードで操作しているため、Androidだと今ひとつしっくりこないせいもあるでしょう。Nexus 7でも、やはりキーボードをつなぐと、思わずUbuntuで使っているアプリを起動しようとして「あ、これUbuntuじゃなかった」と思ってしまうことがあります。

Mote:
Androidスティックの工場を取材した動画がYouTubeにアップロードされていました。想像以上に手作業で作られています。表面のプリント作業シーンは、小学生の時に先生が学級新聞をガリ版で刷っていたのを思い出させてくれました。

UbuntuをAndroidデバイスに入れることもできますが…

では、上記のAndroidデバイスにUbuntuを入れることができるのかというと、できます。

Nexus 7でUbuntuが動作することについては、各所で取り上げられているのでご存じの方も多いのではないでしょうか。Ubuntu Wikiにも手順がまとめられています

Androidスティックも、⁠MK802」や改良版の「MK802+」のように「Allwinner A10」が搭載されているモデルについては簡単にUbuntuなどのLinux OSが動作します。Linux OSを入れたMicroSDを差し込んで起動するだけという簡単さです。

「MK808」などの「RockChip RK3066」を搭載したモデルについては、メーカーがソースコード公開に積極的ではなかったこともあって、なかなかLinux OSが動かない状況でした。しかし、昨年11月ごろから積極的にハックする人物が現れ、今では概ね問題なく動作するところまで来ているようです。

でも私がやりたいのは、Ubuntuだけを動かすことではないのです。普段はAndroidを便利に使いつつ、必要なときだけLinuxで一般的なアプリやコマンドを使いたいんです。そのためには、Android内でLinux OSを動かさないといけません。

Note:
Androidスティックは、中国の複数メーカーが同じような名前をつけて販売しているようで、混沌とした状態となっています。よく似た名前なのにメーカーも仕様も違ったり、逆にまったく同じ仕様なのに違う名前だったりします。型番は今ひとつたよりにならないため、CPU、RAMの容量、NANDフラッシュの容量を確認してから購入するようにしてください。

chroot環境でLinux OSを動かす

そこで、Android環境にLinux OSのルートファイルシステムを配置し、chrootして動作させるという手段をとることにします。この作業にはAndroidデバイスのroot権限が必要です。多くのデバイスではroot権限の取得が禁止されているため、root化が必要となります。

root化するとメーカー保証が受けられなくなる可能性があるほか、手順を間違えるとデバイスが使い物にならなくなるということも起こりえます。もし行う場合は、ご自身の責任のもと、慎重に作業にあたってください。

なお、root化の方法についてはデバイスにより異なりますので、ここでは紹介しません。⁠MK808」「MK802」については、初期状態でroot権限を取ることができましたので、そのまま作業をすすめられました。

Android Terminal Emulatorのような端末エミュレーターアプリを開き、⁠su」コマンドを打ってプロンプトが「#」に変われば、root化できています。root化されていることが確認できたら、BusyBoxを導入しておきましょう。

Google Playには、Linux OSをAndroidへインストールするための補助アプリが複数登録されています。これらを用いればPCを使うこともなく簡単にLinux OSのchroot環境を構築することができるはずです。私が試したのは次の2つです。

これらはアプリといっても、主に解説(英語)とダウンロードリンクで構成されており、実際の導入作業はユーザーがコマンドを打って行います。

Complete Linux Installerは、Linux on Androidプロジェクトで配布されているイメージファイルをダウンロードし、それをマウントして環境を構築する手順をとります。一方Debian Kitは、Android上でdebootstrapを実行してディスクイメージを作成するタイプです。

私はまず、Complete Linux Installerを利用してUbuntu 12.04を導入してみました。簡単にインストールできたのですが、どうしてもFirefoxとChromiumブラウザが正常に動作しません。それならと、Debian Kitを使ってUbuntuを入れてみました。やっぱりブラウザが動作しません。それ以外は正常に動作するのですが…。

その後、Ubuntu PCで12.10 armhfのディスクイメージを作成し、Android環境に配置して手作業でLinux on Androidが行っている内容を実行するといったことも試してみたのですが、どうしてもブラウザだけが動作しませんでした…。眠らず朝までがんばったのに。ブラウザはAndroidのものを使えばいいので大きな問題ではないのかもしれませんが、なんとも気持ちの悪い状態です。

この原稿の締め切りもとっくに過ぎ、どうしたものかと思いつつ、Debian KitでDebianを導入してみたところ、ブラウザまで完璧に動作するではありませんか。というわけで、Debian KitでDebianを導入するまでの手順を紹介します。

まず、ブラウザもしくはDebian Kitアプリからhttp://sven-ola.dyndns.org/repo/を開き、debian-kit-1-4.sharをダウンロードします。ブラウザによっては拡張子が書き換わり「debian-kit-1-4.jpeg」という名前で保存されてしまいますが、問題ありません。

端末エミュレーターを開き、suを実行しておきます。そして、次のコマンドでダウンロードしたファイルを実行します。

sh /sdcard/Download/debian-kit-1-4.*

最初の質問にyと答えると、/data/local/deb/以下にDebian Kitのファイルが展開されます。続けてイメージファイルを作るかどうか聞かれますが、Enterを押して終了しておきましょう。

Debian Kitは、デフォルトで/sdcard/直下にdebian.imgという名前でイメージファイルを作成します。MK808は内蔵ストレージの容量が少なく(といっても初期状態で5GBほど開いていますが⁠⁠、イメージを配置したいMicroSDは/mnt/external_sd/にマウントされているため、このままでは都合が悪いです。また、ファイルサイズの上限は2047MBとなっていますが、足りなくなる可能性もあります。そこで手作業で4Gb程度のイメージファイルを事前に作っておき、それを利用することにしました。実行したコマンドは次のとおりです。

mkdir /mnt/externel_sd/squeeze
cd /mnt/externel_sd/squeeze
dd if=/dev/zero of=squeeze-armel.img bs=1000000 count=3900
/data/local/deb/mk-debian -d squeeze -i /mnt/external_sd/squeeze/squeeze-armel.img -t ext4 -M http://ftp.jp.debian.org/debian

最後のコマンドを実行後、既存のイメージファイルを利用するかどうか質問されるので、e(existing)を押して続行すればセットアップが進行します。ただし、スリープ状態に入るとネットワーク接続が切れて処理が進まなくなるので注意が必要です。なお、この例ではイメージファイルを利用していますが、ディスクパーティションに直接インストールすることも可能です。詳しくはDebian Kitのページを参照してください。

コマンドが終了してプロンプトが表示されたら、⁠deb」コマンドを実行しましょう。作成したイメージファイルがマウントされ、debootstrapのセカンドステージが実行されます。その後、Debianシステムのシェルが起動しますので、必要な設定とパッケージの導入を行っていきます。

まずはタイムゾーンの設定です。次のコマンドを実行します。

dpkg-reconfigure tzdata

日本時間ならばAsia→Tokyoと選択します。

次にパッケージのアップグレードを行っておきましょう。

apt-get update
apt-get upgrade

そして、andromizeパッケージを導入します。これにより、そのままのDebianシステムではAndroid上で問題が出る部分が修正されます。

apt-get install andromize

andromizeパッケージのインストールが問題なく終了したことを確認したら、一般ユーザーを追加し、sudoグループに加えておきましょう。

adduser ユーザー名
apt-get install sudo
adduser ユーザー名 sudo

これで基本的な設定は完了です。

あとは、好みに応じて設定やパッケージを追加していきます。今回はLxdeを導入して、基本的な日本語デスクトップ環境を構築するまでを紹介します。

最初にロケールを日本語にしておきます。次のコマンドを実行してください。

apt-get install locales
dpkg-reconfigure locales

日本語のデスクトップを使う場合は、ja_JP.UTF-8にチェックを入れ、システムデフォルトに設定しておきます。

そして、次のコマンドでLXDEや日本語フォント、そのほか日本語の表示や入力に必要なソフト、好みに応じてOpenOffice.orgなどをインストールします。

apt-get install andromize-lxde iceweasel-l10n-ja ibus-anthy ttf-vlgothic otf-ipafont ttf-takao xdg-user-dirs openoffice.org openoffice.org-l10n-ja

インストールが完了したら、次のコマンドでパッケージキャッシュを削除しておきます。

apt-get clean

さて、これで準備が整いました。exitでDebianのシェルを抜け、次のコマンドを打てばリモートデスクトップサーバーxrdpが起動します。

deb x

これでRDPに対応したAndroidアプリからlocalhost:3389に接続すればデスクトップ環境が使える…はずなのですが、筆者が試したかぎり、うまく接続できるAndroid用RDPクライアントは見つかりませんでした。PC上のRDPクライアントからは問題なく接続できたため、有料のものなら対応したものがあるかもしれませんが…。

そこで、ここではVNCサーバーを起動してVNCクライアントから接続することにします。再度debコマンドを打ってDebianのシェルに入った上で、次のコマンドを実行します。

su ユーザー名 -l -c "vncserver :0 -geometry 1280x672"

「1280x672」は一例です。何度かためして、いちばんしっくりくる解像度を探してください。このコマンドは初回実行時に、接続に用いるパスワードの入力を求めます。view onlyモードのパスワードを設定するかどうかも質問されますので、必要に応じて設定してください。2回目以降、入力の必要はなくなります。無事VNCサーバーが起動すると、⁠New 'X' Desktop is localhost:0」と表示されます。

VNCクライアントですが、私はandroidVNCを使っています。設定画面で、パスワード、アドレスとして「localhost⁠⁠、色数として「24-bit color (4 bpp)」を設定し、画面左上の「接続」をクリックすれば、Debianのデスクトップに接続します。

図2 androidVNCの設定
図2 androidVNCの設定

スクリーンセーバーが起動すると重くなるため無効にし、設定→外観の設定を開いてフォントを見やすい大きさに調整しましょう。また、設定→iBusの設定を開き、インプットメソッドタブで「日本語 - Anthy」を追加しておきます。

図3 Android上で動くDebianのデスクトップ
図3 Android上で動くDebianのデスクトップ

これで、DebianのアプリがAndroidで使えるようになりました。私は感動のあまり「うわぁ・Androidさんの中・すごくあったかいナリ・・」とつぶやいてしまいました。

なお、VNCクライアントから切断してもXセッションは維持されます。終了するには、debコマンドでシェルに入り、次のコマンドを実行します。

su ユーザー名 -c "vncserver -clean -kill :0"

また、debコマンドによりSSHサーバーの起動や終了などを直接行うことも可能です。詳しくは「deb ?」を実行してヘルプを参照してください。

以上、AndroidでDebianを使うまでの方法を紹介しました。root化が必要など、少しハードルが高い面もありますが、Debian Kitのおかげで比較的簡単に環境を構築することができます。AndroidでLinux用のバイナリを実行したいと思っている方は試してみてはいかがでしょうか。

おすすめ記事

記事・ニュース一覧