SRPMの中身を見る

10/2の記事「SRPMの取得」の続きです。取ってきたSRPMの探検方法を紹介します。

$ mkdir -p RPM/{BUILD,RPMS/{i386,i586,i686,noarch},SOURCES,SPECS,SRPMS}
$ echo %_topdir $HOME/RPM >> .rpmmacros

過去にSRPMをいじったことが無い場合、上記の準備が必要です。ディレクトリ名は好みで。

$ rpm -ihv lv-4.51-8.1.src.rpm 
   1:lv                     警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
########################################### [100%]
$ cd RPM/SPECS/
$ lv lv.spec

SRPMをインストールすると、先ほど準備したディレクトリに何ファイルかインストールされます。まず見るべきものはRPM/SPECS以下のSPECファイル(パッケージの設計書)です。初めて見る人でもそこそこ読めるかと思います。

SPECファイルを見たところ、CentOSのlvには5個のパッチが当たっています。パッチはRPM/SOURCES以下にあります。

$ cd ../SOURCES
$ ls
lv-+num-option.patch
lv-4.49.4-nonstrip.patch
lv-4.51-162372.patch
lv-fastio.patch
lv-lfs.patch
lv451.tar.gz
$

パッチの中身をざっと見たところ、「lv-+num-option.patch」で下記のコマンドラインオプションが追加されているようです。

       +number
              Jump to the specified line immediately when lv is invoked.

       +/grep-pattern
              Search  the specified pattern immediately when lv is invoked.

それ以外に興味を引くようなものは無さそうですが、パッチ適用後のソースコードも眺めてみます。

$ cd ../SPECS/
$ sudo yum install rpm-build
$ rpmbuild -bp lv.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.71712
+ umask 022
+ cd /home/install-memo/RPM/BUILD
+ cd /home/install-memo/RPM/BUILD
+ rm -rf lv451
+ /bin/gzip -dc /home/install-memo/RPM/SOURCES/lv451.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd lv451
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ echo 'Patch #1 (lv-4.49.4-nonstrip.patch):'
Patch #1 (lv-4.49.4-nonstrip.patch):
+ patch -p1 -b --suffix .nonstrip -s
+ echo 'Patch #2 (lv-4.51-162372.patch):'
Patch #2 (lv-4.51-162372.patch):
+ patch -p1 -b --suffix .162372 -s
+ echo 'Patch #3 (lv-+num-option.patch):'
Patch #3 (lv-+num-option.patch):
+ patch -p1 -b --suffix .num -s
+ echo 'Patch #4 (lv-fastio.patch):'
Patch #4 (lv-fastio.patch):
+ patch -p1 -b --suffix .fastio -s
+ echo 'Patch #5 (lv-lfs.patch):'
Patch #5 (lv-lfs.patch):
+ patch -p1 -b --suffix .lfs -s
+ exit 0
$ cd ../BUILD/lv451/

ちなみに、期待していた機能は見つかりませんでした。