share facebook facebook2 twitter menu hatena pocket slack

2013.01.22 TUE

CentOS6でインストールされているパッケージ(rpm)をすべてダウンロードする

鈴木 宏康

WRITTEN BY鈴木 宏康

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
< gpg-pubkey-00f97f56-467e318a.(none).rpm
< gpg-pubkey-0608b895-4bd22942.(none).rpm
< gpg-pubkey-5ebd2744-418ffac9.(none).rpm
< gpg-pubkey-6b8d79e6-3f49313d.(none).rpm
< gpg-pubkey-c105b9de-4e0fd3a3.(none).rpm

そこで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)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。