各位大佬好!
情况介绍
CentOS 7 下学习打 RPM 包,网上没有找到在命令行怎么测试 RPM 宏的参数,用的到包是 php-fpm :
wget -c \
'https://repo.ius.io/7/x86_64/packages/p/php73-fpm-7.3.13-1.el7.ius.x86_64.rpm' \
'https://repo.ius.io/7/src/packages/p/php73-7.3.13-1.el7.ius.src.rpm'
RPM 宏的定义:
# /usr/lib/rpm/macros.d/macros.systemd
%systemd_post () \
if [ $1 -eq 1 ] ; then \
# Initial installation \
systemctl preset %{?*} >/dev/null 2>&1 || : \
fi \
%{nil}
SPEC 文件中的使用方式:
%post fpm
%systemd_post php-fpm.service
rpm 安装 rpm 生成的脚本,可以看到 systemctl 命令是有参数的:
# rpm -qp --scripts php73-fpm-7.3.13-1.el7.ius.x86_64.rpm | Less
postinstall scriptlet (using /bin/sh):
if [ $1 -eq 1 ] ; then
# Initial installation
systemctl preset php-fpm.service >/dev/null 2>&1 || :
fi
使用 rpm --eval
测试的结果,参数的处理和脚本里不一样:
$ » rpm --eval "%{systemd_post} php-fpm.service"
if [ $1 -eq 1 ] ; then
# Initial installation
systemctl preset >/dev/null 2>&1 || :
fi
php-fpm.service
$ » rpm --eval "%{systemd_post} 1 php-fpm.service"
if [ $1 -eq 1 ] ; then
# Initial installation
systemctl preset >/dev/null 2>&1 || :
fi
1 php-fpm.service
问题
请问各位打包达人,
- 宏
systemd_post
的$1
的用法是不是和%pre
哪些宏一样? - 类似有
if [ $1 -eq 1 ]
有参数的宏怎么测试?