初学者 RPM 关于 %install 和 rpmbuild -bb

初学者 RPM 关于 %install 和 rpmbuild -bb

我对构建二进制 RPM 的安装步骤有点困惑。我认为安装步骤旨在在用户安装二进制包 .rpm 时运行。

我尝试在gitlab上打包一个仓库,这个打包很简单,编译安装一个.so

为了构建包,我执行以下操作:

rpmbuild -bb ~/rpmbuild/SPECS/libinput-config.spec 

该进程运行 spec 文件的 %install 部分。

这个上游包确实通过 meson 安装,因此我有

%install
%meson_install

上游的安装过程将编译后的 .so 复制到某个位置,然后运行一个名为的脚本。preload.sh 该脚本对一个路径进行硬编码,可在 PRELOAD 变量中看到:

#!/bin/sh

LIB="${1}/${2}.so"
PRELOAD='/etc/ld.so.preload'

if test -z $(grep ${LIB} ${PRELOAD} 2> /dev/null); then
    echo ${LIB} >> ${PRELOAD}
fi

当我运行rpmbuild -bb ~/rpmbuild/SPECS/libinput-config.spec它时,由于权限问题而失败,因为它正在执行脚本preload.sh。我不介意权限问题,因为我不认为应该rpmbuild -bb在我的系统上实际安装任何东西。

但这意味着我不明白该%install部分应该何时执行。

我希望用 -bb 构建一个二进制包来执行上游包的构建过程,到达 .so,然后收集它并将其存储在二进制文件中。

然后,当用户安装该软件包时,rpm 将使用二进制 rpm 的内容运行安装过程。

为什么rpmbuild -bb尝试运行 %install 部分?

编辑看来我应该更改自定义介子安装脚本来执行以下操作:

PRELOAD="${DESTDIR}/etc/ld.so.preload"

meson 确保 DESTDIR 位于自定义脚本的环境中,并且似乎 rpm 宏 %meson_install 设置了这个变量。

我必须etc在 buildroot 中创建目录

%install
mkdir -p $RPM_BUILD_ROOT/etc
%meson_install

答案1

我认为安装步骤设计为在用户安装二进制包 .rpm 时运行。

%install部分在安装 .rpm 时不运行。它在 RPM 构建期间运行。它更像是构建的一个阶段。其中有一些命令,用于将文件安装到 ,这$RPM_BUILD_ROOT或多或少是一个临时目录,您可以在构建期间将文件安装到该目录中。

随后,您将看到%files列出要打包到实际 .rpm 中的文件的部分。这些文件是在此%install阶段安装到 RPM 构建根目录中的文件。

您想要在最终用户安装 .rpm 时运行程序/脚本。脚本都是为此而设计的。

%post
if [ $1 == 1 ];then
   /path/to/preload.sh arg1 arg2 ...
fi

相关内容