我有一个这样的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: 没有这样的文件或目录”
请帮助我进行整洁的构建。预先感谢。
答案 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
将在首次安装或升级软件包时执行。