FreeBSDをネットワークからUEFIでブートする

以前書いたブログで「ここに書いてありました」とリンクだけを置いておいたのですがそのリンク先が死亡したようなので、あらためてそのやり方を書きます。parallelsを使ってMacで実験をしました。 この実験では以下の4つのサーバを想定していますが実際には2つだけです。また、実験に用いたFreeBSDのバージョンは12.2-RELEASEです

  1. dhcpdが動くFreeBSD(でなくても良いと思うが多分それが楽)。ネットワーク上に1つだけ。10.1.1.1とする
  2. tftpが動くFreeBSD(でなくても良いと思うが多分それが楽)。 とりあえず1と同じマシンで動かす。
  3. nfsが動いていてFreeBSDのツリーが普通に存在しているFreeBSD(でなくても良いと思うが多分それが楽)。1, 2と同じマシンで動かす
  4. ネットワークブートをさせたい機器(mac addressを 00:1c:42:af:07:57とする)今回はUEFIでの実験ですのでParallelsの仮想マシンを作るときにbootのオプションでUEFIの指定をする必要があります。完全ネットワークブートですからHDDは不要です。

dhcpd.confは以下のように記述をしておきます。 

host test {
hardware ethernet 00:1c:42:af:07:57;
fixed-address 10.1.1.100;
next-server 10.1.1.1;
filename "loader.efi";
option root-path "10.1.1.1:/FreeBSD/";
}

意味ですが、00:1c:42:af:07:57のmac アドレスを持つ機器に 10.1.1.100のIPアドレスを振る。次のサーバは10.1.1.1で(1と同じ)そこからtftpを使ってloader.efiというファイルを読み込み、起動できたらrootのツリーは10.1.1.1:/FreeBSD(1と同じ)だよという意味です。

2のサーバは以下の/etc/inetd.confのコメントを外しtftpbootを使えるようにしておきます。

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot
tftp    dgram   udp6    wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot

 

そして、/etc/rc.confにinetd_enable="YES"を追加しinetdが起動するようにします。

次に mkdir /tfpbootでtftpbootのディレクトリを作成しその下にloader.efiを/boot/loader.efiからコピーして置いておきます。これで2のサーバはokです。

3のサーバは mkdir /FreeBSDとして /etc/exportsに以下のような行を追加して/etc/rc.confにnfs_server_enable="YES"を追加しておきます。

/FreeBSD -maproot=root -alldirs -network 10.1.1.0/24 -ro

/FreeBSDにて kernel.txzとbase.txzを展開しておいておきましょう。

この状態で4のサーバを起動させるとloader.efiを2のサーバより読みこみ10.1.1.1:/FreeBSDをマウントして、起動すると思います。

 

20210902133456png

Posted by issei

カテゴリ: BSD