https://qiita.com/yokra9/items/e8842dee2c42fc479931
投稿日 2020年07月13日
更新日 2021年09月17日
オフライン環境でも yum / dnf で依存関係を解決しながらパッケージを導入したい
CentOS
,
Yum
(2021-09-17追記) RHEL 8 系のディストリビューションでは yum の代わりに dnf コマンドが標準となりましたが、下記の手法はそのまま通用します。コマンドを適切に読み替えて、参考としてください。
オンライン環境の CentOS で任意のパッケージを導入したいときは、以下のように入力します:
# yum install httpd
yum install <RPM パッケージ名> を実行すると、指定した RPM パッケージと、それの依存するパッケージが同時にインストールされます。
yum はデフォルトではインターネット上にあるリポジトリから RPM パッケージを取得します。したがって、オフライン環境で同様の体験を得るためには、少し工夫が必要になります。
yum で RPM パッケージをダウンロードする
yum で RPM パッケージをダウンロードするのは簡単です:
# yum install –downloadonly –downloaddir=/tmp/httpd-repo httpd
yum install –downloadonly –downloaddir=<保存先> <RPM パッケージ名> で任意の RPM パッケージをダウンロードできます。1 確認してみましょう:
# ls -l /tmp/httpd-repo/
total 24960
-rw-r–r– 1 root root 105968 Aug 22 2019 apr-1.4.8-5.el7.x86_64.rpm
-rw-r–r– 1 root root 94132 Jul 4 2014 apr-util-1.5.2-6.el7.x86_64.rpm
-rw-r–r– 1 root root 22354804 Sep 30 2015 centos-logos-70.0.6-3.el7.centos.noarch.rpm
-rw-r–r– 1 root root 2843664 Apr 3 20:53 httpd-2.4.6-93.el7.centos.x86_64.rpm
-rw-r–r– 1 root root 94308 Apr 3 20:53 httpd-tools-2.4.6-93.el7.centos.x86_64.rpm
-rw-r–r– 1 root root 31264 Jul 4 2014 mailcap-2.1.41-2.el7.noarch.rpm
いくつかの RPM パッケージがダウンロードされています。rpm -ivh でまとめてインストールしてみましょう:
# cd /tmp/httpd-repo/
# rpm -ivh apr-1.4.8-5.el7.x86_64.rpm httpd-2.4.6-93.el7.centos.x86_64.rpm apr-util-1.5.2-6.el7.x86_64.rpm httpd-tools-2.4.6-93.el7.centos.x86_64.rpm centos-logos-70.0.6-3.el7.centos.noarch.rpm mailcap-2.1.41-2.el7.noarch.rpm
Preparing… ################################# [100%]
Updating / installing…
1:apr-1.4.8-5.el7 ################################# [ 17%]
2:apr-util-1.5.2-6.el7 ################################# [ 33%]
3:httpd-tools-2.4.6-93.el7.centos ################################# [ 50%]
4:mailcap-2.1.41-2.el7 ################################# [ 67%]
5:centos-logos-70.0.6-3.el7.centos ################################# [ 83%]
6:httpd-2.4.6-93.el7.centos ################################# [100%]
この手順は一見して問題ないように見えますが、実際にこれらの RPM パッケージをオフライン環境に持っていっても、以下のような「依存性の欠如」エラーが発生してしまうことがあります:
# rpm -ivh glibc-devel-2.17-260.el7_6.5.x86_64.rpm
error: Failed dependencies:
glibc-headers is needed by glibc-devel-2.17-260.el7_6.5.x86_64
実は、–downloadonly スイッチを利用しても、(通常のインストールプロセスと同様に)インストール済みの RPM パッケージはスキップされてしまいます。それでは、依存するすべての RPM パッケージを取得するにはどうすればよいのでしょうか?
答えは、–installroot スイッチを利用することです:
# yum install –downloadonly –releasever=7 –installroot=/tmp/httpd-installroot –downloaddir=/tmp/httpd-repo httpd
–installroot スイッチは、通常とは別の場所へインストールするために利用します。今回はダミーディレクトリを指定してすべての RPM パッケージをダウンロードさせています。2
結果は以下の通りです:
どうやらすべての依存パッケージを落とせています。しかし、これだけの RPM パッケージを手動でインストールするのは面倒ですね。
ダウンロードした RPM パッケージをもとにローカルリポジトリを作成する
これらの RPM パッケージを含むローカルリポジトリを作成します:
# yum install createrepo
# createrepo /tmp/httpd-repo/
createrepo コマンドで作成したリポジトリはディレクトリごと持ち運ぶことができますので、オフライン環境にも簡単に持ち込むことができます。そのあとは、yum に登録するだけです:
# cat /etc/yum.repos.d/httpd-repo.repo
[httpd-repo]
name=CentOS-$releasever – httpd
baseurl=file:///var/httpd-repo
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
# yum -y –disablerepo=\* –enablerepo=httpd-repo install httpd
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
httpd-repo | 2.9 kB 00:00:00
httpd-repo/primary_db | 95 kB 00:00:00
Resolving Dependencies
–> Running transaction check
—> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed
–> Processing Dependency: httpd-tools = 2.4.6-93.el7.centos for package: httpd-2.4.6-93.el7.centos.x86_64
–> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-93.el7.centos.x86_64
–> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-93.el7.centos.x86_64
–> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
–> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
–> Running transaction check
—> Package apr.x86_64 0:1.4.8-5.el7 will be installed
—> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
—> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed
—> Package httpd-tools.x86_64 0:2.4.6-93.el7.centos will be installed
—> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
–> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
httpd x86_64 2.4.6-93.el7.centos httpd-repo 2.7 M
Installing for dependencies:
apr x86_64 1.4.8-5.el7 httpd-repo 103 k
apr-util x86_64 1.5.2-6.el7 httpd-repo 92 k
centos-logos noarch 70.0.6-3.el7.centos httpd-repo 21 M
httpd-tools x86_64 2.4.6-93.el7.centos httpd-repo 92 k
mailcap noarch 2.1.41-2.el7 httpd-repo 31 k
Transaction Summary
========================================================================================================================
Install 1 Package (+5 Dependent packages)
Total download size: 24 M
Installed size: 32 M
Downloading packages:
warning: /var/httpd-repo/apr-1.4.8-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for apr-1.4.8-5.el7.x86_64.rpm is not installed
————————————————————————————————————————
Total 1.3 GB/s | 24 MB 00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : “CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>”
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : apr-1.4.8-5.el7.x86_64 1/6
Installing : apr-util-1.5.2-6.el7.x86_64 2/6
Installing : httpd-tools-2.4.6-93.el7.centos.x86_64 3/6
Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6
Installing : mailcap-2.1.41-2.el7.noarch 5/6
Installing : httpd-2.4.6-93.el7.centos.x86_64 6/6
Verifying : mailcap-2.1.41-2.el7.noarch 1/6
Verifying : apr-util-1.5.2-6.el7.x86_64 2/6
Verifying : httpd-2.4.6-93.el7.centos.x86_64 3/6
Verifying : apr-1.4.8-5.el7.x86_64 4/6
Verifying : httpd-tools-2.4.6-93.el7.centos.x86_64 5/6
Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6
Installed:
httpd.x86_64 0:2.4.6-93.el7.centos
Dependency Installed:
apr.x86_64 0:1.4.8-5.el7 apr-util.x86_64 0:1.5.2-6.el7 centos-logos.noarch 0:70.0.6-3.el7.centos
httpd-tools.x86_64 0:2.4.6-93.el7.centos mailcap.noarch 0:2.1.41-2.el7
Complete!
やった! 無事にオフライン環境でも yum install でインストールできるようになりました。
ローカルリポジトリを更新したいときの注意点
ディレクトリにファイルを追加して createrepo するだけで、ローカルリポジトリにパッケージを追加できます。
リポジトリを更新しても yum list で追加したパッケージが表示されなかったり、yum install でオフラインインストールできないことがあります。これは前回実行時のキャッシュが残っているせいなので、ローカルリポジトリのキャッシュをクリアしてあげましょう:
# yum clean all –disablerepo=\* –enablerepo=httpd-repo

コメント