MacOSXでrpm2cpio

rpm2cpioをMacにインストールする場合brew辺りを使うみたいだが、以下のサイトにシェルがあった。

https://gist.github.com/elasticdog/7112671

rpmのヘッダ部分を解析してcpioを取り出すツール。Macrpmの中身を見たいなんてことは滅多にないのでシェルで提供されているこのツールはグッド。ただ、圧縮形式にgzip/bunzip2/xzがあるのでxzについてはbrewMacPortsでインストールしておく。

$ chmod 755 rpm2cpio.sh
$ cat rpm2cpio.sh
#!/bin/sh
 
pkg=$1
if [ "$pkg" = "" -o ! -e "$pkg" ]; then
  echo "no package supplied" 1>&2
  exit 1
fi
 
leadsize=96
o=`expr $leadsize + 8`
set `od -j $o -N 8 -t u1 $pkg`
il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
# echo "sig il: $il dl: $dl"
 
sigsize=`expr 8 + 16 \* $il + $dl`
o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8`
set `od -j $o -N 8 -t u1 $pkg`
il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
# echo "hdr il: $il dl: $dl"
 
hdrsize=`expr 8 + 16 \* $il + $dl`
o=`expr $o + $hdrsize`
EXTRACTOR="dd if=$pkg ibs=$o skip=1"
 
COMPRESSION=`($EXTRACTOR |file -) 2>/dev/null`
if echo $COMPRESSION | grep -q gzip; then
  DECOMPRESSOR=gunzip
elif echo $COMPRESSION | grep -q bzip2; then
  DECOMPRESSOR=bunzip2
elif echo $COMPRESSION | grep -q xz; then
  DECOMPRESSOR=unxz
elif echo $COMPRESSION | grep -q cpio; then
  DECOMPRESSOR=cat
else
  # Most versions of file don't support LZMA, therefore we assume
  # anything not detected is LZMA
  DECOMPRESSOR=`which unlzma 2>/dev/null`
  case "$DECOMPRESSOR" in
    /* )
      ;;
    *  )
      DECOMPRESSOR=`which lzmash 2>/dev/null`
      case "$DECOMPRESSOR" in
        /* )
          DECOMPRESSOR="lzmash -d -c"
          ;;
        *  )
          DECOMPRESSOR=cat
          ;;
      esac
      ;;
  esac
fi
 
$EXTRACTOR 2>/dev/null | $DECOMPRESSOR
$ ./rpm2cpio.sh rpm-build-5.4.10-10-mdv2012.0.x86_64.rpm | cpio -tv
-rwxr-xr-x   1 root     wheel         963 Nov  6  2012 ./usr/bin/gendiff
-rwxr-xr-x   1 root     wheel         305 Nov  6  2012 ./usr/bin/multiarch-platform
-rwxr-xr-x   1 root     wheel       23712 Nov  6  2012 ./usr/bin/rpmbuild
-rwxr-xr-x   1 root     wheel      719850 Nov  6  2012 ./usr/lib/rpm/bin/api-sanity-autotest.pl
-rwxr-xr-x   1 root     wheel      721319 Nov  6  2012 ./usr/lib/rpm/bin/api-sanity-checker.pl
-rwxr-xr-x   1 root     wheel       10568 Nov  6  2012 ./usr/lib/rpm/bin/dbsql
-rwxr-xr-x   1 root     wheel       32648 Nov  6  2012 ./usr/lib/rpm/bin/debugedit
-rwxr-xr-x   1 root     wheel       13997 Nov  6  2012 ./usr/lib/rpm/bin/install-sh
-rwxr-xr-x   1 root     wheel        3538 Nov  6  2012 ./usr/lib/rpm/bin/mkinstalldirs
-rwxr-xr-x   1 root     wheel       17311 Nov  6  2012 ./usr/lib/rpm/bin/pom2spec
-rwxr-xr-x   1 root     wheel       19488 Nov  6  2012 ./usr/lib/rpm/bin/rpmcache
-rwxr-xr-x   1 root     wheel       10816 Nov  6  2012 ./usr/lib/rpm/bin/rpmcmp
-rwxr-xr-x   1 root     wheel       20400 Nov  6  2012 ./usr/lib/rpm/bin/rpmdeps
-rwxr-xr-x   1 root     wheel       32592 Nov  6  2012 ./usr/lib/rpm/bin/rpmdigest
-rwxr-xr-x   1 root     wheel       24856 Nov  6  2012 ./usr/lib/rpm/bin/rpmkey
-rwxr-xr-x   1 root     wheel       10704 Nov  6  2012 ./usr/lib/rpm/bin/rpmrepo
-rwxr-xr-x   1 root     wheel       10568 Nov  6  2012 ./usr/lib/rpm/bin/sqlite3
-rwxr-xr-x   1 root     wheel        1452 Nov  6  2012 ./usr/lib/rpm/brp-compress
-rwxr-xr-x   1 root     wheel        1418 Nov  6  2012 ./usr/lib/rpm/brp-java-gcjcompile
-rwxr-xr-x   1 root     wheel         677 Nov  6  2012 ./usr/lib/rpm/brp-nobuildrootpath
-rwxr-xr-x   1 root     wheel         951 Nov  6  2012 ./usr/lib/rpm/brp-python-bytecompile
-rwxr-xr-x   1 root     wheel        1075 Nov  6  2012 ./usr/lib/rpm/brp-sparc64-linux
-rwxr-xr-x   1 root     wheel         561 Nov  6  2012 ./usr/lib/rpm/brp-strip
-rwxr-xr-x   1 root     wheel         853 Nov  6  2012 ./usr/lib/rpm/brp-strip-comment-note
-rwxr-xr-x   1 root     wheel         758 Nov  6  2012 ./usr/lib/rpm/brp-strip-shared
-rwxr-xr-x   1 root     wheel         465 Nov  6  2012 ./usr/lib/rpm/brp-strip-static-archive
-rwxr-xr-x   1 root     wheel         569 Nov  6  2012 ./usr/lib/rpm/check-files
-rwxr-xr-x   1 root     wheel        2804 Nov  6  2012 ./usr/lib/rpm/check-multiarch-files
-rwxr-xr-x   1 root     wheel         283 Nov  6  2012 ./usr/lib/rpm/executabledeps.sh
-rwxr-xr-x   1 root     wheel        9623 Nov  6  2012 ./usr/lib/rpm/find-debuginfo.sh
-rwxr-xr-x   1 root     wheel        7912 Nov  6  2012 ./usr/lib/rpm/find-lang.sh
-rwxr-xr-x   1 root     wheel        4188 Nov  6  2012 ./usr/lib/rpm/find-prov.pl
-rwxr-xr-x   1 root     wheel          44 Nov  6  2012 ./usr/lib/rpm/find-provides.perl
-rwxr-xr-x   1 root     wheel        3571 Nov  6  2012 ./usr/lib/rpm/find-req.pl
-rwxr-xr-x   1 root     wheel          44 Nov  6  2012 ./usr/lib/rpm/find-requires.perl
-rwxr-xr-x   1 root     wheel         489 Nov  6  2012 ./usr/lib/rpm/fontconfig.prov
-rwxr-xr-x   1 root     wheel        4535 Nov  6  2012 ./usr/lib/rpm/gem_helper.rb
-rwxr-xr-x   1 root     wheel         794 Nov  6  2012 ./usr/lib/rpm/getpo.sh
-rwxr-xr-x   1 root     wheel        1303 Nov  6  2012 ./usr/lib/rpm/gstreamer.sh
-rwxr-xr-x   1 root     wheel         574 Nov  6  2012 ./usr/lib/rpm/haskelldeps.sh
drwxr-xr-x   2 root     wheel           0 Nov  6  2012 ./usr/lib/rpm/helpers
-rwxr-xr-x   1 root     wheel          62 Nov  6  2012 ./usr/lib/rpm/helpers/makeshlibs
-rwxr-xr-x   1 root     wheel        4451 Nov  6  2012 ./usr/lib/rpm/http.req
-rwxr-xr-x   1 root     wheel        1928 Nov  6  2012 ./usr/lib/rpm/javadeps.sh
-rwxr-xr-x   1 root     wheel        1821 Nov  6  2012 ./usr/lib/rpm/kmod-deps.sh
-rwxr-xr-x   1 root     wheel         707 Nov  6  2012 ./usr/lib/rpm/libtooldeps.sh
-rw-r--r--   1 root     wheel       22769 Nov  6  2012 ./usr/lib/rpm/macros.rpmbuild
-rwxr-xr-x   1 root     wheel        2406 Nov  6  2012 ./usr/lib/rpm/mkmultiarch
-rwxr-xr-x   1 root     wheel        1666 Nov  6  2012 ./usr/lib/rpm/mono-find-provides
-rwxr-xr-x   1 root     wheel        4914 Nov  6  2012 ./usr/lib/rpm/mono-find-requires
-rwxr-xr-x   1 root     wheel        5700 Nov  6  2012 ./usr/lib/rpm/osgideps.pl
-rwxr-xr-x   1 root     wheel        6269 Nov  6  2012 ./usr/lib/rpm/perl.prov
-rwxr-xr-x   1 root     wheel        9502 Nov  6  2012 ./usr/lib/rpm/perl.req
-rwxr-xr-x   1 root     wheel        8846 Nov  6  2012 ./usr/lib/rpm/perldeps.pl
-rwxr-xr-x   1 root     wheel        1115 Nov  6  2012 ./usr/lib/rpm/php.prov
-rwxr-xr-x   1 root     wheel        2586 Nov  6  2012 ./usr/lib/rpm/php.req
-rwxr-xr-x   1 root     wheel        1380 Nov  6  2012 ./usr/lib/rpm/pkgconfigdeps.sh
-rwxr-xr-x   1 root     wheel         433 Nov  6  2012 ./usr/lib/rpm/pythondeps.sh
-rwxr-xr-x   1 root     wheel        8161 Nov  6  2012 ./usr/lib/rpm/pythoneggs.py
drwxr-xr-x   2 root     wheel           0 Nov  6  2012 ./usr/lib/rpm/qf
-rw-r--r--   1 root     wheel         664 Nov  6  2012 ./usr/lib/rpm/qf/deb_Packages
-rw-r--r--   1 root     wheel         712 Nov  6  2012 ./usr/lib/rpm/qf/deb_Sources
-rw-r--r--   1 root     wheel         421 Nov  6  2012 ./usr/lib/rpm/qf/deb_control
-rw-r--r--   1 root     wheel          47 Nov  6  2012 ./usr/lib/rpm/qf/deb_md5sums
-rw-r--r--   1 root     wheel          81 Nov  6  2012 ./usr/lib/rpm/qf/deb_postinst
-rw-r--r--   1 root     wheel          81 Nov  6  2012 ./usr/lib/rpm/qf/deb_postrm
-rw-r--r--   1 root     wheel          77 Nov  6  2012 ./usr/lib/rpm/qf/deb_preinst
-rw-r--r--   1 root     wheel          77 Nov  6  2012 ./usr/lib/rpm/qf/deb_prerm
-rw-r--r--   1 root     wheel         253 Nov  6  2012 ./usr/lib/rpm/qf/nix_meta
-rw-r--r--   1 root     wheel        1301 Nov  6  2012 ./usr/lib/rpm/qf/psq_pkgng_yaml
-rw-r--r--   1 root     wheel         243 Nov  6  2012 ./usr/lib/rpm/qf/wdj_l10n_sqlite
-rw-r--r--   1 root     wheel          82 Nov  6  2012 ./usr/lib/rpm/qf/wdj_srpm
-rw-r--r--   1 root     wheel         623 Nov  6  2012 ./usr/lib/rpm/qf/wdj_srpm_mongo
-rw-r--r--   1 root     wheel         303 Nov  6  2012 ./usr/lib/rpm/qf/wnh_filelists_mongo
-rw-r--r--   1 root     wheel         298 Nov  6  2012 ./usr/lib/rpm/qf/wnh_filelists_yaml
-rw-r--r--   1 root     wheel         408 Nov  6  2012 ./usr/lib/rpm/qf/wnh_other_mongo
-rw-r--r--   1 root     wheel         373 Nov  6  2012 ./usr/lib/rpm/qf/wnh_other_yaml
-rw-r--r--   1 root     wheel        1373 Nov  6  2012 ./usr/lib/rpm/qf/wnh_primary_mongo
-rw-r--r--   1 root     wheel        1369 Nov  6  2012 ./usr/lib/rpm/qf/wnh_primary_yaml
-rw-r--r--   1 root     wheel         203 Nov  6  2012 ./usr/lib/rpm/qf/xiu_stdenv
-rw-r--r--   1 root     wheel         177 Nov  6  2012 ./usr/lib/rpm/qf/yum_filelists_sqlite
-rw-r--r--   1 root     wheel         277 Nov  6  2012 ./usr/lib/rpm/qf/yum_filelists_xml
-rw-r--r--   1 root     wheel         317 Nov  6  2012 ./usr/lib/rpm/qf/yum_other_sqlite
-rw-r--r--   1 root     wheel         387 Nov  6  2012 ./usr/lib/rpm/qf/yum_other_xml
-rw-r--r--   1 root     wheel        1177 Nov  6  2012 ./usr/lib/rpm/qf/yum_primary_sqlite
-rw-r--r--   1 root     wheel        1887 Nov  6  2012 ./usr/lib/rpm/qf/yum_primary_xml
-rwxr-xr-x   1 root     wheel        3257 Nov  6  2012 ./usr/lib/rpm/rubygems.rb
-rwxr-xr-x   1 root     wheel        3624 Nov  6  2012 ./usr/lib/rpm/symclash.py
-rwxr-xr-x   1 root     wheel         412 Nov  6  2012 ./usr/lib/rpm/symclash.sh
-rwxr-xr-x   1 root     wheel        2050 Nov  6  2012 ./usr/lib/rpm/u_pkg.sh
-rwxr-xr-x   1 root     wheel       98508 Nov  6  2012 ./usr/lib/rpm/vcheck
-rwxr-xr-x   1 root     wheel        9480 Nov  6  2012 ./usr/lib/rpm/vpkg-provides.sh
-rwxr-xr-x   1 root     wheel        2659 Nov  6  2012 ./usr/lib/rpm/vpkg-provides2.sh
-rw-r--r--   1 root     wheel        2828 Nov  6  2012 ./usr/share/man/man8/rpmbuild.8.xz
-rw-r--r--   1 root     wheel         612 Nov  6  2012 ./usr/share/man/man8/rpmdeps.8.xz
-rwxr-xr-x   2 root     wheel           0 Nov  6  2012 ./usr/lib/rpm/bin/luac
-rwxr-xr-x   2 root     wheel      113320 Nov  6  2012 ./usr/lib/rpm/bin/rpmluac link to ./usr/lib/rpm/bin/luac
-rwxr-xr-x   2 root     wheel           0 Nov  6  2012 ./usr/lib/rpm/bin/lua
-rwxr-xr-x   2 root     wheel      167064 Nov  6  2012 ./usr/lib/rpm/bin/rpmlua link to ./usr/lib/rpm/bin/lua
4365 blocks
$