日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux rpm 包制作详解

發(fā)布時(shí)間:2025/3/20 linux 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux rpm 包制作详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、RPM介紹

RPM 前是Red Hat?Package Manager 的縮寫(xiě),本意是Red Hat 軟件包管理,顧名思義是Red Hat 貢獻(xiàn)出來(lái)的軟件包管理;現(xiàn)在應(yīng)為RPM Package Manager的縮寫(xiě)。在Fedora、RedHat、Mandriva、SUSE、YellowDog等主流發(fā)行版本,以及在這些版本基礎(chǔ)上二次開(kāi)發(fā)出來(lái)的發(fā)行版采用; RPM包中除了包括程序運(yùn)行時(shí)所需要的文件,也有其它的文件;一個(gè)RPM包中的應(yīng)用程序,有時(shí)除了自身所帶的附加文件保證其正常以外,還需要其它特定版本文件,這就是軟件包的依賴(lài)關(guān)系。

RPM可以讓用戶(hù)直接以binary方式安裝軟件包,并且可替用戶(hù)查詢(xún)是否已經(jīng)安裝了有關(guān)的庫(kù)文件;在用RPM刪除程序時(shí),它又會(huì)聰明地詢(xún)問(wèn)用戶(hù)是否要?jiǎng)h除有關(guān)的程序。如果使用RPM來(lái)升級(jí)軟件,RPM會(huì)保留原先的配置文件,這樣用戶(hù)就不用重新配置新的軟件了。RPM保留一個(gè)數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)中包含了所有的軟件包的資料,通過(guò)這個(gè)數(shù)據(jù)庫(kù),用戶(hù)可以進(jìn)行軟件包的查詢(xún)。RPM雖然是為L(zhǎng)inux而設(shè)計(jì)的,但是它已經(jīng)移值到SunOS、Solaris、AIX、Irix等其它UNIX系統(tǒng)上了。RPM遵循GPL版權(quán)協(xié)議,用戶(hù)可以在符合GPL協(xié)議的條件下自由使用及傳播RPM。

二、RPM包分類(lèi)

rpm分為兩大類(lèi),

1 二進(jìn)制類(lèi)包,包括rpm安裝包(一般分為i386和x86等幾種)和調(diào)式信息包等

2 源碼類(lèi)包,源碼包和開(kāi)發(fā)包應(yīng)該歸位此類(lèi)

它們之間的關(guān)系是,最先我們按rpm打包要求改造軟件項(xiàng)目源碼,當(dāng)符合要求之后就可以使用rpmbuild命令來(lái)生成不同的rpm包,同時(shí)生成的包之間版本是直接對(duì)應(yīng)的,比如相同的源碼包將生成完全相同的二進(jìn)制rpm包。當(dāng)你在網(wǎng)上查找rpm包時(shí),一般你可以在RPMS目錄中找到預(yù)編譯的二進(jìn)制包,而源碼包則會(huì)在SRPMS目錄內(nèi)。

我們這里提到的RPM制作就是指改造軟件源代碼使之符合RPM打包要求的過(guò)程,這也可以等價(jià)為RPM源碼包的制作過(guò)程,因?yàn)楫?dāng)你有了源碼包就可以直接編譯得到二進(jìn)制安裝包和其他任意包。

三、RPM包制作介紹

RPM包的制作,即是RPM源碼包的制作。

RPM包工作的原理

RPM是為解決源碼包不易安裝(需要編譯)和軟件包相互之間依賴(lài)(是RPM包管理器可以一定程度解決依賴(lài)問(wèn)題)問(wèn)題,它通過(guò)在探測(cè)源碼包在build和install階段的動(dòng)作獲得最終生成的需要安裝的系統(tǒng)里的文件,并記錄下一些必要的操作(比如安裝完成后執(zhí)行某項(xiàng)操作),然后把此組成為一個(gè)整體,當(dāng)在用戶(hù)安裝此包時(shí)把前面獲得的所有問(wèn)題和記錄的所有操作原原本本的作用的實(shí)際系統(tǒng)上。

把一個(gè)普通的源碼打成RPM包,需要下面一些操作

1、先需要對(duì)項(xiàng)目的Makefile作必要的改造以支持RPM打包操作(實(shí)際上此操作不是絕對(duì)的,SPEC文檔和Makefile的是協(xié)調(diào)統(tǒng)一工作的,只要他們之間配合好了其他都無(wú)所謂,我們一般只是推薦大家盡量按行業(yè)標(biāo)準(zhǔn)規(guī)范操作而已)

2、次是針對(duì)當(dāng)前項(xiàng)目撰寫(xiě)SPEC文檔,SPEC文檔包括了RPM打包過(guò)程的操作內(nèi)容和新生成的RPM包的基本信息等,它的作用對(duì)象是打包程序rpmbuild。

四、RPM包制作過(guò)程

1 準(zhǔn)備打包環(huán)境

執(zhí)行如下命令安裝rpmbuild和rpmdevtools

#yum install rpmbuild
#yum install rpmdevtools

執(zhí)行如下命令來(lái)生成rpmbuild的工作目錄

#rpmdev-setuptree

工作目錄結(jié)構(gòu)如下,

~/rpmbuild
~/rpmbuild/SOURCES? ? ? ? ? ? ? #放置打包資源,包括源碼打包文件和補(bǔ)丁文件等
~/rpmbuild/SPECS? ? ? ? ? ? ? ? #放置SPEC文檔
~/rpmbuild/BUILD? ? ? ? ? ? ? ? #打包過(guò)程中的工作目錄
~/rpmbuild/RPMS? ? ? ? ? ? ? ? #存放生成的二進(jìn)制包
~/rpmbuild/RPMS/i386? ? ? ? ? ? #存放生成的i386結(jié)構(gòu)包
~/rpmbuild/SRPMS? ? ? ? ? ? ? ? #存放生成的源碼包

提示:rpmdev-setuptree命令默認(rèn)將再當(dāng)前用戶(hù)主目錄下創(chuàng)建一個(gè)RPM構(gòu)建根目錄結(jié)構(gòu),如果需要改變次默認(rèn)位置,可以修改配置文件:~/.rpmmacros中變量_topdir對(duì)應(yīng)的值即可。

2、載源碼包到SOURCES目錄,不需要解壓

cd SOURCES/
wget http://nginx.org/download/nginx-1.2.1.tar.gz

3、撰寫(xiě)Spec文件

SPEC撰寫(xiě)是打包RPM的核心,也算是最難的一步,好在我們可以從參照一個(gè)簡(jiǎn)單的模板文件開(kāi)始,在可以實(shí)現(xiàn)基本功能的基礎(chǔ)上再一步一步的擴(kuò)充文檔內(nèi)容,直至完全達(dá)到要求。下面是一個(gè)簡(jiǎn)單的SPEC文檔,其中包括了一些說(shuō)明信息(注:#后面的內(nèi)容為說(shuō)明信息),該SPEC文檔是對(duì)一個(gè)測(cè)試的軟件項(xiàng)目hellorpm寫(xiě)的,hellorpm軟件包編譯后僅有一個(gè)執(zhí)行文件、一個(gè)手冊(cè)文件和一個(gè)項(xiàng)目說(shuō)文件。

nginx.spec文檔的內(nèi)容如下:

#
# Example spec file for nginx
#
#軟件包簡(jiǎn)要介紹
Summary: high performance web server

#軟件包的名字
Name: nginx

#軟件包的主版本號(hào)
Version: 1.2.1

#軟件包的次版本號(hào)
Release: 1.el5.ngx

#授權(quán)協(xié)議
License: 2-clause BSD-like license

#軟件分類(lèi)
Group: Applications/Server
Source: http://nginx.org/download/nginx-1.2.1.tar.gz
URL: http://nginx.org/
Distribution: Linux
Packager: zhumaohai <admin@www.linuxidc.com>
?
#軟件包的內(nèi)容介紹
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as
a mail proxy server

#表示預(yù)操作字段,后面的命令將在源碼代碼BUILD前執(zhí)行
%prep
rm -rf $RPM_BUILD_DIR/nginx-1.2.1
zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -

#BUILD字段,將通過(guò)直接調(diào)用源碼目錄中自動(dòng)構(gòu)建工具完成源碼編譯操作??
%build
cd nginx-1.2.1

#調(diào)用源碼目錄中的configure命令?
./configure --prefix=/usr/local/nginx

#在源碼目錄中執(zhí)行自動(dòng)構(gòu)建命令make
make

#安裝字段
%install
cd nginx-1.2.1

#調(diào)用源碼中安裝執(zhí)行腳本??
make install
%preun
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
killall nginx >/dev/null
exit 0
fi

#文件說(shuō)明字段,聲明多余或者缺少都將可能出錯(cuò)
%files
#聲明/usr/local/nginx將出現(xiàn)在軟件包中
/usr/local/nginx

4、構(gòu)建RPM包

開(kāi)始構(gòu)建操作,首先進(jìn)入到當(dāng)前用戶(hù)的rpmbuild根目錄

#cd ~/rpmbuild/
#rpmbuild -ba SPECS/nginx.spec

提示:-ba表示build all,即生成包括二進(jìn)制包和源代碼包的所有RPM包,如果正常的話,rpmbuild將正常退出,同時(shí)在RPMS目錄和SRPMS目錄中將生成對(duì)應(yīng)的RPM包。

?

?

?

?

?

?

?

?

?

?

?

?

?

參考地址:http://www.linuxidc.com/Linux/2015-08/121748.htm

?

轉(zhuǎn)載于:https://www.cnblogs.com/disanyuzhou/p/6830955.html

總結(jié)

以上是生活随笔為你收集整理的linux rpm 包制作详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。