Red Hatの小島です。
オフライン環境でもRed Hatの様々なナレッジを参照できるようにするためのオフラインナレッジポータル(Red Hat Offline Knowledge Portal. 通称RHOKP)の提供が、2025年5月に開始されました。
RHOKPによってオフライン環境でナレッジが参照しやすくなるだけでなく、Red Hatの製品ドキュメントやナレッジベースなどに記載されている設定ファイルや実行コマンドのコピペをオフライン環境にあるシステム上でも実行しやすくなっています。オフラインの開発環境などで、ナレッジに記載されている設定ファイルや実行コマンドなどを色々試したいときに便利です。
本記事ではRHOKPの利用方法や、RHOKPのコンテナを例にしてPodmanのQuadletによるsystemdとの連携方法をご紹介します。
Red Hat Offline Knowledge Portal (RHOKP)
RHOKPはRed Hat製品に関する独自のナレッジを安全にオフラインで利用するためのポータルであり、軽量なOpen Container Initiative (OCI)準拠のコンテナイメージとして提供しています。RHOKPはRed Hat製品に関する以下の情報をまとめて提供します。
- 製品ドキュメント
- 製品ライフサイクル
- ナレッジベース
- 製品のエラータ(更新情報)
- 公開されたCVEとRed Hat製品への影響度
- 上記のCVEや影響度を照会するためのAPI情報
- これらの情報の検索エンジン
有効なRed Hat Satelliteのサブスクリプションを持っているユーザーであれば、無料でRHOKPを利用できるようになっています。Red Hat SatelliteのサブスクリプションはAWS/Azure/Google Cloudなどのパブリッククラウドの従量課金制のRHELユーザーは無料で利用できるため、これら従量課金制のRHELユーザーはRHOKPも無料で利用できるようになっています。Red Hat Satelliteと同様に、RHOKPもRed Hatがサポートを提供します。
Red Hatのナレッジ更新に従って、RHOKPのコンテナイメージも定期的に更新されていきます。RHOKPコンテナイメージの情報(更新日/イメージサイズ/タグ/取得方法など)は、Red Hat Ecosystem Catalog(Red Hatとパートナー企業の様々な製品情報を掲載しているWebページ)から参照できます。
RHOKPの利用方法
RHOKPはOCI準拠のコンテナイメージ(x86_64版とARM64版を提供)であるため、RHELのPodmanやOpenShiftだけでなく、OCI準拠のコンテナランタイム(Dockerなど)でも実行できます。ただし、RHELかOpenShift以外でRHOKPを実行する場合、RHOKPのサポートはサードパーティーソフトウェアに関するRed Hatサポートポリシーに従って提供されますのでご注意ください。
RHOKPの公式ドキュメントは以下にあります。RHOKPのユーザーガイドにシステム要件(CPU2コア以上/メモリ2GB以上を推奨)も記載されています。
上記のユーザーガイドに沿ったRHOKPの利用方法をご紹介したブログがありますので、参考にしてください。RHOKPコンテナをユーザーガイドに沿って実行すると、http://localhost:8080
またはhttps://localhost:8443
でアクセスできます。
RHOKPは最新のRHEL10に関する製品ドキュメントも提供しています。
PodmanのQuadletによるsystemdとの連携
OCI準拠のRHOKPコンテナは podman run
や docker run
コマンドなどで実行できますが、Podman v4.4以降に導入されたQuadletを利用すると、systemdでコンテナを実行するためのユニットファイルを簡単に作成できるようになります。RHEL8/RHEL9/RHEL10では、Podman v4.6以降でQuadletが利用できるようになっています。以下のブログでは、Quadletを使ってローカルユーザー権限で実行するコンテナをsystemdで管理するためのユニットファイルを作成/実行する例を紹介しています。
このブログを参考にして、RHOKPコンテナ実行をrootユーザー権限で永続化してみます。以下のユニットファイルを作成します。RHOKPのコンテナイメージをrootユーザー権限で取得していない場合は、sudo podman pull
コマンドでRHOKPのコンテナイメージを取得しておいて下さい。
sudo podman login registry.redhat.io sudo podman pull registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest cat <<EOF > rhokp.container [Unit] Description=RHOKP container [Container] Image=registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest PublishPort=8080:8080 PublishPort=8443:8443 Environment=ACCESS_KEY=XXXXX Pull=never [Install] WantedBy=multi-user.target default.target EOF
[Container]
セクションでは以下のオプションを指定しています。それ以外は通常のユニットファイルと同じです。各オプションの詳細はman podman-systemd.unit
コマンドで確認できます。
Image
: 実行するコンテナイメージ。PublishPort
: コンテナのポートをホストに公開。podman run
コマンド実行時の-p 8080:8080 -p 8443:8443
オプション。Environment
: コンテナ実行時の環境変数。key:ACCESS_KEY
, value:XXXXX
を指定。Pull
: イメージプルのポリシー。never
に設定すると、イメージがローカルホストに無い場合にイメージをpullしない。
このrhokp.container
ユニットファイルを、rootユーザー権限で/etc/containers/systemd/
ディレクトリにコピーした後に、systemdの設定として読み込ませて起動します。
RHOKPユーザーガイド記載の
podman run
コマンドなどで実行しているRHOKPコンテナがある場合、ホストのポート重複を避けるため、sudo systemctl start
コマンド実行前にpodman stop
コマンドなどでRHOKPコンテナを停止しておいて下さい。
sudo cp rhokp.container /etc/containers/systemd/ sudo systemctl daemon-reload sudo systemctl start rhokp.service
rhokp.service
を起動した後にしばらく待ちます。systemctl status
コマンドで下記のように出力されれば、正常にRHOKPコンテナがsystemdのサービスとして実行できていることを確認できます。ここでgenerated
と表示されているのは、このrhokp.service
のユニットファイルがsystemdによって自動生成されたことを示しています。このように自動生成されたユニットファイルについては自動的に有効化されているため、永続化のためのsystemctl enable
コマンドを実行する必要はありません。
systemctl status rhokp.service ● rhokp.service - RHOKP container Loaded: loaded (/etc/containers/systemd/rhokp.container; generated) Active: active (running) since Tue 2025-06-10 06:09:59 UTC; 9h ago Invocation: 9bc4e8e5d9c848a1bbcd4f6f20202322 Main PID: 1717 (conmon) Tasks: 285 (limit: 22851) Memory: 2.6G (peak: 3.1G) CPU: 26min 39.111s CGroup: /system.slice/rhokp.service ├─libpod-payload-d65230555cdadc2d959e1fc58c87c868c7d8b2311ce1256d83789020cd296b9f │ ├─ 1723 mel │ ├─ 4795 httpd -D FOREGROUND │ ├─ 4796 /bin/bash /usr/local/bin/run-solr │ ├─ 4892 java -server -Xms1g -Xmx1g -XX:+UseG1GC -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=250 -XX:+UseLargePages -XX:+AlwaysPreTo> │ ├─ 4934 /usr/bin/coreutils --coreutils-prog-shebang=cat /usr/bin/cat │ ├─ 4935 /usr/bin/coreutils --coreutils-prog-shebang=cat /usr/bin/cat │ ├─ 4936 /usr/bin/coreutils --coreutils-prog-shebang=cat /usr/bin/cat │ ├─ 4937 /usr/bin/coreutils --coreutils-prog-shebang=cat /usr/bin/cat │ ├─ 4939 httpd -D FOREGROUND │ ├─ 4941 httpd -D FOREGROUND │ ├─ 4943 httpd -D FOREGROUND │ ├─ 4961 httpd -D FOREGROUND │ ├─ 7017 /bin/sh │ ├─ 9609 httpd -D FOREGROUND │ └─47392 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 60 └─runtime └─1717 /usr/bin/conmon --api-version 1 -c d65230555cdadc2d959e1fc58c87c868c7d8b2311ce1256d83789020cd296b9f -u d65230555cdadc2d959e1fc58c87c868c7d8b2311ce1256d8378>
systemdによって自動生成されたrhokp.service
のユニットファイルは、/run/systemd/generator/
にあります。
cat /run/systemd/generator/rhokp.service # Automatically generated by /usr/lib/systemd/system-generators/podman-system-generator # [Unit] Wants=network-online.target After=network-online.target Description=RHOKP container SourcePath=/etc/containers/systemd/rhokp.container RequiresMountsFor=%t/containers [X-Container] Image=registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest PublishPort=8080:8080 PublishPort=8443:8443 Environment=ACCESS_KEY=XXXXX Pull=never [Install] WantedBy=multi-user.target default.target [Service] Environment=PODMAN_SYSTEMD_UNIT=%n KillMode=mixed ExecStop=/usr/bin/podman rm -v -f -i --cidfile=%t/%N.cid ExecStopPost=-/usr/bin/podman rm -v -f -i --cidfile=%t/%N.cid Delegate=yes Type=notify NotifyAccess=all SyslogIdentifier=%N ExecStart=/usr/bin/podman run --name systemd-%N --cidfile=%t/%N.cid --replace --rm --cgroups=split --pull never --sdnotify=conmon -d --publish 8080:8080 --publish 8443:8443 --env ACCESS_KEY=XXXXX registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
RHOKPのコンテナイメージを更新する場合、sudo podman pull
コマンドで最新のRHOKPのコンテナイメージを取得して、sudo systemctl restart
コマンドでRHOKPコンテナを最新のRHOKPイメージで再起動します。この時、不要になった古いRHOKPのコンテナイメージをsudo podman rmi
コマンドで削除できます。
sudo podman login registry.redhat.io sudo podman pull registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest sudo systemctl restart rhokp.service sudo podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/offline-knowledge-portal/rhokp-rhel9 latest daebbdb5e677 32 hours ago 11.1 GB <none> <none> 3a22adf3b92f 8 days ago 11.1 GB sudo podman rmi 3a22adf3b92f
systemdで管理しているPodmanコンテナの状態をWebコンソールで確認したい場合は、RHELの標準機能の1つとして提供されるCockpitを利用できます。Cockpit関連のパッケージをインストールして起動した後に、https://localhost:9090
でWebコンソールにアクセスできます。rootユーザーでログインしたい場合、以下のように/etc/cockpit/disallowed-users
ファイルのroot
をコメントアウトして下さい。
sudo dnf -y install cockpit cockpit-podman sudo systemctl enable --now cockpit.socket cat /etc/cockpit/disallowed-users # List of users which are not allowed to login to Cockpit # root
RHELのWebコンソールでは、Podmanで保存/実行したコンテナイメージ、実行中のコンテナのCPU/メモリの利用率(以下の画像の例では、ホストのCPU(2コア)/メモリ(4GB)に対する利用率)、コンテナの環境変数/ログ/コンソールを見ることができます。また、Podmanコンテナを以下の「コンテナーの作成」ボタンから実行できるようにもなっています。
QuadletによるRHOKPコンテナの永続化を解除したい場合、sudo systemctl stop
コマンドでRHOKPコンテナを削除した後に、/etc/containers/systemd/rhokp.container
ファイルを削除してsudo systemctl daemon-reload
を実行します。すると、systemdが自動生成した/run/systemd/generator/rhokp.service
ファイルが自動削除されて、永続化が解除されます。
sudo systemctl stop rhokp.service sudo rm -f /etc/containers/systemd/rhokp.container sudo systemctl daemon-reload ls /run/systemd/generator/rhokp.service ls: cannot access '/run/systemd/generator/rhokp.service': No such file or directory systemctl status rhokp.service × rhokp.service Loaded: not-found (Reason: Unit rhokp.service not found.) Active: failed (Result: exit-code) since Tue 2025-06-10 16:45:15 UTC; 8min ago Duration: 10h 35min 6.202s Invocation: 9bc4e8e5d9c848a1bbcd4f6f20202322 Main PID: 1717 (code=exited, status=137) Mem peak: 3.1G CPU: 29min 42.898s
おまけ
2025年6月時点でのRHOKPをPodmanで実行する場合のナレッジのURLと、それらに対応するRed HatのWebページのURLは以下のようになっています。
- 製品ドキュメント
- 例: RHEL10のリリースノート
- RHOKP:
https://localhost:8443/documentation/en-us/red_hat_enterprise_linux/10/html-single/10.0_release_notes/index
- Red HatのWebページ:
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/10.0_release_notes/index
- RHOKP:
- 例: RHEL10のリリースノート
- ナレッジベース
- 例: RHELのsosreportの紹介
- RHOKP:
https://localhost:8443/solutions/3592
- Red HatのWebページ:
https://access.redhat.com/solutions/3592
- RHOKP:
- 例: RHELのsosreportの紹介
- 製品ライフサイクル
- RHOKP:
https://localhost:8443/product-life-cycles/update_policies/
- Red HatのWebページ:
https://access.redhat.com/product-life-cycles/update_policies/
- RHOKP:
- Red Hat CVEのデータベース
- 例: CVE-2025-5384
- RHOKP:
https://localhost:8443/security/cve/CVE-2025-5384/
- Red HatのWebページ:
https://access.redhat.com/security/cve/cve-2025-5384/
- RHOKP:
- 例: CVE-2025-5384
- 製品のエラータ
- 例: RHSA-2025:8374 - Moderate: kernel security update
- RHOKP:
https://localhost:8443/errata/RHSA-2025:8374/
- Red HatのWebページ:
https://access.redhat.com/errata/RHSA-2025:8374/
- RHOKP:
- 例: RHSA-2025:8374 - Moderate: kernel security update
そのため、RHOKPのナレッジのURLをRed HatのWebページのURLに変換したい場合は、
- 製品ドキュメントの場合:
localhost:8443/documentation/en-us
をdocs.redhat.com/en/documentation
に置換 - ナレッジベースやCVEなどの場合:
localhost:8443
をaccess.redhat.com
に置換
といった置換作業をする必要があります。こちらも参考にしてください。