EFIブートするUSBメモリでdebianをインストール

概要

  • EFIブートするUSBメモリを作成し、これを使ってdebianをインストールする。
  • 古いXserveをdebian化しようとした中での例。
    • インストールできたものの、うまく起動しない状態で終わってます。多分ドライバ周り・・・。
  • grubを導入したUSBメモリを用意してしまえば、カーネルや初期RAMディスク、ISOイメージを書き換えるだけでよくなる。この作業はUSBメモリのファイルを書き換えるだけなので、debian機は不要。

必要なもの

  • 2GBくらいのUSBメモリ
    • 中身は完全に消える。
  • 母艦となるdebian機
    • VMでも構わないが、USBメモリをmountできないとダメ。

手順

grubの準備

まずは母艦となるdebianでEFI対応のgrubを用意する。インストールしたいアーキテクチャに合わせたものを用意する。今回はx86の64bit版で。

sudo apt-get install grub-efi-x86_64-bin

USBメモリにパーティションを作る。/dev/sdbの部分はUSBメモリのデバイス名を指定する。分からん場合はsudo dmesgとかで調べるべし。

sudo fdisk /dev/sdb

あとはよしなに。FAT32にするのが良い。どんなマシンでもFAT32なら読めるみたいなので(確証なし)。partition IDをbにするとWin95 FAT32になる。

FAT32でフォーマット。-vは詳細表示、-cは不良ブロック精査、-Fは形式。16にすればFAT16になる。

sudo mkfs.vfat -v -c -F 32 /dev/sdb1
  • Q. mkfs.vfatなんてないんだけど。
  • A. dosfstoolsを入れるべし。
    sudo apt-get install dosfstools
    

USBメモリをマウントし、EFIのディレクトリを指定してgrubをUSBメモリに書き込む。

sudo mount /dev/sdb1 /mnt
sudo grub-install —target=x86_64-efi —efi-directory=/mnt —boot-directory=/mnt/boot —no-floppy

ちなみに、Macで起動するためにはEFIの下をboot/bootx64.efiにしないとダメらしい。本当かしらん。まぁ、変更しておくということで。

sudo mv /mnt/efi/boot/grubx64.efi /mnt/efi/boot/bootx64.efi

grub.cfgをboot/grubに作成する。

sudo mkdir -p /mnt/boot/grub
sudo vi /mnt/boot/grub/grub.cfg

grub.cfgはこんな感じ。

# Load Graphical modules
insmod efi_gop
insmod efi_uga

# Load Font module
insmod font


# Setup GFXTERM along with loading unifont.pf2 font file

if loadfont ${prefix}/fonts/unifont.pf2
then
   insmod gfxterm
   set gfxmode="auto"
   set gfxpayload=keep
   terminal_output gfxterm

   set color_normal=light-blue/black
   set color_highlight=light-cyan/blue
fi

insmod part_gpt
insmod part_msdos
insmod fat
insmod ext2

# Timeout for menu
set timeout=5

# Set default boot entry as Entry 0
set default=0

menuentry "Debian Install (expert mode)" {
  set root=(hd0,msdos1)
  linux /boot/vmlinuz root=/dev/sda1 ro video=efifb agp=off priority=low ipv6.disable=1
  initrd /boot/initrd.gz
}
menuentry "Debian Install" {
  set root=(hd0,msdos1)
  linux /boot/vmlinuz root=/dev/sda1 ro video=efifb agp=off ipv6.disable=1
  initrd /boot/initrd.gz
}

これでgrubの準備は完了。

debianインストーラの導入

自分はいつもdebian開発者ページ(?)からインストーラを取得している。 ここで手に入るのはtesting版。だと思う。日次スナップショットはうまく起動しない場合もあるので注意。

「その他のイメージ>インストール先アーキテクチャ>hd-media」とたどる。

ここからvmlinuz(カーネル)とinitrd.gz(初期RAMディスク)を取得する。 また、元のページから「netinst CDイメージ」も取得しておく。

あとはこれを配置するだけ。USBメモリをmountし、以下のように配置する。FAT32でフォーマットしてあるとMacからでもWinからでも配置できるので便利。MacのEFIで読めるのはFATとHFS+とかだった気がするけど定かではない。FAT32なら大丈夫だった。

ファイル 配置場所
netinst CDイメージ(.isoファイル) USBメモリのトップ/
vmlinuz USBメモリのトップ/boot/
initrd.gz USBメモリのトップ/boot/

インストールはどうやるの?

普通にUSBメモリからEFIで起動させればOK。

インストーラでパーティションを切るときに、EFI用のディレクトリを作成しないとダメ。100MBくらいで十分なはずだけど、200MBくらいを確保している。

Windowsが入っているマシンとかに後からdebianを追加するときは、すでにあるEFIシステムパーティションが利用できる。もちろん、WindowsがEFIブートでインストールされていれば、の話だが。