RHEL サブスクリプション登録・解除をコマンドラインで行う

morikawaCLI, Red Hat Enterprise Linux, RedHat, RHEL, Subscription, コマンドライン, サブスクリプション, チートシート

プロダクトエンジニアリング部 システム第一グループの morikawa です。以前はインフラグループ所属でしたが技術部門の再編があり、よりプロダクト指向な組織編成になりました。

さて、RHEL (Red Hat Enterprise Linux) はご存知の通り有名な商用 Linux であり、シェアも高い事からこの OS 上では数多くのソフトウェアが動作保証されています。また、延長ライフサイクルサポートアドオン (ELS) を利用するとかなり長期でサポートされることもあり (RHEL6 だと約13年半!)、プロダクション環境でご利用の方も少なくないのではないかと思います。

RHEL の使用、特にパッケージのインストールやアップデートの際にはサブスクリプションを購入し、インストール後に OS をサブスクリプション登録する必要があります (参考: Red Hat サブスクリプションに関する FAQ ) 。

サブスクリプション登録は個人的にはコマンドライン (CLI) でやってしまった方が楽だと思っているのですが、システム登録からサブスクリプション登録まで、初めはサブスクリプションに関する概念もよく分かってなかったので少々理解に時間がかかりました。そして暫く経つとやり方忘れてしまったり。

本家チートシート もあるはあるのですが、どちらかと言うと man の内容を綺麗に PDF したもののようだったので、今回主に自分向けではありますが、 RHEL サブスクリプション登録・解除をコマンドラインで行う、チートシート的な簡易ガイダンスを作ってみました。

なお、バージョンは RHEL 7 を前提としています。

始める前に

以降の手順は、以下について既に完了している前提となります。

  • Red Hat Customer Portal でアカウント登録を完了している。
  • Red Hat Enterprise Linux のサブスクリプションを少なくとも1つ以上購入し、サブスクリプションキーが発行されている。
  • 発行されたサブスクリプションキーを Red Hat アカウントと紐付けるための申請を行い、サブスクリプションが利用可能になっている。
  • ソフトウェアおよびダウンロードセンター – Red Hat Customer Portal より Red Hat Enterprise Linux のインストーラをダウンロードし、システムに対して RHEL のインストールを完了している。
  • RHEL がインターネット接続可能になっている (特に Red Hat Customer Portal に対して通信が可能であること)

サブスクリプション登録までの一連のコマンド

以下の流れでサブスクリプションの登録まで進めていきます。なお、作業は root ユーザで実行することを前提としています。

まず、現在の状態を確認します。初期の状態はそもそもサブスクリプション管理サービス未登録のため状態を確認できません。

# subscription-manager list

+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          xx
バージョン:       7.6
アーキテクチャー: x86_64
状態:             不明
状態の詳細:
開始:
終了:

では早速、サブスクリプション管理サービスにこのシステムを登録します。

# subscription-manager register
    ユーザー名: [Red Hat アカウント名を入力]
    パスワード: [Red Hat アカウントのパスワードを入力]

無事システムに登録された旨のメッセージが出たら、改めて状態を確認してみましょう。状態自体は「不明」から「サブスクリプション登録されていない」という表記に変わります。

# subscription-manager list

+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          xx
バージョン:       7.6
アーキテクチャー: x86_64
状態:             サブスクライブしていません
状態の詳細:       有効なサブスクリプションでサポートされていません
開始:
終了:

続いて、利用可能なサブスクリプションについて表示します。

# subscription-manager list --available

利用可能なサブスクリプションの総数が少ない場合はこの出力で問題ないですが、Red Hat の製品数が多くてかなりスクロールされてしまうので、以下のように情報を絞ってしまうと数が多くても多少見やすいかと思います。

# LANG=C subscription-manager list --available | grep -E "^$|^Subscription|^SKU|Contract|Pool|^Available|^Ends"

上記のコマンドを実行すると、利用可能なサブスクリプションがある場合は以下のように表示されるかと思います。Pool ID が以降で使用するプールIDです。 Contract はコントラクト番号で注文情報とのヒモ付の参考となりますが以降では使用しません。

Subscription Name:   Red Hat Enterprise Linux Server, ...
SKU:                 RH000xx
Contract:            xxxxxxxx
Pool ID:             xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Available:           [利用可能ライセンス数]
Subscription Type:   Instance Based
Ends:                [サブスクリプションの終了期限]

上記のプールIDを --pool オプションに指定して attach オプションによりサブスクリプション登録を行います。

# subscription-manager attach --pool=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

無事登録されたらこのシステムで RHEL のパッケージのダウンロードや更新が行える状態となりました。

# subscription-manager list

+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          xx
バージョン:       7.6
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:
開始:             20YY年MM月DD日
終了:             20YY年MM月DD日

サブスクリプション登録の作業は以上で完了です。

システムに対して登録されているサブスクリプションの詳細を確認するコマンド

サブスクリプションのリストを --consumed オプション付きで表示すると、割り当て済みのサブスクリプション情報が入手できます。

# subscription-manager list --consumed

出力される内容は相変わらず多いので、今回割り当てたサブスクリプションのコントラクト番号やプールIDのみ確認したいなら以下のように絞ってしまうと少し見やすいかもしれません。

# LANG=C subscription-manager list --consumed | grep -E "^$|^Subscription|^SKU|Contract|Pool|^Available|^Ends"

Subscription Name:   Red Hat Enterprise Linux Server, ...
SKU:                 RH000xx
Contract:            xxxxxxxx
Pool ID:             xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Available:           [利用可能ライセンス数]
Subscription Type:   Instance Based
Ends:                [サブスクリプションの終了期限]

サブスクリプションの解除のためのコマンド

サーバの移行などで RHEL を別の物理マシン・仮想マシンにインストールする場合など、既にサブスクリプション登録されているものを解除し、他のサーバで再登録したいといった場合もあるかと思います。

登録作業自体は上記と同様なので、こちらではサブスクリプションの解除の方法となります。

なお、Red Hat Customer Portal の システム — Red Hat Customer Portal (要ログイン) の画面で Red Hat アカウントに紐づくサブスクリプションがどのサーバに対して登録されているか一覧ができます。作業と併せてこちらも見ておくと、システムとサブスクリプション割当状態がひと目で確認できます。

以下のコマンドではプールIDを指定して明示的にサブスクリプションを解除しています。プールIDの確認は上記の --consumed オプション付きコマンドで確認してください。

# subscription-manager remove --pool=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

なお、実行サーバのサブスクリプション登録全てを解除する場合には以下でも OK です。

# subscription-manager remove --all

このサブスクリプション解除を行うと、システムの状態としては register 後、attach 前の状態になります。

サブスクリプション管理サービスからシステムを削除するためのコマンド

RHEL をインストールしていたサーバを撤去する場合は、下記のコマンドでサブスクリプション管理サービスからシステム情報を消してしまったほうが良いかもしれません。削除しないシステムはサブスクリプションが割り当てられていなくても システム — Red Hat Customer Portal (要ログイン) に情報が残り続けるようです。

# subscription-manager unregister

こちらのコマンドを実行すると、RHEL 自体は register 前の状態となり、システム — Red Hat Customer Portal (要ログイン) から当該 RHEL の情報も無くなります。

まとめ

今回は RHEL を利用するにあたって、調べればまあ分かるんだけど要するに最低限何すれば良いんだっけ (調べるのが面倒)、といった (主に私個人の) 要望に応えるようなサブスクリプション関連コマンドとそのハウツーを抜粋した記事を書いてみました。イマドキはパブリッククラウドでそのまま RHEL イメージを使えるものも多いので、RHEL サブスクリプションの登録などを直に必要とするのはオンプレ環境やプライベートクラウド環境、また既存ライセンスをパブリッククラウド環境に適用する場面ぐらいで少々マニアックかな、とは思ったもののそういった環境で毎度面倒だなぁと思ってる方のお役に立てば幸いです。それでは。