Linuxサーバー上にYUMを作成する ローカルの YUM リポジトリを構築し (ISO またはミラーリングされたパッケージから)、createrepo_c を使用してメタデータを生成し、HTTP/HTTPS 経由で提供し、クライアントに baseurl を指す .repo ファイルを追加することで、高速で制御されたオフライン対応のパッケージ管理が可能になります。 manageRHEL/CentOS/AlmaLinux/Rockyシステム全体にわたる変更。
このガイドでは、Linuxサーバー上にYUMを作成する方法をステップバイステップで説明します。具体的には、プライベートにホストしたり、アップストリームソースからミラーリングしたりできるローカルYUMリポジトリを作成する方法を説明します。
CentOS 7、AlmaLinux/Rocky 8/9、またはRHELのいずれを使用している場合でも、このチュートリアルではオフライン設定、同期、GPGセキュリティ、および実際のメンテナンスについて説明します。
YUM(およびDNF)とは何か、そしてなぜ独自のレポジトリを構築する必要があるのか?
YUM(Yellowdog Updater, Modified)はパッケージです manager は RPM ベースのディストリビューションで使用されます。RHEL 8/9、CentOS Stream、AlmaLinux、および Rocky Linux では、デフォルトのクライアントは DNF ですが、互換性のために yum コマンドがラッパーとして残されています。

独自のYUMリポジトリを作成することで、パッケージを一元管理し、スピード、制御性、コンプライアンスを向上させることができます。これは、データセンター、エアギャップネットワーク、一貫性のあるDevOps環境に最適です。
前提条件
- sudo/rootアクセス権限を持つLinuxサーバー(RHEL/CentOS 7またはAlmaLinux/Rocky/RHEL 8/9)
- 基本的なネットワーク、ファイアウォール、SELinuxに関する知識
- RHELの場合: 有効なサブスクリプションまたは有効なコンテンツソース。コミュニティ向け:AlmaLinux/Rocky/CentOS ストリームミラー
- ウェブサーバー リポジトリをホストする(Apache httpd または Nginx)
- ユーティリティ: createrepo_c、およびオプションでreposync(yum-utilsまたはdnf-plugins-coreから)
迅速な判断:YUMリポジトリを作成する2つの方法
- ISOイメージまたはRPMパッケージのディレクトリからのオフライン/ローカルリポジトリ(エアギャップ環境または厳選されたパッケージセットに最適)
- 上流ソースからのreposyncを使用したミラーリポジトリ(ローカルミラーを最新の状態に保つのに最適)
オプション1:ISOまたはRPMディレクトリからローカルYUMリポジトリを作成する
この方法は、RHEL/AlmaLinux/Rocky ISOやカスタムRPMコレクションなど、既に所有しているパッケージからリポジトリを構築します。これは、オフラインで使用するためにLinuxサーバー上にYUMを作成する最も速い方法です。
ステップ1: 必要なツールをインストールする
# RHEL/CentOS 7
sudo yum install -y createrepo yum-utils httpd
# AlmaLinux/Rocky/RHEL 8/9
sudo dnf install -y createrepo_c dnf-plugins-core httpdステップ2:リポジトリディレクトリを準備する
sudo mkdir -p /var/www/html/repos/localrepo
sudo chown -R root:root /var/www/html/repos
sudo chmod -R 755 /var/www/html/reposステップ3:(オプション)ISOイメージをマウントしてパッケージをコピーする
ディストリビューションISO(例:AlmaLinux-9.x-x86_64-dvd.iso)を使用している場合は、BaseOS/AppStream(またはPackages)ディレクトリからRPMをマウントしてコピーしてください。
sudo mkdir -p /mnt/iso
sudo mount -o loop /path/to/AlmaLinux-9.x-x86_64-dvd.iso /mnt/iso
# Copy BaseOS and AppStream packages (adjust paths per distro)
sudo cp -av /mnt/iso/BaseOS/Packages/*.rpm /var/www/html/repos/localrepo/
sudo cp -av /mnt/iso/AppStream/Packages/*.rpm /var/www/html/repos/localrepo/あるいは、カスタムリポジトリを構築する場合は、キュレーション済みのRPMパッケージを同じディレクトリにコピーしてください。
ステップ4:createrepo_cを使用してメタデータを生成する
# Initialize repository metadata
sudo createrepo_c /var/www/html/repos/localrepo
# Later, when updating with new RPMs, use --update:
sudo createrepo_c --update /var/www/html/repos/localrepoステップ 5: HTTP 経由でリポジトリを提供する (Apache)
sudo systemctl enable httpd --now
# If SELinux is enforcing, allow Apache to read the repo directory
sudo chcon -R -t httpd_sys_content_t /var/www/html/repos
# Open firewall if needed
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reloadリポジトリのベースURLは次のとおりです。
http://<your-server-ip-or-domain>/repos/localrepoステップ6:クライアントマシン上に.repoファイルを作成する
sudo tee /etc/yum.repos.d/localrepo.repo > /dev/null <<'EOF'
[localrepo]
name=Local YUM Repository
baseurl=http://<your-server-ip-or-domain>/repos/localrepo
enabled=1
gpgcheck=0
EOF
# Refresh cache and test
sudo yum clean all && sudo yum makecache
sudo yum repolist
# Install a package to verify
sudo yum install -y <package-name>パッケージまたはリポジトリのメタデータをGPGキーで署名した後(下記参照)、gpgcheck=1を設定してください。
(オプション)ステップ7:セキュリティのためにGPG署名を有効にする
署名によって信頼性が向上します。GPGキーを生成またはインポートし、RPMパッケージやメタデータに署名して、クライアントに公開鍵を指定します。
# Create a GPG key (interactive)
gpg --full-generate-key
# Export public key to serve via HTTP
gpg --export -a "Your Name or Repo Key" | sudo tee /var/www/html/repos/RPM-GPG-KEY-localrepo
# On clients, import and enforce gpgcheck
sudo rpm --import http://<server>/repos/RPM-GPG-KEY-localrepo
# Then set in /etc/yum.repos.d/localrepo.repo
gpgcheck=1
gpgkey=http://<server>/repos/RPM-GPG-KEY-localrepoオプション2:reposyncを使用してアップストリームリポジトリをミラーリングする
reposyncを使用して公式リポジトリをローカルにミラーリングします。これにより、外部帯域幅が削減され、多数のサーバー間での更新が高速化されます。
ステップ1:reposyncユーティリティをインストールする
# RHEL/CentOS 7
sudo yum install -y yum-utils httpd
# AlmaLinux/Rocky/RHEL 8/9
sudo dnf install -y dnf-plugins-core httpdステップ2:ミラーリングするリポジトリを選択する
- AlmaLinux/Rocky 8/9: BaseOS、AppStream、Extras
- RHEL 8/9: BaseOS、AppStream(サブスクリプションアクセスが必要)
- CentOS 7: 基本パッケージ、アップデート、追加パッケージ(サポート終了に関する注記:移行計画を立ててください)
ステップ3:reposyncを実行する
ディレクトリ構造を作成して同期します。以下の例はAlmaLinux 9を示しています。ご使用のディストリビューションとアーキテクチャに合わせて調整してください。
BASE=/var/www/html/repos/almalinux9
sudo mkdir -p $BASE/{BaseOS,AppStream}
# Sync packages and metadata
sudo reposync -p $BASE/BaseOS --download-metadata --repo=almalinux-baseos
sudo reposync -p $BASE/AppStream --download-metadata --repo=almalinux-appstream
# If your reposync doesn't add repodata, generate it:
sudo createrepo_c $BASE/BaseOS
sudo createrepo_c $BASE/AppStreamRHEL では、同期する前にサブスクリプションリポジトリが有効になっていることを確認してください。CentOS 7 では、/etc/yum.repos.d/CentOS-Base.repo にあるリポジトリ ID を使用してください。
ステップ4:鏡を映し出す
sudo systemctl enable httpd --now
sudo chcon -R -t httpd_sys_content_t /var/www/html/repos
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reloadミラーを指すクライアントリポジトリファイルを作成します。
# AlmaLinux 9 example:
sudo tee /etc/yum.repos.d/alma-local.repo > /dev/null <<'EOF'
[almalinux-BaseOS-local]
name=AlmaLinux 9 BaseOS (Local)
baseurl=http://<server>/repos/almalinux9/BaseOS
enabled=1
gpgcheck=1
gpgkey=https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9
[almalinux-AppStream-local]
name=AlmaLinux 9 AppStream (Local)
baseurl=http://<server>/repos/almalinux9/AppStream
enabled=1
gpgcheck=1
gpgkey=https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9
EOF
sudo dnf clean all && sudo dnf makecache
sudo dnf repolistメンテナンス:YUMリポジトリを健全に保つ
- 同期を自動化する: cronまたはsystemdタイマーを使用してreposyncを毎晩/毎週実行する
- 古いパッケージを削除する: 上流で削除されたパッケージを削除するには、reposync –delete を使用してください。
- メタデータの再生成: RPMパッケージの追加/削除時にcreaterepo_c –updateを実行する
- モニターストレージ: NVMe対応のVPSまたは専用サーバーは、負荷がかかった状態でリポジトリミラーをより適切に処理します。
- 安全なアクセス: HTTPSを優先し、内部リポジトリはIPアドレス/VPNで制限する
# Example cron job (as root) to sync nightly at 2:30 AM
cat <<'CRON' >> /etc/crontab
30 2 * * * root reposync -p /var/www/html/repos/almalinux9/BaseOS --download-metadata --repo=almalinux-baseos --delete
35 2 * * * root reposync -p /var/www/html/repos/almalinux9/AppStream --download-metadata --repo=almalinux-appstream --delete
# Refresh metadata if needed
40 2 * * * root createrepo_c --update /var/www/html/repos/almalinux9/BaseOS
45 2 * * * root createrepo_c --update /var/www/html/repos/almalinux9/AppStream
CRONプライベートYUMリポジトリのセキュリティに関するベストプラクティス
- gpgcheck=1を有効にして、GPG公開鍵を配布してください。
- 有効な証明書を使用して HTTPS 経由で配信します (暗号化しよう インターネットに公開されているリポジトリの場合)
- 内部リポジトリには基本認証またはIP許可リストを使用してください
- 監査の変更: リポジトリの.repoファイルと同期スクリプトをバージョン管理します。
- Harden Apache/Nginx 新しいリポジトリ経由でOSのパッチを適用してください。
YUMとDNF:使用するコマンド
- インストールします。 yum install pkg は dnf install pkg と同等です
- キャッシュ/リポジトリ一覧を更新する: yum makecache、yum repolist は dnf makecache、dnf repolist と等しい
- キャッシュをクリアする: yum clean all は dnf clean all と同じです
- ミラー: yum-utils reposync (EL7) と dnf-plugins-core reposync (EL8/9) の比較
最新のシステムでは、yumコマンドはdnfへのシンボリックリンクになっていることが多い。ここでの手順はどちらのシステムでも有効だが、パッケージ名はバージョンごとに調整されている。
YUMリポジトリでよく発生するエラーのトラブルシューティング
- 有効なベースURLが見つかりません: .repo の baseurl を確認します。 DNSファイアウォールも確認してください。 Apache 稼働中でアクセス可能
- repodata/repomd.xml が見つかりません: リポジトリディレクトリで createrepo_c を実行するか、reposync で –download-metadata を確実に実行してください。
- GPGチェックに失敗しました: 正しいGPGキーをインポートし、gpgkey URLを確認します。診断のために一時的にgpgcheck=0を設定します。
- パッケージに関する404エラー: SELinuxコンテキスト(httpd_sys_content_t)とディレクトリのパーミッション(755)を確認してください。
- 不整合なアーキテクチャ: 正しいベース検索 (x86_64、aarch64) が同期/提供されていることを確認してください。
ホスティングフロアからの実践的なヒント
- パッケージのバージョンを分離するために、リポジトリを環境(本番環境/ステージング環境/開発環境)ごとに分割する
- よく使われるパッケージを、アプリケーションサーバーに近いエッジノードにキャッシュする
- 大規模な環境の場合は、–repoフィルターとインクルード/エクスクルードリストを使用して必要なものだけをミラーリングしてください。
- リポジトリIDを文書化し、設定を通じて.repoファイルを最小限かつ一貫性のある状態に保ちます。 managemento
高速なNVMe VPSまたは専用サーバーでプライベートYUMリポジトリをホストすると、パッチ適用期間中のスループットが向上します。 YouStable 最適化されたVPSとベアメタルオプションを提供し、ミラーリングに最適です。帯域幅、スナップショット、DDoS攻撃対策により、負荷がかかった状態でもリポジトリの信頼性を維持します。
よくあるご質問
ISOイメージからローカルのYUMリポジトリを作成するにはどうすればよいですか?
ISOをマウントし、RPMをディレクトリにコピーし、createrepo_cを実行してrepodataを生成し、ディレクトリを次の方法で提供します。 Apache or Nginx最後に、クライアント上にサーバーのパスを指す baseurl を指定した .repo ファイルを作成し、yum/dnf makecache を実行します。
YUMはDNFに置き換えられたのですか?
RHEL 8/9およびその派生ディストリビューションでは、DNFがデフォルトですが、互換性のためにyumコマンドも残されています。リポジトリのレイアウトと構成(.repoファイル、repodataなど)はどちらも同じなので、このガイドはどちらにも適用できます。
公式リポジトリをローカルにミラーリングするにはどうすればよいですか?
yum-utils (EL7) または dnf-plugins-core (EL8/9) をインストールし、目的のリポジトリ ID と –download-metadata オプションを指定して reposync を実行します。同期されたディレクトリを HTTP/HTTPS で提供し、クライアントを baseurl に誘導します。削除されたパッケージを削除するには、–delete オプションを使用します。
プライベートなYUMリポジトリを安全に保護するにはどうすればよいですか?
GPGチェックを有効にし、HTTPS経由で配信し、IPアドレスまたはVPNによるアクセス制限を行い、リポジトリのコンテンツをセキュリティ強化されたシステムに保存します。パッケージまたはメタデータに署名し、GPG公開鍵を信頼できるチャネル経由で配布します。
複数のサーバーを自分のリポジトリに向ける最も簡単な方法は何ですか?
設定を使用する manage.repo ファイルを統一的にデプロイするには、Ansible、Puppet、または Salt などのツールを使用します。フリート全体で意図しないアップグレードが発生しないように、リポジトリはバージョン管理し、環境ごとに分離してください。
