yumのリポジトリは、バージョンのものが削除されてしまう可能性があるので、現状の環境を再現する為に、
その時にインストールしたRPMが必要なことがあります。
(当時のAMIが存在すればいいのですが、他環境での構築も視野に入れる事を目的としています)

yumリポジトリからのRPMのダウンロードはyumdownloaderというコマンドで可能です。

下記のようにインストール(yum)して利用することができます。

# yum -y install yum-utils
...
# yumdownloader httpd-2.2.15-15.el6.centos.1.x86_64
...
httpd-2.2.15-15.el6.centos.1.x86_64.rpm
# ls
httpd-2.2.15-15.el6.centos.1.x86_64.rpm

インストールされているRPMのダウンロードは下記となります。

# rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" | xargs -L3 -P5 yumdownloader --cacheonly --nogpgcheck
...

尚、xargsのオプション(-L3 -P5)はt1.microインスタンスで試行錯誤した結果です。

  • -L: 指定した数の引数をコマンドに渡す
  • -P: 指定した数のプロセスを並列に実行

しかし下記のように、実際にインストール済みのRPMとダウンロードしたRPMの数が異なりました。

# rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" | wc -l
308
# ls -1 | wc -l
303

原因としては、上記でダウンロードしていた時に、エラーが出ていたようだったので、次のように調べてみると、
インストール済みRPMのリストにgpg-pubkeyが混じっていました。

# rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" | awk '{ print $1 ".rpm";}' | sort > /tmp/list-installed.txt
# ls -1 | sort > /tmp/list-downloaded.txt
# diff /tmp/list-installed.txt /tmp/list-downloaded.txt
71,75d70

そこでgrep -v gpg-pubkeyを入れることで、数字も合いました。

# rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" | grep -v gpg-pubkey | wc -l
303

最終的には下記のようなコマンドでダウンロードすれば問題ないはずです。

rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n" | grep -v gpg-pubkey | xargs -L3 -P5 yumdownloader --cacheonly --nogpgcheck

そしてダウンロードしたRPMをyumリポジトリとして公開(S3)にする方法は
S3上にyumリポジトリを作成(とりあえず)で紹介済みです。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら