2012-06-25 79 views
5

我試圖在Fedora 15中創建一個RPM來安裝我的軟件,但爲了讓我的軟件一旦安裝就能正常工作,我還需要編輯其他(配置)文件,添加用戶/組等。執行其中一些任務只能由root用戶執行。我知道永遠不要以root用戶的身份創建RPM,我明白爲什麼這是一個糟糕的主意。但是,如果我將shell腳本語句添加到我的規格文件(%post,%prep ...任何節)來編輯必要的文件,添加用戶/組等等,我的rpmbuild命令會失敗,並顯示消息「Permission denied」出奇)。創建一個RPM,也可以操縱文件和添加用戶

處理這個問題的最佳方法是什麼?我必須告訴我的用戶首先安裝我的軟件包,然後可能以root身份運行一個shell腳本來配置它?這看起來不太優雅。我希望允許用戶使用諸​​如'yum install mysoftware'之類的簡單命令完成所有任務。

我的很多研究表明,也許這不應該通過RPM來完成。我讀過Maximum RPM的很多部分,還有很多其他很好的資源,但還沒有找到我要找的東西。我是創建RPM的新手,但已經能夠爲我的軟件成功創建一個簡單的spec文件...在將軟件包解壓並安裝到正確的位置後,我無法正確配置所有配置。任何輸入,非常感謝!

回答

5

RPM .spec文件的%pre部分應該檢查軟件安裝所需的所有條件。
RPM .spec文件的%post部分應該進行軟件運行所需的所有修改。
要避免RPM .spec文件的%post部分存在文件權限錯誤,您可以在%files部分中設置文件權限和所有權。這樣,安裝RPM的用戶具有修改配置文件的適當權限。

%install 
# Copy files to directories on your installation server 

%files 
# Set file permissions and ownership on your installation server 
%attr(775, myuser, mygroup) /path/to/my/file 


%pre 
# Check if custom user 'myuser' exists. If not, create it. 
# Check if custom group 'mygroup' exists. If not, create it. 
# All other checks here 

%post 
# Perform post-installation steps here, like editing other (configuration) files. 
echo "Installation complete." 
+0

謝謝!這很有幫助。到目前爲止,這兩個回答都幫助我通過進一步的研究發現,%pre和%post部分(以及其他部分)在rpmbuild過程中不會執行(如%build和%install),但僅在rpm命令,它可以作爲root運行。我認爲這在我迄今閱讀的任何內容中都沒有明顯和清楚地陳述。 – flash

7

useradd應該在%pre中運行,並且不應該在rpmbuild期間運行。這是做這件事的標準方式。我會推薦packaging guidelines,特別是users and groups的部分。