我正在尝试构建将安装在两个不同硬件设备上的 rpm。对于每个硬件,都有不同的文件和命令需要执行,我希望 rpm 根据其主板类型自动检测硬件。
更改发生在安装、发布和文件部分。
我正在尝试设置一个全局变量,它将在开始时检查主板,并且所有其他部分在 if 语句中使用此变量来确定要安装什么。
我知道变量通常不会在部分之间传递,但我认为有一种解决方法。
我尝试过的:
- 使用 %global 从前一节设置变量,该值不会传递给其他部分。
- 在 spec 文件的开头设置宏来读取主板(cat /sys/devices/virtual/dmi/id/board_name)但在其他部分它显示为空。
答案1
指定spec
两个部分:
- 在您的上运行的命令建造机器为了建造
rpm
(在您的情况下是和%install
部分%files
) - 何时运行命令安装任何
rpm
主持人(就你的情况而言%post
)
因此你不能在这两个部分之间共享变量。
另外,在构建软件包时,您将在构建时检查主板(在您的建造机器,而不是主持人。我建议采取以下方法:
%install
# install here all files for all main-board types. for example:
cp board1 $RPM_BUILD_ROOT/usr/lib/package/board1
cp board2 $RPM_BUILD_ROOT/usr/lib/package/board2
%post
if [ "$(cat /sys/devices/virtual/dmi/id/board_name)" == "board1" ]
then
ln -s /usr/lib/package/board1 /path/where/you/want/board-files
else
ln -s /usr/lib/package/board1 /path/where/you/want/board-files
fi
%files
/usr/lib/package/board*
%ghost /path/where/you/want/board-files