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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rpm安装文件制作和使用

發(fā)布時間:2025/7/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rpm安装文件制作和使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

一 介紹

RPM(RPM Package Manager)是一個開放的包管理器,它使用戶可以從源碼構(gòu)建一個二進(jìn)制的軟件發(fā)行包和利用補(bǔ)丁包給軟件打補(bǔ)丁。RPM包非常靈活易用,因此被作為很多l(xiāng)inux發(fā)行版的默認(rèn)軟件安裝包。在Redhat和CentOS中都是使用此打包格式。

?


二 制作


1 創(chuàng)建一個RPM安裝包是件很容易的事,特別是當(dāng)你可以獲得軟件的源代碼包的時候。下面介紹怎么制做一個RPM軟件安裝包,在繼續(xù)之前,我們假設(shè)你已經(jīng)知道怎么從源代碼安裝一個軟件包。制做一個RPM軟件安裝包有以下幾個步驟:
  (1)獲得軟件的源代碼包

  (2)如果你自己修改了軟件,那么給它做一個補(bǔ)丁

  (3)編寫一個包含軟件包信息的spec文件

  (4)確保軟件被正確的安裝到適當(dāng)?shù)奈恢?/p>

  (5)創(chuàng)建RPM安裝包

?


2 從上面的幾步我們可以看到,制做一個RPM包最主要的就是第三步編寫一個spec文件,下面介紹怎么編寫這個spec文件。一個spec文件分成下面幾個小節(jié):


?  (1)前言(preamble)


  當(dāng)用戶查詢軟件包信息的時候,RPM程序會打印出前言包含的信息。這一小節(jié)包含的信息有軟件包的名稱、功能描述、版本號、發(fā)行號和類型等信息。


  (2)準(zhǔn)備(preparation)


  從prep節(jié)開始是創(chuàng)建一個軟件包要做的實際工作。故名思意,這一小節(jié)所做的都是一些必須的準(zhǔn)備工作,它的內(nèi)容就像一個普通的shell腳,為了使工作更容易,這一小節(jié)提供了兩個可以使用的宏,一個是解壓tar文件,并把當(dāng)前工作目錄設(shè)置為源代碼目錄,另一個是給源碼打補(bǔ)丁。


  (3)創(chuàng)建(build)


  就像prep小節(jié)一樣,build的內(nèi)容也是一個普通腳本,這一小節(jié)包含的是怎么編譯源代碼,它可以是一個簡單的make命令或者一些更復(fù)雜的編譯命令。因為現(xiàn)在的大多數(shù)軟件都使用make編譯,所以這一小節(jié)沒有提供宏。


  (4)安裝(install)


  install小節(jié)同樣也是一個腳本,它提供一些安裝軟件包的命令,如果源代碼的makefile文件提供有make install命令,這一節(jié)你可以簡單的包含一個make install命令,否則你就得提供一些像cp, mv或者install之類的命令集。


  (5)驗證(verify script)


  這一小節(jié)包含一個驗證軟件包的腳本,驗證軟件包不屬于RPM的能力范圍。


  (6)清除(clean)


  這一小節(jié)包含一個編譯好以后用于清除無用信息的腳本。這一腳本很少會用到,因為在大多數(shù)環(huán)境下,RPM會做好這些工作。


  (7)文件列表(file list)


  這一小節(jié)包含一份文件列表,它們是組成RPM包的所有文件,當(dāng)你用rpm -qpl 命令查看軟件包的時候就會得到這一份文件列表。在這一小節(jié)也有幾個宏可以用,它們指出哪些文件是文檔,哪些是配置文件,哪里是目錄等。


  (8)維護(hù)日志(changelog)


  這一小節(jié)記錄了軟件包的維護(hù)日志。

?


3 spec文件有一個命名規(guī)則,其文件名由以下幾部份組成:軟件包名-版本號-發(fā)行號.spec

?


4 下面我們舉一個簡單的spec文件,然后再來說明各部分的意思。文件如下:


Summary: GNU readline library

Name: readline

Version: 5.1

Release: 1

Copyright: GPL

Group: Library

Source: http://www.cnblogs.com/itech/admin/ftp://172.16.100.81/soft/readline-5.1.tar.gz

URL: http://www.gnu.org/index.html

Distribution: GNU Project

Vendor: GNU

Packager: Yan Dingcheng <dingcheng_yan@yahoo.com.cn>


%description

The GNU readline library gets a line from user with editing.


%prep


%setup


%build

./configure --prefix=/opt/%{name}
make

%install

make install


%files

/opt/%{name}/lib/libhistory.a

/opt/%{name}/lib/libhistory.so

/opt/%{name}/lib/libhistory.so.5

/opt/%{name}/lib/libhistory.so.5.1

/opt/%{name}/lib/libreadline.a

/opt/%{name}/lib/libreadline.so

/opt/%{name}/lib/libreadline.so.5

/opt/%{name}/lib/libreadline.so.5.1

/opt/%{name}/include/readline/chardefs.h

/opt/%{name}/include/readline/history.h

/opt/%{name}/include/readline/keymaps.h

/opt/%{name}/include/readline/readline.h

/opt/%{name}/include/readline/rlconf.h

/opt/%{name}/include/readline/rlstdc.h

/opt/%{name}/include/readline/rltypedefs.h

/opt/%{name}/include/readline/tilde.h

/opt/%{name}/info/dir

/opt/%{name}/info/history.info

/opt/%{name}/info/readline.info

/opt/%{name}/info/rluserman.info

/opt/%{name}/man/man3/history.3

/opt/%{name}/man/man3/readline.3


%changelog

* Wed Jan 31 2007 <dingcheng_yan@yahoo.com.cn>

+ create package

?

?

?

5 SPEC實例文件的具體解釋:

前言

Summary:這一行文字對軟件包進(jìn)行簡短描述

Name:軟件包的名字

Version:軟件包的版本號,這里必須是你計劃要使用的RPM文件版本號

Release:軟件包的發(fā)行號,這里必須是你計劃要使用的RPM文件發(fā)行號

Copyright:軟件包的版權(quán)

Group:軟件包的分組,這里定義怎么打包軟件包

Source:軟件包的來源,當(dāng)你想再次獲取該軟件包或者查看它是不是有更新的版本的時候,這一行就很有用了。

URL:URL與Source不一樣的地方就是,Source提供的是源代碼的文件名,URL提供的是指向軟件包文檔的鏈接。

Distribution:指明軟件包是屬于哪個產(chǎn)品的一部份。

Vendor:軟件包的生產(chǎn)廠商。

Packager:打包的組織或者個人。

discription:軟件包功能的一個詳細(xì)描述。


準(zhǔn)備

%setup宏:解壓源代碼包并把當(dāng)前工作目錄設(shè)置到源代碼目錄。%setup宏做的主要工作類似于下面兩條命令:

tar zxvf 源代碼包文件名

cd RPM包名-版本號

所以如果你的源代碼包解壓以后的目錄組成不是“RPM包名-版本號”的話,在這里使用%setup宏就會出問題。


創(chuàng)建

這里使用了一個configure和make命令組合


安裝

這里使用了make install命令,因為makefile里有install標(biāo)簽了,所以就用它,簡便。


文件列表

這里是一個文件列表,列出的文件就是創(chuàng)建以后的RPM包將要包含的文件,文件路徑要求是一個絕對路徑,利用RPM命令安裝這個軟件包以后,這些文件將會按照這里指定的路徑安裝到系統(tǒng)中。在創(chuàng)建RPM包之前必須保證這里指定的文件在系統(tǒng)中都能找到,不然創(chuàng)建RPM包將會出錯。所以如果是為了學(xué)習(xí)怎么編寫一個spec文件的話,就像我上面那樣,把軟件安裝到一個干凈目錄下(比如/opt),這樣不會影響系統(tǒng)的正常工作。


這個文件列表目前還沒有什么好的工具能夠自動生成,因為RPM沒法知道執(zhí)行make install的時候到底安裝了哪些文件。有的人建議用一個find命令來查找到底安裝了哪些文件,但是我覺得這未必會有用。我一般是在configure的時候使用configure --prefix=/opt/package_name指定一個干凈目錄,先把軟件安裝到該目錄下,然后查看軟件包安裝后都有哪些文件,通過這些文件生成一個文件列表,然后再使用configure命令重新安裝一次軟件包,這次把軟件包安裝到系統(tǒng)中,比如是/usr或者/usr/local目錄下,然后把文件列表中的目錄前輟改成相應(yīng)的目錄前輟(比如/usr或者/usr/local)就可以了。


維護(hù)日志

維護(hù)日志是一些對軟件包維護(hù)的日志記錄,其中包含有一個時間信息,它有指定的格式:Wed Jan 31 2007。按順序是 星期 月 日 年。

?

6 生成rpm安裝包:


  編寫好spec文件以后在redhat linux下把軟件源碼包放到/usr/src/redhat/SOURCE目錄下(如果是suse linux把軟件源碼包放到/usr/src/packages/SOURCE目錄下),

  然后把spec文件放到/usr/src/redhat/SPECS目錄下(如果是suse linux放到/usr/src/packages/SPECS目錄下),

  最后轉(zhuǎn)到/usr/src/redhat/SPECS目錄下執(zhí)行如下命令:rpmbuild -ba spec文件名 。


  執(zhí)行成功以后會生成三個RPM文件并打印信息如下:Wrote: /usr/src/redhat/SRPMS/readline-5.1-1.src.rpm,Wrote: /usr/src/redhat/RPMS/i386/readline-5.1-1.i386.rpm,Wrote: /usr/src/redhat/RPMS/i386/readline-debuginfo-5.1-1.i386.rpm。

  我們可以看到在RedHat系統(tǒng)下生成的RPM文件被放到/usr/src/redhat/RPMS/i386和/usr/src/redhat/SRPMS目錄下,如果打包的RPM包是為了i586架構(gòu)打的,那么RPM包會被放到i586目錄下。其中readline-5.1-1.src.rpm是源碼包,可以通過命令 rpmbuild --rebuild readline-5.1-1.src.rpm重新生成二進(jìn)制的RPM包。

?


三 使用


1 rpm -i (安裝)

  在第一次安裝某個包時,您要使用 -i 或安裝模式。只需將 rpm 指向某個二進(jìn)制包并執(zhí)行它, rpm 就會把該包安裝到您的系統(tǒng)上。安裝過程一般只需幾秒鐘。我經(jīng)常會在安裝包時使用 -v (詳細(xì))開關(guān)來提供關(guān)于該過程的更多信息,以及使用 -h (哈希線)開關(guān)來通過輸出在控制臺上的哈希(#)符號提供安裝進(jìn)度更新。下面是安裝某個包的例子:

?

$ rpm -ivh MyPackage-1.0.0.i386.rpm

Preparing...??????????????? ########################################### [100%]

?? 1:MyPackage????????????? ########################################### [100%]

就是這個樣子!MyPackage 現(xiàn)在已經(jīng)安裝完成,可供使用了。


2 rpm -e (刪除)

要刪除已安裝的包,可使用 -e 開關(guān)。 rpm 將使用數(shù)據(jù)庫來刪除該包的所有文件。如果有已安裝的其他包依賴正在刪除的包, rpm 將會異常退出。您必須使用 nodeps 開關(guān)來執(zhí)行強(qiáng)制刪除( nodeps 還可以用于強(qiáng)制安裝)。在使用這個開關(guān)來強(qiáng)制安裝或刪除時,務(wù)必 非常 小心。刪除其他包所依賴的包,可能會導(dǎo)致災(zāi)難性的結(jié)果。下面這個命令刪除我們在上面安裝的包:

$ rpm -e MyPackage
?

?

注意,包的刪除并不一定需要它的完整名稱(包括版本號)。安裝時需要完整名稱,因為我們是在引用一個文件名稱。已安裝的包僅通過它們的名稱來引用。包的名稱是版本號之前的所有內(nèi)容。


3 rpm -V(驗證)

驗證開關(guān)非常有用。它將包文件的當(dāng)前狀態(tài)與它們在安裝時的原始狀態(tài)作比較。兩種狀態(tài)之間的區(qū)別將用一個代碼來顯示:

文件驗證結(jié)果

S
?文件大小不一致
?
M
?模式不一致(包括權(quán)限和文件類型)
?
5
?MD5 校驗和不一致
?
D
?設(shè)備主要/次要編號不匹配
?
L
?readLink(2) 路徑不匹配
?
U
?用戶擁有關(guān)系不一致
?
G
?群組擁有關(guān)系不一致
?
T
?mTime 不一致
?

如果您對某個包運(yùn)行 rpm -V ,并且發(fā)現(xiàn)某個可執(zhí)行文件的大小發(fā)生了變化,那可能就是安全漏洞的征兆。


4 rpm -U(升級)

一旦某個包已經(jīng)安裝,嘗試安裝具有相同名稱的包將產(chǎn)生一條消息,指出該包已經(jīng)安裝。 如果想要將某個包升級到更新的版本,可使用 -U 開關(guān)來升級。升級還具有另一個影響。當(dāng)對多個包名稱運(yùn)行升級時,它將設(shè)法按依賴關(guān)系的順序放置包。換句話說,必需的包將首先安裝。不管某個包是否已經(jīng)安裝,都可以對它使用升級開關(guān),許多人使用它而不是使用 -i 開關(guān)來執(zhí)行安裝和升級。下面是使用升級開關(guān)來加載多個 rpm 包的例子:


$ rpm -Uvh My*.rpm

Preparing...??????????????? ########################################### [100%]

?? 1:bMyPackageDep????????? ########################################### [ 50%]

?? 1:aMyPackageNew????????? ########################################### [100%]
?

?

在上面的例子中,bMyPackageDep 是 aMyPackageNew 的前提條件,因此盡管文件名稱以相反的順序排列, rpm 也會對它們正確排序。


5 rpm -q(查詢)

可以從 rpm 數(shù)據(jù)庫中查詢多種有用的信息。對 rpm 數(shù)據(jù)庫擁有讀訪問權(quán)限的任何用戶都能夠運(yùn)行查詢。默認(rèn)情況下,全部用戶都擁有讀訪問權(quán)限。要運(yùn)行一個查詢,可使用 -q 開關(guān)帶上要查詢的包的名稱。這樣將返回該包的版本。

$ rpm -q MyPackage????????

?

MyPackage-1.0.0

???????
?

?

包的名稱必須精確匹配,不允許使用通配符。然而,如果記不住包的完整名稱,您可以使用 grep 工具來幫助找到它。可以使用 -qa 開關(guān)來查詢所有已安裝的包,并用 grep 來管道輸出您能記住的信息。例如:

$ rpm -qa | grep IBM????????

?

IBMWSAppDev-Product-5.0-0?????????

?

IBMWSSiteDevExp-Core-5.0-0?????????

?

IBMWSSiteDev-Core-5.0-0?????????

?

IBMWSTools-WAS-BASE-V5-5.0-0?????????

?

IBMJava118-SDK-1.1.8-5.0?????????

?

IBMWSWB-samples-5.0-0?????????

?

IBMWSWB-5.0-0?????????

?

IBMWSAppDev-Core-5.0-0?????????

?

IBMWSAppDev-5.0-0?????????

?

IBMWSTools-5.0-0

???????
?

?

除了版本號外, rpm -q 還可以提供關(guān)于包的其他有用信息。下面就是這樣一些例子:

使用 rpm 查詢獲取信息

rpm -q changelog
?顯示包的開發(fā)變更歷史記錄
?
rpm -qc
?顯示包的配置文件
?
rpm -qd
?顯示包的文檔文件
?
rpm -qi
?顯示包描述
?
rpm -ql
?顯示包的文件的列表
?
rpm -qR
?顯示包的依賴關(guān)系
?

還有另一個有趣的查詢命令,它針對文件而不是針對包運(yùn)行。

rpm -q whatprovides <filename>
?

?

上面這個命令將識別與給定的 filename(文件名)相關(guān)聯(lián)的包。filename 必須包括文件的絕對路徑,因為信息就是以這種方式存儲在 rpm 數(shù)據(jù)庫中的。


?

四 參考

1)http://hi.baidu.com/imace/blog/item/767c992677601c148b82a111.html
2)http://www.ibm.com/developerworks/cn/linux/l-roadmap/part9/index.html

五 完!

?

轉(zhuǎn)載于:https://www.cnblogs.com/itech/archive/2009/08/12/1544653.html

總結(jié)

以上是生活随笔為你收集整理的rpm安装文件制作和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲天堂一区二区三区 | wwwwww国产| 超碰成人av | 东京久久| 91精品国产91久久久久 | 日本狠狠操 | 伊人久久一区二区 | 91成人免费在线观看视频 | 午夜视频1000 | 操欧美老逼 | 国产亚洲精品久久久久久打不开 | 亚洲中文字幕无码一区二区三区 | 免费色网址 | 四虎影库在线播放 | 麻豆国产在线播放 | 国产精品传媒在线观看 | 狠狠操在线观看 | 亚洲午夜伦理 | 一个人在线观看www软件 | 国产.com | 国产小视频一区 | 麻豆蜜臀 | 免费网站成人 | 亚洲在线综合 | 性www| 久久人 | 国产剧情自拍 | 精品国产乱码久久久 | 国产中年熟女高潮大集合 | 欧美精品久久久 | 久久久久久亚洲av无码专区 | 视频免费观看在线 | 亚洲午夜福利一区二区三区 | 成人免费性视频 | 99国产精品白浆在线观看免费 | 五月综合激情日本mⅴ | 国产精品久久二区 | 一区二区三区精品久久久 | 雪白的扔子视频大全在线观看 | 黄色av一级片 | 亚洲熟妇无码一区二区三区 | 午夜小视频在线 | 黄在线网站 | 午夜不卡av免费 | 天堂新版8中文在线8 | 国产91九色| 久久午夜激情 | 欧美午夜精品久久久久久浪潮 | 人妖一区二区三区 | 久久黄视频 | 日韩一区二区三区四区五区六区 | 日本一二三区在线视频 | 国产又粗又猛又黄又爽的视频 | 日本裸体动漫 | av免费在线观 | 天堂无乱码 | 无码人妻精品一区二区三区9厂 | 国产精选视频 | 超碰在线图片 | 婷婷在线免费观看 | 天堂99| 欧美日韩在线播放视频 | 欧美精品国产动漫 | 日韩少妇一区二区三区 | 欧美精品一区二区免费看 | 夜夜免费视频 | 性饥渴的农村熟妇 | 黄色一大片 | 成人看片在线 | 亚洲国产一区二区在线观看 | 天天色综 | 国产精品一区二区在线 | 日韩欧美一区二区在线 | 国产ts变态重口人妖hd | 泰坦尼克号3小时49分的观看方法 | 亚洲毛片视频 | www.婷婷色| 精品麻豆一区二区 | 劲爆欧美第一页 | 成年人免费毛片 | 99久 | 中文字幕一区二区三区四区欧美 | 午夜精品成人毛片非洲 | 国产日韩欧美亚洲 | 欧美影院久久 | 激情宗合网 | 一区二区高清在线观看 | 国产精品自拍小视频 | 久久视频这里只有精品 | 91精品福利视频 | 精品国产乱码久久久久久1区2区 | 日韩午夜激情电影 | 青草青视频| 98在线视频 | 亚洲911精品成人18网站 | 国产毛片电影 | 国产精品18久久久久久vr下载 | 国产精品入口 | 黄色大片网站在线观看 |