Table of Contents
概要
- Ubuntu 26.04
BIOSは成功しましたが、UEFIの方がうまくいかないので、参考にとどめてください。
手順
Ubuntu Baseのダウンロードと展開
ヘッドノード(Ubuntu 26.04 Desktop)上で、公式リポジトリから Ubuntu 26.04 のベースイメージをダウンロードします。 通常は https://cdimage.ubuntu.com/ の ubuntu-base/releases/ 内にあります。
- ディスクレス用OSの配置先を作成
$ sudo mkdir -p /srv/nfs/compute-root
- Ubuntu Baseのダウンロード(※URLは2026年現在の最新リポジトリ構造に基づきます)
$ cd /tmp $ wget http://cdimage.ubuntu.com/ubuntu-base/releases/26.04/release/ubuntu-base-26.04-base-amd64.tar.gz
- 展開(パーミッションを保持するため必ず sudo で実行)
$ sudo tar -zxf ubuntu-base-26.04-base-amd64.tar.gz -C /srv/nfs/compute-root
クライアントOSの基本設定 (chroot)
展開したイメージ内に chroot で入り、必要なパッケージ(特にカーネル)をインストールします。 Ubuntu Baseは最小限の構成なので、カーネルすら入っていません。
- 必要な仮想ファイルシステムをマウント
$ sudo mount --bind /dev /srv/nfs/compute-root/dev $ sudo mount --bind /proc /srv/nfs/compute-root/proc $ sudo mount --bind /sys /srv/nfs/compute-root/sys
- 名前解決(DNS)ができるようにDNS設定をコピー
$ sudo cp /etc/resolv.conf /srv/nfs/compute-root/etc/resolv.conf
- chroot環境に入る
$ sudo chroot /srv/nfs/compute-root
ここからchroot内部の操作
- パッケージソースリストの作成(入っていない、または不十分な場合があるため)
$ cat <<EOF > /etc/apt/sources.list deb http://archive.ubuntu.com/ubuntu/ plucky main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ plucky-updates main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ plucky-security main restricted universe multiverse EOF $ apt update
- カーネル、initramfs-tools、ネットワークブートに必要なパッケージをインストール
$ apt install -y linux-image-generic initramfs-tools openssh-server systemd-sysv
- ルートパスワードの設定
$ passwd
- initramfsをネットワークブート(NFS)対応にする設定
$ echo "BOOT=nfs" >> /etc/initramfs-tools/initramfs.conf $ update-initramfs -u -k all
- fstabの設定
$ cat <<EOF > /etc/fstab /dev/nfs / nfs defaults,noatime 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /var/log tmpfs defaults 0 0 tmpfs /var/tmp tmpfs defaults 0 0 EOF
- chrootから抜ける
$ exit
- マウント解除
$ sudo umount /srv/nfs/compute-root/dev $ sudo umount /srv/nfs/compute-root/proc $ sudo umount /srv/nfs/compute-root/sys $ sudo rm /srv/nfs/compute-root/etc/resolv.conf
NFSサーバーの設定
計算ノードが起動した後に、先ほど作ったOSイメージをネットワーク経由で読み書きできるようにします。
/etc/exports に設定を追加します。
$ sudo nano /etc/exports
- /etc/exports
/srv/nfs/compute-root 192.168.0.0/24(rw,no_root_squash,no_subtree_check,async)
NFSサービスを再起動して反映します。
$ sudo systemctl restart nfs-kernel-server $ sudo exportfs -a
ブートローダーのインストール
- 作ったカーネルとinitrd(初期RAMディスク)をコピー
$ sudo cp /srv/nfs/compute-root/boot/vmlinuz-* /srv/tftp/vmlinuz $ sudo cp /srv/nfs/compute-root/boot/initrd.img-* /srv/tftp/initrd.img
- 読み取り権限を与える
$ sudo chmod 644 /srv/tftp/vmlinuz $ sudo chmod 644 /srv/tftp/initrd.img
BIOSを使う場合
- BIOSによるPXEブートのブートローダーをインストール
$ sudo apt install -y pxelinux syslinux-common
- TFTPの公開ディレクトリを作成し、PXE用のブートローダーをコピー
$ sudo mkdir -p /srv/tftp $ sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/ $ sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /srv/tftp/ $ sudo chmod 644 /srv/tftp/pxelinux.0 $ sudo chmod 644 /srv/tftp/ldlinux.c32
- PXEブートメニュー(設定ファイル)を作成
$ sudo mkdir -p /srv/tftp/pxelinux.cfg $ sudo nano /srv/tftp/pxelinux.cfg/default
- /srv/tftp/pxelinux.cfg/default
DEFAULT ubuntu-diskless LABEL ubuntu-diskless KERNEL vmlinuz APPEND initrd=initrd.img root=/dev/nfs nfsroot=192.168.0.1:/srv/nfs/compute-root rw ip=dhcp netboot=nfs splashtype=none
UEFを使う場合
注意:自分の環境では未成功です。参考にとどめておいてください
- UEFIネットワークブート用のGRUBパッケージをインストール
$ sudo apt update $ sudo apt install -y grub-efi-amd64-signed shim-signed
- TFTPの公開ディレクトリに必要なファイルをコピー
$ sudo cp /usr/lib/shim/shimx64.efi.signed /srv/tftp/bootx64.efi $ sudo cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed /srv/tftp/grubx64.efi $ sudo chmod 644 /srv/tftp/bootx64.efi $ sudo chmod 644 /srv/tftp/grubx64.efi
- 実行権限付きの744という説もあります。
- GRUB用設定ファイルの作成(BIOSのときは pxelinux.cfg/default を使いましたが、GRUBでは grub.cfg というファイルを使用します)
$ sudo mkdir -p /srv/tftp/grub $ sudo nano /srv/tftp/grub/grub.cfg
- /srv/tftp/grub/grub.cfg
set default="0" set timeout=5 menuentry "Ubuntu 26.04 Compute Node (Diskless UEFI)" { linux /vmlinuz root=/dev/nfs nfsroot=192.168.0.1:/srv/nfs/compute-root rw ip=dhcp netboot=nfs splashtype=none initrd /initrd.img }
もしこの設定でPXEブートに失敗する場合は、grubnetx64.efi を使います。 (コピーしてきたbootx64.efi, grubx64.efi は削除して構いません)
$ sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/grubnetx64.efi $ sudo chmod 644 /srv/tftp/grubnetx64.efi
DHCP / TFTP サーバー(dnsmasq)の設定
軽量で設定が簡単な dnsmasq を使って、DHCPとTFTPを同時に立ち上げます。
$ sudo apt install -y dnsmasq $ sudo nano /etc/dnsmasq.conf
DHCPサーバーの設定についてはDnsmasqの基本設定を参考にしてください。
- /etc/dnsmasq.conf
# # (DHCPサーバーの設定は略) # # クライアントのアーキテクチャ(PXEの識別子)を定義 dhcp-match=set:bios,option:client-arch,0 dhcp-match=set:efi64,option:client-arch,7 dhcp-match=set:efi64,option:client-arch,9 # BIOSマシンには pxelinux.0 を送る dhcp-boot=tag:bios,pxelinux.0 # UEFI(64bit)マシンには bootx64.efi (Shim) を送る dhcp-boot=tag:efi64,bootx64.efi dhcp-boot=tag:efi64,grubnetx64.efi # grubnetx64.efiを使用する場合はこちら # TFTPサーバーの有効化 enable-tftp tftp-root=/srv/tftp
dnsmasq を再起動します:
$ sudo systemctl restart dnsmasq
計算ノードの起動確認
- 計算ノードのディスプレイとキーボードを繋ぎ、電源を入れます。
- BIOS/UEFI設定画面を開き、以下を確認・変更します。
- Secure Boot: Disabled(SecurityまたはBootのタブから)
- Network Stack / PXE Boot: Enabled
- Boot Priority: Network Boot (PXE) を最優先にする。
- Boot Mode: BIOS (Legacy または CSM) , UEFIのどちらかを確認
設定を保存して再起動すると、DHCPからIPを取得し、ヘッドノードからカーネルをダウンロードしてディスクレスでUbuntu Serverが起動します。
うまくPXEブートできない場合
$ sudo tail -f /var/log/syslog | grep dnsmasq
で監視できますので、どのようなエラーメッセージが出ている確認して修正します。
Ubuntu serverのインストール
「Ubuntu Base」は、コンテナ(Dockerなど)や最小限の組み込みシステム向けに提供されている「最小限の骨組みだけ」のOSです。
通常のUbuntu Serverに入っているような標準コマンド、ネットワーク管理ツール(netplanやsystemd-networkd)、高度なシェル(bashの補完機能)、パッケージ管理の基本ツールすら、最初は一切入っていません。
ここから使い慣れた「普通のUbuntu Server」にするには、ヘッドノード側からchroot環境に入り、Ubuntuの標準サーバー環境を構成するパッケージ群(メタパッケージ)を一括インストールします。
- 仮想ファイルシステムのマウントと一時的なDNS設定(パッケージダウンロード用)のコピー
$ sudo mount --bind /dev /srv/nfs/compute-root/dev $ sudo mount --bind /proc /srv/nfs/compute-root/proc $ sudo mount --bind /sys /srv/nfs/compute-root/sys $ sudo cp /etc/resolv.conf /srv/nfs/compute-root/etc/resolv.conf
- chroot環境へ入る
$ sudo chroot /srv/nfs/compute-root
- Ubuntu Serverの標準環境(最小構成)を一括インストール ※少し容量が大きいので数分かかります
$ apt update $ apt install -y ubuntu-server
- テキストエディタやネットワークツールの確認
$ apt install -y nano vim netplan.io iputils-ping curl wget build-essential
- chroot環境を抜けて、マウントの解除と後片付け
$ exit $ sudo umount /srv/nfs/compute-root/dev $ sudo umount /srv/nfs/compute-root/proc $ sudo umount /srv/nfs/compute-root/sys $ sudo rm /srv/nfs/compute-root/etc/resolv.conf
参考資料
PXEブートのやりかた
ディスクレス
