【RHEL】ローカルyum/dnfリポジトリを構築する方法 – インターネット接続なしでパッケージを管理

RHEL

今回は、ネットワークに接続できないRHEL環境でもyum/dnfを使ってパッケージを管理する方法について解説します。セキュリティ要件の厳しい環境や、インターネットから物理的に隔離されたシステムでも、ローカルリポジトリを構築することでパッケージ管理の恩恵を受けることができます。RHEL 8以降で使える手法を中心に、具体的な手順をステップバイステップで紹介します。

ローカルリポジトリが必要なケース

エンタープライズ環境では、以下のような理由でインターネットに接続できないサーバーが多く存在します:

セキュリティポリシー:重要なシステムはインターネットから完全に隔離されていることが多い
規制要件:金融や医療など特定の業界ではネットワーク分離が義務付けられている場合がある
帯域制限:リモート拠点やコンテナ環境で外部接続が制限されている

このような環境でも、パッケージ管理ツールの利便性(依存関係の自動解決、バージョン管理など)を活用したいケースは多いでしょう。そこで役立つのがローカルリポジトリです。

準備:必要なパッケージとISOイメージの入手

まず、ローカルリポジトリを構築するために必要なものを準備します:

1. RHEL 8/9のISOイメージ(インストールメディア)
2. 必要に応じて、追加のRPMパッケージファイル
3. リポジトリ作成ツール(createrepo_c)

インターネットに接続できる別の環境で以下のパッケージをダウンロードしておくと便利です:

dnf download createrepo_c
dnf download yum-utils

もしくは、RHELのISOイメージがあれば、それをマウントして必要なツールをコピーすることも可能です。

ISOイメージをマウントしてリポジトリとして利用する

RHEL 8以降では、ISOイメージを直接マウントしてリポジトリとして使用できます。以下の手順で設定します:

1. ISOイメージをマウントするディレクトリを作成

mkdir -p /mnt/iso

2. ISOイメージをマウント

mount -o loop /path/to/rhel-8.x-x86_64-dvd.iso /mnt/iso

3. リポジトリの設定ファイルを作成

cat > /etc/yum.repos.d/local-dvd.repo << EOF
[local-dvd]
name=RHEL DVD Local Repository
baseurl=file:///mnt/iso
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF

4. リポジトリキャッシュの更新

dnf clean all
dnf makecache

これで、ISOイメージ内のパッケージをyum/dnfコマンドで管理できるようになります。ただし、この方法ではISOイメージに含まれているパッケージしか利用できません。

カスタムローカルリポジトリの構築

特定のアプリケーションをインストールするために、外部から取得したRPMパッケージを含むカスタムリポジトリを作成する手順は以下の通りです:

1. リポジトリ用のディレクトリを作成

mkdir -p /var/local/repo/custom

2. RPMパッケージをリポジトリディレクトリにコピー

cp /path/to/downloaded/*.rpm /var/local/repo/custom/

3. createrepo_cツールをインストール(まだインストールされていない場合)

dnf install -y createrepo_c

4. リポジトリメタデータを作成

createrepo_c /var/local/repo/custom

5. リポジトリの設定ファイルを作成

cat > /etc/yum.repos.d/local-custom.repo << EOF
[local-custom]
name=Custom Local Repository
baseurl=file:///var/local/repo/custom
enabled=1
gpgcheck=0
EOF

6. リポジトリキャッシュの更新

dnf clean all
dnf makecache

特定アプリケーションのインストール例

ここでは、特定のアプリケーション(例:Postgresqlなど)をローカルリポジトリからインストールする例を紹介します。

1. まず、対象アプリケーションとその依存パッケージを別のインターネット接続可能なRHEL環境でダウンロードします:

dnf download --resolve postgresql-server

このコマンドは、postgresql-serverとその依存パッケージをすべて現在のディレクトリにダウンロードします。

2. ダウンロードしたRPMファイルをUSBメモリなどでエアギャップ環境のサーバーに移し、先ほど作成したカスタムリポジトリディレクトリにコピーします:

cp /media/usb/*.rpm /var/local/repo/custom/

3. リポジトリメタデータを更新します:

createrepo_c --update /var/local/repo/custom

4. これでアプリケーションをインストールできます:

dnf install postgresql-server

複数のリポジトリを組み合わせる

実際の業務では、RHELのベースリポジトリと、カスタムアプリケーション用のリポジトリを組み合わせて使うことが多いでしょう。その場合は、上記の手順でそれぞれのリポジトリを構築し、必要に応じてリポジトリの優先度を設定します。

優先度の設定は、以下のようにrepoファイルにpriorityパラメータを追加します:

cat > /etc/yum.repos.d/local-custom.repo << EOF
[local-custom]
name=Custom Local Repository
baseurl=file:///var/local/repo/custom
enabled=1
gpgcheck=0
priority=1
EOF

数値が小さいほど優先度が高くなります。同じパッケージが複数のリポジトリに存在する場合、優先度が高いリポジトリのパッケージがインストールされます。

リポジトリメタデータの定期更新

ローカルリポジトリにパッケージを追加した場合は、メタデータを更新する必要があります。以下のコマンドを実行してください:

createrepo_c --update /var/local/repo/custom

頻繁にパッケージを追加する場合は、cronジョブなどで定期的にメタデータを更新することも検討してください:

echo "0 2 * * * root createrepo_c --update /var/local/repo/custom" > /etc/cron.d/update-local-repo

これにより、毎日午前2時にリポジトリメタデータが更新されます。

トラブルシューティング

ローカルリポジトリ利用時によく発生する問題と解決策です:

1. **「No package XXX available」エラー**
– リポジトリにパッケージが存在するか確認
– `createrepo_c`の実行に成功したか確認
– `dnf clean all && dnf makecache`を実行

2. **依存関係エラー**
– 依存パッケージを含めてダウンロードしたか確認(`dnf download –resolve`を使用)
– 不足している依存パッケージを追加

3. **リポジトリにアクセスできないエラー**
– パスが正しいか確認
– ファイルのパーミッションを確認
– SELinuxのコンテキストを確認

まとめ

インターネットに接続できないRHEL環境でも、ローカルリポジトリを構築することでyum/dnfの便利な機能を活用できることがわかりました。ISOイメージのマウントと、カスタムリポジトリの作成を組み合わせることで、必要なパッケージを効率的に管理できます。

セキュリティ要件の厳しい環境でも、この方法を使えば、パッケージのバージョン管理や依存関係の解決といったメリットを享受しながら、安全にシステムを運用することが可能です。

特に、システム管理者やインフラエンジニアにとって、エアギャップ環境でのパッケージ管理は重要なスキルの一つです。この記事で紹介した手法を応用すれば、さまざまな状況に対応できるでしょう。

また、将来的にはコンテナイメージやAnsibleなどの構成管理ツールと組み合わせることで、よりスケーラブルな運用も可能になります。ぜひ、自身の環境に合わせてカスタマイズしてみてください。

【注意】

このブログは技術に関する知識や経験を共有することを目的としており、情報の正確性に努めていますが、その内容の正確性や完全性を保証するものではありません。ブログの情報を利用する場合は、自己の責任において行動してください。ブログの内容に基づいて行った行動や決定によって生じた損害や被害について、筆者は一切の責任を負いません。

 

記事の内容の一部は、生成AIで作成しています。

RHEL
この記事の作者
StarTeller

30歳で異業種からITエンジニアへ転身し、10年以上にわたりインフラエンジニアとして様々な現場でシステム構築・運用に携わってきました。

得意分野はLinux/Windowsのサーバー構築・運用で、ネットワークやAWSなども実務で活用しています。

このブログでは、これまでの業務で培った経験を基に、日々の業務で遭遇した問題の解決方法や、システム構築の具体的な手順を解説。現場のエンジニアが実際に「困ったとき」に参照できる情報を意識して投稿していこうと思っています。

StarTellerをフォローする
StarTellerをフォローする

コメント

タイトルとURLをコピーしました