[Momonga-devel.ja:00432] モモンガ特有のマクロ (Re: Re: kernel-2.4.18-116m での変更(コマンドラインから設定変更))


小松です。復帰。

From: KOMATSU Shinichiro <koma2@xxxxxxxxxxxxxxxxxxxx>
Subject: [Momonga-devel.ja:00421] Re: kernel-2.4.18-116m での変更(コマンドラインから設定変更)
Date: Wed, Sep 04, 2002 at 06:17:01AM JST

> > > ということで、次のような定義を /usr/lib/rpm/macros などに
> > > 書いてやるのはどうでしょう?

> > %include 案賛成。 .spec では %{?include_specopts: %include_specopts} にしたほうが

> > 今 kernel いじってるのでついでに rpm のほうもいじって試してみます。
> > 
> > よさそうなら そのままcommitということで。
> 
> すみませんが、よろしくお願いします。

commint されたのを確認しました。ところで、

> 後々のことを考えると、momonga 特有のマクロ(%_ipv6 とか)は
> 別ファイルで定義した方がいいかもしれませんね。

と書きましたように、
この先もいろいろ rpm のマクロをつっこみたいので
メンテナンス性(メンテナがわざわざ patch 作らないで済む)とか
他の distribution に momonga の rpm を持って行く時のことなどを考えて、
%_ipv6 や %include_specopts などは別ファイルに
持って行こうかと考えています。

具体的には、/usr/lib/rpm/rpmrc の macrofiles: を

macrofiles:     /usr/lib/rpm/macros:/usr/lib/rpm/macros.momonga:/usr/lib/rpm/%{_target}/macros:/etc/rpm/macros.specspo:/etc/rpm/macros.db1:/etc/rpm/macros.cdb:/etc/rpm/macros:/etc/rpm/%{_target}/macros:~/.rpmmacros

というように変更して、/usr/lib/rpm/macros.momonga に
momonga 特有のマクロを置こうかと。

いかがでしょう? ご意見下さい。> おーる


*************************************

ちなみに、他に突っこみたい macro としては、
%NoSource があります。これは、

    %NoSource 0 ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-%{srcversion}.tar.bz2 ad92859baaa837847b34d842b9f39d38

という感じで使い、展開されると

    Source0: ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-%{srcversion}.tar.bz
    NoSource: 0

となります。第3引数は MD5 checksum です。

この macro を定義する利点は、

1) まず、Source と NoSource の tag を 1行にまとめられるので、
   spec を parse するのがラク。
   NoSource なもののファイル名を得るには、例えば

       % awk '$1=="%NoSource" {system("basename " $3)}' kernel.spec
   
   だけですみます
   (まあ、実際には %name とかの macro を展開しないと使えないですが。。。)

2) MD5 checksum を定義できる(しないといけなくなる)。

   momonga では Source は NoSource にするのが基本ですが、
   source の配布元に名前そのままで中身を変えられてしまうとか、
   トロイの木馬を仕掛けられた時などといった時に困ったことになります。
   # trojaned openssh の話は記憶に新しいでしょう。

   そこで、spec 中に NoSource なファイルの MD5 checksum を書いておき
   (MD5 checksum を書くことを強制し)、
   %__spec_prep_template を置きかえることによって
   %prep の段階で MD5 sum を check するようにし、
   この問題を回避しようと思います。

3) どうしても NoSource はいやだー、って人のために。
   %_src を define すれば NoSource にはならなくなります。

といったところでしょうか。

この %NoSouce() やら、%__spec_prep_template やらの定義を書いた
macros.momonga を添付しますので、
具体的な定義などはそちらを御覧下さい。
読むと頭痛がするかもしれませんが。。。(苦笑)
# 書いてて頭痛くなりました。

この部分についても、ご意見など、よろしくお願いします。

-- 
---------------------------------------
東京大学大学院総合文化研究科
広域科学専攻相関基礎科学系 
  佐々研究室  博士3年
    小松  晋一朗            
mailto:koma2@xxxxxxxxxxxxxxxxxxxx
       koma2@xxxxxxxxxxxxxxxxx
http://kamuy.c.u-tokyo.ac.jp/~koma2/
---------------------------------------
%NoSource() \
%{expand:%%global _checksum%1 %3} \
%{?_nosource:%{expand:%%global _nosource %_nosource %1}} \
%{!?_nosource:%{expand:%%global _nosource %1}} \
Source%1: %2 \
%{!?_src:NoSource: %1}

# check checksums
%checksum_cmd		/usr/bin/md5sum
%checksum_cmd_args	--check

%__spec_prep_checksum \
%{?_nosource:\
set %{expand: %(for n in %_nosource; do \\\
                  echo -n "%%_checksum$n %%SOURCE$n "; \\\
                done) \\\
     } \
while [ $# -gt 0 ]; do \
  echo "$1  $2" | %{checksum_cmd} %{checksum_cmd_args}; \
  shift 2; \
done \
}

%__spec_prep_template	#!%{__spec_prep_shell}\
%{__spec_prep_pre}\
%{__spec_prep_checksum}\
%{nil}