「Preboot Execution Environment」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(序文を更新)
 
(3人の利用者による、間の18版が非表示)
2行目: 2行目:
 
[[Category:ネットワーク]]
 
[[Category:ネットワーク]]
 
[[Category:ブートプロセス]]
 
[[Category:ブートプロセス]]
  +
[[en:Preboot Execution Environment]]
[[en:PXE]]
 
 
[[es:PXE]]
 
[[es:PXE]]
 
[[fr:Install PXE]]
 
[[fr:Install PXE]]
[[ru:Install Arch from network via PXE]]
+
[[ru:PXE]]
[[zh-cn:PXE]]
+
[[zh-hans:PXE]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ディスクレスシステム}}
 
{{Related|ディスクレスシステム}}
 
{{Related articles end}}
 
{{Related articles end}}
 
[[Wikipedia:ja:Preboot Execution Environment]] より:
 
[[Wikipedia:ja:Preboot Execution Environment]] より:
:''Preboot eXecution Environment (PXE, 又の名を Pre-Execution Environment, "ピクシー"も呼ばれる) (ハドディスなどの) データスレージデバイスやインールされたオペレーティグシステムから独立してネットワークインターフェイスを使ってコンピュタを起動る環境。''
+
:''Preboot eXecution Environment (PXEピクシーと発音されることが多い) 仕様では、ネットワークから取得したソフウェア アセンブリを PXE 対応クラント上で起動する、標準化されたクライアト/サーバー環境につい説明します。クライアント側では、PXE 対応のネットワーク インターフェイス コントロラー (NIC) のみが必要で、DHCP や TFTP などの業界標準のネットワーク プロトコルの少数のセットが使用されます。''
   
このガイドでは、PXE を使って対象のマシンで PXE をサポートするオプション ROM でインストールメディアを起動します。
+
このガイドでは、PXE を使って対象のマシンで PXE をサポートするオプション ROM でインストールメディアを起動します。既にサーバーをセットアップ済みでも上手く行くはずです。
   
 
== 準備 ==
 
== 準備 ==
   
  +
=== 概要 ===
[https://www.archlinux.org/download/ こちら]から最新の公式インストールメディアをダウンロードしてください。
 
   
  +
[[#サーバーのセットアップ]]、クライアント側の[[#インストール]]、および必要な Arch Linux ファイルを理解するために、PXE ブートプロセスの概要を説明することは有用です。
そしてイメージをマウントします:
 
   
  +
クライアントは、特定の PXE オプションを含む DHCP サーバーを求めるパケットをブロードキャストすることから始まります。DHCP サーバーは、クライアントに割り当てられた IP アドレスなどのネットワーク情報で応答し、特定の [[Wikipedia:Bootstrap Protocol|ブートストラッププロトコル (BOOTP)]] パラメーターを使用して、TFTP サーバーのアドレス、ダウンロードする初期ネットワークブートプログラム (NBP) のパス、またはブート構成ファイル名などの追加情報を提供します。
{{bc|1=
 
  +
# mkdir -p /mnt/archiso
 
  +
NBP は TFTP を使用して PXE サーバーからクライアントに転送され、メモリにロードされて実行されます。カーネルと initramfs もこの方法で転送されます。
# mount -o loop,ro archlinux-2013.11.01-dual.iso /mnt/archiso}}
 
  +
  +
その後、ルートファイルシステムは HTTP、NFS、または NBD のいずれかのプロトコルを使用して転送されます。
  +
  +
{{Warning|[[PXELINUX]] には、受信したもの (TFTP または HTTP 経由) が予期されたものであるかどうかを検証するためのセキュリティメカニズムはサポートされていません。詳細は [[RFC:5071#section-8|RFC 5071 セクション 8]] を参照してください。代替手段として、iPXE バイナリに埋め込まれたコード署名証明書に対して署名を[https://ipxe.org/cmd/imgverify 検証]できる [[Netboot]] イメージを使用することができます。Netboot イメージはローカルシステムに配置する必要があることに注意してください。}}
  +
  +
=== インストールメディアからのブート ===
  +
  +
サーバーからクライアントに転送されるファイルを収集するために、[https://archlinux.org/download/ ダウンロードページ] から最新の公式インストールイメージを取得します。
  +
  +
次に、イメージをマウントします:
  +
  +
# mount --mkdir -o loop,ro archlinux-''release_date''-x86_64.iso /mnt/archiso
  +
  +
ここで、{{ic|''release_date''}} は ISO ファイル名のリリース日です。例:{{ic|2022.10.01}}。
  +
  +
{{Note|Arch ISO は現在、'''BIOS''' スタイルの PXE ブートのみをサポートしています。詳細は {{Issue|archlinux/archiso|55}} を参照してください。}}
  +
  +
=== ネットブートからのブート ===
  +
  +
Arch Linux [[netboot]] イメージを使用して、システムブート時に最新の Arch Linux リリースをオンザフライでダウンロードできます。構成に適したイメージをダウンロードします。
  +
  +
{{Note|Arch netboot は '''BIOS''' と '''UEFI''' の両方のブートをサポートしています。}}
  +
  +
== Pixiecore ==
  +
  +
[https://github.com/danderson/netboot/tree/master/pixiecore pixiecore] によって提供されるオールインワンソリューションです。
  +
  +
# {{AUR|pixiecore-git}} をインストールする
  +
# root として {{ic|pixiecore quick arch --dhcp-no-bind}} を実行する
  +
# PXE 経由でブートする
   
 
== サーバーのセットアップ ==
 
== サーバーのセットアップ ==
41行目: 71行目:
 
インストール先でネットワークを設定して PXE サーバーとクライアント間のファイルの転送を楽にするには DHCP と TFTP 両方のサーバーが必要です。dnsmasq がその両方とも備えており、とても簡単にセットアップできます。
 
インストール先でネットワークを設定して PXE サーバーとクライアント間のファイルの転送を楽にするには DHCP と TFTP 両方のサーバーが必要です。dnsmasq がその両方とも備えており、とても簡単にセットアップできます。
   
[[公式リポジトリ]]から {{pkg|dnsmasq}} を[[インストール]]してください
+
{{pkg|dnsmasq}} パッケージを[[インストール]]します
   
  +
''dnsmasq'' の設定が必要です。[[dnsmasq#TFTP サーバー]] と [[dnsmasq#PXE サーバー]] のセットアップ方法についての指示を参照してください。
dnsmasq を設定:
 
  +
  +
以下に一般的な設定手順を示します。''tftp_root'' は Arch ISO がマウントされているディレクトリ (例:{{ic|/mnt/archiso}}) またはネットワークブートプログラムが配置されている場所です。
  +
  +
{{hc|# /etc/dnsmasq.conf|2=
  +
# 指定されたインターフェースのみをリッスンする
  +
interface=''eth0''
  +
  +
# DNS サーバーとして機能しない
  +
port=0
  +
  +
# TFTP サーバーの設定
  +
enable-tftp
  +
tftp-root=''tftp_root''
  +
  +
# DHCP トランザクションに関する追加情報をログに記録する (デバッグ目的)
  +
log-dhcp
  +
}}
  +
  +
DHCP サーバーを有効にし、範囲内の IPv4 アドレスを提供するには、設定ファイルに以下のような行を追加します:
  +
  +
dhcp-range=192.168.0.50,192.168.0.150
  +
  +
または、ネットワーク上に既に DHCP サーバーが稼働しており、それと連携したい場合は、[[dnsmasq#プロキシ DHCP]] を参照してください。
  +
  +
異なるブートスタイルとインストールメディアをカバーする2つの例を以下に示します。
  +
  +
必要に応じて設定したら、{{ic|dnsmasq.service}} を[[開始]]します。
  +
  +
==== インストールメディアからの BIOS ブート ====
  +
  +
転送される初期ブートストラッププログラムのパスは、設定ファイルの {{ic|1=dhcp-boot}} オプションで定義されます。
  +
  +
dhcp-boot=/boot/syslinux/lpxelinux.0
  +
  +
設定ファイルパスのような特定の [https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml ''ブート''ストラップ ''プロトコル (BOOTP) パラメーター''] を送信するために、{{ic|1=dhcp-option-force=''flag'',''value''}} 行が使用されます。
  +
  +
dhcp-option-force=209,archiso_pxe.cfg # このファイルは /mnt/archiso/boot/syslinux にあるかもしれません
  +
dhcp-option-force=210,
  +
  +
==== ネットブートからの UEFI ブート ====
  +
  +
アーキテクチャに応じてファイルを送信するには、ここでは UEFI スタイルのブート用のネットブートイメージを使用します:
  +
  +
pxe-service=BC_EFI, "Boot from network BC EFI", ipxe.efi
  +
pxe-service=X86-64_EFI, "Boot from network X86-64 EFI", ipxe.efi
  +
  +
ネットブートを使用する場合、Arch ISO に焦点を当てたサーバーセットアップセクションの残りの部分は適用されません。
   
 
{{hc|# /etc/dnsmasq.conf|2=
 
{{hc|# /etc/dnsmasq.conf|2=
53行目: 130行目:
 
dhcp-option-force=209,boot/syslinux/archiso.cfg
 
dhcp-option-force=209,boot/syslinux/archiso.cfg
 
dhcp-option-force=210,/arch/
 
dhcp-option-force=210,/arch/
  +
dhcp-option-force=66,192.168.0.1
 
enable-tftp
 
enable-tftp
 
tftp-root=/mnt/archiso}}
 
tftp-root=/mnt/archiso}}
   
{{ic|dnsmasq}} [[Systemd#ユニットを使う|systemd サービス]]を起動してください。
+
{{ic|dnsmasq}} [[Systemd#ユニットを使う|systemd サービス]]を起動してください。
   
  +
=== archiso ルートファイルシステムの転送 ===
=== HTTP ===
 
   
  +
[[archiso]] の {{ic|archiso_pxe_http}}、{{ic|archiso_pxe_nfs}}、および {{ic|archiso_pxe_nbd}} initcpio フックのおかげで、HTTP、NFS、または NBD を使用してブートすることが可能です。ブート時間は3つの方法すべてでほぼ同じですが、HTTP 方法では {{ic|airootfs.sfs}} のダウンロード状態をパーセンテージで確認できます。
[[archiso]] における最近の変更のおかげで、現在は HTTP (archiso_pxe_http initcpio フック) または NFS (archiso_pxe_nfs initcpio フック) から起動することが可能になっています。いろいろある中でも、darkhttpd をセットアップするのが最も一般的 (そして最も軽量) です。
 
   
  +
==== HTTP ====
まず、[[公式リポジトリ]]から {{pkg|darkhttpd}} を[[インストール]]してください。
 
   
  +
すべての代替手段の中で、''darkhttpd'' が最も簡単に設定でき (かつ最も軽量です)。
そして {{ic|/mnt/archiso}} をドキュメントルートとして {{pkg|darkhttpd}} を起動します:
 
  +
  +
まず、{{pkg|darkhttpd}} パッケージを[[インストール]]します。
  +
  +
次に、''darkhttpd'' をドキュメントルートとして {{ic|/mnt/archiso}} を使用して起動します:
   
 
{{hc|# darkhttpd /mnt/archiso|
 
{{hc|# darkhttpd /mnt/archiso|
 
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
 
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: <nowiki>http://0.0.0.0:80/</nowiki>}}
+
listening on: <nowiki>http://0.0.0.0:80/</nowiki>
  +
}}
  +
  +
{{Note|サーバーがポート {{ic|'''80'''}} で動作していることが重要です。root 権限なしで ''darkhttpd'' を起動すると、デフォルトで {{ic|'''8080'''}} になりますが、クライアントはポート 80 にアクセスしようとするため、ブートに失敗します。}}
  +
  +
==== NFS ====
  +
  +
[[#準備]] に従った場合、マウントされたインストールメディアのルートでエクスポートを行う [[NFS|NFS サーバー]] を設定する必要があります。これは {{ic|/mnt/archiso}} になります。サーバーを設定した後、{{ic|/etc/exports}} ファイルに次の行を追加します:
  +
  +
{{hc|/etc/exports|
  +
/mnt/archiso 192.168.0.0/24(ro,no_subtree_check)
  +
}}
  +
  +
サーバーが既に稼働している場合は、{{ic|exportfs -r -a -v}} を使用してファイルシステムを再エクスポートします。
  +
  +
インストーラーのデフォルト設定では、NFS を {{ic|/run/archiso/bootmnt/}} に見つけることを期待していますので、ブートオプションを編集する必要があります。これを行うには、適切なブートメニューの選択肢で Tab を押し、{{ic|archiso_nfs_srv}} オプションを適切に編集します:
  +
  +
archiso_nfs_srv=${pxeserver}:/mnt/archiso
  +
  +
または、プロセス全体に {{ic|/run/archiso/bootmnt}} を使用することもできます。
  +
  +
カーネルがロードされた後、Arch ブートストラップイメージは NFS 経由でルートファイルシステムをブートホストにコピーします。これには少し時間がかかることがあります。これが完了すると、システムが動作しているはずです。
  +
  +
==== NBD ====
  +
  +
{{pkg|nbd}} パッケージを[[インストール]]し、設定します:
  +
  +
{{hc|/etc/nbd-server/config|2=
  +
[generic]
  +
[archiso]
  +
readonly = true
  +
exportname = /srv/archlinux-''release_date''-x86_64.iso
  +
}}
  +
  +
ここで、{{ic|''release_date''}} は ISO ファイル名のリリース日です。例:{{ic|2022.10.01}}。
  +
  +
{{ic|nbd.service}} を[[開始]]します。
  +
  +
=== 既存の PXE サーバー ===
  +
  +
既存の PXE サーバーで [[PXELINUX]] システムが設定されている場合 (例:DHCP と [[TFTP]] の組み合わせ)、以下のメニュー項目を {{ic|/tftpboot/pxelinux.cfg/default}} ファイルに追加して、お好みの方法で Arch をブートすることができます。
  +
  +
PXELINUX は HTTP をサポートしているため、ブートローダーのみを TFTP で転送し、その他すべては HTTP を使用できます。例:
  +
  +
{{bc|1=
  +
LABEL archlinux
  +
MENU LABEL Arch Linux x86_64
  +
LINUX ''<nowiki>http://</nowiki>httpserver/path/to/extracted/Arch/ISO''/arch/boot/x86_64/vmlinuz-linux
  +
INITRD ''<nowiki>http://</nowiki>httpserver/path/to/extracted/Arch/ISO''/arch/boot/x86_64/initramfs-linux.img
  +
APPEND archisobasedir=arch archiso_http_srv=''<nowiki>http://</nowiki>httpserver/path/to/extracted/Arch/ISO''/ cms_verify=y
  +
SYSAPPEND 3
  +
TEXT HELP
  +
Arch Linux 2022.10.01 x86_64
  +
ENDTEXT
  +
}}
  +
  +
NFS および NBD では、カーネルと initramfs を TFTP からダウンロードする必要があります。例:NFS の場合:
  +
  +
{{bc|1=
  +
LABEL archlinux
  +
MENU LABEL Arch Linux x86_64
  +
LINUX ''/path/to/extracted/Arch/ISO''/arch/boot/x86_64/vmlinuz-linux
  +
INITRD ''/path/to/extracted/Arch/ISO''/arch/boot/x86_64/initramfs-linux.img
  +
APPEND archisobasedir=arch archiso_nfs_srv=''pxeserver'':/run/archiso/bootmnt cms_verify=y
  +
SYSAPPEND 3
  +
TEXT HELP
  +
Arch Linux 2022.10.01 x86_64
  +
ENDTEXT
  +
}}
  +
  +
{{ic|LINUX}} と {{ic|INITRD}} のパスは TFTP ルートに対する相対パスです。NBD の場合は、上記の例で {{ic|archiso_nfs_srv}} を {{ic|archiso_nbd_srv}} に置き換えます。使用例は Arch Linux ISO にある {{ic|boot/syslinux/archiso_pxe.cfg}} ファイルを参照してください。
  +
  +
どの方法を選択するにしても、カーネルにネットワークインターフェースを起動させてからインストールメディアをネットワーク越しにマウントするよう指示するために、{{ic|1=ip=}} パラメーターを渡す必要があります。クライアント側に複数の有線インターフェースがある場合や、ブートされた archiso 内で {{ic|resolv.conf}} を既に設定済みにしたい場合は、{{ic|1=BOOTIF=}} を渡す必要があります。これらのパラメーターを自動的に渡すには、[https://wiki.syslinux.org/wiki/index.php?title=Config#SYSAPPEND sysappend マスク] {{ic|3}} (これは {{ic|1}}+{{ic|2}} です) を使用できます。利用可能なブートパラメーターについては、[https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio-archiso/blob/master/docs/README.bootparams README.bootparams] を参照してください。
   
 
== インストール ==
 
== インストール ==
   
クライアントに PXE ブートを行うように伝える方法を知る必要があります。通常のポストメッセージに加えて、大抵は画面の端に PXE ブートをするにはどのキーを押せばいいのかのヒントが表示されます。IBM x3650 の場合 ''F12'' でブートメニューが表示され、一番最初のオプションが ''Network'' です。Dell PE 1950/2950 では ''F12'' を押すと直接 PXE ブートが開始されます。
+
クライアントに PXE ブートを行うように伝える方法を知る必要があります。通常のポストメッセージに加えて、大抵は画面の端に PXE ブートをするにはどのキーを押せばいいのかのヒントが表示されます。IBM x3650 の場合 {{ic|F12}} でブートメニューが表示され、一番最初のオプションが ''Network'' です。Dell PE 1950/2950 では {{ic|F12}} を押すと直接 PXE ブートが開始されます。
   
 
=== 起動 ===
 
=== 起動 ===
96行目: 250行目:
 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110</nowiki>}}
 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110</nowiki>}}
   
TFTP で {{ic|pxelinux.0}} と {{ic|archiso.cfg}} をロードした後、(上手く行けば) [[syslinux]] のブートメニューが表示され複数のオプションが提示されます。オプションの内の2つが関係あります
+
TFTP で {{ic|pxelinux.0}} と {{ic|archiso.cfg}} をロードした後、(上手く行けば) [[syslinux]] のブートメニューが表示され複数のオプションが提示されます。''Boot Arch Linux (x86_64) (HTTP)'' を選択してください
   
  +
次にカーネルと initramfs が、また TFTP によって転送されます:
使用している CPU アーキテクチャにあわせて ''Boot Arch Linux (x86_64) (HTTP)'' または ''Boot Arch Linux (i686) (HTTP)'' のどちらかを選択してください。
 
 
次に (選択したアーキテクチャの) カーネルと initramfs が、また TFTP によって転送されます:
 
   
 
{{bc|1=
 
{{bc|1=
114行目: 266行目:
 
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"}}
 
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"}}
   
HTTP で root ファイルシステムがダウンロードされた後、特製 [https://www.archlinux.org/packages/extra/any/grml-zsh-config/ grml config] による root の [[zsh]] プロンプトが現れます。
+
HTTP で root ファイルシステムがダウンロードされた後、通常ライブ環境の [[zsh]] プロンプトが現れます。
   
 
=== 起動後 ===
 
=== 起動後 ===
   
全てのトラフィックを PXE サーバーに通したいのでなければ ([[シンプルなステートフルファイアウォール#NAT ゲートウェイの設定|正しく設定]]をしていないと動作しません)、{{pkg|dnsmasq}} を終了してインストール先で新しいリースを取得するのがネットワークレイアウトに適当でしょう。
+
全てのトラフィックを PXE サーバーに通したいのでなければ ([[シンプルなステートフルファイアウォール#NAT ゲートウェイの設定|正しく設定]]をしていないと動作しません)、{{ic|dnsmasq.service}} を[[systemd#ユニットを使う|停止]]してインストール先で新しいリースを取得するのがネットワークレイアウトに適当でしょう。
  +
''darkhttpd'' も終了させてかまいません。ターゲットは既に root ファイルシステムをダウンロードしているため、もう必要ありません。ついでに、インストールイメージをアンマウントすることもできます:
 
{{bc|# systemctl stop dnsmasq.service}}
 
 
{{pkg|darkhttpd}} も終了させてかまいません。ターゲットは既に root ファイルシステムをダウンロードしているため、もう必要ありません。ついでに、インストールイメージをアンマウントすることもできます:
 
   
 
{{bc|# umount /mnt/archiso}}
 
{{bc|# umount /mnt/archiso}}
128行目: 277行目:
 
ここまで来たら、後は[[インストールガイド|公式のインストールガイド]]に従って下さい。
 
ここまで来たら、後は[[インストールガイド|公式のインストールガイド]]に従って下さい。
   
== 方法 ==
+
=== メモリ少ないシステム ===
   
  +
{{ic|copytoram}} [[initramfs]] オプションを使用して、ルートファイルシステム全体を初期ブート時に RAM にコピーするかどうかを制御できます。
syslinux のメニューでわかるように、別の方法もいくつか存在します:
 
   
  +
このオプションはそのままにしておくことを強くお勧めしますが、どうしても必要な場合(物理メモリが約256MB未満のシステム)にのみ無効にする必要があります。これを行う場合は、カーネル行に {{ic|1=copytoram=n}} を追加します。
=== NFS ===
 
   
  +
{{Note|これはリモートファイルシステムから squashfs をループマウントする必要があるため、{{ic|1=copytoram=n}} と {{ic|[[#HTTP|archiso_pxe_http]]}} は互いに排他的です。}}
[[NFS|NFS サーバー]]を設定してマウントしたインストールメディアの root (このガイドの[[#準備|先のセクション]]通りしているなら {{ic|/mnt/archiso}}) をエクスポートする必要があります。サーバーを設定した後、次の行を {{ic|/etc/exports}} ファイルに追加してください:
 
   
  +
=== PXE クライアントとのインターネット共有 ===
{{hc|/etc/exports|/mnt/archiso 192.168.0.0/24(ro,no_subtree_check)}}
 
   
  +
PXE クライアントのネットワークがプライベート(例えば、192.168.1.0/24)の場合、インターネットにアクセスできるようにするためには(例えば、パッケージのインストールのために)、適切にマスカレード/ソース NAT を設定する必要があります。PXE サーバーはインターネットに接続された別の NIC を持っている必要があります。以下のコマンドを使用して、クライアントにインターネットを通過させることができます:
サーバーが既に実行しているときは、{{ic|exportfs -r -a -v}} でファイルシステムを再度エクスポートします。
 
   
  +
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
インストーラーのデフォルト設定では NFS は {{ic|/run/archiso/bootmnt}} にあることになっているので、ブートオプションを編集する必要があります。適当なブートメニューを選択して Tab を押して {{ic|archiso_nfs_srv}} オプションを次のように編集してください:
 
   
  +
このルールを再起動後も持続させるために、次のコマンドを実行します:
{{bc|1=archiso_nfs_srv=${pxeserver}:/mnt/archiso}}
 
   
  +
iptables-save -f /etc/iptables/iptables.rules
もしくは、プロセス全体で {{ic|/run/archiso/bootmnt}} を使うこともできます。
 
   
  +
そして {{ic|iptables.service}} を[[有効]]にします。
カーネルがロードされると、Arch のブートストラップイメージは NFS を使って root ファイルシステムをブートホストにコピーします。これにはしばらく時間がかかります。コピーが完了したら、システムが使えるようになります。
 
   
  +
詳細については、[[シンプルなステートフルファイアウォール#NAT ゲートウェイの設定]] および [[インターネット共有#NAT の有効化]] を参照してください。
=== NBD ===
 
   
  +
== トラブルシューティング ==
{{pkg|nbd}} をインストールして設定:
 
   
  +
=== DHCP インターフェースリネームバグ ===
{{hc|# vim /etc/nbd-server/config|2=
 
  +
[generic]
 
  +
{{Bug|36749}} により、デフォルトの [https://systemd.io/PREDICTABLE_INTERFACE_NAMES/ 予測可能なネットワークインターフェース名の変更] が失敗し、それにより DHCP クライアントが失敗します。この問題を回避するには、カーネルブートパラメータ {{ic|1=net.ifnames=0}} を追加して予測可能なインターフェース名を無効にします。
[archiso]
 
  +
readonly = true
 
  +
=== 仮想マシンではブートできるが実マシンではできない ===
exportname = /srv/archlinux-2013.02.01-dual.iso}}
 
  +
  +
構成をテストするために [[VirtualBox]] を使用している場合、仮想マシンが以下のメッセージで停止することがあります:
  +
  +
Probing EDD (edd=off to disable)... ok
  +
  +
一方、実マシンでの PXE ブートは正常に動作します。この問題は、クライアントマシンに複数の CPU コアを設定し、そのタイプを ''Other''、バージョンを ''Other/Unknown (64 bit)'' に設定しているためかもしれません。そのため、VirtualBox はデフォルトでどのパラバーチャライゼーションインターフェースを使用するか分かりません。
   
  +
[[カーネルパラメータ]] に {{ic|1=loglevel=7}} を追加すると、実際にどこで停止したかを見ることができます:
=== 低メモリ環境 ===
 
   
  +
[ 0.063697] smp: Bringing up secondary CPUs...
{{note|マウントされたリモートファイルシステムから squashfs のループマウントを必要とするので、{{ic|<nowiki>copytoram=n</nowiki>}} と {{ic|[[#HTTP|archiso_pxe_http]]}} は互いに相容れません。}}
 
  +
[ 0.103768] x86: Booting SMP configuration:
   
  +
これを解決するには、1 つの CPU コアを使用するか、''Machine > Settings > System > Acceleration'' に移動して、''Minimal''、''Hyper-V''、または ''KVM'' のいずれかのパラバーチャライゼーションインターフェースを設定します。
{{ic|copytoram}} [[mkinitcpio|initramfs]] オプションを使うことでブートの初期段階で root ファイルシステムを ram にそっくりそのままコピーするべきかコントロールすることができます。
 
   
  +
{{TranslationStatus|Preboot Execution Environment|2024-07-21|807263}}
このオプションはそのままにしておいて、(物理メモリが 256MB 以下のシステムで) どうしても必要なときにだけ無効にすることを強く推奨します。{{ic|<nowiki>copytoram=n</nowiki>}} を kernel 行に追加することで無効にできます。so.
 

2024年7月21日 (日) 20:27時点における最新版

関連記事

Wikipedia:ja:Preboot Execution Environment より:

Preboot eXecution Environment (PXE、ピクシーと発音されることが多い) 仕様では、ネットワークから取得したソフトウェア アセンブリを PXE 対応クライアント上で起動する、標準化されたクライアント/サーバー環境について説明します。クライアント側では、PXE 対応のネットワーク インターフェイス コントローラー (NIC) のみが必要で、DHCP や TFTP などの業界標準のネットワーク プロトコルの少数のセットが使用されます。

このガイドでは、PXE を使って対象のマシンで PXE をサポートするオプション ROM でインストールメディアを起動します。既にサーバーをセットアップ済みでも上手く行くはずです。

準備

概要

#サーバーのセットアップ、クライアント側の#インストール、および必要な Arch Linux ファイルを理解するために、PXE ブートプロセスの概要を説明することは有用です。

クライアントは、特定の PXE オプションを含む DHCP サーバーを求めるパケットをブロードキャストすることから始まります。DHCP サーバーは、クライアントに割り当てられた IP アドレスなどのネットワーク情報で応答し、特定の ブートストラッププロトコル (BOOTP) パラメーターを使用して、TFTP サーバーのアドレス、ダウンロードする初期ネットワークブートプログラム (NBP) のパス、またはブート構成ファイル名などの追加情報を提供します。

NBP は TFTP を使用して PXE サーバーからクライアントに転送され、メモリにロードされて実行されます。カーネルと initramfs もこの方法で転送されます。

その後、ルートファイルシステムは HTTP、NFS、または NBD のいずれかのプロトコルを使用して転送されます。

警告: PXELINUX には、受信したもの (TFTP または HTTP 経由) が予期されたものであるかどうかを検証するためのセキュリティメカニズムはサポートされていません。詳細は RFC 5071 セクション 8 を参照してください。代替手段として、iPXE バイナリに埋め込まれたコード署名証明書に対して署名を検証できる Netboot イメージを使用することができます。Netboot イメージはローカルシステムに配置する必要があることに注意してください。

インストールメディアからのブート

サーバーからクライアントに転送されるファイルを収集するために、ダウンロードページ から最新の公式インストールイメージを取得します。

次に、イメージをマウントします:

# mount --mkdir -o loop,ro archlinux-release_date-x86_64.iso /mnt/archiso

ここで、release_date は ISO ファイル名のリリース日です。例:2022.10.01

ノート: Arch ISO は現在、BIOS スタイルの PXE ブートのみをサポートしています。詳細は テンプレート:Issue を参照してください。

ネットブートからのブート

Arch Linux netboot イメージを使用して、システムブート時に最新の Arch Linux リリースをオンザフライでダウンロードできます。構成に適したイメージをダウンロードします。

ノート: Arch netboot は BIOSUEFI の両方のブートをサポートしています。

Pixiecore

pixiecore によって提供されるオールインワンソリューションです。

  1. pixiecore-gitAUR をインストールする
  2. root として pixiecore quick arch --dhcp-no-bind を実行する
  3. PXE 経由でブートする

サーバーのセットアップ

ネットワークを設定して、pxelinux/カーネル/initramfs をロードし、最終的に root ファイルシステムをロードするために DHCP, TFTP, HTTP サーバーを設定する必要があります。

ネットワーク

有線の NIC を立ち上げて、適当なアドレスを割り当てて下さい。

# ip link set eth0 up
# ip addr add 192.168.0.1/24 dev eth0

DHCP + TFTP

インストール先でネットワークを設定して PXE サーバーとクライアント間のファイルの転送を楽にするには DHCP と TFTP 両方のサーバーが必要です。dnsmasq がその両方とも備えており、とても簡単にセットアップできます。

dnsmasq パッケージをインストールします。

dnsmasq の設定が必要です。dnsmasq#TFTP サーバーdnsmasq#PXE サーバー のセットアップ方法についての指示を参照してください。

以下に一般的な設定手順を示します。tftp_root は Arch ISO がマウントされているディレクトリ (例:/mnt/archiso) またはネットワークブートプログラムが配置されている場所です。

# /etc/dnsmasq.conf
# 指定されたインターフェースのみをリッスンする
interface=eth0

# DNS サーバーとして機能しない
port=0

# TFTP サーバーの設定
enable-tftp
tftp-root=tftp_root

# DHCP トランザクションに関する追加情報をログに記録する (デバッグ目的)
log-dhcp

DHCP サーバーを有効にし、範囲内の IPv4 アドレスを提供するには、設定ファイルに以下のような行を追加します:

dhcp-range=192.168.0.50,192.168.0.150

または、ネットワーク上に既に DHCP サーバーが稼働しており、それと連携したい場合は、dnsmasq#プロキシ DHCP を参照してください。

異なるブートスタイルとインストールメディアをカバーする2つの例を以下に示します。

必要に応じて設定したら、dnsmasq.service開始します。

インストールメディアからの BIOS ブート

転送される初期ブートストラッププログラムのパスは、設定ファイルの dhcp-boot オプションで定義されます。

dhcp-boot=/boot/syslinux/lpxelinux.0

設定ファイルパスのような特定の ブートストラップ プロトコル (BOOTP) パラメーター を送信するために、dhcp-option-force=flag,value 行が使用されます。

dhcp-option-force=209,archiso_pxe.cfg # このファイルは /mnt/archiso/boot/syslinux にあるかもしれません
dhcp-option-force=210,

ネットブートからの UEFI ブート

アーキテクチャに応じてファイルを送信するには、ここでは UEFI スタイルのブート用のネットブートイメージを使用します:

pxe-service=BC_EFI, "Boot from network BC EFI", ipxe.efi
pxe-service=X86-64_EFI, "Boot from network X86-64 EFI", ipxe.efi

ネットブートを使用する場合、Arch ISO に焦点を当てたサーバーセットアップセクションの残りの部分は適用されません。

# /etc/dnsmasq.conf
port=0
interface=eth0
bind-interfaces
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=/arch/boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=66,192.168.0.1
enable-tftp
tftp-root=/mnt/archiso

dnsmasqsystemd サービスを起動してください。

archiso ルートファイルシステムの転送

archisoarchiso_pxe_httparchiso_pxe_nfs、および archiso_pxe_nbd initcpio フックのおかげで、HTTP、NFS、または NBD を使用してブートすることが可能です。ブート時間は3つの方法すべてでほぼ同じですが、HTTP 方法では airootfs.sfs のダウンロード状態をパーセンテージで確認できます。

HTTP

すべての代替手段の中で、darkhttpd が最も簡単に設定でき (かつ最も軽量です)。

まず、darkhttpd パッケージをインストールします。

次に、darkhttpd をドキュメントルートとして /mnt/archiso を使用して起動します:

# darkhttpd /mnt/archiso
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:80/
ノート: サーバーがポート 80 で動作していることが重要です。root 権限なしで darkhttpd を起動すると、デフォルトで 8080 になりますが、クライアントはポート 80 にアクセスしようとするため、ブートに失敗します。

NFS

#準備 に従った場合、マウントされたインストールメディアのルートでエクスポートを行う NFS サーバー を設定する必要があります。これは /mnt/archiso になります。サーバーを設定した後、/etc/exports ファイルに次の行を追加します:

/etc/exports
/mnt/archiso 192.168.0.0/24(ro,no_subtree_check)

サーバーが既に稼働している場合は、exportfs -r -a -v を使用してファイルシステムを再エクスポートします。

インストーラーのデフォルト設定では、NFS を /run/archiso/bootmnt/ に見つけることを期待していますので、ブートオプションを編集する必要があります。これを行うには、適切なブートメニューの選択肢で Tab を押し、archiso_nfs_srv オプションを適切に編集します:

archiso_nfs_srv=${pxeserver}:/mnt/archiso

または、プロセス全体に /run/archiso/bootmnt を使用することもできます。

カーネルがロードされた後、Arch ブートストラップイメージは NFS 経由でルートファイルシステムをブートホストにコピーします。これには少し時間がかかることがあります。これが完了すると、システムが動作しているはずです。

NBD

nbd パッケージをインストールし、設定します:

/etc/nbd-server/config
[generic]
[archiso]
    readonly = true
    exportname = /srv/archlinux-release_date-x86_64.iso

ここで、release_date は ISO ファイル名のリリース日です。例:2022.10.01

nbd.service開始します。

既存の PXE サーバー

既存の PXE サーバーで PXELINUX システムが設定されている場合 (例:DHCP と TFTP の組み合わせ)、以下のメニュー項目を /tftpboot/pxelinux.cfg/default ファイルに追加して、お好みの方法で Arch をブートすることができます。

PXELINUX は HTTP をサポートしているため、ブートローダーのみを TFTP で転送し、その他すべては HTTP を使用できます。例:

LABEL archlinux
        MENU LABEL Arch Linux x86_64
        LINUX http://httpserver/path/to/extracted/Arch/ISO/arch/boot/x86_64/vmlinuz-linux
        INITRD http://httpserver/path/to/extracted/Arch/ISO/arch/boot/x86_64/initramfs-linux.img
        APPEND archisobasedir=arch archiso_http_srv=http://httpserver/path/to/extracted/Arch/ISO/ cms_verify=y
        SYSAPPEND 3
        TEXT HELP
        Arch Linux 2022.10.01 x86_64
        ENDTEXT

NFS および NBD では、カーネルと initramfs を TFTP からダウンロードする必要があります。例:NFS の場合:

LABEL archlinux
        MENU LABEL Arch Linux x86_64
        LINUX /path/to/extracted/Arch/ISO/arch/boot/x86_64/vmlinuz-linux
        INITRD /path/to/extracted/Arch/ISO/arch/boot/x86_64/initramfs-linux.img
        APPEND archisobasedir=arch archiso_nfs_srv=pxeserver:/run/archiso/bootmnt cms_verify=y
        SYSAPPEND 3
        TEXT HELP
        Arch Linux 2022.10.01 x86_64
        ENDTEXT

LINUXINITRD のパスは TFTP ルートに対する相対パスです。NBD の場合は、上記の例で archiso_nfs_srvarchiso_nbd_srv に置き換えます。使用例は Arch Linux ISO にある boot/syslinux/archiso_pxe.cfg ファイルを参照してください。

どの方法を選択するにしても、カーネルにネットワークインターフェースを起動させてからインストールメディアをネットワーク越しにマウントするよう指示するために、ip= パラメーターを渡す必要があります。クライアント側に複数の有線インターフェースがある場合や、ブートされた archiso 内で resolv.conf を既に設定済みにしたい場合は、BOOTIF= を渡す必要があります。これらのパラメーターを自動的に渡すには、sysappend マスク 3 (これは 1+2 です) を使用できます。利用可能なブートパラメーターについては、README.bootparams を参照してください。

インストール

クライアントに PXE ブートを行うように伝える方法を知る必要があります。通常のポストメッセージに加えて、大抵は画面の端に PXE ブートをするにはどのキーを押せばいいのかのヒントが表示されます。IBM x3650 の場合 F12 でブートメニューが表示され、一番最初のオプションが Network です。Dell PE 1950/2950 では F12 を押すと直接 PXE ブートが開始されます。

起動

PXE サーバーで journald を確認することで、PXE のブートプロセスの初期段階で実際に何が起こっているのか情報を得ることができます:

# journalctl -u dnsmasq -f
dnsmasq-dhcp[2544]: DHCPDISCOVER(eth1) 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPOFFER(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPREQUEST(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPACK(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/pxelinux.0 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/whichsys.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_choose.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/ifcpu64.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_both_inc.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_head.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe32.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe64.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_tail.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/vesamenu.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110

TFTP で pxelinux.0archiso.cfg をロードした後、(上手く行けば) syslinux のブートメニューが表示され複数のオプションが提示されます。Boot Arch Linux (x86_64) (HTTP) を選択してください。

次にカーネルと initramfs が、また TFTP によって転送されます:

dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/vmlinuz to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/archiso.img to 192.168.0.110

順調に行けば、PXE ターゲットから来る darkhttpd の活動を見ることができます。この段階でカーネルは PXE のターゲットマシンでロードされ、そして init に移ります:

1348347586 192.168.0.110 "GET /arch/aitab" 200 678 "" "curl/7.27.0"
1348347587 192.168.0.110 "GET /arch/x86_64/root-image.fs.sfs" 200 107860206 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/x86_64/usr-lib-modules.fs.sfs" 200 36819181 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"

HTTP で root ファイルシステムがダウンロードされた後、通常のライブ環境の zsh プロンプトが現れます。

起動後

全てのトラフィックを PXE サーバーに通したいのでなければ (正しく設定をしていないと動作しません)、dnsmasq.service停止してインストール先で新しいリースを取得するのがネットワークレイアウトに適当でしょう。 darkhttpd も終了させてかまいません。ターゲットは既に root ファイルシステムをダウンロードしているため、もう必要ありません。ついでに、インストールイメージをアンマウントすることもできます:

# umount /mnt/archiso

ここまで来たら、後は公式のインストールガイドに従って下さい。

メモリの少ないシステム

copytoram initramfs オプションを使用して、ルートファイルシステム全体を初期ブート時に RAM にコピーするかどうかを制御できます。

このオプションはそのままにしておくことを強くお勧めしますが、どうしても必要な場合(物理メモリが約256MB未満のシステム)にのみ無効にする必要があります。これを行う場合は、カーネル行に copytoram=n を追加します。

ノート: これはリモートファイルシステムから squashfs をループマウントする必要があるため、copytoram=narchiso_pxe_http は互いに排他的です。

PXE クライアントとのインターネット共有

PXE クライアントのネットワークがプライベート(例えば、192.168.1.0/24)の場合、インターネットにアクセスできるようにするためには(例えば、パッケージのインストールのために)、適切にマスカレード/ソース NAT を設定する必要があります。PXE サーバーはインターネットに接続された別の NIC を持っている必要があります。以下のコマンドを使用して、クライアントにインターネットを通過させることができます:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

このルールを再起動後も持続させるために、次のコマンドを実行します:

iptables-save -f /etc/iptables/iptables.rules

そして iptables.service有効にします。

詳細については、シンプルなステートフルファイアウォール#NAT ゲートウェイの設定 および インターネット共有#NAT の有効化 を参照してください。

トラブルシューティング

DHCP インターフェースリネームバグ

FS#36749 により、デフォルトの 予測可能なネットワークインターフェース名の変更 が失敗し、それにより DHCP クライアントが失敗します。この問題を回避するには、カーネルブートパラメータ net.ifnames=0 を追加して予測可能なインターフェース名を無効にします。

仮想マシンではブートできるが実マシンではできない

構成をテストするために VirtualBox を使用している場合、仮想マシンが以下のメッセージで停止することがあります:

Probing EDD (edd=off to disable)... ok

一方、実マシンでの PXE ブートは正常に動作します。この問題は、クライアントマシンに複数の CPU コアを設定し、そのタイプを Other、バージョンを Other/Unknown (64 bit) に設定しているためかもしれません。そのため、VirtualBox はデフォルトでどのパラバーチャライゼーションインターフェースを使用するか分かりません。

カーネルパラメータloglevel=7 を追加すると、実際にどこで停止したかを見ることができます:

[    0.063697] smp: Bringing up secondary CPUs...
[    0.103768] x86: Booting SMP configuration:

これを解決するには、1 つの CPU コアを使用するか、Machine > Settings > System > Acceleration に移動して、MinimalHyper-V、または KVM のいずれかのパラバーチャライゼーションインターフェースを設定します。

翻訳ステータス: このページは en:Preboot Execution Environment の翻訳バージョンです。最後の翻訳日は 2024-07-21 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。