---
title: HTC DesireでArchLinuxARMを動かす
tags: [GNU/Linux, 備忘録, ハードウェア]
publishedOn: 2013-03-19
lastModifiedOn: 2026-08-14
---

![ArchLinuxARM の LXDE が動く HTC Desire](./lxde_on_desire.jpg)

発売当時は名機と呼ばれたHTC Desireも、今は過去のもの。昔は街中で時々Desireユーザを見かけるたびに歓喜していたものですが、最近ではほとんど見かけることもなくなりました。もう発売から丸3年が経過しようとしているのですが、しかしまだまだ現役で使うことのできるポテンシャルを秘めています。今回は、ArchLinuxARMをchrootを用いてDesire上で稼働させてみたいと思います。root権限必須です。

## 経緯

最初は、Playストアに「ArchLinuxInstaller」なるものがあったのでそれを使って気軽に試そうと考えていたのですが、手順通りに実行してもうまく起動しませんでした。そこで調べてみると、手動でインストールする方法が紹介されていたのでやってみました。機種により異なる部分も多々あったので、スクリプトを改造しつつ作業を行なっていったところ、Desireで動かすことができました。以下にその手順を備忘録として記述しておきます。

以下のサイトを参考にしました

[Arch Linux ARM • View topic – Installation in an Android Chroot](http://archlinuxarm.org/forum/viewtopic.php?t=1361)

## Androidに必要なアプリをインストール

AndroidのSDカードにAndroidのものとは別にArchのファイルシステムを配置し、そこにchrootしてArchLinuxを立ち上げるような方法をとります(たぶん)。カーネルはAndroidのものと共用しているようです。chrootしたArchLinuxをVNCサーバにしてやり、Android上のVNCクライアント(Viewer)からArchLinuxに接続してやることで、Android上でGUIをグイグイといじることができるようになるわけですね。

その為、Androidには[アンドロイドの-vnc-viewer](https://play.google.com/store/apps/details?id=android.androidVNC)(VNCクライアント)、PCからターミナルを触りたいので[SSHDroid](https://play.google.com/store/apps/details?id=berserker.android.apps.sshdroid)(SSHサーバ)、Desire上で仮想端末を触るために[Hacker’s keyboard](https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard)(キーボード)を入れてやりましょう。「俺は標準のキーボードでDesire上からすべての作業をするぜ！」って方はVNCクライアントだけでも構いません。

## 端末のmicroSDHCをext4でフォーマット

今回の記事は見出しが説明口調になってますが、気にしないでください。

さて、AndroidでフォーマットしたmicroSDHCカードはFAT32でフォーマットされているようです。このファイルシステムは最大で4GiBのファイルまでしか扱えないため、それより大きなArchLinuxのファイルシステムを構築しようと思うと別のフォーマットを用いる必要が出てきます。もしそうであれば、お手持ちのLinux環境からext4辺りでフォーマットしてやってください。

```bash

 $ mkfs.ext4 /dev/sdb
```

microSDHCが/dev/sdbにあれば、上のように打ち込めばOKです。

## ArchLinuxARMのインストール(?)

ここでSSH接続してAndroid環境のbashコマンドを使ってもいいのですが、使えるコマンドの数が少し貧弱に感じられたので自分のPCにmicroSDHCをマウントしてそこから作業しました。

まず、sdcard内にarchディレクトリを作ります。これがArchLinuxのファイルシステムになります。

```bash

 # cd /run/media/yantene/microsdhc
 # mkdir arch
```

次に、ddコマンドで仮想イメージファイルを作り、ext4でフォーマットします。このサイズがArchLinuxのファイルシステムの容量となるので、色々とインストールする予定であれば大きめに取ったほうがいいでしょう。自分はmicroSDHCのサイズが16GiBだったので、とりあえず12GiBを確保しました。

```bash

 # dd if=/dev/zero of=linux.img bs=1M count=12288
 # mkfs.ext4 -F linux.img
```

さて、ここからはSSH接続かAndroid内の仮想端末からの操作です。SSH接続の方法はここでは割愛します。/dev/loop1というスペシャルファイルを作ったり、それをarch/にマウントしたりするようです。正確なところは自分にもよくわかっていませんが、とりあえず以下のように(汗)

```bash

 # cd /sdcard
 # mknod /dev/loop1 b 7 0
 # losetup /dev/loop1 linux.img
 # mount -t ext4 /dev/loop1 arch/
```

最後に、ArchLinuxARMのファイルシステムを作ります。

```bash

 # cd arch
 # wget http://archlinuxarm.org/os/ArchLinuxARM-armv5te-latest.tar.gz
 # tar xzf ArchLinuxARM-armv5te-latest.tar.gz
 # rm ArchLinuxARM-armv5te-latest.tar.gz
 # mkdir -r /mnt/sdcard
 # cd ..
 # umount /sdcard/arch
 # losetup -d /dev/loop1
 
```

## ArchLinuxARMを起動する

起動スクリプトについては以下のサイトがとても参考になりました。少し手直ししたものの、ほとんど同じです。

[Android+ポケモンキーボードでモバイルLinux環境を作る – ELECTLOGIC](http://strobo.hatenablog.com/entry/20120607/1339065529)

以下のスクリプトを、startarch.shの名前でsdcard/直下に保存してください。(するとやっぱSSH接続のほうが利口だよなあ…)

```bash

perm=$(id|cut -b 5)
if [ "$perm" != "0" ]; then
 echo "This script requires root! Type: su"; exit;
fi

echo "Starting up ArchLinux"

if [ ! -b /dev/loop1 ]; then
 mknod /dev/loop1 b 7 0
fi

losetup /dev/loop1 linux.img
mount -t ext4 /dev/loop1 arch/
cd arch
mount -o bind /dev/ /sdcard/arch/dev
mount -t devpts devpts /sdcard/arch/dev/pts
mount -t proc proc /sdcard/arch/proc
mount -t sysfs sysfs /sdcard/arch/sys
mount -o bind /mnt/sdcard /sdcard/arch/mnt/sdcard

busybox sysctl -w net.ipv4.ip_forward=1
echo "nameserver 129.250.35.250" > /sdcard/arch/etc/resolv.conf
echo "127.0.0.1 localhost" > /sdcard/arch/etc/hosts
echo "Arch is configured that can be accessed from the IP:"
ifconfig eth0
echo " "

PATH_=$PATH
export PATH=$bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:/usr/local/sbin
export USER=root
export HOME=/root
export SHELL=/bin/bash

/system/xbin/busybox chroot . /bin/bash
export PATH=$PATH_
cd ..
umount /sdcard/arch/mnt/sdcard
umount /sdcard/arch/dev/pts
umount /sdcard/arch/dev
umount /sdcard/arch/proc
umount /sdcard/arch/sys
umount /sdcard/arch
losetup -d /dev/loop1

echo "Shutting down ArchLinux"
```

保存したらあとは実行権限をつけて実行します。するとArchLinuxの環境に入れると思います。

```bash

 # chmod +x ./startarch.sh
 # sh ./startarch.sh
```

## とりあえず最低限のセットアップとか

ArchLinuxARMは本家のArchと違って、うれしいことにnet-toolsなど最低限のパッケージはインストールされています。 ところが、なぜかネットに接続できません。数時間悩んだ挙句、やっと理由が分かりました。Androidでネットに接続するにはユーザがAND-PAR-NETに所属している必要があるようです。とりあえず、/etc/groupを編集してrootをand-par-netに所属させます。

```bash

 # echo "and-par-net:x:3003: root" >> /etc/group
```

rootで作業し続けるのもなんだかアレなので、sudoとかをインストールして一般ユーザも作成しましょう。

```bash

 # pacman -Syu
 # pacman -S sudo vim
 # visudo    #wheelがsudoを使えるようにコメントアウトを外してください
 # useradd -m -G wheel,video,audio,and-par-net yantene
 # passwd yantene
 # su yantene
 $ cd
```

## VNCサーバを立ち上げる

さて、あとはXとデスクトップ環境をインストールしてVNCサーバを起動し、Android側のVNCクライアントから接続するだけです。一気に行きましょう。

Desireで動かすという事を考えると、あまり重いデスクトップ環境は使いたくありません。タッチパネルなんでこんな時こそUnityなのかなあとは思いますが、今回は軽くて楽そうなLXDEをインストールすることにします。

```bash

 $ sudo pacman -S xorg-server xorg-xinit xorg-server-utils lxde tigervnc
```

ここで一度tigervncの設定をしておきます。

```bash

 $ vncserver    #パスワードを適当に設定してください
```

一度tigervncを立ち上げると、~/.vnc/内にxstartupというファイルができていると思います。これをvimで開き、以下のように書き換えてください。

```bash

 #!/bin/sh
 /usr/bin/lxsession &
```

そして再度vncserverコマンドを打ち込めば、無事tigervncが立ち上がります。

```bash

 $ vncserver -geometry 800x480
```

## AndroidのVNCクライアントからVNCサーバに接続する

アンドロイドVNCを立ちあげて、以下のように項目を埋めると良いかと思います。

- コネクション名: ArchForDesire(適当に)
- パスワード: tigervncを立ち上げた時に設定したパスワード
- アドレス: localhost
- ポート: 5901
- 色数: 24-bit color (4 bpp)

これで接続ボタンを押し、LXDEデスクトップが表示されれば成功です。menuボタンを長押しでキーボードが表示されます。

なお、Desireの画面の大きさを考えると、入力モードがタッチマウスのままだとクリックミスが多発します。TouchpadがノートPCのタッチパッド感覚で触れるのでお勧めです。

## 感想

なかなか常用しようとすると癖が強くて難しいですが、ブラウザとしてmidoriを入れてネットサーフィン位ならある程度のストレス範囲内ですることができます(^^; …なんか中学時代にPSPのブラウザでネットをしていた頃を思い出しました。

色々やろうと思ったら、ArchLinuxARMについてはRaspberryPiの記事がたくさんあるので、それを参照すると良いかと思います。

なお、記事は割と記憶を頼りに書いた部分も多いので、色々と間違いがある可能性が高いです。

不明な点・気づかれた点に関してもコメント欄でご指摘をよろしくおねがいします。 m(__)m
