RHEL for Edge イメージの作成、インストール、および管理


Red Hat Enterprise Linux 10

RHEL 10 を使用した Edge システムの作成、デプロイ、管理

Red Hat Customer Content Services

概要

image mode for RHEL を使用して、エッジデプロイメントに適したオペレーティングシステムイメージを構築できます。次に、リモートでエッジサーバーにイメージをインストールし、デプロイメントをセキュアに管理およびスケーリングできます。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 RHEL for Edge イメージの概要

RHEL for Edge イメージは、Edge サーバーで RHEL をリモートにインストールするシステムパッケージを含む rpm-ostree イメージです。

システムパッケージには以下が含まれます。

  • Base OS パッケージ
  • コンテナーエンジンとしての Podman
  • 追加の RPM Package Manager (RPM) コンテンツ

RHEL イメージとは異なり、RHEL for Edge はイミュータブルなオペレーティングシステムです。つまり、次の特性を持つ read-only root ディレクトリーが含まれています。

  • パッケージがルートディレクトリーから分離されます。
  • 各バージョンのオペレーティングシステムが個別にデプロイされます。したがって、必要に応じてシステムを以前のデプロイメントにロールバックできます。
  • ネットワーク経由で効率的な更新を実現します。
  • 複数のオペレーティングシステムブランチとリポジトリーをサポートします。
  • ハイブリッド rpm-ostree パッケージシステムが含まれています。

Bare Metal、Appliance、および Edge サーバーに RHEL for Edge イメージをデプロイすることができます。

RHEL for Edge イメージを使用すると、次の利点が得られます。

アトミックなアップグレード
各更新の状態を把握できます。システムを再起動するまで変更が反映されません。
カスタムヘルスチェックとインテリジェントなロールバック
カスタムヘルスチェックを作成できます。ヘルスチェックが失敗した場合、オペレーティングシステムが以前の安定した状態にロールバックされます。
コンテナー中心のワークフロー
イメージの更新がバックグラウンドで段階的に行われるため、ワークロードによるシステムの停止が最小限に抑えられます。
最適化された Over-the-Air 更新
効率的な over-the-air (OTA) 差分更新により、接続が断続的であっても、システムを最新の状態に維持できます。

1.1. RHEL RPM イメージと RHEL for Edge イメージの違い

従来のパッケージベースの RPM 形式で RHEL システムイメージや、RHEL for Edge (rpm-ostree) イメージを作成できます。

従来のパッケージベースの RPM を使用して、従来のデータセンターに RHEL をデプロイすることができます。ただし、RHEL for Edge イメージを使用すると、従来のデータセンター以外のサーバーに RHEL をデプロイすることができます。このサーバーには、データが生成されるソース、つまりエッジサーバーに最も近い場所で大量のデータの処理を行うシステムが含まれます。

RHEL for Edge (rpm-ostree) イメージはパッケージマネージャーではありません。個々のファイルではなく、完全な起動可能なファイルシステムツリーのみをサポートします。これらのイメージには、これらのファイルがどのように生成されたか、それらの起源に関連するものなど、個々のファイルに関する情報は含まれていません。

rpm-ostree イメージには、追加のアプリケーションを /var ディレクトリーにインストールするための別のメカニズムであるパッケージマネージャーが必要です。これにより、rpm-ostree イメージは、/var ディレクトリーおよび /etc ディレクトリーの状態を維持しながら、オペレーティングシステムを変更しないようにします。アトミック更新により、更新のロールバックとバックグラウンドステージングが可能になります。

RHEL for Edge イメージがパッケージベースの RHEL RPM イメージとどのように異なるかを確認するには、以下の表を参照してください。

Expand
表1.1 RHEL RPM イメージと RHEL for Edge イメージの違い

主な属性

RHEL RPM イメージ

RHEL for Edge イメージ

OS アセンブリー

パッケージをローカルでアセンブルして、イメージを形成できます。

パッケージは、システムにインストールできる OSTree に組み立てられます。

OS の更新

dnf update を使用して、有効なリポジトリーから利用可能な更新を適用することができます。

/etc/ostree/remotes.d/ の OSTree リモートで新しいコミットが利用可能な場合は、rpm-ostree upgrade を使用して更新をステージングできます。更新はシステムの再起動時に有効になります。

リポジトリー

パッケージには DNF リポジトリーが含まれています。

パッケージには OSTree リモートリポジトリーが含まれています。

ユーザーアクセスパーミッション

読み書き

読み取り専用 (/usr)

データの永続性

イメージを tmpfs 以外のマウントポイントにマウントできます。

/etc/var が読み書き可能で、永続的なデータを含んでいます。

第2章 rpm-ostree ベースのデプロイ済みシステムから bootc ベースのシステムへの移行

RHEL 10.0 以降、RHEL Image Builder を使用して RHEL for Edge イメージをビルドできなくなりました。RHEL 10.0 以降のバージョンでは、OSbuild を使用したエッジアーティファクトの構築はサポートされなくなりました。代わりに、image mode for RHEL を使用して、エッジデプロイメントに適したオペレーティングシステムイメージを構築できます。必要に応じて、RHEL 9 で RHEL Image Builder を引き続き使用して、RHEL for Edge アーティファクトをビルドすることもできます。

image mode for RHEL を使用するには、RHEL 9 Image Builder から image mode for RHEL 10 にアップグレードし、image mode for RHEL を使用して、Edge のデプロイメントに使用できる起動可能なコンテナーイメージを構築してください。

image mode for RHEL 機能では、registry.redhat.io/rhel9/rhel-bootc にあるコンテナーイメージからオペレーティングシステムをカスタマイズできます。基本的な RHEL for Edge OSTree コミットと比較して、サイズと内容が類似した、より小さな bootc ベースイメージを最初から構築することもできます。

2.1. Image Mode for RHEL

Red Hat Enterprise Linux (RHEL) のイメージモードは、コンテナーネイティブアプローチを使用して、オペレーティングシステムを bootc ベースイメージ (rhel-bootc) として構築、デプロイ、管理するデプロイメント方法です。bootc ベースイメージ (rhel-bootc) には、カーネル、ファームウェア、ブートローダーなど、起動可能なオペレーティングシステムに必要なコンポーネントが含まれています。他のコンテナーと同じように、オペレーティングシステムを構築、デプロイ、管理できます。

image mode for RHEL を使用すると、アプリケーションコンテナーと同じツールと手法を使用して、オペレーティングシステムを構築、テスト、およびデプロイできます。Image Mode for RHEL は、registry.redhat.io/rhel10/rhel-bootc bootc イメージを使用することで利用できます。RHEL bootc イメージは、従来は除外されていた起動に必要な追加コンポーネント (カーネル、initrd、ブートローダー、ファームウェアなど) が含まれている点で、既存のアプリケーションの Universal Base Images (UBI) とは異なります。

重要

Image Mode for RHEL は、ブループリントのカスタマイズによる rpm-ostree ファイルシステムをサポートしていません。osbuild-composer を使用して bootc イメージからディスクイメージを構築できません。代わりに、bootc-image-builder を使用して、bootc イメージからディスクイメージを生成します。

2.2. ベースイメージからカスタマイズされたイメージを構築する

Podman を使用してコンテナーイメージをビルドおよびテストできます。一般的な Containerfile の構造は次のとおりです。

FROM registry.redhat.io/rhel10/rhel-bootc:latest

RUN dnf -y install [software] [dependencies] && dnf clean all

ADD [application]
ADD [configuration files]

RUN [config scripts]
Copy to Clipboard Toggle word wrap

コンテナーを使用して RHEL システムを設定する例は、rhel-bootc-examples リポジトリーを参照してください。

2.3. ブループリントのカスタマイズと Containerfile のカスタマイズの対応表

次の表には、ブループリントのカスタマイズオプションと、Containerfile で使用される同等のコマンドが含まれています。

Expand
ブループリントコマンド指示

distro = "rhel-10."

FROM rhel-bootc:10

[[packages]]

name = "openssh-server" version = "8.*" などと指定します。

RUN dnf install <package name>

[[groups]]

name = "anaconda-tools"

RUN dnf group install <group_name>

[[containers]]

source = "quay.io/rhel/rhel:latest"

RUN podman pull docker.io/library/postgres:alpine

[customizations.kernel]

name = "kernel-debug" append = "nosmt=force"

RUN mkdir -p /usr/lib/bootc/kargs.d RUN cat <<`EOF` >> /usr/lib/bootc/kargs.d/console.toml kargs = ["console=ttyS0,114800n8","kernel-debug"] match-architectures = ["x86_64"] EOF

[customizations.rhsm.config.dnf_plugins.product_id]

enabled = true [customizations.rhsm.config.dnf_plugins.subscription_manager]

enabled = true [customizations.rhsm.config.subscription_manager.rhsm]

manage_repos = true [customizations.rhsm.config.subscription_manager.rhsmcertd]

auto_registration = true

COPY ./rhsm.conf /etc/rhsm/rhsm.conf

[customizations.rpm.import_keys]

files = [ "/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-18-primary", "/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-19-primary" ]

RUN mkdir -p /etc/pki/rpm-gpg/ COPY <host_path>/gpg_key /etc/pki/rpm-gpg//gpg_key

[[customizations.sshkey]]

user = "root" key = "PUBLIC SSH KEY"

# SSH keys COPY test.pub container_key.pub RUN mkdir -p .ssh && \ cat container_key.pub >> .ssh/authorized_keys && \ chmod 600 .ssh/authorized_keys && \ rm -f container_path_to_key.pub

[customizations.timezone]

timezone = "US/Eastern" ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]

RUN ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime

[customizations.locale]

languages = ["en_US.UTF-8"] keyboard = "us"

RUN cat <<`EOF` >> /etc/locale.conf LANG="en_US.UTF-8" EOF && \ cat <<`EOF` >> /etc/vconsole.conf KEYMAP=us EOF

[customizations.firewall]

ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]

RUN dnf install -y firewalld && \ dnf clean all && \ firewall-offline-cmd --new-zone=customzone && \ firewall-offline-cmd --zone=customzone --set-description="Custom firewall rules for the container" && \ firewall-offline-cmd --zone=customzone --add-service=ftp && \ firewall-offline-cmd --zone=customzone --add-service=ntp && \ firewall-offline-cmd --zone=customzone --add-service=dhcp && \ firewall-offline-cmd --zone=customzone --add-port=22/tcp && \ firewall-offline-cmd --zone=customzone --add-port=80/tcp && \ firewall-offline-cmd --zone=customzone --add-port=53/tcp && \ firewall-offline-cmd --zone=customzone --add-port=53/udp && \ firewall-offline-cmd --zone=customzone --add-port=30000-32767/tcp && \ firewall-offline-cmd --zone=customzone --add-port=30000-32767/udp && \ firewall-offline-cmd --set-default-zone=customzone

[[customizations.directories]]

path = "/etc/<dir-name>" mode = "0755" user = "root" group = "root" ensure_parents = false

#Directory: RUN mkdir /etc/<dir> RUN chown -R admin:wheel /etc/<dir> && \ chmod -R 644 /etc/<dir> #Files: RUN touch /etc/<myfile> RUN chown :widget /etc/<myfile> && \ chmod 600 /etc/<myfile>

[customizations]

installation_device = "/dev/sda"

RUN mkdir -p /usr/lib/bootc/kargs.d && \ cat <<`EOF` >> /usr/lib/bootc/kargs.d/console.toml kargs = ["inst.device=/dev/sda"] EOF

[customizations.ignition.embedded]

config = "eyJpZ25pdG…​.xIn1dfX0="

RUN mkdir -p /usr/lib/bootc/kargs.d && \ cat <<`EOF` >> /usr/lib/bootc/kargs.d/console.toml kargs = ["ignition.config.url=http://192.168.122.1/fiot.ign","rd.neednet=1"] EOF

[customizations.fdo]

manufacturing_server_url = "http://192.168.122.199:8080" diun_pub_key_insecure = "true" di_mfg_string_type_mac_iface = "enp2s0"

RUN dnf install -y fdo-init fdo-client && \ systemctl enable fdo-client-linuxapp.service

[customizations.openscap]

datastream = "/usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml" profile_id = "xccdf_org.ssgproject.content_profile_cis"

[customizations.openscap.json_tailoring] profile_id = "<name-of-profile-used-in-json-tailoring>-file" filepath = "/some/path/tailoring-file.json"

[[customizations.files]] path = "/the/path/tailoring-file.json" data = "<json-tailoring-file-contents>"

RUN dnf install -y openscap-utils && \ autotailor --output /some/path/tailoring-file.json \ --new-profille-id xccdf_org.ssgproject.content_profile_cis

[customizations]

fips = true

RUN mkdir -p /usr/lib/bootc/kargs.d && \ cat <<`EOF` >> /usr/lib/bootc/kargs.d/01-fips.toml kargs = ["fips=1"] EOF && \ update-crypto-policies --no-reload --set FIPS

2.3.1. image mode for RHEL を使用して同様の RHEL for Edge イメージを作成する

image mode for RHEL を使用してエッジイメージを作成するには、OSTree コミットと共通のパッケージで足りないものを手動でインストールする必要があります。これらのパッケージのほとんどは bootc イメージに含まれていますが、次のパッケージが欠けています。

  • clevis
  • clevis-dracut
  • clevis-luks
  • greenboot
  • greenboot-default-health-checks
  • fdo-client
  • fdo-owner-cli

不足しているパッケージをインストールし、同様の RHEL for Edge イメージを作成するには、次の手順に従います。

前提条件

  • 既存の RHEL for Edge rpm-ostree ベースのデプロイ済みシステム。

手順

  1. 次の内容の Containerfile を作成します。

    FROM registry.io.redhat.com/rhel10/rhel-bootc:latest
    
    RUN dnf install -y  \
        clevis  \
        clevis-dracut  \
        clevis-luks  \
        greenboot  \
        greenboot-default-health-checks  \
        fdo-client  \
        fdo-owner-cli
    # (Optionl) Extra packages often used in edge
    # RUN dnf install -y
    #     dracut-config-generic  \
    #     platform-python  \
    #     pinentry  \
    #     firewalld  \
    #     iptables  \
    #     NetworkManager-wifi  \
    #     NetworkManager-wwan  \
    #     wpa_supplicant  \
    #     traceroute  \
    #     rootfiles  \
    #     policycoreutils-python-utils  \
    #     setools-console  \
    #     rsync  \
    #     usbguard
    RUN systemctl enable NetworkManager.service  \
        greenboot-grub2-set-counter.service  \
        greenboot-grub2-set-success.service  \
        greenboot-healthcheck.service  \
        greenboot-rpm-ostree-grub2-check-fallback.service  \
        greenboot-status.service  \
        greenboot-task-runner.service
        redboot-auto-reboot.service  \
        redboot-task-runner.service"
    Copy to Clipboard Toggle word wrap
  2. 同様の RHEL for Edge のカスタマイズされた bootc イメージを構築します。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap
  3. オプション: イメージをプッシュします:

    $ podman push quay.io/<namespace>/<image>:<tag>
    Copy to Clipboard Toggle word wrap

検証

  • すべてのイメージをリスト表示します。

    $ podman images
    Copy to Clipboard Toggle word wrap

2.4. podman build を使用してカスタマイズイメージを構築する

RHEL 9.6 以降では、RHEL Image Builder を引き続き使用してエッジインストールイメージを作成できます。image mode for RHEL を使用して、コンテナーイメージを設定し、デプロイメント用のディスクイメージを作成することもできます。RHEL Image Builder を引き続き使用する場合は、RHEL for Edge イメージの作成、インストール、および管理 を参照してください。

image mode for RHEL を使用して新しいディスクイメージを作成するには、次の手順に従います。

2.4.1. image mode を使用して 9.6 RHEL for Edge イメージを作成する

エッジホスト用のイメージモード RHEL を構築するには、指示を含む Containerfile を作成します。次に、bootc-image-builder を使用して、作成されたエッジホストを Anaconda ISO でインストールします。

前提条件

  • ホストマシンに Podman がインストールされている。
  • bootc-image-builder ツールを実行し、コンテナーを --privileged モードで実行して、イメージをビルドするための root アクセスがある。

手順

  1. Containerfile を作成します。例:

    $ cat Containerfile
    FROM registry.redhat.io/rhel9/rhel-bootc:9.6
    
    # Packages
    RUN dnf install -y zsh && dnf clean all
    
    # Group install
    RUN dnf group -y install "Development Tools"
    
    # Hostname
    RUN echo "rock.paper.scissor" > /etc/hostname
    
    # Kernel
    RUN mkdir -p /usr/lib/bootc/kargs.d
    RUN cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["console=ttyS0,114800n8","kernel-debug"]
    match-architectures = ["x86_64"]
    EOF
    
    # Subscription-manager
    RUN dnf install subscription-manager
    
    # RPM config
    RUN mkdir -p /etc/pki/rpm-gpg/
    COPY <host_path>/gpg_key /etc/pki/rpm-gpg/gpg_key
    
    # Timezones
    RUN cat <<EOF >> /etc/localtime
    Asia/Bangkok
    EOF
    
    
    # Locale
    RUN cat <<EOF >> /etc/locale.conf
    LANG="en_US.UTF-8"
    EOF && \
    cat <<EOF >> /etc/vconsole.conf
    KEYMAP=us
    EOF
    
    
    # firewall
    RUN dnf install -y firewalld && \
        mkdir -p /etc/firewalld/zones
    RUN cat <<EOF >> /etc/firewalld/zones/customzone.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
        <short>Customzone</short>
        <description>Custom firewall rules for the container.</description>
    
        <!-- Allowed services -->
        <service name="ftp"/>
        <service name="ntp"/>
        <service name="dhcp"/>
    
        <!-- Blocked services (not explicitly listed) -->
        <!-- Removing telnet explicitly is unnecessary if it is not included -->
    
        <!-- Open specific ports -->
        <port protocol="tcp" port="22"/>
        <port protocol="tcp" port="80"/>
        <port protocol="tcp" port="53"/>
        <port protocol="udp" port="53"/>
        <port protocol="tcp" port="30000-32767"/>
        <port protocol="udp" port="30000-32767"/>
    </zone>
    EOF
    RUN firewall-offline-cmd --set-default-zone=customzone
    
    # systemd services
    RUN systemctl enable sshd
    
    #ignition
    RUN mkdir -p /usr/lib/bootc/kargs.d && \
    cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["ignition.config.url=http://192.168.122.1/fiot.ign","rd.neednet=1"]
    EOF
    
    #fdo
    RUN dnf install -y fdo-init fdo-client && \
    systemctl enable fdo-client-linuxapp.service
    
    #Repositories
    RUN mkdir -p /etc/yum.repos.d
    COPY custom.repo /etc/yum.repos.d/custom.repo
    
    #fips
    RUN mkdir -p /usr/lib/bootc/kargs.d && \
    cat <<EOF >>  /usr/lib/bootc/kargs.d/01-fips.toml
    kargs = ["fips=1"]
    EOF
    RUN dnf install -y crypto-policies-scripts && update-crypto-policies --no-reload --set FIPS
    Copy to Clipboard Toggle word wrap
  2. 現在のディレクトリーの Containerfile を使用して、<image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap

検証

  • すべてのイメージをリスト表示します。

    $ podman images
    REPOSITORY                                  TAG      IMAGE ID       CREATED              SIZE
    quay.io/<namespace>/<image>                          latest   b28cd00741b3   About a minute ago   2.1 GB
    Copy to Clipboard Toggle word wrap

2.4.2. image mode を使用して RHEL 10 for Edge イメージを作成する

RHEL 10 以降では、RHEL Image Builder がエッジアーティファクトをサポートしなくなったため、新しい RHEL for Edge イメージインストールを作成するには、bootc を使用します。

注記

利用可能なすべての RHEL Image Builder アーティファクトがイメージモードで使用できるわけではありません。つまり、bootc-image-builder を使用して特定のイメージタイプを作成できません。

  • 特に、simplified-installer はもう存在しません。代わりに、FDO などのワークフローには bootc-image-builder Anaconda ISO を使用します。

前提条件

  • ホストマシンに Podman がインストールされている。
  • bootc-image-builder ツールを実行し、コンテナーを --privileged モードで実行して、イメージをビルドするための root アクセスがある。

手順

  1. Containerfile を作成します。次の例には、例として使用できるいくつかのカスタマイズが含まれており、要件に合わない場合は削除できます。

    $ cat Containerfile
    FROM registry.redhat.io/rhel10/rhel-bootc:10.0
    
    # Packages
    RUN dnf install -y zsh && dnf clean all
    
    # Group install
    RUN dnf group -y install "Development Tools"
    
    # Kernel
    RUN mkdir -p /usr/lib/bootc/kargs.d
    RUN cat <<EOF >> /usr/lib/bootc/kargs.d/console.toml
    kargs = ["console=ttyS0,114800n8","kernel-debug"]
    match-architectures = ["x86_64"]
    EOF
    
    # Subscription-manager
    COPY ./rhsm.conf /etc/rhsm/rhsm.conf
    
    # RPM config
    RUN mkdir -p /etc/pki/rpm-gpg/
    COPY <host_path>/gpg_key /etc/pki/rpm-gpg//gpg_key
    
    # Additional groups
    RUN groupadd -g 1001 widget
    
    # Timezones
    RUN ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
    
    # Locale
    RUN cat <<EOF >> /etc/locale.conf
    LANG="en_US.UTF-8"
    EOF && \
    cat <<EOF >> /etc/vconsole.conf
    KEYMAP=us
    EOF
    
    
    # firewall
    RUN dnf install -y firewalld && \
        dnf clean all && \
        firewall-offline-cmd --new-zone=customzone && \
        firewall-offline-cmd --zone=customzone --set-description="Custom firewall rules for the container" && \
        firewall-offline-cmd --zone=customzone --add-service=ftp && \
        firewall-offline-cmd --zone=customzone --add-service=ntp && \
        firewall-offline-cmd --zone=customzone --add-service=dhcp && \
        firewall-offline-cmd --zone=customzone --add-port=22/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=80/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=53/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=53/udp && \
        firewall-offline-cmd --zone=customzone --add-port=30000-32767/tcp && \
        firewall-offline-cmd --zone=customzone --add-port=30000-32767/udp && \
        firewall-offline-cmd --set-default-zone=customzone
    
    # systemd services
    RUN systemctl enable httpd sshd && \
    systemctl disable telnetd && \
    systemctl mask rcpbind
    Copy to Clipboard Toggle word wrap
  2. 現在のディレクトリーの Containerfile を使用して、<image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap

検証

  • すべてのイメージをリスト表示します。

    $ podman images
    REPOSITORY                                  TAG      IMAGE ID       CREATED              SIZE
    quay.io/<namespace>/<image>                           latest   b28cd00741b3   About a minute ago   2.1 GB
    Copy to Clipboard Toggle word wrap

2.5. bootc-image-builder を使用してコンテナーをベースにディスクイメージを構築する

bootc-image-builder を使用して、コンテナーをベースにディスクイメージを作成できます。

2.5.1. bootc-image-builder のインストール

bootc-image-builder はコンテナーとしての使用が意図されており、RHEL で RPM パッケージとして利用することはできません。アクセスするには、以下の手順に従います。

前提条件

  • container-tools メタパッケージがインストールされている。メタパッケージには、Podman、Buildah、Skopeo などのすべてのコンテナーツールが含まれます。
  • registry.redhat.io に対して認証されている。詳細は、Red Hat コンテナーレジストリーの認証 を参照してください。

手順

  1. ログインして、registry.redhat.io に対する認証を行います。

    $ sudo podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  2. bootc-image-builder ツールをインストールします。

    $ sudo podman pull registry.redhat.io/rhel10/bootc-image-builder
    Copy to Clipboard Toggle word wrap

検証

  • ローカルシステムにプルしたすべてのイメージをリスト表示します。

    $ sudo podman images
    REPOSITORY                                    TAG         IMAGE ID      CREATED       SIZE
    registry.redhat.io/rhel10/bootc-image-builder  latest      b361f3e845ea  24 hours ago  676 MB
    Copy to Clipboard Toggle word wrap

2.5.2. RHEL 9.6 ディスクイメージに bootc-image-builder を使用する

bootc-image-builder を使用すると、ホストに起動可能なコンテナーをデプロイするために使用できるディスクイメージを作成できます。

前提条件

  • ホストマシンに Podman がインストールされている。
  • bootc-image-builder ツールを実行し、コンテナーを --privileged モードで実行して、イメージをビルドするための root アクセスがある。

手順

  1. オプション: ユーザーアクセスを設定するための config.toml を作成します。次に例を示します。

    [[customizations.user]]
    name = "user"
    password = "pass"
    key = "ssh-rsa AAA ... user@email.com"
    groups = ["wheel"]
    Copy to Clipboard Toggle word wrap
  2. イメージを手動でプルします。

    $ sudo podman pull quay.io/quay.io/<_namespace_>/<_image_>:<_tag_>
    Copy to Clipboard Toggle word wrap
  3. ビルドするイメージの output ディレクトリーを作成します。

    $ mkdir output
    Copy to Clipboard Toggle word wrap
  4. bootc-image-builder を実行してイメージを作成します。設定を追加しない場合は、-v $(pwd)/config.toml:/config.toml 引数を省略します。

    $ sudo podman run \
        --rm \
        -it \
        --privileged \
        --pull=newer \
        --security-opt label=type:unconfined_t \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        -v $(pwd)/config.toml:/config.toml \
        -v $(pwd)/output:/output \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type iso \
        --config /config.toml \
      quay.io/<namespace>/<image>:<tag>
    Copy to Clipboard Toggle word wrap

    .iso イメージは出力フォルダーにあります。

2.5.3. bootc-image-builder を使用して RHEL 10.0 ディスクイメージを作成する

RHEL 10 以降、RHEL Image Builder では、Edge 用に最適化された RHEL rpm-ostree カスタマイズイメージの作成がサポートされなくなりました。RHEL 10 の一部として Edge 環境用の新しい RHEL イメージを作成するには、image mode for RHEL を使用する必要があります。

注記

利用可能なすべての RHEL Image Builder アーティファクトがイメージモードで使用できるわけではありません。つまり、bootc-image-builder を使用して特定のイメージタイプを作成できません。simplified-installer はなくなりました。代わりに、FDO ワークフローには bootc-image-builder Anaconda ISO を使用します。

前提条件

  • ホストマシンに Podman がインストールされている。
  • bootc-image-builder ツールを実行し、コンテナーを --privileged モードで実行して、イメージをビルドするための root アクセスがある。

手順

  1. オプション: ユーザーアクセスを設定するための config.toml を作成します。次に例を示します。

    [[customizations.user]]
    name = "user"
    password = "pass"
    key = "ssh-rsa AAA ... user@email.com"
    groups = ["wheel"]
    Copy to Clipboard Toggle word wrap
  2. イメージを手動でプルします。

    $ sudo podman pull quay.io/<namespace>/<image>:_<tag>_
    Copy to Clipboard Toggle word wrap
  3. ビルドするイメージの output ディレクトリーを作成します。

    $ mkdir output
    Copy to Clipboard Toggle word wrap
  4. bootc-image-builder を実行してイメージを作成します。設定を追加しない場合は、-v $(pwd)/config.toml:/config.toml 引数を省略します。

    $ sudo podman run \
        --rm \
        -it \
        --privileged \
        --pull=newer \
        --security-opt label=type:unconfined_t \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        -v $(pwd)/config.toml:/config.toml \
        -v $(pwd)/output:/output \
        registry.redhat.io/rhel10/bootc-image-builder:latest \
        --type iso \
        --config /config.toml \
      quay.io/<namespace>/<image>:<tag>
    Copy to Clipboard Toggle word wrap

    .iso イメージは出力フォルダーにあります。

2.6. 既存の rpm-ostree インストールから image mode for RHEL 9.6 への切り替え

bootc switch コマンドを使用すると、既存の RHEL for Edge システムで image mode for RHEL を使用できます。

2.6.1. 既存のシステムグループとユーザー情報を Containerfile に追加する

異なるホストビルド間を切り替える場合は、bootc switch コマンドを使用して、既存のデプロイ済みシステムを bootc ベースのシステムに移行できます。

重要

一部のユーザー ID とグループ ID は rhel-bootc イメージ と RHEL for Edge 間で異なります。これは、ssh_keys などの複数のグループとユーザーに影響します。その結果、ID が誤って指定されたグループに秘密鍵が所属するため、公開鍵を使用してエッジシステムにアクセスできなくなります。

Image Mode システムは、altfiles を使用して、/user/lib/passwd のユーザーと /user/lib/group のグループを管理します。この問題を回避するには、既存の RHEL for Edge システムのグループとユーザーの情報を抽出し、Containerfile の一部として固定する必要があります。Containerfile を設定して、ローカルの lib/group ファイルをコンテナーイメージにコピーします。

秘密鍵の権限は手動で変更できます。/etc フォルダーはエッジシステムで変更可能です。ただし、bootc switch コマンドを実行した後、イメージモードベースのシステムでは ssh_keys グループが ID 999 に設定されるため、問題は解決されません。この値は RHEL bootc ベースイメージから取得され、このように ID 101 から ID 999 にドリフトされるため、エッジシステムは SSH 経由でアクセスできなくなります。この問題を解決するには、次の手順に従います。

前提条件

  • 既存の RHEL for Edge rpm-ostree ベースのシステム。
  • RHEL 9 システムをサブスクライブしている。詳細は、RHEL システム登録のスタートガイド ドキュメントを参照してください。
  • コンテナーレジストリーがある。レジストリーをローカルに作成することも、Quay.io サービスで無料アカウントを作成することもできます。Quay.io アカウントを作成するには、Red Hat Quay.io ページを参照してください。
  • 実稼働用または開発者サブスクリプションを持つ Red Hat アカウントがある。無料の開発者サブスクリプションは、Red Hat Enterprise Linux Overview ページで入手できます。
  • registry.redhat.io に対して認証済みである。詳細は、Red Hat コンテナーレジストリーの認証 の記事を参照してください。

手順

  1. RHEL for Edge システムからユーザーとグループの情報を抽出します。

    $ mkdir -p ./usr/lib
    $ ssh admin@192.168.100.50 'cat /lib/passwd' > ./usr/lib/passwd
    $ ssh admin@192.168.100.50 'cat /lib/group' > ./usr/lib/group
    Copy to Clipboard Toggle word wrap
  2. Containerfile で指定して、bootc ベースのシステムで欠けている RHEL for Edge パッケージを含めます。さらに、COPY コマンドを使用して、RHEL for Edge システムから抽出された grouppasswd の内容を追加します。以下に例を示します。

    FROM registry.redhat.io/rhel9/rhel-bootc
    WORKDIR /tmp
    RUN dnf -y install ModemManager \
                       NetworkManager-wifi \
                       NetworkManager-wwan \
                       audit \
                       checkpolicy \
                       clevis \
                       clevis-dracut \
                       clevis-luks \
                       clevis-pin-tpm2 \
                       clevis-systemd \
                       containernetworking-plugins \
                       dnsmasq \
                       dracut-config-generic \
                       fdo-client \
                       fdo-owner-cli \
                       firewalld \
                       firewalld-filesystem \
                       greenboot \
                       greenboot-default-health-checks \
                       grubby \
                       ignition \
                       ignition-edge \
                       ipset \
                       iwl100-firmware \
                       iwl1000-firmware \
                       iwl105-firmware \
                       iwl135-firmware \
                       iwl2000-firmware \
                       iwl2030-firmware \
                       iwl3160-firmware \
                       iwl5000-firmware \
                       iwl5150-firmware \
                       iwl6050-firmware \
                       iwl7260-firmware \
                       libsecret \
                       pinentry \
                       policycoreutils-python-utils \
                       python3-distro \
                       python3-setools \
                       rsync \
                       setools-console \
                       tmux \
                       traceroute \
                       usbguard \
                       usbguard-selinux \
                       wireless-regdb \
                       wpa_supplicant
    
    COPY etc /etc
    # You can find the passwd and group content that were extracted from the RHEL for Edge system usr/lib/ in your current working directory. You can copy the content into the container image with the following step:
    COPY usr /usr
    Copy to Clipboard Toggle word wrap
  3. bootc イメージをビルドし、レジストリーにプッシュします。

    $ podman build -f Containerfile -t quay.io/<namespace>/<image>:<tag> .
    $ podman push quay.io/<namespace>/<image>:<tag>
    Copy to Clipboard Toggle word wrap
  4. 新しく作成された起動可能なコンテナーイメージに対して bootc switch コマンドを実行します。

    $ ssh admin@192.168.100.50
    $ sudo bootc switch quay.io/<namespace>/<image>:<tag>
    $ sudo reboot
    Copy to Clipboard Toggle word wrap

検証

エッジシステムを起動可能なコンテナーイメージで再起動した後、/lib/passwd/lib/group の内容が OSTree システムから抽出された内容と一致していることを確認します。

  1. /lib/passwd の内容を確認します。

    $ cat /lib/passwd
    Copy to Clipboard Toggle word wrap
  2. /lib/group の内容を確認します。

    $ cat /lib/group
    Copy to Clipboard Toggle word wrap

2.6.2. RAW イメージを使用してインストールされた 9.6 RHEL for Edge を image mode に切り替える

生のイメージを使用してインストールした既存の 9.6 RHEL for Edge を使用して、image mode for RHEL に切り替えます。

前提条件

  • 既存の 9.6 RHEL for Edge が Raw イメージとともにインストールされている。

手順

  1. イメージを更新します。RHEL for Edge イメージの更新 を参照してください。
  2. 既存のイメージを RHEL Image Builder からイメージモードに切り替えます。

    1. rhel-bootc からイメージを構築します。以下に例を示します。

      $ cat Containerfile
      FROM registry.redhat.io/rhel9/rhel-bootc:latest
      RUN dnf install -y  \
          clevis  \
          clevis-dracut  \
          clevis-luks  \
          fdo-client  \
          fdo-owner-cli
      Copy to Clipboard Toggle word wrap
  3. 現在のディレクトリーの Containerfile を使用して <image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap
    1. イメージをレジストリーにプッシュします。

      $ podman push quay.io/<namespace>/<image>:_<tag>_
      Copy to Clipboard Toggle word wrap
    2. デバイス上で bootc switch を実行します。

      $ bootc switch quay.io/<namespace>/<image>:_<tag>_
      Copy to Clipboard Toggle word wrap
    3. systemctl reboot を実行します。

      $ sudo systemctl reboot
      Copy to Clipboard Toggle word wrap

検証

  • RHEL for Edge システムに接続し、bootc status を使用します。

    # bootc status
    Copy to Clipboard Toggle word wrap

simplified-installer イメージを使用してインストールした既存の 9.6 RHEL for Edge を使用します。

前提条件

  • simplified-installer イメージを使用してインストールされた既存の 9.6 RHEL for Edge。

手順

  1. bootc がインストールされているかどうかを確認します。

    $ rpm -qa | bootc
    Copy to Clipboard Toggle word wrap

    イメージを最新の rpm-ostree インストールに更新します。RHEL for Edge イメージの更新 を参照してください。

    1. rhel-bootc からイメージをビルドします。以下に例を示します。

      $ cat Containerfile
      FROM registry.redhat.io/rhel9/rhel-bootc:latest
      RUN dnf install -y  \
          clevis  \
          clevis-dracut  \
          clevis-luks  \
          fdo-client  \
          fdo-owner-cli
      Copy to Clipboard Toggle word wrap
  2. 現在のディレクトリーの Containerfile を使用して <image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap
    1. イメージをレジストリーにプッシュします。

      $ podman push quay.io/<namespace>/<image>:_<tag>_
      Copy to Clipboard Toggle word wrap
    2. bootc switch を実行して、デバイスをレジストリーにプッシュしたイメージに切り替えます。

      $ bootc switch quay.io/<namespace>/<image>:_<tag>_
      Copy to Clipboard Toggle word wrap
    3. systemctl reboot を実行します。

      $ sudo systemctl reboot
      Copy to Clipboard Toggle word wrap
  3. 検証

    • RHEL for Edge システムに接続し、bootc status を使用します。

      # bootc status
      Copy to Clipboard Toggle word wrap

2.7. 既存の rpm-ostree インストールから image mode for RHEL 10.0 へのアップグレード

次の手順に従って、image mode for RHEL 10.0 を使用できるように、RHEL 9.6 をベースにする既存の RHEL for Edge システムをアップグレードします。

2.7.1. 既存の RHEL for Edge システムを image mode for RHEL10.0 にアップグレードする

image mode for RHEL を使用して、既存の RHEL for Edge 9.6 システムを RHEL 10.0 にアップグレードできます。

前提条件

  • 既存の 9.6 RHEL for Edge システム。

手順

  1. イメージを更新します。RHEL for Edge イメージの更新 を参照してください。

    $ sudo rpm-ostree upgrade
    $ sudo systemctl reboot
    Copy to Clipboard Toggle word wrap
  2. RHEL 10.0 を使用する bootc イメージを構築します。以下に例を示します。

    $ cat Containerfile
    FROM registry.redhat.io/rhel10/rhel-bootc:10.0
    RUN dnf install -y  \
        clevis  \
        clevis-dracut  \
        clevis-luks  \
        fdo-client  \
        fdo-owner-cli
    Copy to Clipboard Toggle word wrap
  3. 現在のディレクトリーの Containerfile を使用して <image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap
  4. イメージをレジストリーにプッシュします。

    $ podman push quay.io/<namespace>/<image>:_<tag>_
    Copy to Clipboard Toggle word wrap
  5. デバイス上で bootc switch を実行します。

    $ bootc switch quay.io/<namespace>/<image>:_<tag>_
    Copy to Clipboard Toggle word wrap
    1. システムを再起動します。

      $ sudo systemctl reboot
      Copy to Clipboard Toggle word wrap

検証

  • RHEL for Edge システムに接続し、bootc status を使用します。

    # bootc status
    Copy to Clipboard Toggle word wrap

第3章 FDO を使用した Edge デバイスの RHEL の自動プロビジョニングとオンボーディング

image mode for RHEL を使用して、エッジデプロイメントに適したオペレーティングシステムイメージを構築します。FIDO Device Onboarding (FDO) プロセスは、Edge デバイスを自動的にプロビジョニングしてオンボーディングし、ネットワークに接続されている他のデバイスやシステムとデータを交換します。

重要

Red Hat は、テクノロジープレビュー機能として FDO プロセスを提供し、安全なネットワークで実行する必要があります。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。

3.1. FIDO Device Onboarding (FDO) プロセス

FIDO Device Onboarding (FDO) は、以下を行うプロセスです。

  • デバイスをプロビジョニングし、オンボードします。
  • このデバイスの認証情報を自動的に設定します。FDO プロセスは、新しいデバイスのインストールによってトリガーされる自動オンボーディングメカニズムです。
  • このデバイスがネットワーク上で安全に接続および対話できるようにします。

FIDO Device Onboarding (FDO) を使用すると、IoT アーキテクチャーに新しいデバイスを追加することで、セキュアなデバイスオンボーディングを実行できます。これには、信頼され、実行中の残りのシステムと統合する必要がある特定のデバイス設定が含まれます。FDO プロセスは、新しいデバイスのインストールによってトリガーされる自動オンボーディングメカニズムです。

FDO プロトコルは次のタスクを実行します。

  • デバイスの大規模かつセキュアなオンボーディングに必要な自動化を行うとともに、信頼と所有権の連鎖を解決します。
  • 製造段階でデバイスの初期化を実行し、デバイスを実際に使用するために遅延バインディングを実行します。これは、デバイスの管理システムへの実際のバインドは、デバイスの手動設定を必要とせずに、デバイスの最初の起動時に行われることを意味します。
  • 自動化されたセキュアなデバイスオンボーディング、つまり、エッジロケーションに専門の担当者を必要としないゼロタッチインストールとオンボーディングをサポートします。デバイスがオンボーディングされると、管理プラットフォームはそのデバイスに接続し、パッチの適用、更新、ロールバックを実行できます。

FDO を使用すると、次の利点が得られます。

  • FDO は、デバイスを管理プラットフォームに登録するための安全で簡単な方法です。キックスタート設定をイメージに埋め込む代わりに、FDO はデバイスの初回起動時にデバイス認証情報を ISO イメージに直接適用します。
  • FDO は、デバイスへのレイトバインディングの問題を解決し、安全な FDO チャネルを介して機密データを共有できるようにします。
  • FDO は、設定やその他のシークレットを登録してシステムに渡す前に、システムの ID と所有権を暗号で識別します。これにより、技術者以外のユーザーがシステムの電源を入れることができます。

FDO プロトコルは、次のサーバーに基づいています。

Manufacturing サーバー
  1. デバイス認証情報を生成します。
  2. プロセスの後半でデバイスの所有権を設定するために使用される、所有権バウチャーを作成します。
  3. デバイスを特定の管理プラットフォームにバインドします。
所有者管理システム
  1. Manufacturing サーバーから所有権バウチャーを受け取り、関連付けられたデバイスの所有者になります。
  2. プロセスの後半では、デバイス認証後にデバイスと所有者オンボーディングサーバー間にセキュアなチャネルを作成します。
  3. セキュアなチャネルを使用して、オンボーディングの自動化に必要なファイルやスクリプトなどの情報をデバイスに送信します。
Service-info API サーバー
Service-info API サーバーの設定とクライアントで利用可能なモジュールとに基づいて、SSH キーとファイルのコピー、コマンドの実行、ユーザーの作成、ディスクの暗号化など、ターゲットクライアントデバイスでのオンボーディングの最後の手順を実行します。
Rendezvous サーバー
  1. 所有者管理システムから所有権バウチャーを取得し、デバイスの UUID を所有者サーバー IP にマッピングします。次に、Rendezvous サーバーはデバイスの UUID をターゲットプラットフォームと照合し、このデバイスがどの所有者オンボーディングサーバーエンドポイントを使用する必要があるかをデバイスに通知します。
  2. 初回起動時に、Rendezvous サーバーはデバイスのコンタクトポイントになり、デバイスは所有者に送られ、デバイスと所有者が安全なチャンネルを確立できるようにします。
デバイスクライアント

これはデバイスにインストールされています。デバイスクライアントは、以下のアクションを実行します。

  1. オンボーディングの自動化が実行される複数のサーバーへのクエリーを開始します。
  2. TCP/IP プロトコルを使用してサーバーと通信します。

デバイスの初期化 では、デバイスは Manufacturing サーバーに接続して、FDO 認証情報、オペレーティングシステムにインストールされる一連の証明書とキー、および Rendezvous サーバーエンドポイント (URL) を取得します。また、所有者の割り当てを変更する必要がある場合に備えて、個別に保持される所有権バウチャーも取得します。

  1. デバイスが Manufacturing サーバーに接続します。
  2. Manufacturing サーバーがデバイスの所有権バウチャーとデバイス認証情報を生成します。
  3. 所有権バウチャーが所有者オンボーディングサーバーに転送されます。

オンサイトのオンボーディング では、デバイスはデバイス認証情報から Rendezvous サーバーエンドポイント (URL) を取得し、Rendezvous サーバーエンドポイントに接続してオンボーディングプロセスを開始します。これにより、デバイスは、所有者オンボーディングサーバーと Service Info API サーバーで構成される所有者管理システムにリダイレクトされます。

  1. 所有者オンボーディングサーバーは、所有権バウチャーを Rendezvous サーバーに転送し、Rendezvous サーバーは、所有権バウチャーを所有者にマッピングします。
  2. デバイスクライアントがデバイス認証情報を読み込みます。
  3. デバイスクライアントがネットワークに接続します。
  4. ネットワークに接続した後、デバイスクライアントは Rendezvous サーバーに接続します。
  5. Rendezvous サーバーは、所有者のエンドポイント URL をデバイスクライアントに送信し、デバイスを登録します。
  6. デバイスクライアントは、Rendezvous サーバーによって共有された所有者オンボーディングサーバーに接続します。
  7. デバイスは、デバイスキーを使用してステートメントに署名することにより、正しいデバイスであることを証明します。
  8. 所有者オンボーディングサーバーは、所有者バウチャーの最後のキーを使用してステートメントに署名することで、正しいサーバーであることを証明します。
  9. 所有者オンボーディングサーバーは、デバイスの情報を Service Info API サーバーに転送します。
  10. Service Info API サーバーは、デバイスの設定を送信します。
  11. デバイスがオンボードされます。

3.2. FDO 自動オンボーディングテクノロジー

以下は、FDO 自動オンボーディングに関連して使用されるテクノロジーです。

Expand
表3.1 OSTree および rpm-ostree の用語
テクノロジー定義

UEFI

Unified Extensible Firmware Interface

RHEL

Red Hat® オペレーティングシステム

rpm-ostree

背景イメージベースのアップグレード。

Greenboot

rpm-ostree 上の systemd の Healthcheck フレームワーク。

image mode for RHEL

コンテナーを使用してオペレーティングシステムアーティファクトのシステムを構築する新しいデプロイ方法。

コンテナー

Linux® コンテナーは、システムの他の部分から分離された 1 つ以上のプロセスのセットです。

Coreos-installer

RHEL イメージのインストールを支援し、UEFI でシステムを起動します。

FIDO FDO

設定およびオンボーディングデバイスをプロビジョニングするための仕様プロトコル。

3.3. RHEL for Edge デバイス用の自動プロビジョニングとオンボーディング

podman build を使用してイメージをビルドし、自動的にオンボードします。イメージを起動すると、ハードディスク上または仮想マシンのブートイメージとして使用できる RHEL for Edge システムがプロビジョニングされます。

RHEL for Edge デバイスを自動的にプロビジョニングしてオンボーディングする手順の概要は次のとおりです。

  1. RHEL システムをインストールして登録します。
  2. Containerfile を作成します。例:

    $ cat Containerfile
    FROM registry.redhat.io/rhel10/rhel-bootc:10
    #fdo
    RUN dnf install -y fdo-init fdo-client && \
    systemctl enable fdo-client-linuxapp.service
    
    RUN mkdir -p /usr/lib/bootc/kargs.d && \ cat <<`EOF` >> /usr/lib/bootc/kargs.d/console.toml kargs = ["inst.device=/dev/sda"] EOF
    Copy to Clipboard Toggle word wrap
  3. 現在のディレクトリーの Containerfile を使用して <image> イメージをビルドします。

    $ podman build -t quay.io/<namespace>/<image>:<tag> .
    Copy to Clipboard Toggle word wrap

    この時点で、FDO サーバーインフラストラクチャーが稼働している必要があり、所有者のインフラストラクチャーの一部である service-info API サーバーによって処理される特定のオンボーディングの詳細が設定されます。

  4. イメージをデバイスにインストールします。FDO クライアントはイメージ上で実行され、UEFI ディレクトリー構造によりイメージが起動可能になります。
  5. ネットワーク設定により、デバイスは Manufacturing サーバーに接続して、最初のデバイス認証情報の交換を実行できます。
  6. システムがエンドポイントに到達すると、デバイスに対してデバイスの認証情報が作成されます。
  7. デバイスは、デバイスの認証情報を使用して Rendezvous サーバーに到達します。この場合、Rendezvous サーバーが持つバウチャーに基づいて暗号化認証情報を確認し、Rendezvous サーバーはデバイスを所有者サーバーにリダイレクトします。
  8. デバイスは所有者サーバーに接続します。相互の信頼を確立し、Service-info API サーバーの設定に基づいてオンボーディングの最後の手順を行います。たとえば、デバイスに SSH キーをインストールして、ファイルを転送し、ユーザーの作成、コマンドの実行、ファイルシステムの暗号化などを行います。

3.4. キーおよび証明書の生成

FIDO Device Onboarding (FDO) インフラストラクチャーを実行するには、キーと証明書を生成する必要があります。FDO はこれらのキーと証明書を生成して、Manufacturing サーバーを設定します。サービスをインストールすると、FDO によって証明書と .yaml 設定ファイルが自動的に生成されます。再作成はオプションです。サービスをインストールして開始すると、デフォルト設定で実行されます。

重要

Red Hat は、テクノロジープレビュー機能として fdo-admin-tool ツールを提供し、安全なネットワークで実行する必要があります。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

  • fdo-admin-cli RPM パッケージをインストールしました

手順

  1. /etc/fdo ディレクトリーに鍵と証明書を生成します。

    $ for i in "diun" "manufacturer" "device-ca" "owner"; do fdo-admin-tool generate-key-and-cert $i; done
    $ ls keys device_ca_cert.pem device_ca_key.der diun_cert.pem diun_key.der manufacturer_cert.pem manufacturer_key.der owner_cert.pem owner_key.der
    Copy to Clipboard Toggle word wrap
  2. /etc/fdo/keys ディレクトリーに作成された鍵と証明書を確認します。

    $ tree keys
    Copy to Clipboard Toggle word wrap

    次の出力が表示されます。

    - device_ca_cert.pem
    - device_ca_key.der
    - diun_cert.pem
    - diun_key.dre
    - manufacturer_cert.pem
    - manufacturer_key.der
    - owner_cert.pem
    - owner_key.pem
    Copy to Clipboard Toggle word wrap

3.5. manufacturing サーバーのインストールと実行

fdo-manufacturing-server RPM パッケージを使用すると、FDO プロトコルの Manufacturing サーバーコンポーネントを実行できます。また、所有者バウチャー、製造者キー、製造セッションに関する情報など、他のコンポーネントも保存されます。デバイスのインストール中に、Manufacturing サーバーは、GUID、rendezvous 情報、その他のメタデータを含む、特定のデバイスのデバイス認証情報を生成します。プロセスの後半で、デバイスはこの rendezvous 情報を使用して Rendezvous サーバーに接続します。

重要

Red Hat は fdo-manufacturing-server ツールをテクノロジープレビュー機能として提供しています。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではない可能性があるため、安全なネットワーク上で実行する必要があります。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。

manufacturing server の RPM パッケージをインストールするには、次の手順を実行します。

手順

  1. fdo-admin-cli パッケージをインストールします。

    # dnf install -y fdo-admin-cli
    Copy to Clipboard Toggle word wrap
  2. fdo-manufacturing-server RPM パッケージがインストールされているかどうかを確認します。

    $ rpm -qa | grep fdo-manufacturing-server --refresh
    Copy to Clipboard Toggle word wrap
  3. ファイルが正しくインストールされたかどうかを確認します。

    $ *ls /usr/share/doc/fdo*SSSS
    Copy to Clipboard Toggle word wrap

    次の出力が表示されます。

    Output:
    manufacturing-server.yml
    owner-onboarding-server.yml
    rendezvous-info.yml
    rendezvous-server.yml
    serviceinfo-api-server.yml
    Copy to Clipboard Toggle word wrap
  4. オプション: 各ファイルの内容を確認します。次に例を示します。

    $ cat /usr/share/doc/fdo/manufacturing-server.yml
    Copy to Clipboard Toggle word wrap
  5. Manufacturing サーバーを設定します。次の情報を提供する必要があります。

    • Manufacturing サーバーの URL
    • Rendezvous サーバーの IP アドレスまたは DNS 名
    • 生成した鍵と証明書へのパス。

      Manufacturing サーバーの設定ファイルの例は、/usr/share/doc/fdo/manufacturing-server.yml ディレクトリーにあります。以下は、/etc/fdo ディレクトリーに作成および保存される manufacturing server.yml の例です。これには、作成したディレクトリー、証明書、キー、Rendezvous サーバーの IP アドレス、およびデフォルトのポートへのパスが含まれています。

      session_store_driver:
        Directory:
          path: /etc/fdo/stores/manufacturing_sessions/
      ownership_voucher_store_driver:
        Directory:
          path: /etc/fdo/stores/owner_vouchers
      public_key_store_driver:
        Directory:
          path: /etc/fdo/stores/manufacturer_keys
      bind: "0.0.0.0:8080"
      protocols:
        plain_di: false
        diun:
          mfg_string_type: SerialNumber
          key_type: SECP384R1
          allowed_key_storage_types:
            - Tpm
            - FileSystem
          key_path: /etc/fdo/keys/diun_key.der
          cert_path: /etc/fdo/keys/diun_cert.pem
      rendezvous_info:
        - deviceport: 8082
          ip_address: 192.168.122.99
          ownerport: 8082
          protocol: http
      manufacturing:
        manufacturer_cert_path: /etc/fdo/keys/manufacturer_cert.pem
        device_cert_ca_private_key: /etc/fdo/keys/device_ca_key.der
        device_cert_ca_chain: /etc/fdo/keys/device_ca_cert.pem
        owner_cert_path: /etc/fdo/keys/owner_cert.pem
        manufacturer_private_key: /etc/fdo/keys/manufacturer_key.der
      Copy to Clipboard Toggle word wrap
  6. Manufacturing サーバーを起動します。

    1. systemd ユニットファイルがサーバー内にあるかどうかを確認します。

      # systemctl list-unit-files | grep fdo | grep manufacturing fdo-manufacturing-server.service disabled disabled
      Copy to Clipboard Toggle word wrap
    2. manufacturing サーバーを有効にして起動します。

      # systemctl enable --now fdo-manufacturing-server.service
      Copy to Clipboard Toggle word wrap
    3. ファイアウォールのデフォルトのポートを開きます。

      # firewall-cmd --add-port=8080/tcp --permanent
      # systemctl restart firewalld
      Copy to Clipboard Toggle word wrap
    4. サービスがポート 8080 でリッスンしていることを確認します。

      # ss -ltn
      Copy to Clipboard Toggle word wrap
  7. 簡略化されたインストーラーを使用して、RHEL for Edge をシステムにインストールします。

3.6. Rendezvous サーバーのインストール、設定、および実行

fdo-rendezvous-server RPM パッケージをインストールして、最初のデバイスの起動時に Manufacturing サーバーによって生成されたバウチャーをシステムが受信できるようにします。次に、Rendezvous サーバーはデバイスの UUID を移行先のプラットフォームまたはクラウドと照合し、デバイスが使用する必要があるオーナーサーバーエンドポイントをデバイスに通知します。

前提条件

  • manufacturer_cert.pem 証明書を作成した。
  • manufacturer_cert.pem 証明書を Rendezvous サーバーの /etc/fdo/keys ディレクトリーにコピーした。

手順

  1. fdo-rendezvous-server RPM パッケージをインストールします。

    # dnf install -y fdo-rendezvous-server
    Copy to Clipboard Toggle word wrap
  2. 製造元証明書へのパスを含む、rendezvous-server.yml 設定ファイルを作成します。/usr/share/doc/fdo/rendezvous-server.yml に例があります。次の例は、/etc/fdo/rendezvous-server.yml に保存される設定ファイルを示しています。

    storage_driver:
      Directory:
        path: /etc/fdo/stores/rendezvous_registered
    session_store_driver:
      Directory:
        path: /etc/fdo/stores/rendezvous_sessions
    trusted_manufacturer_keys_path: /etc/fdo/keys/manufacturer_cert.pem
    max_wait_seconds: ~
    bind: "0.0.0.0:8082"
    Copy to Clipboard Toggle word wrap
  3. Rendezvous サーバーサービスのステータスを確認します。

    # systemctl list-unit-files | grep fdo | grep rende
    fdo-rendezvous-server.service disabled disabled
    Copy to Clipboard Toggle word wrap
    1. サービスが停止して無効になっている場合は、有効にして起動します。

      # systemctl enable --now fdo-rendezvous-server.service
      Copy to Clipboard Toggle word wrap
  4. サーバーがデフォルト設定のポート 8082 でリッスンしていることを確認します。

    # ss -ltn
    Copy to Clipboard Toggle word wrap
  5. このサーバーにファイアウォールが設定されている場合は、ポートを開きます。

    # firewall-cmd --add-port=8082/tcp --permanent
    # systemctl restart firewalld
    Copy to Clipboard Toggle word wrap

3.7. 所有者サーバーのインストール、設定、および実行

fdo-owner-cli および fdo-owner-onboarding-server RPM パッケージをインストールして、最初のデバイスの起動時に Manufacturing サーバーによって生成されたバウチャーをシステムが受信できるようにします。次に、Rendezvous サーバーはデバイスの UUID を移行先のプラットフォームまたはクラウドと照合し、デバイスが使用する必要があるオーナーサーバーエンドポイントをデバイスに通知します。

前提条件

  • サーバーがデプロイされるデバイスに、ディスクを暗号化する Trusted Platform Module (TPM) デバイスが搭載されている。搭載されていない場合、RHEL for Edge デバイスを起動するときにエラーが発生します。
  • 鍵と証明書を含む device_ca_cert.pemowner_key.der、および owner_cert.pem を作成し、それらを /etc/fdo/keys ディレクトリーにコピーした。

手順

  1. このサーバーに必要な RPM をインストールします。

    # dnf install -y fdo-owner-cli fdo-owner-onboarding-server
    Copy to Clipboard Toggle word wrap
  2. owner-onboarding-server.yml 設定ファイルを準備し、/etc/fdo/ ディレクトリーに保存します。このファイルには、コピー済みの証明書へのパスと、所有者サーバーサービスを公開する場所に関する情報を含めます。

    以下は、/usr/share/doc/fdo/owner-onboarding-server.yml で利用できる例です。URL や認証トークンなど、Service Info API への参照を見つけることができます。

    ---
    ownership_voucher_store_driver:
      Directory:
        path: /etc/fdo/stores/owner_vouchers
    session_store_driver:
      Directory:
        path: /etc/fdo/stores/owner_onboarding_sessions
    trusted_device_keys_path: /etc/fdo/keys/device_ca_cert.pem
    owner_private_key_path: /etc/fdo/keys/owner_key.der
    owner_public_key_path: /etc/fdo/keys/owner_cert.pem
    bind: "0.0.0.0:8081"
    service_info_api_url: "http://localhost:8083/device_info"
    service_info_api_authentication:
      BearerToken:
        token: Kpt5P/5flBkaiNSvDYS3cEdBQXJn2Zv9n1D50431/lo=
    owner_addresses:
      - transport: http
        addresses:
          - ip_address: 192.168.122.149
    Copy to Clipboard Toggle word wrap
  3. Service Info API を作成して設定します。

    1. ユーザー作成、コピーまたは作成するファイル、実行するコマンド、暗号化するディスクなどのオンボーディング用の自動化情報を追加します。/usr/share/doc/fdo/serviceinfo-api-server.yml にある Service Info API 設定ファイルの例をテンプレートとして使用し、/etc/fdo/ の下に設定ファイルを作成します。

      ---
      service_info:
        initial_user:
          username: admin
          sshkeys:
          - "ssh-rsa AAAA...."
        files:
        - path: /root/resolv.conf
          source_path: /etc/resolv.conf
        commands:
        - command: touch
          args:
          - /root/test
          return_stdout: true
          return_stderr: true
        diskencryption_clevis:
        - disk_label: /dev/vda4
          binding:
            pin: tpm2
            config: "{}"
          reencrypt: true
        additional_serviceinfo: ~
      bind: "0.0.0.0:8083"
      device_specific_store_driver:
        Directory:
          path: /etc/fdo/stores/serviceinfo_api_devices
      service_info_auth_token: Kpt5P/5flBkaiNSvDYS3cEdBQXJn2Zv9n1D50431/lo=
      admin_auth_token: zJNoErq7aa0RusJ1w0tkTjdITdMCWYkndzVv7F0V42Q=
      Copy to Clipboard Toggle word wrap
  4. systemd ユニットのステータスを確認します。

    # systemctl list-unit-files | grep fdo
    fdo-owner-onboarding-server.service        disabled        disabled
    fdo-serviceinfo-api-server.service         disabled        disabled
    Copy to Clipboard Toggle word wrap
    1. サービスが停止して無効になっている場合は、有効にして起動します。

      # systemctl enable --now fdo-owner-onboarding-server.service
      # systemctl enable --now fdo-serviceinfo-api-server.service
      Copy to Clipboard Toggle word wrap
      注記

      設定ファイルを変更するたびに、systemd サービスを再起動する必要があります。

  5. サーバーがデフォルト設定のポート 8083 でリッスンしていることを確認します。

    # ss -ltn
    Copy to Clipboard Toggle word wrap
  6. このサーバーにファイアウォールが設定されている場合は、ポートを開きます。

    # firewall-cmd --add-port=8081/tcp --permanent
    # firewall-cmd --add-port=8083/tcp --permanent
    # systemctl restart firewalld
    Copy to Clipboard Toggle word wrap

3.8. FDO 認証を使用して RHEL for Edge デバイスを自動的にオンボーディング

RHEL for Edge デバイスを自動的にオンボードし、インストールプロセスの一環としてプロビジョニングするようにデバイスを準備するには、次の手順を実行します。

前提条件

  • podman build を使用してカスタマイズされたイメージを構築した。
  • デバイスが組み立てられている。
  • fdo-manufacturing-server RPM パッケージがインストールされている。manufacturing サーバーパッケージのインストール を参照してください。

手順

  1. デバイスで RHEL for Edge イメージを起動して、インストールプロセスを開始します。たとえば、CD-ROM または USB フラッシュドライブからインストールできます。
  2. ターミナルを介して、デバイスが製造サービスに到達し、最初のデバイスクレデンシャルエクスチェンジを実行して、所有権バウチャーを作成したことを確認します。

    所有権バウチャーは、manufacturing-sever.yml ファイルの ownership_voucher_store_driver: パラメーターで設定されている保管場所にあります。

    このディレクトリーには、正しいデバイスクレデンシャルがデバイスに追加されたことを示す、GUID 形式の名前を持つ ownership_voucher ファイルが含まれているはずです。

    オンボーディングサーバーは、デバイス認証情報を使用して、オンボーディングサーバーに対して認証を行います。次に、設定をデバイスに渡します。デバイスはオンボーディングサーバーから設定を受信すると、SSH 鍵を受信し、デバイスにオペレーティングシステムをインストールします。最後に、システムは自動的に再起動し、TPM に保存されている強力なキーで暗号化します。

検証

デバイスが自動的に再起動した後、FDO プロセスの一部として作成した認証情報を使用してデバイスにログインできます。

  • Service Info API で作成したユーザー名とパスワードを入力して、デバイスにログインします。

3.9. FDO を使用して image mode for RHEL システムをデプロイする

FIDO Device Onboarding (FDO) を使用してこのシステムに設定を配信することにより、RHEL システムのイメージモードをデプロイできます。キックスタートファイルを使用して、ユーザーの設定、パーティションのカスタマイズ、SSH 鍵の追加など、インストールプロセスのさまざまな部分を設定します。ISO ビルドにキックスタートファイルを含めることで、ベースイメージのデプロイメントを除くインストールプロセスの任意の部分を設定できます。

bootc コンテナーベースイメージを含む ISO を使用する場合、bootc-image-builder はコンテナーイメージをインストールするコマンドである ostreecontainer を自動的にインストールします。ostreecontainer コマンド以外は、引き続きすべてを設定できます。

前提条件

  • ホストマシンに Podman がインストールされている。
  • bootc-image-builder ツールを実行してコンテナーを --privileged モードで実行するための root のアクセス権がある。
  • FDO サーバーインフラストラクチャーがデプロイされている。

手順

  1. Containerfile を作成します。例:

    FROM registry.redhat.io/rhel10/rhel-bootc:latest
    RUN dnf install -y fdo-init fdo-client
    RUN systemctl enable fdo-client-linuxapp.service
    Copy to Clipboard Toggle word wrap
  2. キックスタートファイルを作成します。次のキックスタートファイルは、ユーザーの作成とパーティションの指示を含む、完全に自動のキックスタートファイル設定の例です。

    [customizations.installer.kickstart]
    contents = """
    text --non-interactive
    zerombr
    clearpart --all --initlabel --disklabel=gpt
    autopart --noswap --type=lvm
    user --name=test --groups=wheel --plaintext --password=test
    sshkey --username=test "ssh-ed25519 AAA..."
    network --bootproto=dhcp --device=link --activate --onboot=on
    poweroff
    
    %post
    export MANUFACTURING_SERVER_URL="http://192.168……"
    export DIUN_PUB_KEY_INSECURE="true"
    /usr/libexec/fdo/fdo-manufacturing-client
    %end
    
    """
    Copy to Clipboard Toggle word wrap

    エクスポート <MANUFACTURING_SERVER_URL> フィールドで、Manufacturing サーバー URL を独自の Manufacturing サーバー URL に置き換えます。

  3. キックスタートコンテンツを挿入するには、キックスタート設定を .toml 形式で保存します。たとえば、config.toml です。
  4. 次のフォルダーを作成します。

    $ mkdir $(pwd)/output"
    Copy to Clipboard Toggle word wrap
  5. bootc-image-builder を実行し、ISO ビルドに追加するキックスタートファイル設定を含めます。bootc-image-builder によって、コンテナーイメージをインストールする ostreecontainer コマンドが自動的に追加されます。

    $ sudo podman run \
        --rm \
        -it \
        --privileged \
        --pull=newer \
        --security-opt label=type:unconfined_t \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        -v $(pwd)/config.toml:/config.toml \
        -v $(pwd)/output:/output \
        registry.redhat.io/rhel10/bootc-image-builder:latest \
        --type iso \
        --config /config.toml \
      quay.io/<namespace>/<image>:<tag>
    Copy to Clipboard Toggle word wrap

    生成された .iso イメージは output フォルダーにあります。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る