今回は、ネットワークに接続できない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などの構成管理ツールと組み合わせることで、よりスケーラブルな運用も可能になります。ぜひ、自身の環境に合わせてカスタマイズしてみてください。
コメント