src.rpmとrpmの対応表

src.rpmから(バイナリ)rpmが生成されるがその対応は1:1とは限らない。仕事上この対応表が必要になったのでそれを自動生成するスクリプトを書いた。last_srpm はよーするに uniq するためのフラグだ。

#!/bin/sh

rpm -qa --qf "%{SOURCERPM} %{NAME} \n" | sort -k1 |
while read srpm rpm; do
  if [ "$last_srpm" = "$srpm" ]; then
    rpmlist="$rpmlist $rpm"
  else
    echo "$last_srpm $rpmlist"
    rpmlist="$rpm"
    last_srpm=$srpm
  fi
done
$ ./this.sh | grep tcpdump
tcpdump-3.9.4-8.1.src.rpm arpwatch libpcap tcpdump

この出力をハッシュとして読み込む perl スクリプトも作成した。キーが src.rpm で値が(バイナリ)rpm の配列へのリファレンスとしている。foreach の中で様々な処理が可能なので、今後重宝するだろう。

#!/usr/bin/perl

%rpmmap =();

while (<>) {
  @array = split;
  $srcrpm = shift @array;
  @{$rpmmap{$srcrpm}} = @array;
}

foreach $key (keys(%rpmmap)) {
  print "source = $key : binary = @{$rpmmap{$key}} \n";
}
$ ./this.sh > pkg.txt
$ ./that.pl pkg.txt | grep tcpdump
source = tcpdump-3.9.4-8.1.src.rpm : binary = arpwatch libpcap tcpdump