ブータブルなUSBメモリを作ってみた

4GBで2000円ぐらいのUSBメモリを2つ買ってきて、

  • レスキュー用
    • sshd、fdisk、mkfs.*、shred、tcpdumpとかそのへんのツールが入ってるやつ
  • インストール用

なブータブルなUSBメモリを作ったメモ。

レスキュー用

UNetbootinを使うと、CD用のISOイメージからぺろっとブータブルなUSBメモリが作れる。

なのでまずは中身がubuntu-8.04.1-desktop-amd64.isoなブータブルUSBメモリを作る。

UNetbootinUSBメモリを作った後、isolinuxからsyslinuxへのリネームを忘れずに。

mv syslinux.cfg syslinux.cfg.bak
mv isolinux/isolinux.cfg isolinux/syslinux.cfg
mv isolinux syslinux

これでUSBでブートするとUbuntuインストーラが上がるので、Try Ubuntu without any change to your computerを選択すればUbuntuが起動する。

fdiskとかshredとかは入っているけど、sshdが入ってない。ここでaptitude install openssh-serverしても起動しなおすと消えちゃう。毎回installするのはめんどいしネットワークが使えないとsshdが入れられないのはまずい。

でどうするかというと、LiveCD用の仕組みで、変更をUSBとかに記録しておくのがあるので、これをブータブルUSBメモリでも使えばOK。

まず、UNetbootinでISOをコピーする前に、予めパーティションを切っておく。

  • sdb1 800MB
  • sdb2 残り全部

な感じで。

で、sdb1 にUNetbootinでISOをコピってマウントして、

のinstall_usb.shを参考に、syslinux.cfgをいじってブートパラメータに「persistent」を追加する。あと、initrd.gzの中のscripts/casperから,mode=755の部分を削除する。

sdb2のファイルシステムLinuxでネイティブで使えるやつにすればOK。ext2, ext3, xfs, reiserfsとか。キモは、ラベルを「casper-rw」にすること。なんでもいいわけじゃなくこのラベルにしないとだめ。自分はext2にしたので、

mkfs.ext2 -L casper-rw /dev/sdb2
とか、mkfs済みなら
tune2fs -L casper-rw /dev/sdb2

な感じで。詳しくは前出のUbuntu Weekly Recipeを参照のこと。

これでaptitude installとかしたものはsdb2に書き込まれるので、次に起動したときもちゃんと残ってる。あとXは起動しなくていいので/etc/rc2.dからgdmを削除したりもろもろの調整をやっておく。

インストール用

最初、 UNetbootinubuntu-8.04.1-server-amd64.iso をUSBメモリにコピってみたんですが、インストーラは立ち上がりいけるかと思いきや、途中で cdrom が見つからないと泣かれたり、手動でmountしようと思ったらこの時点ではisofsとfatのドライバしかないとか、fatでmountしたらシンボリックリンクがただのファイルになってるとか長いファイル名がちょんぎれてるとか、なんかそんなこんなでインストールできず。

結局、

を参考に、またパーティションを2つ切って、sdb1には

zcat boot.img.gz > /dev/sdb1

で書き込んで、sdb2はext2とかでmkfsして、ごろっとubuntu-8.04.1-server-amd64.isoのファイル1個だけをコピーしておいた。

hd-media/boot.img.gzに収録されているインストーラは、他のパーティションにある*.isoなファイルをみつけてインストールを開始するので、このUSBメモリがあればネットワーク要らずでUbuntu Server Editionがインストールできます。

が、インストールされたカーネル関係がのきなみ-genericだったので、あとで手動で-serverなのに入れ替えました。