RedHat Enterprise Linuxのサブスクリプション期限切れ対応

# はじめに
CentOS8のサポートが2021年末で終了したことに伴い、個人開発者向けに展開されている「RedHat Developerプログラム」において、最大16システムまでであれば無料でRedHat Enterprise Linux(以下、RHEL)を無料で利用できるようになりました。個人の環境でRHELを導入して色々試せるのはスタディーも出来て良いですね。
なお、RHEL導入後に、パッケージやパッチの更新をインターネット経由で実施したい場合には、RedHat Customer Portalに対し、RHELを導入したシステムのサブスクリプション登録という作業が必要になります。サブスクリプションの期間は1年間となっているため、2年目以降もパッケージ更新等の恩恵を得るためにはアクティブなサブスクリプションを使用できるようにシステム再登録が必要になります。(RedHat Developerプログラムの場合、サブスクリプションの更新そのものは実施できないそうです。)
今回、登録していたサブスクリプションの期限が切れたため再登録を実施しました。その際、色々とトラブルが発生して一筋縄では再登録できなかったため、経験情報としてQiita記事を登録することにしました。(筆者のRHELはV8.7で実施しました。)

# サブスクリプション期限状況確認
まずは本日の日付を確認します。
```
[root@localhost ~]# date
2023年  2月 26日 日曜日 16:16:30 JST
```
この状態で、subscription-manager listコマンドを実行し、終了日の所を確認します。終了日は<font color="Red">2023年2月22日</font>となっているので期限は切れています。
```
[root@localhost ~]# subscription-manager list
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux for x86_64
製品 ID:          479
バージョン:       8.7
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:
開始:             2022年02月22日
終了:             2023年02月22日

製品名:           Red Hat CodeReady Linux Builder for x86_64
製品 ID:          491
バージョン:       8.7
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:
開始:             2022年02月22日
終了:             2023年02月22日
```
期限が切れていると、yum check-updateコマンド実行時にサブスクリプションを更新するように言われます。
```
[root@localhost ~]# yum check-update
サブスクリプション管理リポジトリーを更新しています。

このシステムは、エンタイトルメントーバーに登録されていますが、更新は受信していません。subscription-manager でサブスクリプションを割り当てることができます。


*** 警告 ***
以下の製品のサブスクリプションの期限が切れています。
：
：
これらの製品を提供するリポジトリーは、利用できなくなります。セキュリティーの更新と、その他の重要な更新 へのアクセスを再開するには、アクティブなサブスクリプションを適用する必要があります。他にアクティブなサ ブスクリプションがない場合は、有効期限の切れたサブスクリプションを更新してください。
メタデータの期限切れの最終確認: 1 day, 5:39:10 時間前の 2023年02月25日 10時43分02秒 に実施しました。
```

# サブスクリプション再登録作業時のトラブル
RedHat Customer Portalにてアクティブなサブスクリプションが自身の登録しているシステムに対して存在していることを確認した後、subscription-manager registerコマンドで再登録します。この時、何故かネットワークエラーと言われてしまい、コマンドの実行がフェイルしました。(他サイトへのping等は問題ないにもかかわらず。。)
```
[root@localhost ~]# subscription-manager register --auto-attach
このシステムはすでに登録されています。上書きするには --force を使用します
[root@localhost ~]# subscription-manager register --auto-attach --force
登録の解除中: subscription.rhsm.redhat.com:443/subscription
ネットワークエラーです。接続の詳細を確認するか、/var/log/rhsm/rhsm.log をご覧ください。
```
そこで、該当のログファイル(<font color="blue">/var/log/rhsm/rhsm.log</font>)を確認したところ、直近のログに以下のようなメッセージが出力されていました。
```
2023-02-26 16:36:30,663 [WARNING] subscription-manager:3037:MainThread @cache.py:248 - Unable to reach server, using cached status.
2023-02-26 16:36:31,846 [ERROR] subscription-manager:3037:MainThread @connection.py:847 - Response: 400
2023-02-26 16:36:31,847 [ERROR] subscription-manager:3037:MainThread @connection.py:848 - JSON parsing error: Expecting value: line 1 column 1 (char 0)
```
# 復旧作業
色々ググった結果、類似の症状における対処方法が記載されているサイトを見つけたため、そちらを参考に対処していくことにしました。
[Subscription-manager command fails with "NetworkException: Network error code: 400"](https://access.redhat.com/solutions/5187461)

以下が実際に実施した対応内容になります。
* RedHat Customer Portalから、登録済みのシステム情報を削除
* /etc/pki/product/と/etc/pki/product-default/のディレクトリ・リストを確認
```
[root@localhost ~]# tree /etc/pki/product/
/etc/pki/product/
--- 491.pem

0 directories, 1 file
[root@localhost ~]# tree /etc/pki/product-default/
/etc/pki/product-default/
--- 479.pem

0 directories, 1 file 
```
* /etc/pki/product-default/にあるpemファイルを/etc/pki/defaultにコピー。
```
[root@localhost product]# cp /etc/pki/product-default/479.pem /etc/pki/product/
[root@localhost product]# tree /etc/pki/product
/etc/pki/product
|_ 479.pem
|_ 491.pem
```
今思うと、/etc/pki/productに製品IDに対するpemファイルが491.pemの1個しか存在しなかったのが良くなかったのかもしれません。
* 古い認証ファイルと破損しているサブスクリプション管理データを削除。
```
[root@localhost ~]# rm -rf /etc/pki/consumer
[root@localhost ~]# rm -rf /etc/pki/entitlement
[root@localhost ~]# subscription-manager clean
ローカルデータがすべて削除されました
```
* システム情報の再登録
```
[root@localhost ~]# subscription-manager register
登録中: subscription.rhsm.redhat.com:443/subscription
ユーザー名: xxxxx@yyyy   <--RedHat Customer Portalに登録しているEメールアドレスを指定
パスワード:              <--RedHat Customer Portalに登録しているパスワードを指定
このシステムは、次の ID で登録されました: c73a29f7-cb03-49af-b16a-a4c1f64716e5
登録したシステム名: localhost.localdomain
```
無事にシステム情報の再登録ができたようなので、サブスクリプションのステータスを確認します。
```
[root@localhost ~]# subscription-manager attach --auto
インストール済み製品の現在の状態:
製品名: Red Hat Enterprise Linux for x86_64
状態:   サブスクライブ済み

製品名: Red Hat CodeReady Linux Builder for x86_64
状態:   サブスクライブ済み

[root@localhost ~]# subscription-manager list
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux for x86_64
製品 ID:          479
バージョン:       8.7
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:
開始:             2023年02月24日
終了:             2024年02月24日

製品名:           Red Hat CodeReady Linux Builder for x86_64
製品 ID:          491
バージョン:       8.7
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:
開始:             2023年02月24日
終了:             2024年02月24日
```
無事にサブスクリプションの期間が<font color="blue">2024年2月24日</font>に更新されたことを確認できました！ これで、今後もyum updateコマンド等で最新のパッケージやパッチを適用することが可能となりました。めでたし、めでたし。

# おわりに
今回はRedHat Developerプログラムを使ってRHELの無料利用を1年後も継続するべく、アクティブなサブスクリプションを使用できるように、自身のシステムの再登録作業を行い、その際に陥ったトラブル対応内容を経験情報として紹介しました。誰もが全て同じような状況になるとは思いませんが、類似のトラブルに遭遇された方は参考にしてみてください。

:::note info
2024/04/04追記
本年度もRedHat Developerプログラムを使用してRHELの無料利用を継続しています。本年度は、当該記事で紹介したトラブル事例に遭遇することはなく、すんなりとsubscription-managerの再登録を行うことができました。良かったです。
:::