PXE (日本語) - ArchWiki

# PXE (日本語)

関連記事

- ディスクレスシステム

Wikipedia:ja:Preboot Execution Environment より:

  Preboot eXecution Environment (PXE, 又の名を Pre-Execution Environment, "ピクシー"とも呼ばれる) は (ハードディスクなどの) データストレージデバイスやインストールされたオペレーティングシステムから独立してネットワークインターフェイスを使ってコンピュータを起動する環境。

このガイドでは、PXE を使って対象のマシンで PXE をサポートするオプション ROM でインストールメディアを起動します。

## 準備

こちらから最新の公式インストールメディアをダウンロードしてください。

そしてイメージをマウントします:

    # mkdir -p /mnt/archiso
    # mount -o loop,ro archlinux-2013.11.01-dual.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/
    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/

## インストール

クライアントに 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 のブートメニューが表示され複数のオプションが提示されます。オプションの内の2つが関係あります。

使用している CPU アーキテクチャにあわせて Boot Arch Linux (x86_64) (HTTP) または Boot Arch Linux (i686) (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 ファイルシステムがダウンロードされた後、特製の grml config による root の zsh プロンプトが現れます。

### 起動後

全てのトラフィックを PXE サーバーに通したいのでなければ (正しく設定をしていないと動作しません)、dnsmasq を終了してインストール先で新しいリースを取得するのがネットワークレイアウトに適当でしょう。

    # 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-2013.02.01-dual.iso

### 低メモリ環境

Note: マウントされたリモートファイルシステムから squashfs のループマウントを必要とするので、`copytoram=n` と `archiso_pxe_http` は互いに相容れません。

`copytoram` initramfs オプションを使うことでブートの初期段階で root ファイルシステムを ram にそっくりそのままコピーするべきかコントロールすることができます。

このオプションはそのままにしておいて、(物理メモリが 256MB 以下のシステムで) どうしても必要なときにだけ無効にすることを強く推奨します。`copytoram=n` を kernel 行に追加することで無効にできます。so.

Categories:

- Getting and installing Arch (日本語)
- Networking (日本語)
- Boot process (日本語)