修正したいソースRPMにパッチを作って当てる方法

ソースRPMがあってどこを修正すればいいのかわかった場合、パッチを作って当てる方法を。
環境はCentOS5.1*1でrpmbuildや開発環境(gccなど)がインストール済みのこと。
ソースRPMhoge.src.rpmの場合

rpm -ivh hoge.src.rpm

と実行すると/usr/src/redhat/以下、SPECSディレクトリにspecファイル、SOURCESディレクトリにソースのアーカイブやパッチが置かれる。
ここで、/usr/src/redhat/SOURCESに移動して、

rpmbuild -bp hoge.spec

を実行すると、/usr/src/redhat/BUILDディレクトリの下にhogeというディレクトリができ、そのなかにパッチを当てた状態のソースが展開されている。
そのhogeディレクトリを作業ディレクトリにコピーし、同じ階層に同じものを別名(hoge.org)にしてコピーしておく。
ここで別名のほうを変更元としてとっておき、別名じゃないほうを作業用として使うことにする*2
作業用のソースを変更したら、diffコマンドでパッチを作る。

diff -aurN hoge.org hoge > hoge.patch

パッチが出来ると、それを/usr/src/redhat/SOURCESに置き、/usr/src/redhat/SPECSのhoge.specファイルを修正する。
大体のspecファイルはパッチを当てるようになっているため、PatchNNは一意の数字)と書かれたすぐあとに同様に追加しておく。
例:Patch100: hoge.patch
また、specファイル内に%patchと書かれたすぐあとも同様に追加しておく。
例:%patch100 -p1
これでビルドの準備が終了。
あとはrpmbuildでspecファイル指定してビルドできるかどうかやってみる。

rpmbuild -ba hoge.spec

何事もなければバイナリrpmが/usr/src/redhat/RPM/i386*3、ソースRPMが/usr/src/redhat/SRPMに出来るはず。
一からspecファイル作るのは大変だけど見てもらえればわかるように、今あるSRPMから修正してバイナリRPMなりソースRPMを作るのは、そんなに難しくないはず。

*1:RHEL系なら多分ほとんど同じでしょう

*2:別に別名にしたほうを作業用としてもかまわない。

*3:CPUなどの環境により変化