Category: Pxe

PXE GentooでNFS rootにtmpfs overlayを重ねる設計

PXE GentooでNFS rootにtmpfs overlayを重ねる設計

PXE boot の root filesystem を NFS に置くと、rootfs 更新や rollback は楽になる。一方で、各 node が rootfs に直接書き込むと、検証環境ほど状態が散らばりやすい。

そこで、NFS root を read-only lower として扱い、PXE client 側の tmpfs を upper/work にした overlayfs root にする。

この構成では、rootfs の差分は reboot で消える。永続化が必要なものだけを、用途別の volume や明示的な mount に逃がす。

本文中の 192.0.2.0/24 は説明用の documentation range である。OpenWrt 実機で NFS root / TFTP / DHCP を反映する場合は、外部 inventory の openwrt_lan_ipaddropenwrt_dhcp_ntp_serversopenwrt_gentoo_server_host を実値として明示し、documentation range が endpoint に残っていれば止める。

基本構成

flowchart TD
  A[PXE firmware<br/>DHCP + TFTP] --> B[Kernel + initramfs]
  B --> C[dracut<br/>network + nfs]
  C --> D[NFS root<br/>read-only lower]
  C --> E[tmpfs<br/>upper + work]
  D --> F[overlayfs merged root]
  E --> F
  F --> G[switch_root]
  G --> H[systemd]

root overlay の目標状態は次のような形になる。

Read more...

Raspberry Pi netbootのTFTP host directory設計

Raspberry Pi netbootのTFTP host directory設計

Raspberry Pi の network boot は、一般的な PXE の pxelinux.cfg とは違う挙動をする。

特に Pi firmware は、TFTP root 直下だけでなく board 固有の directory を探す。bootfile でサブディレクトリを指定しても、cmdline.txt が期待した場所から読まれないことがある。

このため、Pi ごとの board hash directory を TFTP root 直下に実ディレクトリとして作り、host ごとに cmdline.txt を制御する設計が扱いやすい。

本文中の 192.0.2.0/24 は説明用の documentation range である。homecluster-infra で OpenWrt 実機へ反映する場合は、router hostvars の openwrt_lan_ipaddropenwrt_dhcp_ntp_serversopenwrt_gentoo_server_host を外部 inventory で明示し、TFTP / NFS / dnsmasq の endpoint に documentation range を残さない。

目的

  • boot firmware / kernel / DTB / initramfs は release 単位で共有する
  • host ごとの config.txt / cmdline.txt は board hash directory に置く
  • NFS root の release 切替は cmdline.txt で行う
  • TFTP release の更新と host boot 先の切替を分ける

directory構成

例として、TFTP root を次のように分ける。

Read more...

OpenWrt + dnsmasq + raspberry pi 4B でstaging/productionの環境を分離するPXEブートを行った

OpenWrt + dnsmasq + Raspberry Pi 4B PXE ブート調査

OpenWrt 上の dnsmasq を用いて Raspberry Pi 4B を タグベースで PXE 起動させる。

このメモの 192.0.2.100 は説明用の documentation address である。homecluster-infra から OpenWrt 実機へ反映する場合は、外部 inventory の openwrt_lan_ipaddropenwrt_dhcp_ntp_serversopenwrt_gentoo_server_host を実値として明示し、documentation range が dnsmasq / TFTP / NFS endpoint に残っていれば反映前に止める。

最終的に目指した状態:

dhcp-boot=tag:rpi4-02,start4.elf,192.0.2.100,192.0.2.100

もしくはシンプルに:

dhcp-boot=start4.elf,192.0.2.100

と同等の挙動をタグ条件付きで再現する。

最初の症状

config host で set:rpi4-02 が出力されている dhcp-boot=tag:rpi4-02,… を設定 しかし PXE 起動しない タグ無しの dhcp-boot=start4.elf,192.0.2.100 なら起動する ここから調査開始。

次の内容で検証した

openwrtでは/etc/config/dhcpで設定ができる 次のコマンドでトライアンドエラーを繰り返した

vi /etc/config/dhcp && /etc/init.d/dnsmasq restart && cat /var/etc/dnsmasq.conf.*

Raspberry Pi の PXE 挙動の理解

dnsmasq ログより:

Read more...

raspberry pi でPXE+overlayfs/tmpfsでディスクレスブート

概要

Raspberry Pi 4 Model B (RAM 8GB) 上で Gentoo Linux を ディスクレス運用 (ネットワークブート) し、ルートファイルシステムを NFS 経由の読み取り専用 とすることで基盤イメージを保護しつつ、OverlayFS を用いた一時的な書き込みを可能にする手法について解説します。 参考1 , 参考2 この構成では、ベースとなるルートFSをNFSサーバから読み出し専用でマウントし、書き込み変更はすべてクライアント側RAM上の tmpfs に保存されるため、システム稼働中のみ有効で再起動で破棄されます。 これにより、SDカード無しでの起動や基盤イメージの一元管理が可能になるだけでなく、アプリケーションから見ると通常通り書き込み可能な環境を提供しながら基盤イメージの破損や意図しない変更を防止できます。 また多数の読み込みが発生する場合でもクライアント側メモリキャッシュを活用しパフォーマンス向上が期待できます。

本記事ではネットブート用のNFSルート設定と、Gentoo環境でのカスタム initramfs(dracutモジュール overlay-root)による OverlayFS 構成の具体的手順を示します。 読者は LinuxのネットワークブートやGentooの基本管理に習熟していることを前提とし、技術的背景も交えながら詳細に説明します。

本文中の 192.0.2.0/24 は説明用の documentation range である。homecluster-infra から OpenWrt 実機へ反映する場合、router hostvars の openwrt_lan_ipaddropenwrt_dhcp_ntp_serversopenwrt_gentoo_server_host を外部 inventory で明示し、NFS root / TFTP / dnsmasq の endpoint に documentation range が残っていれば反映前に止める。

システム構成と前提条件

ネットブート構成: Raspberry Pi 4B(ARM64, 8GB RAM)がクライアントとなり、ネットワーク経由でOSをブートします。 ブートに必要なファームウェア・カーネルはTFTPサーバから取得し、ルートファイルシステムはNFSサーバからマウントします。 Raspberry Pi 4はEEPROMのネットブート機能が利用可能で、あらかじめブートローダ設定でネットワークブートが有効になっている必要があります (raspi-configで Boot Order を 0xf21 に設定し再起動すると、有効になったことを確認できます

Read more...