5.11. bootc-image-builder を使用したステートレス PXE イメージのビルド


bootc-image-builder ツールを使用すると、bootc コンテナーイメージを、カーネル、initrd、squashfs ルートファイルシステムなどのアーティファクトセットを含む pxe-tar-xz イメージタイプに変換できます。このイメージタイプはネットワークブートに適しています。

前提条件

  • bootc コンテナー。
  • dracut-live および squashfs-tools パッケージが Containerfile に含まれている。
  • コンテナーイメージが、initramfs に組み込まれた dmsquash-live モジュールを使用してビルドされている。例については、Containerfile を参照してください。
  • 生成されたアーティファクトをホストするための正常に機能する TFTP または HTTP サーバー。

手順

  1. Containerfile を作成します。

    FROM quay.io/<namespace>/<image>:latest
    RUN dnf -y install dracut-live squashfs-tools && dnf clean all
    # Override using composefs for ostree (it is incompatible with the squashfs rootfs)
    RUN cat <<EOF > /usr/lib/ostree/prepare-root.conf
    [composefs]
    enabled = no
    [sysroot]
    readonly = true
    EOF
    # Include the dmsquash-live module in the initramfs
    RUN cat <<EOF > /usr/lib/dracut/dracut.conf.d/40-pxe.conf
    compress="xz"
    add_dracutmodules+=" qemu qemu-net livenet dmsquash-live "
    early_microcode="no"
    EOF
    
    # Rebuild the initrd
    RUN set -xe; kver=$(ls /usr/lib/modules); env DRACUT_NO_XATTR=1 dracut -vf /usr/lib/modules/$kver/initramfs.img "$kver"
    
    # Mask services that aren't compatible with running from the rootfs
    RUN systemctl mask bootc-generic-growpart.service bootc-publish-rhsm-facts.service
    RUN bootc container lint
  2. コンテナーイメージをビルドします。

    $ podman build -f ./Containerfile -t bootc-dracut
  3. bootc-image-builder を実行して tar ファイルを作成します。

    $ mkdir -p ./output
    $ sudo podman run \
        --rm \
        -it \
        --privileged \
        --pull=newer \
        --security-opt label=type:unconfined_t \
        -v ./config.toml:/config.toml:ro \
        -v ./output:/output \
        registry.redhat.io/rhel10/bootc-image-builder:latest \
        --type pxe-tar-xz \
        --local \
        localhost/bootc-dracut:latest

    Containerfile がリモートシステム上にある場合は、localhost/bootc-dracut:latest を正しい URL に置き換えてください。

    生成される tar ファイルは、パッケージベースの pxe-tar-xz イメージの場合と同じです。唯一の違いは、grub.cfg ファイルのカーネルコマンドラインに ostree=… が追加されていることと、および rootfs.img ファイルがパッケージベースのシステムではなく OSTree システムであることです。

検証

デプロイする前に、コンテナーイメージが正しくビルドされており、必要な設定ファイルとモジュールがイメージに含まれていることを確認します。

  1. 作成したコンテナーを調べます。

    $ podman run --rm -it localhost/bootc-dracut:latest /usr/bin/bash
  2. /usr/lib/ostree/prepare-root.conf および /usr/lib/dracut/dracut.conf.d/40-pxe.conf ファイルが正しく作成されたことを確認します。
  3. initramfs モジュールを確認し、dmsquash-live モジュールと ostree モジュールが存在することを確認します。

    $ lsinitrd --mod /usr/lib/modules//initramfs.img*

トラブルシューティング

GRUB メニューが利用できない
  • 原因: EFI バイナリーまたは設定ファイルが誤った場所に配置されています。
  • 解決策: grub.cfg ファイルと grubx64.efi ファイルが同じディレクトリーにあることを確認します。BOOTX64.EFIgrubx64.efi、および grub.cfg ファイルを、TFTP サーバーが指すディレクトリーのルートに配置します。
rootfs.img ファイルの読み込みに失敗する
  • 原因: [FAILED] Failed to start initrd-switch-root.service - Switch Root.
  • 解決策: initramfs に dmsquash-live モジュールが含まれていることを確認します。
  • 原因: curlrootfs.img ファイルのダウンロードを試みるループに陥っています。Warning: failed to download live image: error 253
  • 解決策: rootfs.img ファイルが grub.cfg ファイルの root=live:… で指定されている場所に存在することを確認します。HTTP サーバーのログを確認し、リクエストパスが想定される場所と一致していることを確認します。
OSTree ルートのマウントに失敗する
  • 原因: ostree-prepare-root: Couldn’t find specified OSTree root
  • 解決策: grub.cfg ファイルが rootfs.img ファイルと一致していることを確認します。つまり、両方のファイルが同じ tar ファイルに由来するものであることを確認します。grub.cfg ファイルの ostree=… エントリーが、rootfs.img ファイル内のパスを指している必要があります。通常、rootfs.img ファイルが grub.cfg ファイルと一致しない場合に不一致が発生するのは、ビルドプロセスが OSTree ディレクトリーからこの UUID を設定するためです。
  • 原因: Failed to mount composefs: composefs: failed to mount: Input/output error
  • 解決策: prepare-root.conf ファイルで composefs が無効になっていることを確認します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る