ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で入手できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
コンテナを使用したDNFまたはULNリポジトリ・ミラーの作成
Oracleサポートの免責事項
Oracleでは、次の手順で提供される一連のステップについて技術サポートは提供されません。これらのステップは、Oracleが提供していないオープンソース・プロジェクトを参照するためです。このチュートリアルでは、オプションの説明を便宜上のみ説明します。
Oracle Linuxソフトウェア配布ミラーを作成するための Oracleのサポートされる方法は、Oracle Linuxを実行しているシステムで dnf reposync
コマンドを使用することです。詳細は、https://docs.oracle.com/en/operating-systems/oracle-linux/software-management/sfw-mgmt-UseSoftwareDistributionMirrors.html#use-mirrorsを参照してください。
イントロダクション
Oracle Linux 8には、DNFの完全な機能を持つ reposyncツールが含まれており、yumリポジトリのミラーを簡単に作成できます。この機能を拡張して、システムの大半がインターネットに直接アクセスできない環境のULNチャネルをミラー化することもできます。組織で使用するyumリポジトリおよびULNチャネルのyumミラーを作成することで、ネットワーク・オーバーヘッドを減らし、環境全体でyumパフォーマンスを向上させることができます。Yumミラーは、オフラインKspliceなどの環境用に他のサービスを構成する場合にも役立ちます。
以前のリリースのOracle Linuxには、ミラー化サービスの実行に使用できるuln-yum-mirror
パッケージが含まれていましたが、これは特に効率的ではなく、設定が比較的複雑でした。
ULNまたはyumミラー・サービスは、コンテナのセット内で最適なサービスの一般的な例です。Dockerまたはポッドマンを使用すると、oraclelinux:8-slim
イメージを使用するコンテナを迅速かつ簡単にデプロイして、組織内で使用するyumリポジトリまたはULNチャネルのスケジュール済同期を処理できます。また、クライアント・システムがアクセスできるWebサービス内で、ミラー化されたリポジトリのプロビジョニングを処理するコンテナをデプロイすることもできます。
openource GitHubプロジェクトには、この種のサービスをhttps://github.com/Djelibeybi/oraclelinux-reposyncで設定するためのDockerfile、スクリプトおよび手順が用意されています。
目的
この演習では、次のことを学習します。
- コンテナ・ツールのインストール
- 必要なソフトウェアを使用してコンテナを構築
- コンテナ内でreposyncを使用してミラー・サービスを作成
前提条件
- Oracle Linux 7または Oracle Linux 8がインストールされ、インターネットにアクセスできるシステム。
- このチュートリアルでは、Oracle Linux 8を使用していることを前提としています。したがって、パッケージインストールコマンドは dnfを使用します。Oracle Linux 7を使用している場合は、これらのコマンド命令を yumに置き換えてください。
- このチュートリアルでは、PodmanおよびBuildahを使用してコンテナのビルドおよび実行を処理しますが、Oracle Linux 7を使用している場合は、Dockerを使用してこれらのタスクを実行することもできます。
必要なパッケージのインストール
まだ接続していない場合は、端末を開き、sshを介してol8-serverシステムに接続します。
ssh oracle@<ip_address_of_ol8-server>
container-reposyncリポジトリをクローニングできるように、gitをインストールします。
sudo dnf install -y git
podmanと関連ユーティリティをインストールします。
sudo dnf module install -y container-tools:ol8
ノート: Oracle Linux 7を使用している場合、buildahおよびskopeoパッケージは、サポートされていないEELリポジトリを介してのみ使用できます。このため、コンテナ・イメージの構築および実行のためにDockerを使用することを選択できます。Dockerの使用の詳細は、openourceプロジェクトREADME.mdを参照してください。
container-reposyncリポジトリのクローニング
リポジトリをクローニングします。
git clone https://github.com/Djelibeybi/oraclelinux-reposync.git
cd oraclelinux-reposync
イメージのビルド
リポジトリに含まれる2つのコンテナ・イメージを構築します:
buildah build-using-dockerfile -t ol-repo-sync .
buildah build-using-dockerfile -t ol-repo-web -f Dockerfile.nginx .
ビルドを確認します。
podman images
追加のストレージ・ディレクトリを作成します。
container-reposyncサービスが正しく機能するには、次の2つの追加ディレクトリを作成する必要があります。
rhn
: ULNチャネルをミラー化する場合は、ULN登録情報を格納するディレクトリを作成して、後続のコンテナの再起動後も保持されるようにする必要があります。このディレクトリは、実行時にコンテナにマップして、ULN登録データにアクセスできます。repo
: ULNまたはyumサーバーからミラー化するすべてのパッケージおよびメタデータを格納するためのディレクトリを作成する必要があります。このベース・ディレクトリをホストするファイル・システムには、ミラー化する予定のすべてのリポジトリおよびチャネルに対応できる十分なディスク領域が必要です。この場所に専用ストレージをマウントするか、必要に応じて別の場所にマップするかを選択できます。
これらのディレクトリは任意の場所に配置できますが、このコンテナの構成情報とともに作成することをお薦めします。例:
mkdir rhn repo
再同期用の構成変数を設定します
ol-repo-syncイメージは、configディレクトリに格納されているさまざまな構成ファイルに格納されている構成情報によって異なります。
config/uln.conf
:このファイルには、Oracle SSO資格証明やアクティブなCSIなどのULNアクセス資格証明が格納されます。アクセスを制限するには、ファイル・アクセス権を設定する必要があります。ULNからミラー化しない場合は、このファイルは必要ありません。config/repo-map.json
:このファイルは、リポジトリURLを構築し、様々なULNチャネルおよびyumリポジトリにアクセスする方法を識別するために使用されます。このファイルは編集しないでください。ただし、このファイルを参照して、ミラー化に使用できるチャネル名を確認できます。このファイルは、新しいULNチャネルを考慮するために、時間ごとに更新する必要がある場合があります。さらに、このファイルの一部のエントリはULNでのみ使用可能です。これには、base
、patch
、ksplice
、JavaSE
およびExadata
という単語を含むすべてのリポジトリが含まれます。これらのリポジトリは、特定のCSIにさらに制限されることがあります。config/repos.json
:このファイルは、ミラー化する必要があるULNチャネルまたはyumリポジトリを識別するために使用されます。これは、最初のULNチャネルのリストと2番目のyumリポジトリという2つのセクションに分かれています。yumリポジトリのみをミラー化する場合は、ULNセクションを完全に削除します。ULNセクションには、yumサーバーから直接ミラー化する方が効率的であるため、https://yum.oracle.com上のリポジトリとして使用できないチャネルのみを含める必要があります。ほとんどのチャネルは Oracle Linux yumサーバーでも使用可能であるため、このセクションを使用して可能なかぎりチャネルを一覧表示します。ULNセクションにエントリを追加する場合は、ULNアカウントが必要であり、コンテナ・イメージをULNに登録する必要があります。
ノート: ULNから同期するには、Oracle Linuxサポート・サブスクリプションが必要です。サポート・サブスクリプションがない場合は、
config/repos.json
からuln
配列を完全に削除します。
最適な同期パフォーマンスを得るには、可能なかぎりulnではなく yumソースを使用します。yum.oracle.comはAkamai CDNを利用するため、ほぼ常にULNよりもダウンロード速度が大幅に向上します。
-
(オプション)アクティブな Oracle Linuxサポートのサブスクリプションを保持する場合:
cp config/uln.sample.conf config/uln.conf
プレースホルダをOracle SSO資格証明およびアクティブなCSIに置き換えます。このファイルの内容を保護するには、次を実行します。
chmod 400 config/uln.conf
これにより、自分以外のユーザーがアクセスできなくなります。
-
次のコマンドを実行して、
config/repo-map.json
ファイルを作成します:podman run --rm -it \ --name ol-repo-sync \ -v ${PWD}/config:/config:z \ -v ${PWD}/repo:/repo:z \ ol-repo-sync update
config/repo-map.json
ファイルを最新のリポジトリ構成で更新する場合は、いつでもこのコマンドを再実行できます。新しいリポジトリを同期できるように、新しい更新またはメジャー・バージョンがリリースされるたびに、少なくともコマンドを実行する必要があります。 -
repos.json
のコピーcp config/repos.sample.json config/repos.json
同期するすべてのリポジトリをulnまたはyum配列に追加します。
例:
ULNから
Oracle Linux 8 Ksplice aware userspace
パッケージとyum.oracle.comからOracle Linux Automation Manager
パッケージを同期するスクリプトを次に示します。この演習中にULNアカウントがない場合は、ulnブロック全体を削除します。echo '{ "uln": [ "ol8_x86_64_userspace_ksplice", "ol8_aarch64_userspace_ksplice" ], "yum": [ "ol8_x86_64_automation" ] }' | tee config/repos.json
(オプション)コンテナをULNに登録します
ULNからのチャネルをミラー化しない場合は、コンテナを登録する必要はありません。ULN構成ファイルにULN資格証明を入力し、ULN登録データを含むディレクトリを作成し、repo構成ファイルに少なくとも1つのULNチャネルを構成している場合は、コンテナを登録する必要があります。
登録は次の方法で実行できます。
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn:z \
-v ${PWD}/config:/config:z \
-v ${PWD}/repo:/repo:z \
ol-repo-sync register
ノート:*これは、端末への出力がなくても数分かかりますが、完了したらコマンド・プロンプトに戻ります。現在の作業ディレクトリ内の
rhn
およびconfig
ディレクトリがコンテナにマップされます。登録は、実行する後続のコンテナごとにrhn
ディレクトリが/etc/sysconfig/rhn
にマップされているかぎり、コンテナに対して1回のみ実行する必要があります。
ミラー・リポジトリの作成
構成されたリポジトリおよびチャネルからのパッケージをミラー・リポジトリに移入するには、次を実行します:
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn \
-v ${PWD}/config:/config \
-v ${PWD}/repo:/repo:z \
ol-repo-sync
コンテナは、config/repos.json
で構成された各チャネルを自動的に追加およびサブスクライブし、Oracle Linux yumサーバーで使用される階層と同じ階層を作成します。
このコマンドは、cronjobまたはsystemdタイマーを使用して定期スケジュールで実行するようにスケジュールできます。
ノート:パッケージはすべてシステムにローカルにダウンロードされるため、このステップの完了にはしばらく時間がかかります。
ローカルのyumミラーをクライアント・システムに提供します。
ol-repo-web
コンテナ・イメージを使用して、クライアント・システムにyumリポジトリを提供します。このコンテナは永続的に実行でき、起動時に起動するように構成できます。
podman run --detach --name yum-server \
-p 8080:80 \
-v ${PWD}/repo:/var/www/html/repo:ro \
ol-repo-web
ノート: repoディレクトリは、ミラー化されたリポジトリおよびチャネルが更新されている間、コンテナの実行とクライアントの提供を継続できるように、読取り専用権限を持つyumサーバー・コンテナにマップされます。
ローカルの yumミラーの確認
次の内容で新しいdnfリポジトリ・エントリを作成します。
echo '[ol_automation_http_repo]
name=OL_automation_x86_64_HTTP
baseurl="http://localhost:8080/repo/OracleLinux/OL8/automation/$basearch/"
gpgcheck=0' | sudo tee /etc/yum.repo.d/ol-local.repo
ノート:外部システムに公開する場合は、前述の
baseurl
を、コンテナを実行しているシステムのIPアドレスまたはホスト名に変更します。
また、ファイアウォールを開いてポート8080へのアクセスを許可します。sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
次に、新しいエントリが機能することを確認します。
dnf repolist
dnf info ansible
詳細情報
関連項目:
その他の学習リソース
docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。
製品ドキュメントは、Oracleヘルプ・センターを参照してください。
Use a Container to Create a DNF or ULN Repo Mirror
F54946-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.