ノート:

コンテナを使用した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、スクリプトおよび手順が用意されています。

目的

この演習では、次のことを学習します。

前提条件

必要なパッケージのインストール

まだ接続していない場合は、端末を開き、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つの追加ディレクトリを作成する必要があります。

これらのディレクトリは任意の場所に配置できますが、このコンテナの構成情報とともに作成することをお薦めします。例:

mkdir rhn repo

再同期用の構成変数を設定します

ol-repo-syncイメージは、configディレクトリに格納されているさまざまな構成ファイルに格納されている構成情報によって異なります。

ノート: ULNから同期するには、Oracle Linuxサポート・サブスクリプションが必要です。サポート・サブスクリプションがない場合は、config/repos.jsonからuln配列を完全に削除します。

最適な同期パフォーマンスを得るには、可能なかぎりulnではなく yumソースを使用します。yum.oracle.comはAkamai CDNを利用するため、ほぼ常にULNよりもダウンロード速度が大幅に向上します。

  1. (オプション)アクティブな Oracle Linuxサポートのサブスクリプションを保持する場合:

    cp config/uln.sample.conf config/uln.conf
    

    プレースホルダをOracle SSO資格証明およびアクティブなCSIに置き換えます。このファイルの内容を保護するには、次を実行します。

    chmod 400 config/uln.conf
    

    これにより、自分以外のユーザーがアクセスできなくなります。

  2. 次のコマンドを実行して、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ファイルを最新のリポジトリ構成で更新する場合は、いつでもこのコマンドを再実行できます。新しいリポジトリを同期できるように、新しい更新またはメジャー・バージョンがリリースされるたびに、少なくともコマンドを実行する必要があります。

  3. 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ヘルプ・センターを参照してください。