2011-09-13 40 views
0

我有一個規範文件,該文件是類似於:的rpmbuild規範文件%安裝部分的錯誤

BuildRoot: /tmp/build_%{name}-%{version}-%{release} 

%prep 
... 
... 

%install 
# Directories 
install -m 755 -d %{buildroot}/usr/app/mypackage/config 
install -m 755 -d %{buildroot}/usr/app/mypackage/src 
.... 

# Bash script 
install -m 755 script/script1.sh %{buildroot}/usr/app/mypackage/config/script1.sh 
install -m 755 script/script2.sh %{buildroot}/usr/app/mypackage/config/script2.sh 
install -m 755 script/myapp-log %{buildroot}/etc/logrotate.d/myapp-log 

當我運行的rpmbuild我得到的錯誤:

install: cannot create regular file `/tmp/build_my_app-1.0-2/etc/logrotate.d/myapp-log' 

我可以解決這個問題手動創建/etc/,然後在/tmp/build_my_app-1.0-2/目錄中創建/etc/logrotate.d目錄。

當我重新運行rpmbuild時它會起作用。

我想這是因爲我沒有在我的安裝部分,但其沒有直接關係,我的申請,我不希望把他們在創建這個目錄。

我的猜測是,有一些聰明的標籤我可以用來解決這個問題,這樣的構建將無需任何手動干預。

我的問題: 可能有人請提出一個辦法,我做到這一點(假設其可能的),還是我需要寫周圍的rpmbuild腳本先設置此。

回答

3

您錯過了在%install部分創建安裝目錄的步驟。請記住,由於您可以構建「不同的」根,所以不能期望某些目錄(如$ {buildroot}/etc)存在。

嘗試只安裝命令將文件複製到${buildroot}/etc/logrotate.d之前加入

mkdir -p ${buildroot}/etc/logrotate.d 

+0

好的,這是有道理的。安裝-d $ {buildroot}/etc/logrotate.d'會比'mkdir'更好嗎?我只是想知道,因爲大多數linux系統似乎已經有了logrotate設置,並且我不想在構建或安裝時發生任何錯誤 – ghostJago

+2

@ghostJago,安裝命令不會在部署時安裝到操作系統,它們將安裝到$ {buildroot}中,以便%files部分可以開始驗證構建是否將所有預期的文件正確放置在預期位置。您可以使用'install -d'或'mkdir -p',這並不重要,當執行'rpm --install package.rpm'時,這些命令都不會被執行。 –