2015-08-31 71 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部分沒有正確執行此操作。