あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

USBメモリにGRUB2をインストールしてUbuntu Serverのインストールメモリを作る

USBメモリLinuxやらESXiやらのISOイメージを色々ぶっこんでおいて、ブートできたらなんか捗りそうですよね。CD-ROMドライブを持ち歩く必要がなくなるのでコンパクトです(Ejectコマンドユーザー会的にどうなのかみたいな発言)。最近は16GBのメモリが3ケタ円で買えるみたいなすげえ時代なので、インストールをよくやる人はぜひ一本持ち歩くと良いと思います。

前提と小遣い稼ぎリンク

作業環境としてUbuntu Server 14.04 64bit版を使用します。あと、USBメモリUSB3.0対応の16GBのメモリを使用しました。一応参考までに。

シリコンパワー USB3.0フラッシュメモリ 【ドラゴンクエストX動作確認済】 16GB アイシーブルー SP016GBUF3M01V1B

シリコンパワー USB3.0フラッシュメモリ 【ドラゴンクエストX動作確認済】 16GB アイシーブルー SP016GBUF3M01V1B

USBメモリにGRUB2をインストールする

参考ページ: http://tri.dw.land.to/doc/1205290BootableUSB_GRUB.html

USBメモリパーティションに起動フラグを設定します。買ってすぐの状態であれば1パーティションで切られてFATフォーマット済みかと思うので、fdiskで開き、aオプションで起動フラグを立てるだけです。そうでない場合はそうしてください(雑)。

次に作業環境にsyslinuxパッケージをインストールします。

$ sudo apt-get install syslinux

/usr/lib/syslinux/mbr.binをddコマンドでUSBメモリに流し込みます。USBメモリがsdbの場合、以下のようになります。sdb1の用にパーティション番号は付けないようにしてください。

$ sudo dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdb

/dev/sdb1を/mntにマウントして、以下のコマンドを実行します。

$ sudo mount /dev/sdb1 /mnt
$ sudo grub-install --root-directory=/mnt --force /dev/sdb1

/mnt/boot/grub/grub.cfgが生成されるので、設定ファイルの冒頭に以下の行を追加します。なくても起動するサーバーもありますが、私が主に使いたかったHP ProLiant G6世代サーバーではこれがないとダメでした。なんでだ。

insmod part_msdos
insmod fat

これでUSBメモリに素のGRUB2環境ができました。

Ubuntu Serverのメニューを追加する

USBメモリのGRUB2環境にUbuntu Server 14.04 64bitのメニューを追加しましょう。

参考ページ: http://d.hatena.ne.jp/PRiMENON/20120504/1336140490

まず、Ubuntu ServerのISOイメージをUSBメモリのルートディレクトリに放り込みます。

次に、以下のURLに飛んで、initrd.gzとvmlinuzを取得します。もし違うシリーズとアーキテクチャにしたいときはURLを適宜書き換えます。

ftp://ftp.iij.ad.jp/pub/linux/ubuntu/archive/dists/trusty/main/installer-amd64/current/images/hd-media/

取得したファイルを"(USBメモリのルートディレクトリ)/ubuntu-14.04-server-amd64-boot"ディレクトリ下に配置します。

そして、(USBメモリのルートディレクトリ)/boot/grub.grub.cfgに以下の設定を記述します。

menuentry "Ubuntu 14.04 Server AMD64" {
  linux /ubuntu-14.04-server-amd64-boot/vmlinuz quiet noprompt locale=ja_JP.UTF-8 --
  initrd /ubuntu-14.04-server-amd64-boot/initrd.gz
}

これで完成です。マシンにUSBメモリを刺してUSBブートして動作を確認しましょう。

f:id:Akkiesoft:20140724173822j:plain:w400

ちなみに、ISOイメージに関しては何も指定していませんが、インストーラが自動で検索してマウントしてくれます。すごい。

また、preseedファイルを食わせたい場合は以下のように記述できます。USBメモリが/hd-mediaにマウントされるので、それを念頭にパスを指定します。

menuentry "Ubuntu 14.04 Server (My preseed)" {
  linux /ubuntu-14.04-server-amd64-boot/vmlinuz quiet noprompt locale=ja_JP.UTF-8 preseed/file=/hd-media/my-preseed.cfg --
  initrd /ubuntu14.04-server-amd64-boot/initrd.gz
}

ググると海外のサイトが沢山出てきて、ISOイメージ内にあるカーネルファイルを読み込むという内容がほとんどなのですが、ISOイメージにあるインストールカーネルはCD-ROMドライブからインストールする前提で作りこまれたもののため、USBインストール環境では失敗してしまいます。hd-media版のインストールカーネルを使用するのがミソ、ということのようです。うーんこれはハマりました。

シメのひとこと

USBメモリでインストールできるようになると、CD-ROMドライブでギュンギュン回すより高速にインストールできるようになります(PXEはもっと早いですが)。

GRUB2のメニュー画面をカスタマイズして壁紙を表示したりできるっぽいので、痛メニューを作ったりしても面白いかもしれませんね。