2012年12月4日火曜日

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

スズキです。

"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

最終的には下記のようなコマンドでダウンロードすればOKのはずです。
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 Advent Calendar が遅れ気味...
--------
http://www.suz-lab.com

0 コメント: