パッチを当てたソ−スパッケ−ジの作り方
まあ、ようは、src.rpm を持って来たけどそのままでは
$ rpm --rebuild
を、出来ないって時に使う手だね。

ほんとうは、galeon を入れたいんだけど
galeon には Gconf が必要で、
GConf は aof-devel が必要で、
aof-devel は aof が必要で、
aof は gtk-doc が必要で、
gtk-doc を
$ rpm --rebuild gtk-doc-0.4-0vl2.src.rpm
したら、configure で
--with-dsssl-dir=PATH ってのが指定させる事が出来なくて途中で止まっちまう。

gtk-doc -> oaf -> oaf-devel -> Gconf
の流れのいっとー始めでつまづいちまったのさ。

で、しょうがないから Linux magazine を読みながら gtk-doc-0.4.0vl2.src.rpm を作り直した。



gtk-doc-0.4.0vl2.src.rpm を rpm dir へコピー。
$ cp gtk-doc-0.4.0vl2.src.rpm ~/rpm/SRPMS/

ソースパッケージを展開
$ cd ~/rpm/SRPMS/
$ rpm -ivh gtk-doc-0.4.0vl2.src.rpm
~/rpm/SPECS/gtk-doc-vl.spec
~/rpm/SOURCES/gtk-doc-0.4.tar.gz
が作られる。

tar玉を展開
$ cd ~/rpm/SPECS/
$ rpm -bp gtk-doc-vl.spec
  -bp は SPEC ファイルのプレアンブルから %setup(あれば %patch)までを実行。
  今回は tar玉の展開をするだけ。
~/rpm/BUILD/gtk-doc-0.4/ が作成、その下にファイルが展開される。

展開されたファイルをいじって、ちゃんと動くように修正をする。
ほんとうは、ここがキモなんだけど、今回はハショッて、
問題の部分をコメントにすることで解決とした。
$ cd ~/rpm/BUILD/gtk-doc-0.4/
$ cp -p configure configure.org
  差分を取るためにオリジナルを残す。

$ vi configure
 if test "x$DSSSL_DIR" = x ; then
 { echo "configure: error:
 *** Cannot find DocBook stylesheets in "$dirs".
 *** Perhaps you need to specify the --with-dsssl-dir=PATH option?" 1>&2; exit 1 ; }
 fi

この部分を全部コメントにした。
 # if test "x$DSSSL_DIR" = x ; then
 # { echo "configure: error:
 # *** Cannot find DocBook stylesheets in "$dirs".
 # *** Perhaps you need to specify the --with-dsssl-dir=PATH option?" 1>&2; exit 1; }
 # fi
修正終了。

差分を取る。
$ cd ~/rpm/BUILD/gtk-doc-0.4/
$ diff -Naur configure.org configure >& patch

diff のオプションは
-N 新規にファイルが作成されたいた場合は、元のディレクトリに空のファイルがあったものとして扱う
-a バイナリファイルでもパッチを作成する
-u diff の出力フォーマットを unified output format にする(こっちが主流らしい)
-r サブディレクトリに対しても検索する
diff にはもっとたくさんのオプションがあるけど、おれレベルにはこれで充分だろう。

作成したパッチファイルをソースディレクトリに移動。
$ mv patch ~/rpm/SOURCES/

SPEC ファイルの修正。
$ cd ~/rpm/SPECS/
$ cp -p gtk-doc-vl.spec gtk-doc-vl.spec.org
$ vi gtk-doc-vl.spec
> # Note that this is NOT a relocatable package
> %define name gtk-doc
> %define ver 0.4
> %define rel 0vl2_my -> オリジナルと名称を変える。
> .
> .
> Source: ftp://ftp.gtk.org/pub/gtk/v1.1/docs/rdp/%{name}-%{ver}.tar.gz
> Patch: patch -> このパッチを使ってね。
>
> BuildRoot: %{_tmppath}/%{name}-%{PACKAGE_VERSION}-root
> Obsoletes: %{name}
> .
> .
> %prep
> %setup -q
>
> %patch -p0 -> パッチを当てるよ
>
> %build
> .
> .
ここで、%patch -p0 の -p はディレクトリをいくつ無視するかという指示。
今回はカレントディレクトリで修正を行ったので、無視するディレクトリはなし(=0)となる。

パッチがたくさんあって、ディレクトリごとパッチを当てた場合、
  $ diff -Naur gtk-doc-0.4.org/ gtk-doc-0.4/ > patch
1つ上のディレクトリでパッチを取るので -p1 となる。

あとは、ソースパッケージを作って、インストール。

古いディレクトリを消して、
$ rm -rf ~/rpm/BUILD/gtk-doc-0.4/
$ cd ~/rpm/SPECS/
$ rpm -ba gtk-doc-0.4.spec   -> .rpm と、src.rpm の作成。
~/rpm/SRPMS/gtk-doc-0.4-0vl2_jun1.src.rpm
~/rpm/RPMS/noarch/gtk-doc-0.4-0vl2_jun1.noarch.rpm
今回の場合、noarch なので rpm は noarch に入る。

おしまい。





戻る