2015-08-31 40 views
1

我正在构建一个自定义软件包,该软件包大部分都有一些依赖关系,并安装了我自己的文件和脚本。我在tar文件中有这些文件,在尝试构建后,我可以看到这些文件在rpmbuild/BUILD目录中解压缩。然而,%files指令似乎存在问题,因为其中的任何文件被列为error: File not found。我spec文件的相关部分如下所示:rpmbuild无法找到我从源代码解压的文件

%prep 
%setup 

%install 
mkdir -p %{buildroot}/etc/collectd/ 
mkdir -p %{buildroot}/usr/bin/ 
mkdir -p %{buildroot}/usr/bin/collectd.conf.d/ 
install -m 777 collectd.conf.custom %{_builddir}/%{name}-%{version}/etc/collectd/ 

# list files owned by the package here 
%files 
%defattr(-,root,root) 
%config /etc/collectd.conf.custom 
%config /etc/collectd.d/http.conf 
%config /etc/collectd.d/csv.conf 
/usr/local/bin/my-plugin.py 
/usr/local/bin/my-script 

就像我说的这些文件解压缩到/BUILD但建设者在%install指令失败,执行三个mkdir语句后。我只是试图在上面的脚本中安装一个文件,这样我可以更容易地告诉它它成功了。我一直得到以下错误无论怎样我尝试:

+ install -m 777 collectd.conf.turbine /home/vagrant/rpmbuild/BUILD/my-package-1.1/etc/collectd/ 
install: cannot stat `collectd.conf.custom': No such file or directory 

这个文件是在这个目录中为我检查使用ls,但由于某种原因,我不断收到此错误。

编辑:

%.spec文件如下:

Summary: my-package Collectd 
Name: my-package-collectd 
Version: 1.1 
Release: Public 
Group: Applications/System 
License: Public 
Requires: collectd 
BuildArch: noarch 
BuildRoot: %{_tmppath}/%{name}-%{version} 
Source: %{name}-%{version}.tar.gz 

%prep 
%setup 

%install 
rm -rf %{buildroot} 
mkdir -p %{buildroot}/etc/collectd/ 
mkdir -p %{buildroot}/etc/collectd/collectd.conf.d/ 
mkdir -p %{buildroot}/usr/bin/ 

install -m 777 %{_builddir}/%{name}-%{version}/etc/collectd/collectd.conf.custom %{buildroot}/etc/collectd/ 
install -m 777 %{_builddir}/%{name}-%{version}/etc/collectd/collectd.conf.d/csv.conf %{buildroot}/etc/collectd/collectd.conf.d/ 
install -m 777 %{_builddir}/%{name}-%{version}/etc/collectd/collectd.conf.d/http.conf %{buildroot}/etc/collectd/collectd.conf.d/ 

# list files owned by the package here 
%files 
%defattr(-,root,root) 
%config /etc/collectd.conf.my-package 
%config /etc/collectd.d/http.conf 
%config /etc/collectd.d/csv.conf 
/usr/local/bin/cloudhealth.py 
/usr/local/bin/my-package-collectd 
+0

'collectd.conf.custom'中有什么目录? '%install'代码段的工作目录? *%install'代码段的工作目录下的'BUILD'目录*您需要将'%install'代码段的工作目录中的文件复制到正确位置的'%{buildroot}'中。 '%file'节的路径*位于*'%{buildroot}'之下。 –

+0

为什么你要创建'%{buildroot}/etc/collectd /',然后尝试安装到'%{_ builddir} /%{name} - %{version}/etc/collectd /'? –

+0

'collectd.conf.custom'位于源目录中,并在'%prep'指令期间解压缩为'BUILD'。我的理解是我需要将该文件移动到“BUILDROOT”中。如果我更改为'install -m 777%{_ builddir} /%{name} - %{version} /etc/collectd/collectd.conf.turbine%{buildroot}/etc/collectd /'发生这种情况,然后我得到错误:错误:File not found:/ home/vagrant/rpmbuild/BUILDROOT/turb-collectd-1.1-Public.x86_64/etc/collectd.conf.turbine'这也是令人困惑的,因为我在spec中指定了'noarch',但'BUILDROOT'总是包含'x86_64' – eignhpants

回答

2

构建RPM的工作方式是,%prep部分(通常只是%setup宏)解压任何源文件到构建目录。

然后%build部分在build目录中执行任何编译等,并生成构建/输出文件。

然后,%install部分将合适的文件从build目录复制到%{buildroot}下的“最终”位置。

然后将%files节路径与%{buildroot}中的文件进行匹配并打包到RPM中。

您spec文件中的%install部分没有正确执行此操作。