使用rpmbuild構建rpm安裝包
RPM(Red 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之使用rpmbuild打rpm包
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包中文件提取 比如對一個系統配置文件誤操作,可以根據這