LoginSignup
0
2

More than 3 years have passed since last update.

yumでパッケージをインストールせずにダウンロードする方法

Posted at

はじめに

今日はLinux(RHEL)についてやや小ネタ的な話。
知り合いから「あるRHELの環境に適用したrpmパッケージを(何らかの方法で抽出して)他の環境に適用することは可能か?」という質問を受け(例えば適用済みrpmが配置されているディレクトリからtarで抜き出すなどして)、興味深かったので調べた結果をまとめます。

経緯

  • とある依存関係の多いrpmパッケージを適用しようとしている
  • パッケージを適用しようとしている本番環境はAWS(EC2)環境だが、インターネットへの接続は無い
  • 製品メディアは無し
  • rpmを1つずつダウンロードして持ち込むのは(数が多過ぎて)心が折れる
  • 何とかして検証環境(作業端末のVirtualbox環境)にてyumでまとめて適用したものを持っていけないか(←今ココ)

対処方法(結論)

結論としては、yumのdownloadonlyプラグインかyumdownloaderユーティリティーを利用することで、yumで依存関係を含め洗い出したパッケージをインストールせずにダウンロードだけすることができます。
(yumdownloaderは「インストールされているrpmをダウンロードする」なので厳密には少し違いますが)

ちなみに、RHEL5、6では追加インストールが必要ですが、検証したRHEL8ではどちらもインストール済みでした。

検証結果

せっかくなので、簡単にできそうなdownloadonlyプラグインを検証してみようと思います。
今回は2台のRHEL環境を用意し、1台目(Host-a)でダウンロードしたrpmを2台目(Host-b)に転送して適用できるかを検証しました。
(パッケージはkshを使いました)

0.環境情報

※AWSのRHEL環境を2台用意しました。
(AMI:ami-09f31cc5d5eecca1a)

###Host-a###
[ec2-user@Host-a ~]$ date
Tue Feb  4 12:05:55 UTC 2020
[ec2-user@Host-a ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
[ec2-user@Host-a ~]$ rpm -qa | grep ksh
[ec2-user@Host-a ~]$


###Host-b###
[ec2-user@Host-b ~]$ date
Tue Feb  4 12:05:46 UTC 2020
[ec2-user@Host-b ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
[ec2-user@Host-b ~]$ rpm -qa | grep ksh
[ec2-user@Host-b ~]$

1.Host-aにてrpmダウンロード(downloadonly)

※--downloaddirでダウンロード先ディレクトリを指定

[ec2-user@Host-a ~]$ sudo  yum install --downloadonly --downloaddir=./ ksh
Red Hat Update Infrastructure 3 Client Configuration Server 8                                                  2.1 kB/s | 2.5 kB     00:01
Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs)                                              35 MB/s |  14 MB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS from RHUI (RPMs)                                                 38 MB/s |  13 MB     00:00
Last metadata expiration check: 0:00:01 ago on Tue 04 Feb 2020 12:07:17 PM UTC.
Dependencies resolved.
=============================================================================================================================================== Package                Arch                      Version                             Repository                                          Size ===============================================================================================================================================Installing:
 ksh                    x86_64                    20120801-252.el8                    rhui-rhel-8-appstream-rhui-rpms                    956 k

Transaction Summary
===============================================================================================================================================Install  1 Package

Total download size: 956 k
Installed size: 3.5 M
DNF will only download packages for the transaction.
Is this ok [y/N]: y
Downloading Packages:
ksh-20120801-252.el8.x86_64.rpm                                                                                8.4 MB/s | 956 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------------------Total                                                                                                          7.5 MB/s | 956 kB     00:00
Complete!
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
[ec2-user@Host-a ~]$ ls -l
total 956
-rw-r--r--. 1 root root 978572 Feb  4 12:07 ksh-20120801-252.el8.x86_64.rpm
[ec2-user@Host-a ~]$

2.rpmの転送

※Host-aでダウンロードしたrpmを作業端末を踏み台にしてHost-bにscpでコピー

3.Host-bでrpm適用

※転送したrpmを適用し、kshが実行できることを確認しました。

[ec2-user@Host-b ~]$ ls -l
total 956
-rw-rw-r--. 1 ec2-user ec2-user 978572 Feb  4 12:11 ksh-20120801-252.el8.x86_64.rpm
[ec2-user@Host-b ~]$
[ec2-user@Host-b ~]$
[ec2-user@Host-b ~]$ sudo rpm -ivh ksh-20120801-252.el8.x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:ksh-20120801-252.el8             ################################# [100%]
[ec2-user@Host-b ~]$ rpm -qa | grep ksh
ksh-20120801-252.el8.x86_64
[ec2-user@Host-b ~]$ ksh
$ exit
[ec2-user@Host-b ~]$ date

Tue Feb 4 12:11:43 UTC 2020

補足

最初に想定した「インストールしたパッケージを抽出する」ですが、どうもLinux上には適用したパッケージをrpmとしては保存しないため、そもそもできないようです。

(参考情報)
https://teratail.com/questions/5977

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2