Access from '216.73.216.145'
You are in US.
It is 07:46 JST now.

 

pxe bootシステムとは

ネットワークブートを使用したインストールをネットワークインストールとは全く異なります。
ネットワーク インストールでは、ネットワーク経由でさらにパッケージをダウンロードする前に、CD (または USB フラッシュ メモリなど) を使用して最小限の Linux システムをインストールします。

ネットワーク ブートを使用したインストールは、 既にインストールされているシステムをネットワークを使用してブートすることとも異なります。 この場合、クライアント マシンは今後のブートのたびに稼働しているサーバーに依存したままになります。 たとえば、Linux Terminal Server Project ( LTSP ) はそのように機能します。

このページでは、CD、DVD、USB をまったく使用せずに新しい Debian システムをインストールする方法について説明します。インストール プロセスが完了すると、新しいマシンはサーバーのサポートなしで実行できるようになります。インストール中に、ネットワーク ブート サーバーが必要になります。

基準ブート サーバーは世に出ていないため、独自のブート サーバーをセットアップする必要があります。これは、CD (CD または USB などの略称) から Debian をインストールするよりもかなり複雑です。通常、ネットワーク ブートは、実際に CD からブートする方法がない場合にのみ使用されます。 CD からのブートが失敗する場合は、同様にネットワーク ブートを妨げる BIOS の問題が原因である可能性があります (一般的なトラブルシューティングには、セキュア ブートをオフにする、 UEFI からレガシー ブート モードに切り替えるなどの試行が含まれます)。

Web では、ネットワーク ブート サーバーのセットアップ方法を多かれ少なかれ詳しく説明した記事がいくつか見つかります。 これらはすべて同じ弱点を持っています。起動しようとすると、 手順の最後までにフィードバックを取得することなく、長いリストの命令を実行する必要があります。 それが機能すれば問題ありません。そうしないと、デバッグが非常に困難になります。 したがって、以下では、手順を個別にデバッグできるステップに分割します。

 

http://www.debian.org/releases/stable/amd64/ch04s05  – Debian インストールガイド – 4.5。TFTP ネットブート用のファイルの準備

注: システムが iPXE をサポートしている場合は、netboot.xyz を使用する方がはるかに簡単になる可能性があります。

 

前提条件

インストール先のコンピュータはクライアントと呼ばれます。

インストール元のコンピューターはサーバーと呼ばれます。 サーバーでは Debian が実行されていると仮定します。

具体的には、クライアントとサーバーが次の IP アドレスを持つ LAN の一部であると想定します。

  • 192.168.1.1 ルーター (LAN デフォルト ゲートウェイ) と DNS 再帰サーバー
  • 192.168.1.2 サーバー (DHCP および TFTP サーバーをホストします)
  • 192.168.1.x クライアント

x の値は後でわかります。

 

PXEブートを有効にする

ネットワークからブートするようにクライアントの BIOS ブート メニューをセットアップします。

ほとんどのシステムでは、これにより、クライアントの MAC アドレスを含む出力が生成されます。 その後、それは失敗します

エラーメッセージからMAC アドレスをメモします。ログ メッセージを解釈するのに役立ちます。

多くのサーバーでは、BIOS 設定を永続的に変更せずに、一時的に PXE ブートに切り替えることもできます。 BIOS POST中に何らかのキーストロークを押す必要があります。Dell サーバーでは、 F12 キー (またはシリアルまたは IPMI コンソールから Esc キー、@ キー) で機能します。

 

DHCPサーバーをセットアップする

サーバー上で、DHCP サーバーをセットアップする必要があります。

現在のベストプラクティスは、デーモンdhcpdを提供するパッケージisc-dhcp-serverを使用することのようです。

その構成ファイルは/etc/dhcp/dhcpd.confです。このファイルを変更して、 次の内容を含めます。IP アドレスと MAC アドレスをローカルのニーズに合わせて調整します。

 

default-lease-time 600;
max-lease-time 7200;

allow booting;

# in this example, we serve DHCP requests from 192.168.1.(3 to 253)
# and we have a router at 192.168.1.1
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.3 192.168.1.253;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;             # our router
  option domain-name-servers 192.168.1.1; # our router has DNS functionality
  next-server 192.168.1.2;                # our Server
  filename "pxelinux.0"; # setting a default, might be wrong for "non defaults"
}

group {
  next-server 192.168.1.2;                # our Server
  host tftpclient {
    # attempt to provide better match for architecture and bootfile
    if option architecture-type = 00:07 {
      filename "debian-installer/amd64/bootnetx64.efi";
    } else {
      filename "pxelinux.0";
    }
  }
}

上記を変更するたびに、次のコマンドを使用して DHCP サーバーを再起動します。

# systemctl restart isc-dhcp-server

実際に実行されていることを確認します。

# systemctl status isc-dhcp-server

これにより、もう少し詳しい情報が得られます。

クライアントを再起動する前に、次のコマンドを実行するとよいでしょう。

# journalctl -fu isc-dhcp-server

これにより、DHCP サーバー ログの最後の数行が表示され、 新しいログ エントリが表示されるたびに画面が更新されます。 (ログを「追跡」したくない場合は、「f」を省略してください)

クライアントを再起動します。 成功すると、サーバー (「DHCP」)、ルーター (「ゲートウェイ」)、 およびルーター自体 (192.168.1.x) の IP アドレスが出力されます。

同時に、サーバー画面には、次の代替コマンドの出力と同様の DHCP リクエストとオファーを示すログ メッセージが表示されます。

systemd を使用したくない場合、または診断目的で従来のログ出力を比較したい場合は、 たとえば次のコマンドを使用して /var/log/syslog を検索できます。

  # grep DHCP /var/log/syslog
  • 次のようなものが表示されるはずです。

 

Jun  3 09:53:46 server dhcpd: DHCPDISCOVER from 40:01:1c:47:44:1e via eth0
Jun  3 09:53:47 server dhcpd: DHCPOFFER on 192.168.1.3 to 40:01:1c:47:44:1e via eth0
Jun  3 09:53:51 server dhcpd: DHCPREQUEST for 192.168.1.3 (192.168.1.2) from 40:01:1c:47:44:1e via eth0
Jun  3 09:53:51 server dhcpd: DHCPACK on 192.168.1.3 to 40:01:1c:47:44:1e via eth0

 

(以前の Debian リリースでは、syslog の代わりに /var/log/daemon.log が使用されていたことに注意してください)

どちらのコマンドを使用してもログに何も表示されない場合は、 サーバーとクライアント間のネットワーク リンクを確認してください。 一部のネットワーク スイッチでは、DHCP トラフィックに厳しい制限が課される場合があることに注意してください。 Cisco の場合は、可能であれば「portfast」を使用してください(http://www.cisco.com/en/US/products/hw/switches/ps708/products_tech_note09186a00800b1500.shtmlを参照)。

 

TFTPサーバーをセットアップする

次に、サーバー上に TFTP サーバーをセットアップする必要があります。

繰り返しになりますが、TFTP (安全ではない、LAN のみで使用される単純な FTP) を提供するパッケージがいくつかあります。 TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"

上記の設定ファイルを変更するたびに、次のコマンドを使用して TFTP サーバーを再起動します。

 # systemctl restart tftpd-hpa

実際に実行されていることを確認します。

 
  # systemctl status tftpd-hpa

これでも、タスクが実行中である (実行されていない) という事実だけではなく、数行のログが表示されます。

TFTP クライアントを使用して TFTP サーバーをテストすると便利です。この目的には、単純にtftp-hpa パッケージを使用できます。

  # cd /tmp
  # uname -a >/srv/tftp/test
  # tftp 192.168.1.2
  tftp> get test
  tftp> quit
  # diff test /srv/tftp/test
  (nothing, they are identical)

存在するファイルをダウンロードした場合と、存在しないファイルをダウンロードしようとした場合に、 どのようなログ エントリが取得されるかを確認することも役に立ちます。tftp を使用して tftpd サーバーをテストする際、TFTP クライアントを使用して存在するファイルと 存在しないファイルをダウンロードしながら、古い形式と新しい形式の log コマンドを使用して実験を追跡してみてください。

 

ブートイメージを提供する

Debian ミラーからnetboot/netboot.tar.gzをダウンロードします( http://www.debian.org/distrib/netinst#netboot を参照)。

initrd.gz にファームウェアを追加するには、https: //wiki.debian.org/DebianInstaller/NetbootFirmwareを参照してください。

オプション: デジタル署名を検証するには、次のコマンドを入力します。

# export YOURMIRROR=deb.debian.org # A CDN backed by cloudflare and fastly currently
# export ARCH=amd64
# export DIST=stable
# wget http://"$YOURMIRROR"/debian/dists/$DIST/main/installer-"$ARCH"/current/images/netboot/netboot.tar.gz
# wget http://"$YOURMIRROR"/debian/dists/$DIST/main/installer-"$ARCH"/current/images/SHA256SUMS
# wget http://"$YOURMIRROR"/debian/dists/$DIST/Release
# wget http://"$YOURMIRROR"/debian/dists/$DIST/Release.gpg
# sha256sum -c <(awk '/netboot\/netboot.tar.gz/{print $1 " netboot.tar.gz"}' SHA256SUMS)
#
# Must print: netboot.tar.gz: OK


# sha256sum -c <(awk '/[a-f0-9]{64}[[:space:]].*main\/installer-'$ARCH'\/current\/images\/SHA256SUMS/{print $1 " SHA256SUMS"}' Release)

# 
# Must print `SHA256SUMS: OK`

# gpg --verify Release.gpg Release
gpg: WARNING: multiple signatures detected.  Only the first will be checked.
gpg: Signature made Sat 15 Jun 2013 05:55:56 AM CDT using RSA key ID 473041FA
gpg: Good signature from "Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>"

  debian-installer/
  pxelinux.0@
  pxelinux.cfg@
  version.info

このディレクトリ内のすべてのファイルを TFTP デーモンが読み取りできるようにするには、 chmod -R a+r *が必要になる場合があります。

UEFI で起動している場合は、grub と grubx64.efi を tftp ディレクトリのルートにリンクする必要があります。

# cd /srv/tftp # ln -s debian-installer/amd64/grubx64.efi 。 # ln -s debian-installer/amd64/grub 。

必要に応じて、シリアル コンソールを設定するために grub/grub.cfg を編集する必要がある場合もあります (グラフィカル ターミナルに関するセクションを置き換えました)。

serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1
terminal_input console serial
terminal_output console serial

これをカーネル コマンド ラインに追加することで、debian-installer のシリアル コンソールと同様に、

TFTP デーモンを再起動し、表示されるログ エントリを再度追跡します。

  # tail -f /var/log/syslog

歴史的メモ: /var/log/syslog は Jessie に適しています。以前の Debian バージョンでは、 これが機能しないように見える場合は、/var/log/daemon.log も試してください。

次にクライアントを再起動します。Debian のインストール画面が表示されるはずです。

/var/log/syslog を調べると、PXE ブートローダー、次に SYSLINUX によって TFTP サーバーからダウンロードされたものがわかります。また、SYSLINUX が存在しないファイルを要求したときに、「NAK」応答が表示される場合もあります (いくつかの重要なファイルについては、いくつかの場所が試行されます)。

Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.0 to 192.168.1.3:2070
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.0 to 192.168.1.3:2071
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/44454c4c-5600-1048-8051-c7c04f575831 to 192.168.1.3:57089
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/40-01-b1-1c-47-44-1e to 192.168.1.3:57090
Jun  3 09:53:51 server tftpd.in[32698]: Serving pxelinux.cfg/default to 192.168.1.3:57090
Jun  3 09:53:51 server tftpd.in[32698]: Serving bootmenu.txt to 192.168.1.3:57095

PXE ローダー (BIOS 内のファームウェアまたはクライアントのネットワーク コントローラー) は、 次の順序でロードを試行します。

  • pxelinux.0 (より正確には、DHCP 応答の「ファイル名」 フィールドでダウンロードするように指示したもの)

次に、SYSLINUX/PXELINUX は、最も具体的なパスから最も具体的なパスまで、 さまざまなパスでその構成を検索しようとします。

  • pxelinux.cfg/GUID
  • pxelinux.cfg/MAC
  • pxelinux.cfg/デフォルト

また、設定メニューが他の設定項目に依存している場合は、それらもダウンロードされます。 Debian には少なくともメイン メニューである「bootmenu.txt」ファイルが必要です。

デフォルトでは、グラフィカルな Debian インストール スタート メニュー画面が表示されます。 「Enter」を押してインストールを開始します。しばらくお待ちください。次の画面 (「言語の選択」) が表示されるまでに 1 分以上かかる場合があります。

 

ブート イメージを取得する別の方法

インストールするのと同じリリースの Debian システムがある場合は、apt を使用してブート イメージをインストールできます。

 

VERSION=8 # jessie, 7.0 for wheezy
ARCH=amd64 # or any other release architecture
apt-get install debian-installer-$VERSION-netboot-$ARCH

次に、tftp サーバーを/usr/lib/debian-installer/images/$VERSION/$ARCH/$INTERFACE に指定します。ここで、テキスト モード インストーラーの場合はINTERFACE=text 、 グラフィカル インストーラーの場合はINTERFACE=gtkです。 これを実現する簡単な方法は、/srv/tftp を シンボリック リンクに変えることです。

 

簡単な方法 - Dnsmasq を使用する

dnsmasqは、軽量で構成が簡単な DNS フォワーダーおよび BOOTP/TFTP/PXE 機能を備えた DHCP サーバーです。 つまり、isc-dhcp-serverとtftpd-hpa をDnsmasq に置き換えることができます。

以下は、上で説明した isc-dhcpd-server および tftpd-hpa のインストールおよび 構成方法と同じ機能を提供する /etc/dnsmasq.conf です。

 

interface=eth1
domain=yourdomain.com
dhcp-range=192.168.1.3,192.168.1.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.1.2
enable-tftp
tftp-root=/srv/tftp
pxe-service=x86PC, "PXELINUX (BIOS)", "pxelinux.0"
pxe-service=X86-64_EFI,"PXE (UEFI)","grubx64.efi"

# other UEFI type identifier, see RFC4578 section-2.1

pxe-service=2, "PXELINUX (0002-EFI)", "grubx64.efi"
pxe-service=6, "PXELINUX (0006-EFI)", "grubx64.efi"
pxe-service=7, "PXELINUX (0007-EFI)", "grubx64.efi"
pxe-service=8, "PXELINUX (0008-EFI)", "grubx64.efi"
pxe-service=9, "PXELINUX (0009-EFI)", "grubx64.efi"

 

netboot.tar.gz をダウンロードし、前の説明または Bookworm の場合のように /srv/tftp に解凍します。

 

cd /srv/
mkdir tftp
cd /srv/tftp
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar -xzvf netboot.tar.gz
rm netboot.tar.gz
ln -s debian-installer/amd64/grubx64.efi .
ln -s debian-installer/amd64/grub .

initrd.gz にファームウェアを追加するには、http://www.debian.org/releases/stable/amd64/ch04s05

dnsmasq を再起動します。

 

systemctl restart dnsmasq

 

潜在的な問題

ネットブート イメージ内のカーネルがカーネル モジュール パッケージと同期していない場合、 モジュールはロードされず、インストールは失敗します。通常の症状として、ctrl-alt-f4 コンソールに 「シンボルが欠落している」というメッセージが表示されます。

これを修正するには、ネットブート サーバー上のカーネルと initrd を更新します。

これに関してはおそらく Debian BTS の問題が未解決ですが、今のところ見つかりません。