第5章 カスタムコンテンツのインポート
前の章では、Definitive Media Library (DML) への Red Hat コンテンツのインポート方法について説明しました。本章では、Red Hat コンテンツと少し異なるカスタムコンテンツについて説明します。事前に独自の製品を作成し、カスタマイズして、独自のリポジトリーを追加します。さらに、カスタムリポジトリーに Puppet モジュールを追加できます。
5.1. Satellite でのカスタム製品の使用
「Satellite での製品およびリポジトリーの使用」 では、Red Hat Satellite 6 の製品の概念とその概念を使用してリポジトリーをグループ化する方法について説明しました。Red Hat Satellite 6 では、カスタム製品を作成して複数の関連リポジトリーを追加することをもできます。Red Hat Satellite 6 における Red Hat コンテンツとカスタムコンテンツにはいくつかの類似点があります。
- 製品とそのリポジトリー間の関係は同じであり、リポジトリーは引き続き同期する必要があります。
- カスタム製品にはクライアントがアクセスするサブスクリプション (Red Hat 製品に対するサブスクリプションに類似) が必要です。Red Hat Satellite 6 では、作成する各カスタム製品に対して新しいサブスクリプションが作成されます。
本章では、2 つの関連リポジトリー (RPM コンテンツを含む RPM リポジトリーと RPM コンテンツを設定するためのモジュール向け Puppet リポジトリー) を含む製品を作成します。
5.2. カスタム製品の作成
このシナリオでは、ACME は、PostgreSQL データベースを必要とする Web ベースアプリケーションである Exampleware という名前の製品を開発することを目的としています。また、ACME は、Red Hat Enterprise Linux リポジトリーから PostgreSQL を使用して実稼働レベルの Exampleware を現場で使用し、新しいバージョンの PostgreSQL で Exampleware をテストすることもあります。このような場合は、新しいバージョンを同期できるよう PostgreSQL 向けのカスタム製品を作成します。
Web UI をご利用の場合
コンテンツ > 製品 に移動し、新製品 をクリックします。新しい製品のフォームが表示されます。以下の詳細情報を入力します。
-
名前 - 製品の簡単な名前。
PostgreSQL
と入力します。 - ラベル - 製品の内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
- GPG キー - 製品全体の GPG キー。特定のバージョンの PostgreSQL に対して GPG をインストールし、製品の代わりにリポジトリーに割り当てるため、これは空にします。
-
同期プラン - 製品の同期計画。これは、前の章で作成した
Example Plan
に割り当てることができます。 -
説明 - 製品の簡単な説明。
Content from PostgreSQL repositories
と入力します。
この情報を入力したら、保存 をクリックします。
CLI をご利用の場合
1 つのコマンドで製品を作成します。
# hammer product create \ --name "PostgreSQL" \ --sync-plan "Example Plan" \ --description "Content from PostgreSQL repositories" \ --organization "ACME"
これにより、独自のカスタムリポジトリーを作成し、そのコンテンツを同期できる新しい製品が作成されます。
5.3. カスタム GPG キーのインポート
カスタム製品を作成する前に、カスタム GPG キーを作成する必要がある場合があります。これは、PostgreSQL リポジトリーとの RPM トランザクションに対してある程度のセキュリティーを提供するために使用されます。
最初に、バージョン固有のリポジトリーパッケージのコピーをクライアントシステムにダウンロードします。この場合は、pgdg-redhat95
をダウンロードします。
[user@client ~]$ wget http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
RPM ファイルをインストールせずに抽出します。
[user@client ~]$ rpm2cpio pgdg-redhat95-9.5-2.noarch.rpm | cpio -idmv
GPG キーは、その抽出ファイルに相対的な場所である etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-95
に存在します。
Web UI をご利用の場合
コンテンツ > GPG キー に移動します。新規 GPG キー をクリックします。GPG キーに名前 (PostgreSQL 9.5
) を提供し、GPG キーのアップロード を選択します。参照 をクリックし、抽出した GPG キーを選択します。保存 をクリックします。
CLI をご利用の場合
GPG キーを Satellite Server にコピーします。
[user@client ~]$ scp ~/etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-95 root@satellite.example.com:~/.
GPG キーを Satellite にアップロードします。
[root@satellite ~]# hammer gpg create \ --key ~/RPM-GPG-KEY-PGDG-95 \ --name "PostgreSQL 9.5" \ --organization "ACME"
これで、リポジトリーに関連付ける GPG キーが用意できました。
5.4. カスタム RPM リポジトリーの作成
通常は、実稼働レベルのサーバーでは、安定のために Red Hat Enterprise Linux に含まれる PostgreSQL のバージョンを使用します。ただし、ACME の開発者はより新しいバージョンの PostgreSQL で Exampleware をテストするとします。このような場合は、新しいバージョンの PostgreSQL 向けのカスタムリポジトリーを作成できます。
Web UI をご利用の場合
カスタム PostgreSQL 製品を作成します。カスタム製品の作成後は、リポジトリー画面が表示されます。リポジトリーの作成 をクリックし、新しいリポジトリー向けのフォームを表示します。以下の詳細情報を入力します。
-
名前 - リポジトリーの簡単な名前。
PostgreSQL 9.5
と入力します。 - ラベル - リポジトリーの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
-
タイプ - リポジトリーのタイプ。RPM ファイル (
yum
)、Puppet モジュール (puppet
)、または Docker イメージ (docker
) のいずれかのリポジトリーを選択できます。本ガイドのシナリオでは、yum
を選択します。新しいフィールドが表示されます。 -
URL - ソースとして使用する外部リポジトリーの URL。
http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/
と入力します。 -
ダウンロードポリシー - Satellite Server が実行する同期タイプを決定します。
即時
を選択します。詳細は 「ダウンロードポリシーの使用」 を参照してください。 - 同期時のミラーリング - アップストリームのリポジトリーにないコンテンツが同期中に削除されるようにします。デフォルトでチェックが入っているので、そのままにします。
-
チェックサム - リポジトリーのチェックサム。この例ではデフォルトで SHA256 となる
Default
にします。これが Red Hat Enterprise Linux 7 で必要となるチェックサムです。Red Hat Enterprise Linux 5 およびそれ以前のバージョンでは、チェックサムに SHA1 を選択します。 - HTTP での公開 - リポジトリーを HTTP で公開可能にします。このオプションは自動的に選択されます。
- GPG キー - このリポジトリーの GPG キー。これまでに作成した PostgreSQL 9.5 GPG キーを選択します。
保存 をクリックしてこのリポジトリーエントリーを保存します。
リポジトリーは同期プランを使用して定期的に更新されますが、ここで初期同期を実行します。PostgreSQL 9.5 リポジトリーを選択して 同期開始 をクリックします。これでリポジトリーと外部 PostgreSQL リポジトリーとの同期が開始されます。
この同期の進捗状況は、コンテンツ > 同期の状態 ページで確認できます。
CLI をご利用の場合
以下のコマンドを実行してリポジトリーを作成します。
# hammer repository create \ --name "PostgreSQL 9.5" \ --content-type "yum" \ --publish-via-http true \ --url http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/ \ --gpg-key "PostgreSQL 9.5" \ --product "PostgreSQL" \ --organization "ACME"
次にリポジトリーを同期します。
# hammer repository synchronize \ --name "PostgreSQL 9.5" \ --product "PostgreSQL" \ --organization "ACME"
これで PostgreSQL 9.5 の同期コピーが用意できました。さらに Puppet モジュールを含めて PostgreSQL サーバーを設定することができます。
Web UI の製品ページには リポジトリーの検出 機能があり、これは URL からすべてのリポジトリーを発見し、自分のカスタム製品に追加するよう選択できるようにします。例えば、リポジトリーの検出 を使って http://yum.postgresql.org/9.5/redhat/
を検索し、Red Hat Enterprise Linux の各バージョンおよびアーキテクチャー用の PostgreSQL 9.5 リポジトリーをすべて一覧表示することができます。こうすることで、単一ソースから複数のリポジトリーをインポートする時間を節約できます。
Red Hat では、PostgreSQL から直接のアップストリーム RPM をサポートしていません。これらの RPM は同期プロセスのデモに使用されます。これらの RPM について問題がある場合は、PostgreSQL の開発者に連絡してください。
5.5. カスタム Puppet リポジトリーの作成
カスタム製品にも Puppet モジュールのリポジトリーを含めることができます。これを含めると、ホストの状態構成を組み込む方法が提供されます。
まず、PostgreSQL 製品のリポジトリーを作成します。
Web UI をご利用の場合
製品ページ (コンテンツ > 製品) を開いていることを確認してください。PostgreSQL 製品をクリックするとリポジトリー一覧が表示されます。リポジトリーの作成 をクリックして、新規リポジトリーのフォームを表示します。以下の詳細を入力します。
-
名前 - リポジトリーの簡単な名前。
PostgreSQL Puppet Modules
と入力します。 - ラベル - リポジトリーの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
-
タイプ - リポジトリーのタイプ。
puppet
を選択すると URL フィールドが表示されます。 - URL - ソースとして使用する外部リポジトリーの URL。Puppet モジュールは手動でインポートしますが、Puppet モジュールの同期にはリポジトリーソースを使用することができます。
保存 をクリックしてこのリポジトリーエントリーを保存します。
CLI をご利用の場合
以下のコマンドを実行して Puppet モジュールリポジトリーを作成します。
# hammer repository create \ --name "PostgreSQL Puppet Modules" \ --content-type "puppet" \ --product "PostgreSQL" \ --organization "ACME"
これで Puppet モジュールのカスタムリポジトリーができました。モジュールを加えていきます。
5.6. 個別 Puppet モジュールの管理
このシナリオでは、PostgreSQL 設定用の Puppet モジュールを手動でインポートします。
Puppet Forge サイト (https://forge.puppetlabs.com/puppetlabs/postgresql) からこのモジュールをダウンロードします。ブラウザーでこのページを開き、download latest tar.gz をクリックしてローカルのファイルシステムに保存します。
Web UI をご利用の場合
PostgreSQL 製品のリポジトリー一覧ページを開いていることを確認します。PostgreSQL Puppet Modules リポジトリーをクリックし、そのリポジトリーの詳細ページを表示します。
Upload Puppet Module セクションにスクロールし、参照 をクリックしてダウンロードした PostgreSQL Puppet Module を選択し、アップロードします。数秒すると、Satellite Server が Content successfully uploaded
とレポートします。
Puppet モジュールを管理したり製品から Puppet モジュールを削除するには、Manage Puppet Modules ページをクリックします。
CLI をご利用の場合
以下のコマンドで Puppet モジュールを使用中の Satellite Server のファイルシステムにコピーします。
[user@client ~]$ scp ~/<puppet_module>.tar.gz root@satellite.example.com:~/.
Puppet モジュールを PostgreSQL Puppet Modules リポジトリーにインポートします。
[root@satellite ~]# hammer repository upload-content \
--path ~/<puppet_module>.tar.gz \
--name "PostgreSQL Puppet Modules" \
--product "PostgreSQL" \
--organization "ACME"
これで RPM コンテンツを使用したサーバーをインストール、設定するための、RPM コンテンツ と Puppet モジュールの両方を格納したカスタムリポジトリーができました。
Red Hat では、Puppet Forge からのモジュールをサポートしていません。PostgreSQL モジュールは、モジュール管理プロセスのデモのために使用されています。これらのモジュールについて問題がある場合は、モジュール開発者に連絡してください。
5.7. Puppet リポジトリーの同期
アップロードした Puppet モジュールのリポジトリー作成に加え、Satellite Server は完全な Puppet モジュールリポジトリーの同期ができます。この例では、Satellite Server は Puppet Forge リポジトリー全体を同期します。
Web UI をご利用の場合
コンテンツ > 製品 に移動し、新製品 をクリックします。新しい製品のフォームが表示されます。以下の詳細情報を入力します。
-
名前 - 製品の簡単な名前。
Puppet Forge
と入力します。 - ラベル - 製品の内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
- GPG キー - 製品全体の GPG キー。これは空白にします。
-
同期プラン - 製品の同期計画。これは、前の章で作成した
Example Plan
に割り当てることができます。 -
説明 - 製品の簡単な説明。
All modules from Puppet Forge
と入力します。
この情報を入力したら、保存 をクリックします。
カスタム製品の作成後は、リポジトリー画面が表示されます。リポジトリーの作成 をクリックし、新しいリポジトリー用のフォームを表示します。以下の詳細情報を入力します。
-
名前 - リポジトリーの簡単な名前。
Puppet Forge Modules
と入力します。 - ラベル - リポジトリーの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
-
タイプ - リポジトリーのタイプ。
puppet
を選択すると URL フィールドが表示されます。 -
URL - ソースとして使用する外部リポジトリーの URL。
http://forge.puppetlabs.com/
と入力します。
保存 をクリックしてこのリポジトリーエントリーを保存します。
Puppet Forge Modules
リポジトリーを選択し、同期開始 をクリックします。これで Puppet Forge から Satellite Server に全モジュールがインポートされます。
CLI をご利用の場合
製品を作成します。
# hammer product create \ --name "Puppet Forge" \ --sync-plan "Example Plan" \ --description "All modules from Puppet Forge" \ --organization "ACME"
Puppet Forge リポジトリーを作成します。
# hammer repository create \ --name "Puppet Forge Modules" \ --content-type "puppet" \ --product "Puppet Forge" \ --organization "ACME" \ --url http://forge.puppetlabs.com/
リポジトリーを同期します。
# hammer repository synchronize \ --name "Puppet Forge Modules" \ --product "Puppet Forge" \ --organization "ACME"
Puppet Forge リポジトリーには数千のモジュールが格納されているので、同期には時間がかかる場合があります。
Red Hat では、Puppet Forge からのモジュールをサポートしていません。モジュールは、同期プロセスのデモのために使用されています。これらのモジュールについて問題がある場合は、モジュール開発者に連絡してください。
5.8. Git リポジトリーからの Puppet Modules の同期
Red Hat Satellite 6 には pulp-puppet-module-builder
と呼ばれるユーティリティーが含まれており、これは pulp-puppet-tools
RPM から他のシステムにインストールできます。このツールは Git リポジトリーをチェックアウトし、全モジュールをビルドして、それらを Satellite 6 が同期できる構造で発行します。よくある方法の 1 つは、Satellite Server 上でこのユーティリティーを実行し、ローカルディレクトリーに公開して、そのディレクトリーに対して同期するというものです。例を示します。
# mkdir /modules # chmod 755 /modules # pulp-puppet-module-builder \ --output-dir=/modules \ --url=git@mygitserver.com:mymodules.git \ --branch=develop
これで Git リポジトリーの develop
ブランチが git@mygitserver.com:mymodules.git
からチェックアウトされ、/modules
に発行されます。このディレクトリーを Satellite Server の新規リポジトリーの URL (file:///modules
) として追加します。
Web UI をご利用の場合
カスタム製品を開き (このケースでは例として MyProduct
を使用) リポジトリーの作成 をクリックします。以下の詳細を入力します。
-
名前 - リポジトリーの簡単な名前。
Modules from Git
と入力します。 - ラベル - リポジトリーの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
-
タイプ - リポジトリーのタイプ。
puppet
を選択すると URL フィールドが表示されます。 -
URL - ソースとして使用する外部リポジトリーの URL。
file:///modules
と入力します。
CLI をご利用の場合
Puppet Forge リポジトリーを作成します。
# hammer repository create \ --name "Modules from Git" \ --content-type "puppet" \ --product "MyProduct" \ --organization "ACME" \ --url file:///modules
リモートの HTTP サーバー上にモジュールを発行する場合でも同じプロセスを実行します。例えば、Puppet モジュールを発行する標準ウェブホストとして webserver.example.com
を使用する場合は、ホストにログインし以下のコマンドを実行します。
# mkdir /var/www/html/modules/ # chmod 755 /var/www/html/modules/ # pulp-puppet-module-builder \ --output-dir=/var/www/html/modules/ \ --url=git@mygitserver.com:mymodules.git \ --branch=develop
Satellite Server 上では、リポジトリーの URL を http://webserver.example.com/modules/
に設定します。
5.9. 章の概要
本章では、Red Hat 以外のコンテンツ向けのカスタムリポジトリーの作成方法を説明しました。これには RPM ファイルや Puppet モジュールが含まれます。
これで、ベースコンテンツすべてが Satellite Server の DML にインポートされました。これをアプリケーションのライフサイクルに使用できます。
次章では、ACME の開発および実稼働プロセスに一致するようにアプリケーションのライフサイクルを開発する方法を説明します。