主頁 > 知識庫 > CentOS系統(tǒng)下軟件包的制作方法和過程詳解

CentOS系統(tǒng)下軟件包的制作方法和過程詳解

熱門標(biāo)簽:電話機器人搭建 家政服務(wù)網(wǎng)絡(luò) 服務(wù)器配置 硅谷的囚徒呼叫中心 解決方案 百度競價點擊價格的計算公式 美團 外呼系統(tǒng)

總的情況下Linux下軟件安裝主要有三種方式:

一種是源碼安裝,需要用戶自己手動編譯

另一種是RPM包(RedHat Linux Packet Manager),通過RPM命令就可以實現(xiàn)安裝

還有一種為*.bin文件,安裝方法與Windows下的安裝過程類似

通常情況下Linux 安裝軟件主要通過以下兩種方式

①   文件名形如xxx.i386.rpm ,軟件包以二進制形式發(fā)布.

②   文件名形如xxx.tar.gz ,軟件包多以源碼的形式發(fā)布.

Linux軟件包管理可以分為三類:二進制包的管理,源代碼包的管理,腳本安裝

另外值得注意的是目前存在各種Linux的發(fā)行版獲取和安裝軟件的方式也有很多例如

【】redhat/centos的yum安裝(有專門的鏡像源)

【】Ubuntu/Fedora/Debian的sudo apt-get適用于deb包進行管理安裝

【】也有的軟件是通過刻盤加密的形式然后進行安裝的(例如cnyunwei)

【】在系統(tǒng)運維管理人員方面也有通過ssh、C/C++語言或者py執(zhí)行的一些軟件命令進行自動化管理的應(yīng)用,這里就不做詳細介紹了。

下面有一張圖可以清晰地表示linux軟件應(yīng)用的架構(gòu)關(guān)系:

在Linux啟動的時候。首先會啟動內(nèi)核(kernel),內(nèi)核是一段計算機程序,這個程序直接管理管理硬件,包括CPU、內(nèi)存空間、硬盤接口、網(wǎng)絡(luò)接口等等。所有的計算機操作都要通過內(nèi)核傳遞給硬件。我們可以看到,Linux利用kernel實現(xiàn)軟硬件的對話。通過系統(tǒng)調(diào)用的這個重要的接口,Linux將上層的應(yīng)用與下層的kernel完全分離開,為程序員隱藏了底層的復(fù)雜性(相應(yīng)的,也提高了上層應(yīng)用的可移植性)。當(dāng)我們在升級kernel的時候,也可以保持系統(tǒng)調(diào)用的語句不變,從而讓上層應(yīng)用不感受到下層的改變。庫函數(shù)利用系統(tǒng)調(diào)用創(chuàng)造出模塊化的功能,而shell則提供了一個用戶界面,并讓我們可以利用shell的語法編寫腳本,以整合程序。有了這些思想我們可以快速地了解linux的軟件應(yīng)用的安裝和工作原理,也因此為了方便和獲取更多企業(yè)應(yīng)用我們需要在linux系統(tǒng)上開發(fā)并且通過源碼編譯的方式制作各種軟件包從而為信息化時代服務(wù)。

本文主要介紹源碼安裝與RPM包的安裝

源碼包和商業(yè)軟件包根據(jù)各個公司或作者的實際情況出發(fā)(可以是tar等格式的壓縮包,也可以是bin的源程序,可以是已經(jīng)編譯好了的直接拿來運行的文件,也可以是光盤虛擬化文件等其他介質(zhì)來制作發(fā)布的iso文件等)封裝成一種特定的格式發(fā)布從而進行相應(yīng)的軟件服務(wù)。其實通過yum或者make install命令安裝的軟件在系統(tǒng)都會自動生成rpm包(只是參數(shù)和功能模塊差異和嚴謹?shù)模?/p>

簡介:

RPM(RedHat Package Manager,紅帽子軟件包管理器)用于軟件包的安裝、查詢、升級、校驗、卸載,以及生成.rpm格式的軟件包   RPM的使用前

掛載linux系統(tǒng)(centos4為例)的安裝光盤,當(dāng)然也可在網(wǎng)上下載免費的RPM包.

# mount/dev/cdrom           ---掛載光盤

# cd/media/cdrom/CentOS/RPMS ---進入光盤中RPM包的目錄(可以通過#mount命令來查看光盤的掛載點一般會在最后一行顯示)

# ls

一、源碼包安裝

1、*.src.rpm形式的源代碼軟件包

用法:

安裝:   rpm –rebuild *.src.rpm

cd /usr/src/dist/RPMS

            Rpm –ivh *.rpm

卸載:   rpm –e packagename

2、.tar.gz,*.tgz,*.bz2形式軟件包的安裝

首先進行解壓,命令如下

     tar zxvf   *.tar.gz

     tar xvfz   *.tgz

     tar xvfj    *.tar.bz2

解壓之后進入解壓目錄,然后進行以下操作(一般情況,具體看軟件包的文件名)

配置:./configure

編譯:make

安裝:make install

卸載:make uninstall

源碼安裝有一定的難度,不同的軟件可能有不同的安裝,一般在解壓之后應(yīng)該先閱讀說明文檔,按照說明進行安裝,上面說的只是一般情況。

二、RPM包安裝

     RPM安裝包格式是由Redhat公司提出的,大大的簡化了Linux下軟件的安裝,首先介紹一下通用選項。

     -v:顯示附加信息

     -vv:顯示調(diào)試信息

     --root directory:讓RPM以directory作為根目錄,這樣預(yù)安裝程序和后安裝程序都會安裝到這個目錄下。

     1、安裝:rpm –ioptions> file.rpm

     Options:

    h:安裝時輸出hash記號

     test:只對安裝進行測試,不真正安裝

     --persent:以百分比形式顯示安裝進度

     --excludedocs:不安裝軟件包中的文檔

     --replacepkgs:強制重新安裝

     --replacefiles:替換屬于其它軟件包的文件

     --force:忽略軟件包及文檔沖突

     --ignorearch:不校驗軟件包結(jié)構(gòu)

     --ignoreos:不檢查軟件包運行的操作系統(tǒng)

     --nodeps:不檢查依賴性關(guān)系

--noscripts:不運行預(yù)安裝和后安裝腳本程序

     2、刪除 rpm –eoption> pkgname

Option:

--test:只做刪除測試,不真正刪除

--noscripts:不運行預(yù)安裝和后安裝腳本程序

--nodeps:不檢查依賴性

注意:pkgname是軟件包的名字,不是rpm包名字,而是安裝后軟件包的名字,可以用查詢命令來查詢軟件包名。

3、升級 rpm–U(或者—upgrade)option>file.rpm

Option:

基本與安裝時的option一樣,有幾個特殊的:

--oldpackage:允許一個舊版本

4、查詢 rpm –q(或者--query)option>

Option:

-p PACKAGE_FILE:查詢軟件包的文件

-f FIEL:查詢FILE屬于哪個軟件包

-a:查詢所有安裝的軟件包

-g group:查詢屬于group組的軟件包

--whatproVidesCAPABILITY:查詢提供了CAPABILITY功能的軟件包

--whatrequiresCAPABILITY:查詢所有需要CAPABILITY功能的軟件包

-i:顯示軟件包的概要信息

-l:顯示軟件包中的文件列表

-c:顯示配置文件列表

-s:顯示文件列表

-scripts:顯示安裝、卸載,校驗?zāi)_本

--qf:以用戶指定的方式查詢

--dump:顯示每個文件的校驗信息

--proVides:顯示軟件包提供的功能

-R:顯示軟件包需要的功能

5、校驗已經(jīng)安裝的軟件包 rpm –V(or –verify,or –y)option>

Option選項與其它命令的類似

6、校驗軟件包中的文件 rpm –K(or –checksig)option> file.rpm

Option:

-v:顯示版本信息

-vv:顯示調(diào)試信息

--rcfile FILELIST:設(shè)置rpmrc 文件為FILELIST

7、其它RPM選項

--rebuilddb:重建RPM資料庫

--initdb:創(chuàng)建一個新的RPM資料庫

--quiet:盡可能地減少輸出

--help:顯示幫助文件

--version:顯示RPM當(dāng)前版本

上面只是對常用選項的總結(jié),具體還有什么問題,可以用man rpm命令進行查看,官方文件永遠最好的老師。

三、*.bin格式安裝文件的安裝

只需雙擊或單擊*.bin文件就可以根據(jù)提示安裝了,不再敷述。

要想制作一個RPM格式的軟件包,需要編寫軟件包描述文件。其標(biāo)準(zhǔn)命名格式為:軟件名-版本號-釋出號.spec(現(xiàn)在大多情況下都是直接用:軟件名.spec),這個文件,詳細描述了有關(guān)該軟件包的諸多信息,如軟件名,版本,類別,說明摘要,創(chuàng)建時要執(zhí)行什么指令,安裝時要執(zhí)行什么操作,以及軟件 包所要包含的文件等等。有了這個文件,RPM就可以制作出相應(yīng)的包裹文件來。當(dāng)然現(xiàn)在也有例如Source rpm這樣開源的包制作輔助工具只要一個程序源即可通過向?qū)乱徊郊纯芍谱鳌?/p>

簡單的一個制作例子:

其實最好的辦法是做個軟件包。我記得 rpm 和 debian 都有快速打包的開源軟件可以直接拿來使用即可。

eg>>將nginx的tar包制作為RPM包

1.      下載nginx的源碼包

2.      將文件放到/usr/src/redhat/SOURCES/目錄下

3.      編寫SPEC文件

[root@mail SPECS]# vinginx-0.8.35.spec

Summary:the first rpmpackage

Name:nginx

Version:0.8

Release:35

Vendor:chenwei01@corp.the9.com

License:Share

Group:Applications/Text

Source0:nginx-0.8.35.tar.gz

%description

my test nginx

%prep

tar -zxvf $RPM_SOURCES_DIR/nginx-0.8.35.tar.gz

%build

cd$RPM_BUILD_DIR/nginx-0.8.35

./configure

make

%install

cd$RPM_BUILD_DIR/nginx-0.8.35

make install

%clean

rm -rf$RPM_BUILD_DIR/nginx-0.8.35

%files

%defattr(-,root,root)

/usr/local/nginx/sbin/nginx

%doc $RPM_BUILD_DIR/nginx-0.8.35/README

4.      制作RPM包

[root@mail SPECS]#rpmbuild -ba nginx-0.8.35.spec    

若運行沒有錯誤,則產(chǎn)生/usr/src/redhat/RPMS/i386/nginx-0.8-35.i386.rpm和/usr/src/redhat/SRPMS/nginx-0.8-35.src.rpm 兩個文件。

總結(jié):rpm包如何制作之個人經(jīng)驗

一 RPM介紹

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

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

二 RPM包分類

我個人認為rpm分為兩大類,

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

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

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

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

三 RPM包制作介紹

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

這里我想說說RPM包工作的原理,這將有助于全面的了解RPM包管理系統(tǒng)的知識。

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

為一個普通的源碼打RPM包,需要下面一些操作,首先需要對項目的Makefile作必要的改造以支持RPM打包操作(實際上此操作不是絕對的,SPEC文檔和Makefile的是協(xié)調(diào)統(tǒng)一工作的,只要他們之間配合好了其他都無所謂,我們一般只是推薦大家盡量按行業(yè)標(biāo)準(zhǔn)規(guī)范操作而已);其次是針對當(dāng)前項目撰寫SPEC文檔,SPEC文檔包括了RPM打包過程的操作內(nèi)容和新生成的RPM包的基本信息等,它的作用對象是打包程序rpmbuild。

四 RPM包制作過程

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

fedora系統(tǒng)下使用如下命令安裝rpmbuild

#yum install rpmbuild

rpmbuild的工作目錄如下,

~/rpmbuild

~/rpmbuild/SOURCES

~/rpmbuild/SPECS

~/rpmbuild/BUILD

~/rpmbuild/RPMS

~/rpmbuild/RPMS/i386

~/rpmbuild/SRPMS

如果你的用戶目錄主目錄下沒有類似目錄結(jié)構(gòu),你可以通過一個工具軟件來自動配置和生成,如下。

#yum installrpmdevtools

下了運行自動配置命令自動生成如上目錄,并配置一些必要操作。

#rpmdev-setuptree

rpmdev-setuptree命令默認將再當(dāng)前用戶主目錄下創(chuàng)建一個RPM構(gòu)建根目錄結(jié)構(gòu),

如果需要改變次默認位置,可以修改配置文件:~/.rpmmacros中變量_topdir對應(yīng)的值即可。

一般rpmbuild會在當(dāng)前用戶的主目錄下自動建立如上目錄結(jié)構(gòu),如果在你對應(yīng)用戶的構(gòu)建目錄中沒有自動建立如上目錄,你可以通過手動方式建立。上面目錄的使用是這樣分配的,SOURCES放置打包資源,包括源碼打包文件和補丁文件等;SPECS目錄放置SPEC文檔;BUILD打包過程中的工作目錄;RPMS目錄存放生成的二進制包,RPM包根據(jù)硬件平臺不同分類,i386表示生成i386結(jié)構(gòu)的包將存放在該目錄下;SRPMS目錄存放生成的源碼包。

2 撰寫SPEC文檔

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

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

-----------------------------------------------------------------------------

#軟件包簡要介紹

Summary: hellorpm is atest program。

#軟件包的名字

Name: hellorpm      

#軟件包的主版本號          

Version:2.2.6        

#軟件包的次版本號            

Release: 1  

#源代碼包,默認將在上面提到的SOURCES目錄中尋找                      

Source0:%{name}-%{version}.tar.gz  

#授權(quán)協(xié)議

License: GPL              

#定義臨時構(gòu)建目錄,這個地址將作為臨時安裝目錄在后面引用

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

#軟件分類

Group:Development/Tools

#軟件包的內(nèi)容介紹            

%description                        

The hellorpm programis a test.

#表示預(yù)操作字段,后面的命令將在源碼代碼BUILD前執(zhí)行

%prep                    

#構(gòu)建BUILD環(huán)境,將解壓源碼壓縮包到BUILD目錄

%setup-q      

#BUILD字段,將通過直接調(diào)用源碼目錄中自動構(gòu)建工具完成源碼編譯操作        

%build      

#調(diào)用源碼目錄中的configure命令          

./configure      

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

make          

#安裝字段        

%install    

#調(diào)用源碼中安裝執(zhí)行腳本            

makeDESTDIR=$RPM_BUILD_ROOT install

#文件說明字段,聲明多余或者缺少都將可能出錯

%files            

#設(shè)置文件權(quán)限屬性      

%defattr(-,root,root)    

#聲明/usr/local/bin/hellorpm將出現(xiàn)在軟件包中    

/usr/local/bin/hellorpm    

#聲明并設(shè)置文件屬性  

%doc%attr(0444,root,root) /usr/local/man/man1/hellorpm.1

#同上,聲明文檔文件

%docREADME  

-------------------------------------------------------------------------------

這個文檔需要說明的一點:

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

上面BuildRoot變量表示的是源碼的臨時按照目錄,rpmbuild就是通過次目錄獲得將要按照到系統(tǒng)中的所有文件,而在SPEC文檔后面make install 命令中的參數(shù)DESTDIR=$RPM_BUILD_ROOT即是對該參數(shù)的引用,這個參數(shù)將傳給Makefile文件一告訴自動構(gòu)建工具應(yīng)該安裝文件那里(實際上我再前文提到過的Makefile需要作一些改造以適應(yīng)RPM的構(gòu)建就包括此操作,你的Makefile文件中至少要知道在RPM構(gòu)建過程中引用此參數(shù)的值去控制安裝操作的目標(biāo))。

如上一個簡單的SPEC文檔撰寫完成,下面把一個名為hellorpm-2.2.6.tar.gz的源碼壓縮文件放到

rpmbuild根目錄下的SOURCES目錄下(注,確保此歸檔文件解壓后的目錄為hellorpm-2.2.6,否則會有問題)。

到此一個完整的rpm打包環(huán)境已經(jīng)構(gòu)建完成,下面我們就可以開始構(gòu)建二進制和源代碼RPM包。

3 構(gòu)建RPM包

構(gòu)建RPM包是有命令rpmbuild在SPEC的指導(dǎo)下完成。

開始構(gòu)建操作,首先進入到當(dāng)前用戶的rpmbuild根目錄(即上面提到的目錄環(huán)境)。

#cd ~/rpmbuild/

執(zhí)行如何命令,-ba表示build all,即生成包括二進制包和源代碼包的所有RPM包,下來如果正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應(yīng)的RPM包。

#rpmbuild -baSPECS/hellorpm.spec

這里僅僅介紹了一個最簡單軟件的最簡單的RPM的打包操作過程,諸如帶有共享文件的需要進行復(fù)雜配置的具有復(fù)雜依賴關(guān)系的等等的項目的打包以及后期的維護,包括補丁的制作我將在下來的時間完成補充更新,今天時間不早了,該休息了!

注:費了大半夜的功夫,搞出這么個令人不滿意的文檔,我思考著,這樣做有多少意義呢?不敢重復(fù)發(fā)明輪子的,站到巨人的肩膀你才能看得更遠,是這樣嗎?是不是下周開始立個計劃,每周至少翻譯三篇fedora官網(wǎng)的文檔給自己練練手。

標(biāo)簽:臨沂 烏蘭察布 南昌 北海 撫州 邢臺 防城港 韶關(guān)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《CentOS系統(tǒng)下軟件包的制作方法和過程詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266