1. 程式人生 > >使用rpmbuild構建rpm安裝包

使用rpmbuild構建rpm安裝包

RPMRed Hat Package Manager)是用於 Linux分發版(distribution)的最常見的軟體包管理器。因為它允許分發已編譯的軟體,所以使用者只用一個命令就可以安裝軟體。

1、  基本概念

RPM包命名方式:name-version-release.architecture.rpm ,如indent-2.2.6-1.x86_64.rpm,libevent-1.2-1.el6.x86_64.rpm等

RPM有五種基本的操作功能:安裝、解除安裝、升級、查詢和驗證。這五種基本功能的實現僅僅需要用rpm + 選項 + rpm包就能輕易地實現。

安裝:

rpm –ivhmysql-5.1.61-4.el6.i686.rpm

查詢:

rpm –qa mysql:查詢跟mysql有關的包。

刪除:

rpm –emysql-5.1.61-4.el6.i686,一般的話都會先通過查詢已經安裝好的包,然後執行刪除命令,上述命令,即可解除安裝掉系統安裝好的rpm包。

升級:

    rpm –Uvh mysql-5.1.61-4.el6.i686.rpm

驗證:

    rpm –Vmysql-5.1.61-4.el6.i686.rpm。對已經安裝了的程式進行驗證。

2、  一個簡單的例子

為讓讀者明白生成RPM包的流程,我們在這裡不使用預設目錄,而是自行定義。

第一步,建立工作目錄/data/rpmbuild

第二步,建立RPM打包過程所需子目錄:

/data/rpmbuild/SPECS,存放rpmbuild打包所需要的spec檔案

/data/rpmbuild/SOURCES,存放rpmbuild打包所需要的程式碼原始檔

/data/rpmbuild/RPMS, 存放生成的rpm包

/data/rpmbuild/SRPMS, 存放生成的rpm原始碼包

/data/rpmbuild/BUILD, 打包過程的臨時工作目錄

/data/rpmbuild/BUILDROOT, 虛擬根目錄,臨時存放編譯後文件

第三步,將原始碼檔案放到SOURCES目錄下                           

第四步:轉入SPECS目錄,編寫indent.spec檔案(檔名隨意) 

 

第五步,rpm -ba filename.spec –define “_topdir /data/rpmbuild”。執行完畢後再RPMS目錄中可看到生成的RPM檔案:

其中帶有debuginfo的RPM包為包含除錯資訊的安裝包,不需要的話忽略即可,也可以通過修改配置項使之不生成。

 

3、  SPEC檔案詳解

A.     檔案頭

Summary:一句話概括軟體包儘可能多的資訊

Name:將要打包的軟體名稱

Version:將要打包的軟體的原始碼版本

Release:將要打包的軟體的釋出版本號

Vendor:軟體開發者的名字

Copyright:軟體包所採用的版權規則,如GPL、commercial等

License:軟體所使用的許可證

Group:軟體包所屬的類別

Packager:封包者名稱

Source:原始碼包,可以帶多個用Source1、Source2等源,後面也可以用%{source1}、%{source2}引用

BUILDROOT: 這個是安裝或編譯時使用的“虛擬目錄”,考慮到多使用者的環境,一般定義為:%{_tmppath}/%{name}-%{version}-%{release}-root或

%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u}-n}

該引數非常重要,因為在生成rpm的過程中,執行make install時就會把軟體安裝到上述的路徑中,在打包的時候,同樣依賴“虛擬目錄”為“根目錄”進行操作。後面可使用$RPM_BUILD_ROOT 方式引用

Patch: 補丁原始碼,可使用Patch1、Patch2等標識多個補丁,使用%patch0或%{patch0}引用

Requires: 該rpm包所依賴的軟體包名稱,可以用>=或<=表示大於或小於某一特定版本,例如:libpng-devel >= 1.0.20 zlib 

B.     %description巨集

軟體的詳細說明,這是SPEC檔案中唯一可以跨行的部分,所以一般放在檔案頭的最後宣告。

C.     %prep部分

這個段是預處理段,通常用來執行一些解開源程式包的命令,為下一步的編譯安裝作準備。%prep和下面的%build,%install段一樣,除了可以執行RPM所定義的巨集命令(以%開頭)以外,還可以執行SHELL命令,命令可以有很多行,如我們常寫的tar解包命令。

%setup -n %{name}-%{version} 把原始碼包解壓並放好
通常是從/SOURCES裡的包解壓到BUILD/%{name}-%{version}中。一般用%setup-c就可以了,但有兩種情況:一就是同時編譯多個原始碼包,二就是原始碼的tar包的名稱與解壓出來的目錄不一致,此時,就需要使用-n引數指定一下了。

%patch打補丁,補丁一般在tar.gz包中,或者放到SOURCES目錄下。一般引數為:

%patch -p1 使用前面定義的Patch補丁進行,-p1是忽略patch的第一層目錄

%Patch2 -p1 -b xxx.patch 打上指定的補丁,-b是指生成備份檔案

D.     %build部分

這一部分執行編譯動作。一般執行configure,make等命令,如:

%configure --prefix=/usr

Make

E.      %install部分

這一部分執行安裝動作。因為在一般情況下,我們僅僅是想完成打包工作,而並不像在本機安裝相應的程式,因此我們往往使用虛擬根目錄。

rm -rf $RPM_BUILD_ROOT

make DESTDIR=$RPM_BUILD_ROOT install

執行後,在BUILDROOT目錄的下層目錄下會看到,相應軟體已經安裝到該目錄下。

F.      %clean

顧名思義,這一部分執行打包後的清理動作。如rm -rf $RPM_BUILD_ROOT

G.     %file部分

這一部分定義哪些檔案或者目錄會被放入到rpm中

%defattr(-,root,root,0755)指名安裝時檔案的使用者,使用者組和存取許可權。一般形式如下:

%defattr(-,root,root,0755)

/usr/bin/event_rpcgen.py

/usr/include/evdns.h

/usr/lib64/libevent-1.4.so.2

執行安裝命令後,libevent-1.4.so.2將被安裝到/usr/lib64目錄下。

H.     其他部分

%pre rpm安裝前執行的指令碼

%post rpm安裝後執行的指令碼

%preun rpm解除安裝前執行的指令碼

%postun rpm解除安裝後執行的指令碼



相關推薦

使用rpmbuild構建rpm安裝

RPM(Red Hat Package Manager)是用於 Linux分發版(distribution)的最常見的軟體包管理器。因為它允許分發已編譯的軟體,所以使用者只用一個命令就可以安裝軟體。 1、  基本概念 RPM包命名方式:name-version-rele

解決rpm安裝依賴問題的一個方法

linux yum rpm依賴 需求背景 你需要安裝幾個rpm包,當時當你執行rpm -ivh *.rpm的時候,卻提示需要一大堆依賴。 你被不允許配置yum源,你也不能一個一個去嘗試包和包之間的依賴關系。 解決方法 先在通互聯網的機器上配置互聯網yum源 再安裝#yum -y ins

web項目集成tomcat+jdk+mysql+java項目源碼rpm安裝一鍵安裝

mys ase 一鍵安裝 uil serve package 安裝 現場 數據庫表 由於公司的需求,在全國各地現場客戶安裝javaweb項目,為了方便項目安裝,需要在Linux系統中進行一鍵安裝部署操作,本人采用xshell腳本集成jdk+tomcat+mysql+web項

在centos中使用rpm安裝安裝jenkins

jenkins下載:http://pkg.jenkins-ci.org/redhat/ 下載rpm包到本地 在linux下使用rpm包安裝命令: sudo rpm -ih jenkins-1.562-1.1.noarch.rpm [[email protected] Des

CentOS 6 5 下安裝MySQL 5 7 12,使用官網下載的rpm安裝

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

如何在Linux系統下把一個python模組轉換成一個rpm安裝

這樣做的目的一方面是解決那些不能訪問外網的主機安裝這些python模組的問題,另一方面是可以提高特定python模組的部署效率。 下文是根據使用需求,將一個python2.7使用的mysql-python模組製作為一個rpm安裝包,作為示例。類似的步驟可以在變換fpm選項引

製作 JAVA WEB + TOMCAT7.0 RPM 安裝 for centos

1  安裝rpmbuild,並配置環境 1.1 首先,你應該檢查rpmbuild是否已經被安裝在你的系統上。你將會利用這個工具從 spec 檔案或SRPM 元件建立 RPM。要檢查它是否被安裝了,請執行rpmbuild --showrc這個指令。它將會顯示一大組資料,把r

rpm命令手冊和檢視rpm安裝安裝路徑的方法

rpm -qpl xxxxxx.rpm1.如何安裝rpm軟體包 rmp軟體包的安裝可以使用程式rpm來完成。執行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要安裝的rpm包的檔名,一般置於當前目錄下。

【轉】怎樣檢視rpm安裝安裝路徑 rpm安裝安裝

安裝RPM包的時候,一般是作為“root”登陸。 查詢RPM的命令可用:> man rpm 1.如何安裝rpm軟體包 rmp軟體包的安裝可以使用程式rpm來完成。執行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要

linux rpm 安裝 資訊查詢

 以CentOS5.5 中已經整合安裝了 Apache、MySQL、PHP作為樣例,我們來探索一下其安裝路徑等資訊,以利於我們的管理和使用。如果要重新安裝這些軟體的最新版本,也需要首先進入原先的路徑,備份資料和有關配置,以備將來之用。     因為 CentOS5.5 是紅帽

centos6.5_x64 系統rpm安裝下載地址。

筆者經常會在公司centos伺服器上安裝一些軟體,可是當我輸入yum install xxx 時,鬱悶了,公司伺服器不通外網,無法使用yum源!!! 額~~~,好吧我只能自己先到網站上下載好rpm包

YUM安裝RPM安裝時報錯Could not open/read file:///mnt/repodata/repomd.xml

【Linux虛擬機器、Vbox】 出現此問題是因為yum源裡配置了baseurl=file:///mnt ,但是在這個目錄下沒有找到需要的資源。經過查詢原因發現是因為使用的虛擬機器,但是沒有掛載映象,所以使用下面語句來掛載映象: mount   /dev/cdrom  

linux rpm問題:怎樣檢視rpm安裝安裝路徑

rpm -qpl xxxxxx.rpm 1.如何安裝rpm軟體包 rmp軟體包的安裝可以使用程式rpm來完成。執行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要安裝的rpm包的檔名,一般置於當前目錄下。安裝過程中可能出現下面的警告或者提示: ...

[Kubernetes] Kubernetes 原始碼編譯 RPM 安裝

一、背景          本文在部落格 http://blog.csdn.net/shida_csdn/article/details/78415946 實現 Kubernetes 原始碼編譯基礎上

Gitlab rpm安裝手動升級法

開發十年,就只剩下這套架構體系了! >>>   

HeartBeat-DRBD rpm安裝生成

開發十年,就只剩下這套架構體系了! >>>   

linux之使用rpmbuildrpm

login 就會 fpm ftw 安裝出錯 紅帽 ref 超過 說明 linux之使用rpmbuild打rpm包 前言: 已從事linux運維工作數年,感覺自己還是個小菜鳥,沒有大神那麽的鉆研的精神。只是單純熱愛,喜歡對著黑色的屏幕敲擊命令,喜歡這種感覺。為什麽

liunx安裝rpm及yum命令詳解

liunx rpm yum rpm及yum的優缺點 **RPM是由紅帽公司開發的軟件包管理方式,使用rpm我們可以方便的進行軟件的安裝、查詢、卸載、升級等工作。但是rpm軟件包之間的依賴性問題往往會很繁瑣,尤其是軟件由多個rpm包組成時。YUM(全稱為 Yellow dog Updater, Mo

linux 已安裝校驗、rpm中文件提取

系統配置文件 -i 沒有 nac 裝包 誤操作 文件絕對路徑 col 提取 已安裝包校驗 rpm -V 已安裝的包名-V 校驗指定rpm包中的文件 rpm -V pth沒有任何提示,說明自安裝後沒有做過任何修改 rpm包中文件提取 比如對一個系統配置文件誤操作,可以根據這