はじめに
Linuxサーバがインターネットに接続できない環境では、必要なRPMパッケージをインターネットに接続可能な別のサーバでダウンロードし、オフライン環境のサーバへ持ち込んでインストールする方法があります。
しかし、この方法では毎回依存関係を含めてRPMファイルを個別に指定する必要があり、作業の手間がかかります。
そのため、事前に必要なパッケージとその依存関係をすべてダウンロードし、ローカルリポジトリを構築することで、yum install コマンドだけでインストールできるようにするのが効率的です。
特に、同じパッケージを複数のオフラインサーバへインストールする場合、毎回個別にRPMファイルを指定するよりも、ローカルリポジトリから一括で対応した方が作業工数を大幅に削減できます。
私の環境
CentOS7
VirtualBox
参考にしたサイト
今回インストールしたいパッケージはbcです
1.事前にパッケージbcの依存関係を確認します。
※bcパッケージの依存関係を表示する
[root@localhost ~]# yum deplist bc
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* epel: d2lzkl7pfhq30w.cloudfront.net
* remi-safe: ftp.riken.jp
パッケージ : bc.x86_64 1.06.95-13.el7
依存性 : /bin/sh
provider: bash.x86_64 4.2.46-35.el7_9
依存性 : /sbin/install-info
provider: info.x86_64 5.1-5.el7
依存性 : libc.so.6(GLIBC_2.14)(64bit)
provider: glibc.x86_64 2.17-326.el7_9.3
依存性 : libncurses.so.5()(64bit)
provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
依存性 : libreadline.so.6()(64bit)
provider: readline.x86_64 6.2-11.el7
依存性 : libtinfo.so.5()(64bit)
provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
依存性 : rtld(GNU_HASH)
provider: glibc.x86_64 2.17-326.el7_9.3
provider: glibc.i686 2.17-326.el7_9.3
2. ローカルリポジトリを作成する
ローカルリポジトリのフォルダを作成する
# mkdir -p /var/www/html/repo
作成したローカルリポジトリのフォルダへ移動する
# cd /var/www/html/repo
現在のカレントディレクトリがローカルリポジトリのフォルダであること
# pwd
/var/www/html/repo
RPM パッケージを格納したディレクトリを YUM/DNF 用のローカルリポジトリに変えるためのコマンド
# createrepo .
repodataが作成されました。
# ls -ltr
repodata
3. bcのrpmパッケージを依存関係を含めてダウンロードする
# yumdownloader --resolve bc
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* epel: repo.jing.rocks
* remi-safe: ftp.riken.jp
--> トランザクションの確認を実行しています。
---> パッケージ bc.x86_64 0:1.06.95-13.el7 を インストール
--> 依存性解決を終了しました。
bc-1.06.95-13.el7.x86_64.rpm
rpmパッケージをダウンロードされました
# pwd
/var/www/html/repo
# ls -tlr
合計 120
-rw-r--r-- 1 root root 117272 7月 4 2014 bc-1.06.95-13.el7.x86_64.rpm
drwxr-xr-x 2 root root 4096 7月 6 20:55 repodata
4. ローカルリポジトリの情報をアップデートする
bcのrpmファイルをか格納したため、ローカルリポジトリの情報をアップデートします。
# createrepo --update .
Spawning worker 0 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost repo]# ls -tlr
合計 120
-rw-r--r-- 1 root root 117272 7月 4 2014 bc-1.06.95-13.el7.x86_64.rpm
drwxr-xr-x 2 root root 4096 7月 6 21:01 repodata
5. クライアント側 /etc/yum.repos.d/local.repoファイルを作成する
/etc/yum.repos.d/local.repoファイルを作成する
# cd /etc/yum.repos.d/
# vi local.repo
[localrepo]
name=Local Repository
baseurl=file:///var/www/html/repo ←ローカルリポジトリのフォルダを指定する
enabled=1
gpgcheck=0
6. YUM の キャッシュをすべて削除する
YUM の キャッシュをすべて削除してディスクをクリーンにする コマンドです。
# yum clean all
読み込んだプラグイン:fastestmirror
リポジトリーを清掃しています: base epel extras localrepo mysql-connectors-community mysql-tools-community mysql57-community remi-safe updates zabbix zabbix-frontend
: zabbix-non-supported
Cleaning up list of fastest mirrors
Other repos take up 32 M of disk space (use --verbose for details)
YUM のキャッシュをすべて削除し、詳細情報(verbose)を表示するコマンド
有効なリポジトリのキャッシュはすべて削除済み
無効(disabled)なリポジトリのキャッシュは削除されていない
合計 約32MB のキャッシュが残っている
残っているキャッシュは明示的に削除しない限り保持される
# yum clean all --verbose
プラグイン「fastestmirror」を読み込んでいます
Config time: 0.011
Yum version: 3.4.3
リポジトリーを清掃しています: base epel extras localrepo mysql-connectors-community mysql-tools-community mysql57-community remi-safe updates zabbix zabbix-frontend
: zabbix-non-supported
Operating on /var/cache/yum/x86_64/7 (see CLEAN OPTIONS in yum(8) for details)
Disk usage under /var/cache/yum/*/* after cleanup:
0 enabled repos
32 M disabled repos:
23 M /var/cache/yum/x86_64/7/remi
9.3 M /var/cache/yum/x86_64/7/ius
0 untracked repos
4.0 k other data:
4.0 k /var/cache/yum/x86_64/7/timedhosts
32 M total
7. bcパッケージをインストールする
先ほど作成したlocalrepoからbcパッケージがインストールされていることを確認しました。
# yum --disablerepo=* --enablerepo=localrepo install bc
読み込んだプラグイン:fastestmirror
Determining fastest mirrors
localrepo | 2.9 kB 00:00:00
localrepo/primary_db | 2.2 kB 00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ bc.x86_64 0:1.06.95-13.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
======================================================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
======================================================================================================================================================================================
インストール中:
bc x86_64 1.06.95-13.el7 localrepo 115 k
トランザクションの要約
======================================================================================================================================================================================
インストール 1 パッケージ
総ダウンロード容量: 115 k
インストール容量: 215 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : bc-1.06.95-13.el7.x86_64 1/1
検証中 : bc-1.06.95-13.el7.x86_64 1/1
インストール:
bc.x86_64 0:1.06.95-13.el7
完了しました!
まとめ
ローカルリポジトリを作成することで、個別にRPMパッケージを指定してインストールする必要がなくなります。
そのため、インターネットに接続できない複数のサーバに同じパッケージを展開する際に、効率的かつ非常に便利です。
良かったら参考にしてください。