[Momonga-devel.ja:00707] Re: [momonga-cvs] pkgs/apache
- From: KOMATSU Shinichiro <koma2@xxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 1 Nov 2002 03:20:51 +0900
小松です。
From: HOSONO Hidetomo <h@xxxxxxxx>
Subject: [Momonga-devel.ja:00706] Re: [momonga-cvs] pkgs/apache
Date: Thu, Oct 31, 2002 at 05:54:10PM JST
> /etc/rpm/macrosで
>
> %suexec_uidmin 500
> %suexec_gidmin 100
>
> とすればいかようにでも変更できます。
%{?include_specopt} に対応してくれるとうれしいかも。
Index: apache.spec
===================================================================
RCS file: /home/cvs/pkgs/apache/apache.spec,v
retrieving revision 1.19
diff -u -u -r1.19 apache.spec
--- apache.spec 2002/10/31 06:08:41 1.19
+++ apache.spec 2002/10/31 18:01:04
@@ -1,12 +1,15 @@
+Name: apache
+
%define contentdir /home/httpd
%define mod_ssl_ver 2.8.11
%define _ipv6 0
+
+%{?include_specopt}
+
%{?!suexec_uidmin: %define suexec_uidmin 500}
%{?!suexec_gidmin: %define suexec_gidmin 100}
-
Summary: The most widely used Web server on the Internet.
-Name: apache
Version: 1.3.27
Release: 3m
Group: System Environment/Daemons
ところで、%{?include_specopt} 使う場合の一般的な注意をいくつか。
(1) %include_specopt の前には %name が定義されていなければならない。
定義を見てもらえばわかりますが、%name を見て
include すべきファイルを決めているからです。
(2) %include_specopt は spec file 内で define する option より
前に書かないといけない。
上の例だと、%{?!suexec_uidmin: ...} の前に書くべし、
ということです。
また、%_specoptfile (上の例だと /etc/rpm/specopt/apache.specopt)
の中では spec 中と同じような形、つまり
%{?!suexec_uidmin: %define suexec_uidmin 1000}
というように定義する方がいいでしょう。
つまり、suexec_uidmin が定義されていない時のみ define する、
ということです。
これは、rpm --define で option を与えた時に
spec file でその option を上書きしないようにするためです。
(rpm の場合、--define で与えた option よりも spec 中の %define が
優先されるという、直観に反する動作をしてくれます)。
こうすれば、
1. --define で与えた option
2. %_specoptfile に書いた option
3. spec 中に書かれた option (default 値)
という優先順位になって、いろいろとうれしいでしょう。
(3) %include_specopt が定義されていない環境に持って行っても
問題なく動くように、%{?include_specopt} と書くことが望ましい。
こう書いておけば %include_specopt が定義されている環境では
マクロが展開され(て %_specoptfile が include され)、
定義されていない環境では単に無視されます。
(4) %_specoptdir や %_specoptfile は ~/.rpmmacros や --define などで
上書きすることができます(できるはずです。が、未確認。。。)。
例えば、official package を build する時など、
自分の %_specoptfile を読んでもらっては困るような時には
%_specoptdir /nonexistent
のように、存在しない directory を指定するとよいでしょう
(%_specoptfile がみつからない場合には単に無視するだけになっているので)。
また、~/.rpmmacros で
%_specoptdir ~/.rpm/specopt
として、自分の home directory に %_specoptfile を置く、
なんてこともできるでしょう。
# ~ を home directory に展開してくれたかどうかは未確認。
とりあえず思いついたのはこんなところです。
%include_specopt も市民権を得つつある気がするので、
そろそろ document に書いた方がいいかもしれませんね。
--
---------------------------------------
東京大学大学院総合文化研究科
広域科学専攻相関基礎科学系
佐々研究室 博士3年
小松 晋一朗
koma2@xxxxxxxxxxxxxxxxxxxx
koma2@xxxxxxxxxxxxxxxxx
http://kamuy.c.u-tokyo.ac.jp/~koma2/
---------------------------------------