【Rocky Linux】インターネットに接続できない環境でパッケージを更新する方法

 この記事で試しているのはRocky Linuxですが特別な機能は用いていないため最近のREHL系なら多分同様に動作します。

 インターネットに接続できない環境(以下閉域環境)でLinuxを使う場合、インターネット上からファイルを取得する通常のパッケージインストールや更新はできません。この記事では dnf コマンドによるパッケージの追加、更新を閉域環境で使えるようにする方法を紹介します。

 ざっくりやることをまとめると次の通りです

  1. ネット接続可能な環境でパッケージを収集
  2. ネット接続可能な環境で最新にしたパッケージ含むリポジトリを閉域環境のマシンのファイルとして扱えるようにする(何がしかのファイル移動かコピーかをする想定です)
  3. 閉域環境上でローカルリポジトリを作り、それを使ってインストール

インターネットにつながらないDockerコンテナを利用して試した例が次です。

1. オンライン環境で .rpm を収集

まずは rockylinux:9 イメージを使って、オンラインの作業用コンテナを立ち上げます。このネット接続可能なコンテナでインターネット上からパッケージを集めます。

docker run -it --name rocky-online \
  -v /tmp/offline-repo:/offline-repo \
  rockylinux:9 bash

dnfからRPMをダウンロード

dnf makecache
dnf update --downloadonly --downloaddir=/offline-repo

このコマンドは、アップデート対象のパッケージすべてを /offline-repo にRPMファイルとして保存します。

補足

必要に応じて、特定パッケージだけに限定することも可能です:

dnf download --resolve --alldeps --destdir=/offline-repo vim

2. オフライン用ローカルリポジトリの準備

ダウンロードした .rpm ファイルをローカルリポジトリ化するために、createrepo を使います。

dnf install -y createrepo
createrepo /offline-repo

これで /offline-repo/repodata/ が生成され、リポジトリとして認識可能になります。


3. オフライン環境へのコピー

ここではホストの /tmp/offline-repo をそのまま閉域環境として扱う別のコンテナで使います。実運用では物理的にファイルをコピーする想定です(ローカルネットワークとして繋いで送信するなど)。

docker create -it --name rocky-offline \
  -v /tmp/offline-repo:/offline-repo \
  rockylinux:9
docker start -ai rocky-offline

4. 閉域環境でローカルリポジトリを設定

まずデフォルト設定として入っているオンライン用のリポジトリを無効化しておきます。

sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/*.repo

続いて、ローカルリポジトリ用の .repo ファイルを作成します:

cat << EOF > /etc/yum.repos.d/offline.repo
[offline-repo]
name=Offline Repository
baseurl=file:///offline-repo
enabled=1
gpgcheck=0
EOF

5. パッケージをオフラインで更新/追加

ローカルリポジトリを使ってパッケージを更新できるになったのでオフラインでの更新を行います。

dnf clean all
dnf update -y

特定のパッケージのみインストールしたい場合は次のようにできます:

dnf install -y vim

dnf は自動的にローカルリポジトリから依存関係を解決してくれます。

こんな感じでインターネットにつながらない環境でもパッケージを追加したり更新したりが比較的容易にできます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG