在RPM spec文件中设置目标目录

时间:2014-12-27 22:53:00

标签: linux rpm rpmbuild rpm-spec

我有一个非常简单的tar.gz文件,我想用RPM包安装Java文件。我创建了这个spec文件:

Name:           test
Version:        1.0
Release:        1%{?dist}
Summary:        test installation script

Group:          Utilities
License:        GPL
URL:            http://oracle-base.com/articles/linux/linux-build-simple-rpm-packages.php
Source0:        test-1.0.tar.gz
BuildArch:      x86_64
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

#BuildRequires:  
#Requires:       

%description
test installation script

%prep
%setup -c /opt/test


%build
#%%configure
#make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
#make install DESTDIR=$RPM_BUILD_ROOT

#install -d $RPM_BUILD_ROOT/opt/agent


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)
%doc

%changelog

我不清楚如何配置应该提取目标文件的目标目录。你能告诉我我失踪的是什么吗?

2 个答案:

答案 0 :(得分:2)

RPM包的构建过程应该在构建目录中完全运行,以任何方式触及主机系统。

所以%setup -c /opt/test不正确,因为它在主机系统中创建了一个目录。相反,您应该只使用%setup -q并让默认宏在默认构建目录中提取源tarball。 (如果你的tarball不包含顶层目录,也就是它是一个“tar-bomb”,那么你可以使用-c标志和相对路径来创建当前目录中的顶层目录。

如果您没有任何资源来构建,那么您根本不需要%build部分。

%install部分旨在将文件从本地构建目录复制到buildroot下的最终目录。因此(如在该链接指南中),它应该将文件复制到$RPM_BUILD_ROOT/opt/test$RPM_BUILD_ROOT下适当的任何其他路径。

那些路径(没有$RPM_BUILD_ROOT前缀)是需要在%files部分列出的内容。

Fedora项目在构建RPM时some documentation可能对您有用。 Maximum RPM这本书虽然陈旧且有点过时,但它仍然是一个很好的信息来源。

答案 1 :(得分:2)

另一个答案已经解释了%setup -c命令的问题,以及构建RPM的一般原则。

我将添加以下内容,这可能有助于您了解RPM构建脚本应如何工作:

%install
rm -rf $RPM_BUILD_ROOT
#make install DESTDIR=$RPM_BUILD_ROOT

上面的代码片段,来自骨架规范文件,为您提供了一个很大的线索。你应该在这里做的是在$ RPM_BUILD_ROOT下创建一个安装映像。

因此,如果你想在/ opt / test中安装文件,你可能想做类似的事情:

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/opt/test/bin
cp <something> $RPM_BUILD_ROOT/opt/test/bin/something

RPM构建脚本应该在$ RPM_BUILD_ROOT下创建基本上是安装映像的内容。 rpm然后打包它,并生成二进制可安装rpm文件,安装$ RPM_BUILD_ROOT的内容。

您还需要一个%files部分列出所有已安装的单个文件,作为完整性检查。 rpm将仅打包$ RPM_BUILD_ROOT中列出的文件。

因此,您的一般准则是:

  • 在设置部分中,将tarball解压缩到当前工作目录中。 rpm为构建创建一个临时目录。默认情况下,%setup将解压缩那里的文件。

  • 在安装部分中,将您想要的内容从当前工作目录复制到$ RPM_BUILD_ROOT。这将成为安装映像。