====== 概要 ====== * 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 < /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 < /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 /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 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という説もあります。 * [[https://np2lkoo.hatenablog.com/entry/2020/08/16/090150|PXEでディスクレスLinux (CentOS)クライアントをBootする(UEFI編) - クーの自由研究]] - GRUB用設定ファイルの作成(BIOSのときは pxelinux.cfg/default を使いましたが、GRUBでは grub.cfg というファイルを使用します) $ sudo mkdir -p /srv/tftp/grub $ sudo nano /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の基本設定]]を参考にしてください。 # # (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ブートのやりかた * http://lab.astamuse.co.jp/entry/2018/10/24/160000 * https://blog.dshimizu.jp/article/901 * https://qiita.com/hino9966/items/7c7043094a0ad3928e78 ディスクレス * https://www.hiroom2.com/2017/07/02/ubuntu-1604-pxeboot-thin-client-nfs-ja/ * https://adsaria.hatenadiary.org/entry/20090206/1233905956 * https://sites.google.com/a/g.wakayama-u.jp/yasue/linux/networkboot-with-linuxmint17 * https://blog.michinari-nukazawa.com/2015/09/pxe-boot-ubuntu-1404-on-pxe-pdhcp.html