Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

iPod NanoにLinuxをインストールする

2006年04月10日 11:08 Joe-Barr(2006年4月6日(木))
最近、贈り物にiPod Nanoをもらった。1GBモデルの驚くほど小さなボディーからヘッドホンを通してすばらしい音が聞こえてくる。ほどなく、iPodにLinuxを入れている仲間のことを知った。iPodLinux Projectのおかげで、2年前からこうした動きが続いているようだ。とはいえ、Nanoおよび第4、第5世代iPodのためのソフトウェアはまだ実験段階のもので、本稿の内容は執筆時点の最新情報に基づいている。また、ご存知ないだろうが、私の環境では、デスクトップPCからワークステーション、ノートPC、Tivo、ルータにまでLinuxが入っている。だから、iPod NanoにもLinuxを載せなければならなかったのだ。以下では、私のiPod NanoがどのようにしてMP3再生とiDoomプレイの偉大なデュアルブート仕様に生まれ変わったかを報告する。

現在iPod Nanoに入っている音楽は、この変更が終わる頃にはすっかり消えているので、始める前にバックアップをとっておこう。実際、何か失敗をやらかしてiPod NanoをiPod Updaterで元の状態に戻さざるを得なくなる場合に備えて、Apple iPodインストールCDを用意してMacかWindows PCにすぐアクセスできるようにしておくことをお勧めする。私の場合は、うまく行くまでに何度かスクラッチからやり直した。なお、以降の手順はiPod Nano用のものであって、ほかのiPod機種ではうまく行かないことに注意してほしい。iPodの全機種についてのインストール手順はiPodLinuxプロジェクトWikiにあるので、必要ならそちらを参照すること。

最後に、大事な注意点を1つ。本稿に書かれたすべてのコマンドは、私と同じPC環境を想定して書かれている。システムによっては、デバイスやマウントポイント、ディレクトリを変える必要があるかもしれない。決して「本稿に載せてあるコマンドを単純にコピーペーストして使わないように」お願いしておく。

準備

iPod Nanoへの作業を始める前に、インストール元のLinux PCで少し準備をしておこう。手際よく進めるために、インストール作業中はスーパーユーザモードにしておく。まずは、# mkdir iplinstallを実行して作業用のディレクトリを作る。

次に、iPodLinux Projectのサイトに行き、nightly buildからカーネルと、iPodLinux用のユーザインターフェイスであるpodzillaをダウンロードする。さらに、SourceForgeのiPodLinuxのプロジェクトページからiPod Boot LoaderiPod Linux Userlandもダウンロードして、先に作成したiplinstallディレクトリに保存する。iPod Boot LoaderはiPodLinuxをiPod Nanoにインストールして起動するために必要で、iPod Linux UserlandはiPodLinuxの実行に必要なすべての実行ファイルが置かれたLinuxファイルシステムを提供するものだ。

必要なファイルのダウンロードが終わったら、nightly buildのカーネルとpodzillaを展開する。ただし、ファイルシステムのtarball(iPod Linux Userland)だけはそのままにしておく。このtarballを展開するのは、iPod側の準備ができてからだ。次に、iPod Nanoの現在のマスターブートレコード(MBR)とブートパーティションのバックアップを取ろう。iPod Nanoをディスクモードで起動した後、USBケーブルでPCと接続する。iPod Nanoが私の場合と同じデバイス(/dev/sda、/dev/sdb、/deb/sdc)で認識される保証はないので、どのデバイスになっているかをマウントの度に必ず確認すること。それには、次のように、オプションを指定せずにmountコマンドを実行すればよい。

# mount
/dev/hda1 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
/sys on /sys type sysfs (rw)
varrun on /var/run type tmpfs (rw)
varlock on /var/lock type tmpfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
devshm on /dev/shm type tmpfs (rw)
/dev/sda1 on /backup type ext2 (rw)
/dev/hdb1 on /home type ext3 (rw)
tmpfs on /lib/modules/2.6.15-19-386/volatile type tmpfs (rw,mode=0755)
/dev/sdb2 on /media/ipod type vfat (rw,nosuid,nodev,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8)

ご覧のように、これでiPod Nanoが/deb/sdb2として認識され、Ubuntuによって/media/ipodにマウントされた。こうした作業ではディストリビューションが独自のパスを選ぶので、環境によってマウントの形式が変わるかもしれない。

MBRとブートパーティションのコピーを作るのは簡単で、次の2つのコマンドを入力するだけだ。

# dd if=/dev/sdb of=ipod_boot_sector_backup bs=512 count=1
# dd if=/dev/sdb1 of=ipod_os_partition_backup
確認事項

先へと進む前に、準備が整っているかどうか確認しておこう。インストールディレクトリの中身は次のようになっているはずだ。

# ls -al
total 84364
drwxr-xr-x  2 warthawg warthawg     4096 2006-03-23 14:08 .
drwxr-xr-x 57 warthawg warthawg     4096 2006-03-23 13:51 ..
-rw-r--r--  1 warthawg warthawg  1650596 2006-03-23 13:14 2006-03-22-kernel.bin
-rw-r--r--  1 warthawg warthawg   821824 2006-03-23 13:14 2006-03-22-podzilla
-rw-r--r--  1 root     root          512 2006-03-23 14:07 ipod_boot_sector_backup
-rw-r--r--  1 warthawg warthawg  1578270 2006-03-23 13:17 ipod_fs_240206.tar.gz
-rw-r--r--  1 root     root     82220544 2006-03-23 14:08 ipod_os_partition_backup

カーネル、podzilla、ファイルシステム、そして2つのiPodバックアップファイルが入っている。これで準備は整った。

iPod Nanoのパーティションを切り直す

工場出荷時の状態ではiPod Nanoにパーティションが2つ存在する。それぞれのパーティションのシリンダ数は10と114だ。iPod Nanoがまだマウントされている状態なら、umountコマンドを使ってアンマウントしておこう。私の環境であれば、次のようになる。

umount /media/ipod

詳細を調べるためにfdiskを立ち上げ、pコマンドを使って既存のパーティションテーブルを表示させてみよう。

# fdisk /dev/sdb

Command (m for help): p

Disk /dev/sdb: 1023 MB, 1023933952 bytes 255 heads, 63 sectors/track, 124 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/sdb1 1 10 80293+ 0 Empty /dev/sdb2 11 124 915705 b W95 FAT32

予想どおりの結果だ。続いてdコマンドを実行し、パーティションを訊かれたら2を指定して、2番目のパーティションを削除する。それが終わったら、先ほどよりシリンダ数の減らしてパーティションを作り直すとしよう。以下に示すのは、私がパーティションを再作成した際のfdisk実行の様子だ。

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-124, default 1): 11
Last cylinder or +size or +sizeM or +sizeK (11-124, default 124): 104

Command (m for help): p

Disk /dev/sdb: 1023 MB, 1023933952 bytes 255 heads, 63 sectors/track, 124 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/sdb1 1 10 80293+ 0 Empty /dev/sdb2 11 104 755055 83 Linux

パーティションどうしが重複しないように注意すること。fdiskは重複を避けてくれたり、適切な開始位置を教えてくれるほど賢くはない。2番目のパーティションの開始シリンダは、最初のシリンダの終了シリンダに1を加えた値にする。上記のように、最初のパーティションはシリンダ番号10で終わり、2番目のパーティションは11から始まっている。この部分は変更前と同じだ。しかし、2番目のパーティションの終了位置は124ではなく104に変わっている。その分、これから作るLinuxパーティションには多くの領域が使えるわけだ。

Linuxパーティションを作成する前に、やっておくことが2つある。2番目のパーティションをFAT形式に変更するのと、パーティションを2つともブート可能にすることだ。形式を変更するには、fdiskのtコマンドを実行してパーティション2を指定し、新しい形式としてbを入力する。両方のパーティションをブート可能にするには、aコマンドを実行して、パーティション1を指定する。続いて、パーティション2についても同じことを行う。すると、パーティションテーブルは次のようになるはずだ。

Command (m for help): p

Disk /dev/sdb: 1023 MB, 1023933952 bytes 255 heads, 63 sectors/track, 124 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/sdb1 * 1 10 80293+ 0 Empty /dev/sdb2 * 11 104 755055 b W95 FAT32

パーティションテーブルが上記のようになっていれば、次の作業に進むことができる。このようになっていない場合は、2番目のパーティションの削除および作成をやり直してからFAT形式に変更し、両パーティションをブート可能にする。

では、Linuxパーティションの作成に入ろう。nコマンドを実行し、プライマリパーティション(基本区画)のpと、パーティション番号の3を指定する。開始シリンダは105にするが、終了シリンダはデフォルトの124で構わない。うまく行っていれば、次のようになるはずだ。

Command (m for help): p

Disk /dev/sdb: 1023 MB, 1023933952 bytes 255 heads, 63 sectors/track, 124 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/sdb1 * 1 10 80293+ 0 Empty /dev/sdb2 * 11 104 755055 b W95 FAT32 /dev/sdb3 105 124 160650 83 Linux

2番目のパーティションと重複していないか、もう一度確認する。問題がなければ、wコマンドを使って新しいパーティションテーブルをディスクに書き込む。書き込みが終わったらfdiskは自動的に終了する。ここで、次のようにしてiPod Nanoのアンマウントと取り外しを行う。

# umount /media/ipod
# eject /dev/sdb

すると、iPod Nanoが再起動される。この再起動によってiPod Nanoはマウントし直されることになる。iPod Nanoがマウントされた状態になっていることを再度確認したら、どのデバイスで認識されたか調べておこう。

私の環境でmountコマンドを実行すると、次のように/deb/sdbに2つのパーティションの存在が確認できる。sdb2がFATパーティション、sdb3がLinux(ext2)パーティションになっているのがわかる。

# mount
/dev/hda1 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
/sys on /sys type sysfs (rw)
varrun on /var/run type tmpfs (rw)
varlock on /var/lock type tmpfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
devshm on /dev/shm type tmpfs (rw)
/dev/sda1 on /backup type ext2 (rw)
/dev/hdb1 on /home type ext3 (rw)
tmpfs on /lib/modules/2.6.15-19-386/volatile type tmpfs (rw,mode=0755)
/dev/sdb3 on /media/ipod type ext2 (rw,nosuid,nodev)
/dev/sdb2 on /media/ipod-1 type vfat (rw,nosuid,nodev,quiet,shortname=mixed,uid=1000,gid=1000,umask=077,iocharset=utf8)

今度は、これらのパーティションにファイルシステムを作成しよう。sdb2をアンマウントし、そこにFATのファイルシステムを作成するには、次のようにすればよい。

# umount /media/ipod-1
# mkdosfs -F 32 /dev/sdb2

続いて、次のように実行して、sdb3をアンマウントし、そこにext2ファイルシステムを作成する。

# umount /media/ipod
# mke2fs /dev/sdb3

最後に、次のようにしてLinuxパーティションの自動チェックをオフにする。

# tune2fs -c 0 /dev/sdb3
tune2fs 1.38 (30-Jun-2005)
Setting maximal mount count to -1

これでパーティションの設定作業は完了だ。

新しいルートイメージの作成とインストール

ここからは、デフォルトでLinuxをロードしてくれる新しいルートイメージの作成を行う。ただし、ブート中に巻き戻し(REVERSE)ボタンを押し続けた場合は、元々インストールされていたApple OSが起動する。既に、iPodLinuxプロジェクトのWebサイトからダウンロードしたiPod Boot Loaderがインストールディレクトリに置いてあるので、次のように入力して展開する。

# tar xzf Ipodloader-20060114.tar.gz

続いて、次の各コマンドを実行する。これらを実行すると、tarによって作成されたばかりの新しいサブディレクトリに移り、その中のファイル2つを親ディレクトリにコピーした後、再びインストールディレクトリに戻ってくることになる。

# cd iploader-20060114
# cp loader.bin ../
# cp make_fw ../
# cd ..

いつものインストールディレクトリに戻ったら、先に作っておいたルートパーティションのバックアップからApple OSを取り出すとしよう。次のコマンドを入力すればよい。

# ./make_fw -o apple_os.bin -e 0 ipod_os_partition_backup

次に行う手順では、Apple OSのバイナリ(今取り出したもの)とLinuxカーネルのバイナリ(以前ダウンロードしたもの)、それに先ほどインストールディレクトリにコピーしたローダのバイナリが必要になる。これら3つを使えば、次のようにして新しいイメージが作成できる。

# ./make_fw -g nano -o my_sw.bin -l 2006-03-22-kernel.bin -i apple_os.bin loader.bin
Generating firmware image compatible with iPod mini, 4g and iPod photo...

新しいイメージができたら、ddコマンドを使ってiPod Nanoにコピーする。

# dd if=my_sw.bin of=/dev/sdb1
13180+1 records in
13180+1 records out
6748508 bytes (6.7 MB) copied, 0.802989 seconds, 8.4 MB/s

Linuxパーティションがマウントされていることを確認する。もしマウントされていなければ、次のようにしてマウントする。

mount -t ext2 /dev/sdb3 /media/ipod

次に、そのパーティションに入り、以前ダウンロードしたファイルシステムの設定を行う。以下は、そのときの様子だ。

# cd /media/ipod
root@desktop:/media/ipod# tar zxpf /home/warthawg/iplinstall/ipod_fs_240206.tar.gz
tar: dev: implausibly old time stamp 1903-12-31 18:00:00
tar: home: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules/2.4.20-uc0/kernel/drivers/ieee1394: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules/2.4.20-uc0/kernel/drivers: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules/2.4.20-uc0/kernel: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules/2.4.20-uc0/pcmcia: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules/2.4.20-uc0: implausibly old time stamp 1903-12-31 18:00:00
tar: lib/modules: implausibly old time stamp 1903-12-31 18:00:00
tar: lib: implausibly old time stamp 1903-12-31 18:00:00
tar: mnt: implausibly old time stamp 1903-12-31 18:00:00
tar: proc: implausibly old time stamp 1903-12-31 18:00:00
tar: var/log: implausibly old time stamp 1903-12-31 18:00:00
tar: var/run: implausibly old time stamp 1903-12-31 18:00:00
tar: var/tmp: implausibly old time stamp 1903-12-31 18:00:00
tar: var/lock: implausibly old time stamp 1903-12-31 18:00:00
tar: var: implausibly old time stamp 1903-12-31 18:00:00

Linuxパーティションでもう1つやることがある。ダウンロードしたファイルシステムに入っていたpodzillaのバージョンを先ほどダウンロードした最新のビルドで置き換え、実行ファイルを作ることだ。

# cd /media/ipod/bin
# mv podzilla podzilla.old
# cp ~/iplinstall/2006-03-22-podzilla podzilla
# chmod +x podzilla

さあ、もう一息だ。何はともあれLinuxパーティションから抜け出して、このパーティションをアンマウントして、iPod Nanoの取り外しを行う。

# cd ~/iplinstall
# umount /media/ipod
# eject /dev/sdb

iPod NanoをUSBケーブルから外したら再起動させてみてほしい。万事うまく行っていれば、そのままLinuxが立ち上がり、podzillaを実行できるはずだ。代わりにApple OSを起動させるには、ブートの間、巻き戻し(REVERSE)ボタンを押していればよい。

これで君も、昨晩の私と同じく、LUGミーティングで注目を集めることができる。何といっても、栄えあるデュアルブート仕様のiPod Nanoを手に入れたのだから。

原文

関連トピック

最終更新:2007年07月01日 19:05