「Preboot Execution Environment」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「www.archlinuxjp.org」を「www.archlinux.jp」に置換) |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://www.freedesktop.org/」を「https://www.freedesktop.org/」に置換) |
||
179行目: | 179行目: | ||
=== DHCP インターフェイスの再命名バグ === |
=== DHCP インターフェイスの再命名バグ === |
||
− | 2015年11月現在、デフォルトの [ |
+ | 2015年11月現在、デフォルトの [https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ 予想可能なネットワークインターフェイスの名前変更] が失敗して dhcp クライアントが使えなくなるバグが存在します。詳しくは {{Bug|36749}} を見てください。カーネルブートパラメータに {{ic|1=net.ifnames=0}} を追加することで解決できます。 |
=== 低メモリ環境 === |
=== 低メモリ環境 === |
2018年2月6日 (火) 23:43時点における版
関連記事
Wikipedia:ja:Preboot Execution Environment より:
- Preboot eXecution Environment (PXE, 又の名を Pre-Execution Environment, "ピクシー"とも呼ばれる) は (ハードディスクなどの) データストレージデバイスやインストールされたオペレーティングシステムから独立してネットワークインターフェイスを使ってコンピュータを起動する環境。
このガイドでは、PXE を使って対象のマシンで PXE をサポートするオプション ROM でインストールメディアを起動します。既にサーバーをセットアップ済みでも上手く行くはずです。
目次
準備
ダウンロードページ から最新の公式インストールメディアをダウンロードしてください。
そしてイメージをマウントします:
# mkdir -p /mnt/archiso # mount -o loop,ro archlinux-2017.04.01-x86_64.iso /mnt/archiso
サーバーのセットアップ
ネットワークを設定して、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 を設定:
# /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
dnsmasq
の systemd サービスを起動してください。
HTTP
archiso における最近の変更のおかげで、現在は HTTP (archiso_pxe_http initcpio フック) または NFS (archiso_pxe_nfs initcpio フック) から起動することが可能になっています。いろいろある中でも、darkhttpd をセットアップするのが最も一般的 (そして最も軽量) です。
まず、公式リポジトリから darkhttpd をインストールしてください。
そして /mnt/archiso
をドキュメントルートとして darkhttpd を起動します:
# 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 にアクセスしようとして起動に失敗します。
インストール
クライアントに 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.0
と archiso.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
を停止してインストール先で新しいリースを取得するのがネットワークレイアウトに適当でしょう。
# systemctl stop dnsmasq.service
darkhttpd も終了させてかまいません。ターゲットは既に root ファイルシステムをダウンロードしているため、もう必要ありません。ついでに、インストールイメージをアンマウントすることもできます:
# umount /mnt/archiso
ここまで来たら、後は公式のインストールガイドに従って下さい。
別の方法
syslinux のメニューでわかるように、別の方法もいくつか存在します:
NFS
NFS サーバーを設定してマウントしたインストールメディアの root (このガイドの先のセクション通りしているなら /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 を使って root ファイルシステムをブートホストにコピーします。これにはしばらく時間がかかります。コピーが完了したら、システムが使えるようになります。
NBD
nbd をインストールして設定:
# vim /etc/nbd-server/config
[generic] [archiso] readonly = true exportname = /srv/archlinux-2017.04.01-x86_64.iso
その後 nbd.service
を起動してください。
既存の PXE サーバー
Syslinux をセットアップした既存の PXE サーバーが存在する場合 (例: BIND+DHCPd+TFTPd の組み合わせ)、以下のメニューアイテムを pxelinux.cfg
ファイルに追加することで推奨されている方法で Arch を起動できます:
# vim /srv/tftp/arch.menu
LABEL 2 MENU LABEL Arch Linux x86_64 LINUX /path/to/extracted/Arch/ISO/arch/boot/x86_64/vmlinuz INITRD /path/to/extracted/Arch/ISO/arch/boot/intel_ucode.img,/path/to/extracted/Arch/ISO/arch/boot/x86_64/archiso.img APPEND archisobasedir=arch archiso_nfs_srv=${nfsserver}:/path/to/extracted/Arch/ISO/ ip=:::::eth0:dhcp SYSAPPEND 3 TEXT HELP Arch Linux 2016.03 x86_64 ENDTEXT
archiso_nfs_srv を上に記載しているサポートされている方法 (HTTP や NBD) に置き換えることもできます。ネットワークを経由してインストールメディアをマウントする前にカーネルによってネットワークインターフェイスが立ち上げられるように ip=
の追加が必要です。
DHCP インターフェイスの再命名バグ
2015年11月現在、デフォルトの 予想可能なネットワークインターフェイスの名前変更 が失敗して dhcp クライアントが使えなくなるバグが存在します。詳しくは FS#36749 を見てください。カーネルブートパラメータに net.ifnames=0
を追加することで解決できます。
低メモリ環境
copytoram
initramfs オプションを使うことでブートの初期段階で root ファイルシステムを ram にそっくりそのままコピーするべきかコントロールすることができます。
このオプションはそのままにしておいて、(物理メモリが 256MB 以下のシステムで) どうしても必要なときにだけ無効にすることを強く推奨します。copytoram=n
を kernel 行に追加することで無効にできます。