RPM构建问题

时间:2019-06-21 06:46:03

标签: linux rpm

我有一个这样的RPM规范文件,我编译了一个C文件并创建了一个可执行文件,然后尝试将其复制到buildroot / tmp文件夹并尝试从那里执行它,

%install
mkdir -p %{buildroot}/tmp/
install -m 755 /root/Desktop/np %{buildroot}/tmp/np
./%{buildroot}/tmp/np
%files
/tmp/np

当我尝试构建RPM时,我遇到了错误

  

“ / var / tmp / rpm-tmp.0HMeZn:第35行:   .//root/rpmbuild/BUILDROOT/hp-simulate-generalfailure1-1.0.0-1.x86_64/tmp/np:   没有这样的文件或目录”

请帮助我进行整洁的构建。预先感谢。

2 个答案:

答案 0 :(得分:0)

让我们撇开您所做的非常奇怪的事情,并以root用户身份执行rpmbuild(非常讨厌)。

%{buildroot}是绝对路径。参见:

$ rpm --eval '%{buildroot}'
/home/msuchy/rpmbuild/BUILDROOT/%{NAME}-%{VERSION}-%{RELEASE}.x86_64

如果您确实在尝试执行该二进制文件,则不应在其中放置前导./。所以您的摘要应该是:

%install
mkdir -p %{buildroot}/tmp/
install -m 755 /root/Desktop/np %{buildroot}/tmp/np
%{buildroot}/tmp/np
%files
/tmp/np

答案 1 :(得分:0)

%install部分中运行任何内容仅会在rpm构建过程中在构建计算机上进行。安装RPM时,不会发生。

要在安装软件包时运行某些程序,必须使用脚本片段:

%install
mkdir -p %{buildroot}/tmp/
install -m 755 /root/Desktop/np %{buildroot}/tmp/np

%files
/tmp/np

%post
/tmp/np

在上面的示例中,/tmp/np将在首次安装或升级软件包时执行。