0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows 11にHTTP Bootサーバを立てる

Posted at

0. 概要

前回の記事ではPyPXEでPXEサーバを立てましたが、UEFIモードではブートできないという問題がありました。
今回はWindows 11でHTTP Bootサーバを立てて、UEFIモードでブートできるようにします。
前回と同様、Linux等の仮想環境を使わず、Windowsアプリのみで実現します。

HTTP BootするOSは、SPP Custom Downloadから取得したSPP 2024.04.00.00 + Patch Bunlde 2です。私物の ProLiant ML30 Gen10をブートクライアントとして動作確認しました。

作業は以下の流れです。

  1. DHCPDを立てる
  2. HTTPDを立てる
  3. ブートイメージを準備する
  4. ブートクライアントを起動する

余談: HTTP Bootとは?

PXE(DHCP+TFTP)と同様にネットワークブートする技術です。ブートイメージの通信にHTTP(S)を用いる点がPXEと異なります。

1. DHCPDを立てる

isc-dhcp-windowsからWindows版isc-dhcp v4.4.3(dhcpd-v4.4.3-Windows-x64.zip)をありがたくダウンロードさせていただいて、任意のディレクトリに展開します。

コマンドプロンプトで作業します。

> cd extracted-folder
> mkdir var\db
> type nul > var\db\dhcpd.leases
> mkdir var\run
> notepad etc\dhcpd.conf
> type etc\dhcpd.conf
----
option domain-name "example.com";
option domain-name-servers bootsrv.example.com;
default-lease-time 600;
max-lease-time 7200;

authoritative;
option architecture-type code 93 = unsigned integer 16;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.110 192.168.0.119;
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.254;
    
    class "httpclients" {
        match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
        option vendor-class-identifier "HTTPClient";
        filename "http://192.168.0.31/grubx64.efi";
    }
}
----
※Windows11のIPアドレスは 192.168.0.31/24 とします

> sbin\dhcpd -4 -f -d 

実行すると、dhcpdの通信がファイアウォールにブロックされるポップアップ画面がでるため、前回のPythonと同様にアクセス許可します。

2. HTTPDを立てる

nginx: downloadからWindows版nginxをダウンロードして任意のフォルダに展開します。

コマンドプロンプトで作業します。

> cd extracted-folder
> nginx -g "daemon off;"

dhcpdと同様にファイアウォールの許可を行います。

PowerShellコンソールを開いて、HTTPアクセスログを監視します。

> cd extracted-folder
> Get-Content .\log\access.log -Wait

3. ブートイメージを準備する

ISOイメージを準備する

SPP Custom Downloadから取得したSPP 2024.04.00.00 + Patch Bundle 2のISOファイルを準備します。

カーネルとinitrdを準備する

ISOファイルのpxeフォルダから vmlinuzとinitrd.imgを準備します。
配布されているinitrd.imgはファイルが足りないようなので、コミュニティ情報(SPP-2023.03.00.00 PXE issue)を参考に修正してください。

grub2バイナリを準備する

RockyLinuxからEFI版grub2のRPMファイルを取得します。
7-zip File Manager等で展開して grub2.efiを準備します。

grub.cfgを準備する

メモ帳などで準備してください。

grub.cfg
set timeout=5
menuentry 'SPP 2024040002' {
        echo 'Loading kernel ...'
        linuxefi vmlinuz media=net root=/dev/ram0 showopts TYPE=MANUAL AUTOPOWEROFFONUCCESS=no iso1=http://192.168.0.31/SPP-2024.04-00.02.iso iso1mnt=/mnt/bootdevice
        echo 'Loading initrd ...'
        initrdefi fixed_initrd.img
}

ファイルをHTTPコンテンツ用のフォルダに配置する

ISOファイル、vmlinuz、修正したinitrd、grub2.efi、grub.cfgをnginxフォルダのhtmlサブフォルダに置きます。

4. ブートクライアントを起動する

ブートクライアント(HPE ProLiant ML30 Gen10)を起動するとHTTP Bootを試みるタイミングで
DHCPdからIPアドレスとブートEFI URLを取得します。

EFI版grub2をHTTPで取得し、grub.cfgも同様にHTTPで取得します。

grub.cfgに書かれたカーネルとinitrdをHTTPで取得し、SPPのブートが開始します。

5. まとめ

大容量となりがちな仮想マシンを準備することなく、Windows PCをHTTP Bootサーバとできました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?