RPM规格如何避免重复

时间:2012-07-25 17:40:16

标签: java rpm

我在构建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部分中执行的脚本与pre和post部分中的脚本相同。但我不想复制/粘贴它们。是否有一些复杂的解决方案可以避免代码重复?

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

  1. 为每个可重用的shell脚本代码创建单独的文件。

  2. 创建一种预处理器(可能是另一个shell脚本),将上面步骤1中创建的文件插入适当的scriplet标签下的spec文件中(即%pre,%post,%preun,%postun) )。

  3. 如果您使用的是源代码管理系统,则可能还需要跟踪这些附加文件。