簡體   English   中英

rpm.spec 文件中的多個 tar(源文件)文件

[英]multiple tar (source files) files in rpm.spec file

我想出了一個在 linux 上的集中式日志服務器。 在這一點上,我正在嘗試進行整合,以便更輕松地將內容加載到另一台機器上。 我想要一個可以一次性安裝多個程序的 RPM。 我在 CentOS 7 服務器上工作。 我希望打包到 rpm 中的程序是:

eventlog 2.12 
libdbi 0.9.0
freetds 0.91 
libdbi-drivers 0.9.0
json-c
syslog-ng 3.5.6

我一直在對 RPM 進行大量閱讀,只是很難理解如何將多個源整合到一個 RPM 中。 我是源安裝這些而不是 yum 安裝它們的原因是因為我需要在“./configure --enable-example”中調用配置。 所以我在我的機器上安裝了所有這些程序,然后我將它們備份並嘗試使用該文件作為源。 任何可以為我指明正確方向的想法或任何人都將不勝感激。

您可以根據需要列出盡可能多的Source行,並在您需要匹配的spec文件中%setup盡可能多的%setup宏調用。

通過在線最高RPM書籍的多源規范文件中使用%設置,我們發現:

出於此示例的目的,我們的spec文件將具有以下三個源標記:[1]

  source: source-zero.tar.gz source1: source-one.tar.gz source2: source-two.tar.gz 

打開第一個來源並不難; 所需的只是使用%setup而沒有選項:

 %setup 

這會產生以下命令集:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . 

....

現在讓我們添加第二個源文件。 這里的事情變得更有趣了。 首先,我們需要確定我們正在談論的源標記(以及哪個源文件)。 因此,我們需要使用-a或-b選項,具體取決於源存檔的特征。 對於這個例子,假設-a是我們想要的選項。 添加該選項,加上“1”指向source1標記中指定的源文件,我們有:

 %setup -a 1 

由於我們已經看到使用-a或-b選項導致重復解包,我們需要通過添加-T選項來禁用默認解包:

 %setup -T -a 1 

接下來,我們需要確保不刪除頂級目錄。 否則,我們剛剛解壓縮的第一個源文件將會消失。 這意味着我們需要包含-D選項以防止這種情況發生。 添加這個最終選項,並在我們的%prep腳本中包含現在完整的宏,我們現在有:

 %setup %setup -T -D -a 1 

這將導致以下命令:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . cd /usr/src/redhat/BUILD cd cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . 

到現在為止還挺好。 讓我們包含最后一個源文件,但是有了這個,我們會說它需要在cdplayer-1.0的子目錄中解壓縮,稱為數據庫。 在這種情況下我們可以使用%setup嗎?

如果source-two.tgz創建了數據庫子目錄,我們可以。 如果沒有,那么就必須手工完成。 出於我們的示例的目的,假設source-two.tgz未創建為包含數據庫子目錄,因此我們必須自己完成。 這是我們的%prep腳本現在:

 %setup %setup -T -D -a 1 mkdir database cd database gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

這是結果腳本:

 cd /usr/src/redhat/BUILD rm -rf cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd cdplayer-1.0 cd /usr/src/redhat/BUILD/cdplayer-1.0 chown -R root.root . chmod -R a+rX,gw,ow . cd /usr/src/redhat/BUILD cd cdplayer-1.0 gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi mkdir database cd database gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

我們添加以解壓縮最后一組源的三個命令被添加到%prep腳本的末尾。

在這種情況下,正確的解決方案是創建多個 RPM,並在它們各自的 .spec 文件的 Requires: 字段中聲明它們之間的正確依賴關系順序。

一旦正確定義了關系,rpm(8) 或 yum(8) 將按照正確的順序安裝它們。

這種方法也促進了模塊化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM