iPod NanoにLinuxをインストールする
現在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 LoaderとiPod 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/sdbCommand (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): 104Command (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): pDisk /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): pDisk /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を手に入れたのだから。