2017-10-18 97 views
1

我的項目應該在其目錄中有一個spec文件(因此它不在SPECS目錄中),它可以用於從make rpm包中構建一個rpm包。使用PHP源代碼創建一個rpm包

該項目本身是一個Symfony應用程序。安裝軟件包因此,當三件事情應該發生:

  • 應用程序複製到其目的地(最好是適當的Apache2目錄)
  • 複製配置文件/etc/appname/
  • /var/log/appname
  • 創建日誌文件的目錄

該應用程序可以使用make dist構建,該應用程序構建應用程序並在之後創建dist.tar.gz文件。

據我瞭解rpmbuild它應該足以實現我的spec文件的%install部分。但我的問題是,在本節中,我在~/rpmbuild目錄內,我的壓縮應用程序和我的源代碼都沒有存在。只是cd到另一個目錄將無法正常工作,因爲我不知道規範文件被調用的位置(以及項目的其餘部分)。

我要的是這樣的:

Name: appname 
# rest of the header (group, summary, ...) 

Source: dist.tar.gz 

Requires: php >= 7.0, apache2 

%description 
important words 

%install 
cp * /var/www/appname # copy the application to its destination 
cp docs/config/example /etc/appname/ # copy config to its destination 
mkdir -p /var/log/appname # create log directory 

另外,我不知道我的%files應該是在這種情況下,與有關權限什麼。

回答

1

請參閱Creating RPM Packages with Fedora,您可以在這裏看到對rpmbuild每個階段的很好的描述(即使您沒有爲Fedora打包,這種理解也很有用)。

也就是說,最簡單的回答是:您需要一個%prep部分,您可以通過%setpu -q宏(tarball在Source: dist.tar.gz中引用)來提取源代碼tarball。看起來你可以跳過%build部分。在%install部分,您需要首先創建所有需要的目錄,然後將所有文件複製(安裝)到適當的位置(您需要在目標路徑中使用$RPM_BUILD_ROOT前綴,而不是您在示例中使用的絕對路徑)。最後但至少在%files中,您需要列出您想要成爲rpm包一部分的%install部分中安裝的所有文件。

+0

非常感謝這個答案,我會稍後再試。剩下的一個問題是:在'%files'中列出所有文件將是一個瘋狂的長列表(由於供應商)。有沒有辦法遞歸列出所有文件? – nehalist

+0

是的,引用目錄(您在'%install'中複製了一些文件的位置)就足夠了。 – marbu

+0

使用'$ RPM_BUILD_ROOT'前綴我的dest路徑導致「目錄不存在」錯誤,因爲像'$ RPM_BUILD_ROOT/var/www ...'這樣的東西不存在。爲什麼我必須使用RPM_BUILD_ROOT呢? – nehalist

相關問題