RPM 中的常用子例程

RPM 中的常用子例程

我有一些常用代码想要在%预%邮政我的部分转速规格文件。当我将子程序放入%预部分,我需要将相同的子例程添加到%邮政RPM 部分。两次维护同一个子程序很糟糕。这是一个例子:

转速规格文件%预%邮政部分:

%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
  log_msg=$1
  echo -e $log_msg >> $log_file
}

log_it "pre section log information"

%post

log_it "Post section log informations"

目前,当%邮政的部分转速在安装过程中执行,我收到一条错误消息:

/var/tmp/rpm-tmp.36557: line 5: log_it: command not found

那么,有没有办法制作一个像这样的子程序日志的所有部分(全局功能)均可访问转速??目前,我必须将日志函数在%邮政如果我想在那里使用它。

答案1

这不起作用的原因是因为每个 scriptlet(%post%pre等)都是作为独立脚本编写的,并传递给 bash/sh 执行。因此,执行它的 shell 不知道另一个 scriptlet 中定义的任何函数。

我建议使用 RPM 宏来实现此目的。您可以将它们放入~/.rpmmacros/etc/rpm/macros。像这样的东西:

%define log \
log_it() { \
  log_msg=$1 \
  echo -e $log_msg >> $log_file \
}

%pre
%log

log_it test

%post
%log

log_it test

http://rpm5.org/docs/rpm-guide.pdf欲了解更多信息,甚至/usr/lib/rpm/macros

相关内容