Red Hat Offline Knowledge Portal (通称 OKP もしくは RHOKP)


# はじめに

Red Hat の Document などの情報をWebサイトを、Local の Webサイトとして構築し、検索・参照ができる機能 **RHOKP** (Red Hat Offline Knowledte Portal) があるそうです。

製品ドキュメントだけでなく、KB(Knowledge Base)や、CVE情報や Errata などもローカルで見られるようになるようです。

- Product documentation
- Knowledgebase
- CVEs (content)
- Errata (content)
- Product Lifecycles
- Security Data API 
- Pages from the Customer Portal
- A Search mechanism for the above

ターゲットは、オフラインの環境のユーザー向けだと思いますが、個人的に「Webサイトが重たいな..」という時に便利そうなので試して見ます。


:::note info
尚、現時点でローカルに構築されるサイトの情報は全て英語のみになるようで、日本語や多言語に翻訳されたものは対象になっていないのでご注意下さい。
:::

# 公式ドキュメント

使い方のドキュメントは以下にあります。

https://docs.redhat.com/en/documentation/red_hat_offline_knowledge_portal/1/html/user_guide/proc_launching-rhokp

この手順を、ほぼそのままななぞってみます。

# 使用条件

以下のような条件があるようです。

1. podman が導入されている
2. コンテナのダウンロードにインターネット接続が必要
3. **Red Hat Satellite の Subscription** を持っている
4. Red Hat Customer Portal の ID を持っている

:::note info
AWS/Azure/GCP上で提供している従量課金制のRHELには、Red Hat Satellite の Subscription も無料で付属しています。詳しくは、[こちら](https://rheb.hatenablog.com/entry/202312-payg-rhel-satellite)をご参照下さい。 
:::

# インストールして見る

Access Key を作る必要があります。[こちら](https://access.redhat.com/offline/access/)にアクセスします。

使用条件に同意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/16f47854-ab02-4703-80d7-a56f657c02f5.png)

アクセスキーを生成してコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/9d9bbd54-c11d-4868-aad7-381fc17eb357.png)

ここでは後で使いやすいように、環境変数にアクセスキーをセットしておきます。

```
export MY_KEY=<生成したアクセスキー> 
```

Red Hat Customer Portal ID を使ってみます。

```
podman login registry.redhat.io -u <Customer Portal ID> -p <password>
```

ドキュメントのコンテナを PULL します。( Red Hat Satellite の Subscription が必要です）
コンテナが大きいので、PULL にはそこそこ時間がかかります。

```
podman pull registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
```

コンテナを起動させます。

```
podman run --rm -p 8080:8080 -p 8443:8443 --env "ACCESS_KEY=$MY_KEY" -d registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
```

以下の URLにアクセスします。

```
http://localhost:8080
```

:::note info
・アクセスは HTTPS もありますが、その場合は 8443がポートになります(オレオレ証明書のエラーがでます）
・環境にもよると思いますが、アクセスが可能になるまでコンテナ起動後60秒ほどかかるかもしれません
:::

以下のようなトップページが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/d3175664-0f4e-4f8b-b2e1-6282aa9922ae.png)

# 使い心地

実際にアクセスしてみると、**オンライのWebサイトと比較しておそろしい程、高速でした...**

もちろん、製品ドキュメントもあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/9b3c7f78-abab-408b-a28c-cb4d337b38ca.png)


Knowldedge Base のドキュメントも検索で探す事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/3e1fa45b-5735-40c6-a00f-c5d4383d6485.png)

CVE情報もローカルで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/b9026f9d-f44d-4079-8f5d-faf01ea4bcc1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/8af2d7a1-a27e-4be7-90cd-64a3a3df74ef.png)

オフライン環境で作業しなければいけない人をターゲットに作製しているのだと思いますが、**通常のオンライン環境がある人にも、おすすめしたいです。**

# 付録：起動と停止のシェル化

毎回起動時に最新のイメージを確認してから起動したいので、シェルを作ってみました。

**起動**: (最新のイメージを確認してから起動)
```
./okp.sh start
```

**停止**
```
./okp.sh stop
```

**再起動**(停止後、最新のイメージを確認してから起動)
```
./okp.sh restart
```

以下がシェルの本体です。シェルの先頭部分にある変数はご自身の環境にあわせてセットして下さい。

```bash
#!/bin/bash

REGISTRY_USER=<registry.redhat.ioのユーザー>
REGISTRY_PWD=<registry.redhat.ioのパスワード>
MY_KEY=<生成したアクセスキー> 

if [ $# -ne 1 ]
then
 echo "How to use: "
 echo " okp.sh start   : Start RHOKP with the latest image" 
 echo " okp.sh stop    : Stop RHOKP" 
 echo " okp.sh restart : Restart RHOKP with the latest image" 
exit
fi

case "$1" in
  start)
    # Check if the image is latest, if not, pull the latest.
    echo "Checking the latest RHOKP image..."
    echo "Logging in to registry.redhat.io."
    podman login registry.redhat.io -u  $REGISTRY_USER -p $REGISTRY_PWD
    podman pull registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest

    # start the document container
    echo "Start RHOKP server" 
    podman run --rm -p 8080:8080 -p 8443:8443 --env "ACCESS_KEY=$MY_KEY" -d registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
    podman ps | grep offline-knowledge-portal
    ;;

  stop)
    # stop RHOKP 
    RHOKP_NAME=`podman ps | grep "registry.redhat.io/offline-knowledge-portal/rhokp-rhel9" |  awk '{print $NF}'`
    echo "Stopping RHOKP... it takes a while..."
    podman stop  $RHOKP_NAME
    ;;

  restart)
    # stop RHOKP
    RHOKP_NAME=`podman ps | grep "registry.redhat.io/offline-knowledge-portal/rhokp-rhel9" |  awk '{print $NF}'`
    echo "Stopping RHOKP... it takes a while..."
    podman stop  $RHOKP_NAME

    # Check if the image is latest, if not, pull the latest.
    echo "Checking the latest RHOKP image..."
    echo "Logging in to registry.redhat.io."
    podman login registry.redhat.io -u  $REGISTRY_USER -p $REGISTRY_PWD
    podman pull registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest

    # start the document container
    echo "Start RHOKP server" 
    podman run --rm -p 8080:8080 -p 8443:8443 --env "ACCESS_KEY=$MY_KEY" -d registry.redhat.io/offline-knowledge-portal/rhokp-rhel9:latest
    podman ps | grep offline-knowledge-portal
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac:

```