2

こんにちは、rpm パッケージのビルド中にコードの重複に問題があります。

私は次のような仕様を持っています:

Summary     : ${product.id} ${rpmType}
Name        : ${product.id}_${rpmType}
.....


%build
%install


%files
%defattr(-,root,java,750)
%{home}

%clean
rm -rf %{buildroot}


%pre
CHECK_PAUSE=2;
echo -n "Stopping tomcat";
sh %{binary}/shutdown.sh
rc=0
while [ "$rc" == 0 ]; do
    sleep $CHECK_PAUSE;
    wget -q -O /dev/null -S http://localhost:8080/some-server/test;
    rc=$?;
done;
echo "Tomcat:  STOPPED"
mv %{home}/%{warname} %{home}/%{warname}.`date +%Y%d%m`
rm -rf %{home}/some-server
echo done.

%post
CHECK_PAUSE=2;
echo -n "Starting tomcat";
sh %{binary}/startup.sh
rc=1
while [ "$rc" -ne 0 ]; do
   sleep $CHECK_PAUSE
   wget -q -O /dev/null -S http://localhost:8080/some-server/test
   rc=$?
done
echo "Tomcat:  STARTED"

%preun
    if [ "$1" == "0" ]; then
    #STOP TOMCAT HERE SAME WAY AS IN PRE
fi


%postun
if [ "$1" == "0" ]; then
    #START TOMCAT HERE SAME WAY AS IN POST
fi

preun および postun セクションで実行されるスクリプトは、preun および postun セクションと同じです。しかし、私はそれらをコピー/貼り付けしたくありません。ここでコードの重複を避けるための洗練されたソリューションはありますか?

4

1 に答える 1

1

考えられる解決策は次のとおりです。

  1. 再利用可能なシェル スクリプト コードごとに個別のファイルを作成します。

  2. 上記のステップ 1 で作成されたファイルを適切なスクリプトレット ラベル (つまり、%pre、%post、%preun、%postun) の下の spec ファイルに挿入する一種のプリプロセッサ (おそらく別のシェル スクリプト) を作成します。

ソース管理システムを使用している場合は、これらの追加ファイルも追跡する必要があります。

于 2012-07-26T23:29:34.073 に答える