如何理解Linux下軟件包的安裝與管理

本篇內(nèi)容主要講解“如何理解Linux下軟件包的安裝與管理”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何理解Linux下軟件包的安裝與管理”吧!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括興城網(wǎng)站建設(shè)、興城網(wǎng)站制作、興城網(wǎng)頁(yè)制作以及興城網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,興城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到興城省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

先來(lái)看看Linux軟件擴(kuò)展名。軟件后綴為.rpm最初是Red Hat Linux提供的一種包封裝格式,現(xiàn)在許多Linux發(fā)行版本都使用;后綴為.deb是Debain Linux提供的一種包封裝格式;后綴為.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系統(tǒng)打包工具tar打包的;后綴為.bin的一般是一些商業(yè)軟件。通過(guò)擴(kuò)展名可以了解軟件格式,進(jìn)而了解軟件安裝。

一 源碼安裝方式

由于linux操作系統(tǒng)開(kāi)放源代碼,因而在其上安裝的軟件大部分也都是開(kāi)源軟件,例如apache、tomcat、php等軟件。開(kāi)源軟件基本都提供源碼下載,源碼安裝的方式;源碼安裝的好處是用戶可以自己定制軟件功能,安裝需要的模塊,不需要的功能可以不用安裝,此外,用戶還可以自己選擇安裝路徑,方便管理,卸載軟件也很方便,只需刪除對(duì)應(yīng)的安裝目錄即可。沒(méi)有windows所謂的注冊(cè)表之說(shuō)。

源碼安裝軟件一般有以下幾個(gè)步驟組成:下載解壓源碼、分析安裝平臺(tái)環(huán)境(ifconfigure)、編譯安裝軟件(make,make install)。下面我們分別介紹。

1.1 下載解壓源碼

linux下軟件的源碼一般都是C或者C++語(yǔ)言編寫的,并且都會(huì)在軟件的官方網(wǎng)站上提供源碼包下載,例如apache開(kāi)源項(xiàng)目的官方網(wǎng)站為http://www.apache.org,此外在網(wǎng)上的很多開(kāi)源社區(qū)一般也提供一些常用軟件的源碼下載,源碼都打包成壓縮文件,常見(jiàn)的源碼打包壓縮格式有“.tar.gz”、“.tar.baz2”等。我們可以從網(wǎng)站上首先下載源碼文件,然后在傳到所在的linux系統(tǒng)下,如果你的linux系統(tǒng)處于聯(lián)網(wǎng)狀態(tài)下,也可以直接在系統(tǒng)內(nèi)通過(guò)wget之類的下載命令將源碼包直接下載到linux系統(tǒng)下。

下載完成,把相應(yīng)的軟件解包即可,針對(duì)下載軟件包的不同,使用不同的方法進(jìn)行解壓,解壓完畢后進(jìn)入解壓生成的目錄中,在這個(gè)目錄下,一般都存在一個(gè)REDAME文件,這個(gè)文本文件非常重要,它詳細(xì)的介紹了這個(gè)軟件所能完成的功能、授權(quán)許可、安裝需求、安裝注意事項(xiàng)、安裝方式等等,由于linux各個(gè)版本的差異,以及安裝環(huán)境的不同,軟件的安裝方式也不盡相同,所以在安裝軟件前,一定要事先閱讀這個(gè)README文件,確保安裝的正確性。

 1.2 分析安裝平臺(tái)環(huán)境

在軟件包解壓完畢之后,我們進(jìn)入源碼目錄,一般都會(huì)存在configure和README這么兩個(gè)文件,README就是上面我們講到的,是對(duì)軟件的介紹和安裝說(shuō)明;linux下軟件的安裝受到操作系統(tǒng)安裝環(huán)境的影響,比如某些軟件在安裝或者運(yùn)行過(guò)程中需要調(diào)用操作系統(tǒng)本身的庫(kù)文件,或者需要運(yùn)行系統(tǒng)的某個(gè)工具等等,但是系統(tǒng)中不存在這個(gè)庫(kù)文件或者這個(gè)工具沒(méi)有安裝,那么安裝或者運(yùn)行軟件就會(huì)失敗。

為了避免這個(gè)問(wèn)題的出現(xiàn),在安裝軟件的時(shí)候就需要分析操作系統(tǒng)環(huán)境,檢測(cè)當(dāng)前系統(tǒng)是否擁有安裝軟件所需的所有文件和工具,如果系統(tǒng)缺少某個(gè)文件,就給出提示,直到滿足軟件的所有需求為止。這個(gè)就是configure文件的功能,configure文件一般是個(gè)可執(zhí)行文件,可以在當(dāng)前目錄下直接輸入“./configure”進(jìn)行軟件安裝的環(huán)境測(cè)試,如果提示缺少某些安裝包,就需要進(jìn)行安裝,直到測(cè)試通過(guò)。通常的,源碼安裝都需要GCC或者CC編譯器,這些編譯器一般在安裝系統(tǒng)時(shí)定制安裝包中的開(kāi)發(fā)工具選項(xiàng)下,其實(shí)這也是我們?cè)诘诙掳惭blinux系統(tǒng)中要求選擇開(kāi)發(fā)工具包的原因所在。

此外,在執(zhí)行configure分析軟件需求時(shí),還可以在“./configure”后面加上軟件的安裝路徑以及安裝所需的模塊等等一些選項(xiàng),來(lái)定制用戶需要的軟件功能。

 1.3 編譯安裝軟件

在驗(yàn)證軟件安裝環(huán)境后,正式進(jìn)入軟件的編譯步驟,在進(jìn)行編譯前,首先了解下關(guān)于編譯的一些基礎(chǔ)知識(shí)。

在linux系統(tǒng)下,make是我們經(jīng)常用到的編譯命令,無(wú)論是安裝軟件還是項(xiàng)目開(kāi)發(fā),都會(huì)經(jīng)常用到編譯安裝命令,也就是make和make install,對(duì)于一個(gè)包含很多源文件的應(yīng)用程序,使用make和makefile工具可以簡(jiǎn)單快速的解決各個(gè)源文件之間復(fù)雜的依賴關(guān)系,同時(shí),make工具還可以自動(dòng)完成所有源碼文件的編譯工作,并且可以只對(duì)上次編譯后修改過(guò)的文件進(jìn)行增量編譯,因此,熟練掌握了make和makefile工具之后,源碼安裝軟件就變的像windows下安裝軟件一樣簡(jiǎn)單。

 Makefile文件

make工具最主要的功能就是通過(guò)makefile文件來(lái)實(shí)現(xiàn)的,makefile文件是按照某種語(yǔ)法來(lái)進(jìn)行編寫的,文件中定義了各個(gè)源文件之間的依賴關(guān)系,并說(shuō)明了如何編譯源文件并生成可執(zhí)行文件,它通過(guò)描述各個(gè)源程序之間的關(guān)系讓make工具自動(dòng)完成編譯工作。

在linux系統(tǒng)下,習(xí)慣用Makefile替代makefile文件,我們?cè)趫?zhí)行configure通過(guò)后,就會(huì)在當(dāng)前目錄下生成這個(gè)文件,一般情況下在命令行輸入make時(shí),make命令會(huì)默認(rèn)去尋找當(dāng)前目錄下的Makefile文件,如果我們用其它文件作為makefile,就要在make命令選項(xiàng)后指定makefile文件,例如我們?cè)O(shè)定編譯規(guī)則文件為make_file,就需要使用以下命令指定:

[root@WEBServer ~]#make -f make_file

下面我們通過(guò)舉例了解下Makefile的編寫原則和內(nèi)容。

例如有一個(gè)test程序,有三個(gè)源文件file1.c、file2.c、file3.c以及庫(kù)文件LS編譯生成,這三個(gè)源文件還分別包含了自己的頭文件1.h、2.h、3.h。通常,C編譯器將會(huì)輸出三個(gè)目標(biāo)文件file1.o、file2.o、file3.o。假定file1.c和file3.c都要聲明用到一個(gè)apcs的文件,但是file2.c不用,也就是在file1.c和file3.c文件中都有類似“#include “apcs””的聲明。

下面這段代碼就是對(duì)test程序的描述:

1:#It is a example for describing makefile2:test: file1.o file2.o file3.o3:cc file1.o file2.o file3.o -LS -o test

4:file1.o: file1.c 1.h apcs

5:gcc -c file1.c

6:file3.o: file3.c 3.h apcs

7:gcc -c file3.c

8:file2.o: file2.c c.h

9:gcc -c file2.c

這個(gè)描述文檔其實(shí)就是一個(gè)makefile文件,第一行為注釋行,第二行指定test程序有file1.o、file2.o、file3.o鏈接生成,第三行描述了如何從test所依賴的文件建立可執(zhí)行文件,接下來(lái)的第四、六、八行定義了三個(gè)目標(biāo)文件和它們依賴的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定義了如何從目標(biāo)依賴的文件生成可執(zhí)行文件。

在了解Makefile文件結(jié)構(gòu)后,我們就可以控制編譯的選項(xiàng),定制自己所需的軟件功能。

接下來(lái),我們只需在命令行輸入make命令,即可進(jìn)入編譯階段,根據(jù)軟件源程序的大小和系統(tǒng)的硬件配置,編譯時(shí)間不定,編譯完畢,會(huì)在當(dāng)前目錄以及子目錄下生成相應(yīng)的可執(zhí)行文件,接下來(lái)就進(jìn)入最后的安裝軟件階段,在命令行輸入make install命令,開(kāi)始安裝軟件,安裝進(jìn)程會(huì)首先創(chuàng)建安裝目錄,如果我們沒(méi)有指定安裝的目錄,安裝程序默認(rèn)會(huì)安裝在系統(tǒng)的/usr/local目錄下創(chuàng)建安裝目錄,然后將相應(yīng)的文件和可執(zhí)行程序從源碼目錄拷貝到安裝目錄下,這樣安裝就完畢了。

1.4 源碼安裝Apache Http server

下面我們通過(guò)源碼安裝apache,實(shí)例講解linux下源碼的安裝方式。

1. 下載解壓apache源碼

[root@WEBServer~]#mkdir /apache  #在根目錄下創(chuàng)建一個(gè)apache目錄[root@WEBServer~]#cd /apache  #切換到apache目錄[root@WEBServer apache]#wget \  #下載apache源碼>http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.bz2[root@WEBServer apache]#tar -jxvf httpd-2.2.9.tar.bz2 #解壓apache源碼[root@WEBServer apache]#ls  #顯示解壓結(jié)果httpd-2.2.9   httpd-2.2.9.tar.bz2

  2. 測(cè)試安裝環(huán)境

[root@WEBServer apache]#cd httpd-2.2.9 #切換到httpd-2.2.9目錄下[root@WEBServer httpd-2.2.9]#./configure  --prefix=/opt/apache2.2.9 \>--enable-so \>--enable-mods-shared=most \

>--enable-proxy-balancer=shared \

>--enable-proxy-http=shared \

>--enable-proxy-ajp \

>--enable-rewrite

注意:上面我們指定apache的安裝目錄為/opt/apache2.2.9,同時(shí)指定需要編譯的apache模塊。

下面分別介紹這些模塊代表的含義,更詳細(xì)的請(qǐng)參看apache文檔。

l --enable-so選項(xiàng):表示讓 Apache 可以支持DSO模式,這里采用的是 Apache2.0以后的語(yǔ)法。如果你的Apache 是1.3版本,應(yīng)改為“--enable-module=so”。

l --enable-mods-shared=most選項(xiàng):表示動(dòng)態(tài)編譯大部分常用的模塊,當(dāng)然,也可以有選擇的加載一些模塊,most意思是只包含通常用的模塊,并且以動(dòng)態(tài)加載模式加載。如果用的是 Apache1.3, 改為“--enable-shared=max”即可。

l --enable-proxy-balancer=shared選項(xiàng):表示讓apache支持負(fù)載均衡功能,即動(dòng)態(tài)的編譯apache的負(fù)載均衡模塊。

l --enable-proxy-http=shared選項(xiàng):表示動(dòng)態(tài)編譯apache的http代理模塊。

l --enable-proxy-ajp選項(xiàng):表示動(dòng)態(tài)編譯apache的proxy-ajp模塊。

l --enable-rewrite選項(xiàng):讓apache支持地址重寫功能,即動(dòng)態(tài)編譯apache的rewrite模塊。

3.編譯安裝軟件

[root@WEBServer httpd-2.2.9]#make

[root@WEBServer httpd-2.2.9]#make install安裝完畢,apache被安裝到/opt/apache2.2.9下,接下來(lái)我們就可以使用apache軟件了。

二 RPM包方式安裝

2.1 RPM包管理工具介紹

RPM是Red Hat Package Manager的縮寫,本意就是Redhat軟件包管理,是最先由Redhat公司開(kāi)發(fā)出來(lái)的linux下軟件包管理工具,由于這種軟件管理方式非常方便,逐漸被其它linux發(fā)行商所借用,現(xiàn)在已經(jīng)成為linux平臺(tái)下通用的軟件包管理方式,例如Fedora 、Redhat、suse、Mandrake等主流linux發(fā)行版本都默認(rèn)采用了這種軟件包管理方式。

RPM包管理類似于windows下的“添加/刪除程序”但是功能卻比“添加/刪除程序”強(qiáng)大很多。在Linux的系統(tǒng)安裝光盤中,有很多以“.rpm”結(jié)尾的軟件包,這些包文件就是我們所說(shuō)的RPM文件。每個(gè)RPM文件中包含了已經(jīng)編譯好的二進(jìn)制可執(zhí)行文件,其實(shí)就是將軟件源碼文件進(jìn)行編譯安裝,然后進(jìn)行封裝,就成了RPM文件,類似與windows安裝包中的“.exe”文件。此外RPM文件中還包含了運(yùn)行可執(zhí)行文件所需的其它文件,這點(diǎn)也和windows下的軟件包類似,windows程序的安裝包中,除了“exe”可執(zhí)行文件,還有其它依賴運(yùn)行的文件。

RPM包管理方式的優(yōu)點(diǎn)是:安裝簡(jiǎn)單方便,因?yàn)檐浖呀?jīng)編譯完成打包完畢,安裝只是個(gè)驗(yàn)證環(huán)境和解壓的過(guò)程。此外通過(guò)RPM方式安裝的軟件,RPM工具都會(huì)記錄軟件的安裝信息,這樣方便了軟件日后的查詢,升級(jí)和卸載。

RPM包管理方式的缺點(diǎn)是對(duì)操作系統(tǒng)環(huán)境的依賴很大,它要求RPM包的安裝環(huán)境必須與RPM包封裝時(shí)的環(huán)境相一致或相當(dāng)。還需要滿足安裝時(shí)與系統(tǒng)某些軟件包的依賴關(guān)系,例如需要安裝A軟件,但是A軟件需要系統(tǒng)有B和C軟件的支持,那么就必須先安裝B和C軟件,然后才能安裝A軟件。這也是我們?cè)谟肦PM包方式安裝軟件需要特別注意的地方。

 2.2 RPM包種類和命令

RPM包的封裝格式一般有兩種,分別是RPM和SRPM,SRPM包也是一種RPM,但是它包含了編譯時(shí)的源碼文件和一些編譯指定的參數(shù)文件,因而在使用的時(shí)候需要重新進(jìn)行編譯,通常SRPM對(duì)應(yīng)的RPM文件類似與“xxxxxxxx.src.rpm”格式。

下面我們講述一下兩種RPM包對(duì)應(yīng)的文件名含義:

例如一個(gè)rpm文件:nxserver-2.1.0-22.i386.rpm其中“nxserver”表示軟件的名稱,“2.1.0”表示軟件的版本號(hào),“22”表示軟件更新發(fā)行的次數(shù),“i386”表示適合硬件的平臺(tái),最后的“.rpm”是rpm軟件包的標(biāo)識(shí)。

一般的RPM封裝包的命名格式都有這五個(gè)部分組成,由于SRPM包是需要編譯才能使用的,因此沒(méi)有上面顯示項(xiàng)中對(duì)應(yīng)的平臺(tái)選項(xiàng),其它與RPM包命令格式完全一樣。

對(duì)于RPM包的五個(gè)組成部分,我們下面介紹一些它們更詳細(xì)的含義和異同:

軟件名稱:是對(duì)軟件包的標(biāo)識(shí);

軟件的版本號(hào):每個(gè)軟件都有自己的版本號(hào),版本號(hào)可以說(shuō)明軟件從開(kāi)始到現(xiàn)在發(fā)行了多少了,軟件是否是新的等等。

軟件更新發(fā)行次數(shù):由于一個(gè)版本的軟件在發(fā)行后可能出現(xiàn)bug或者漏洞,那么就需要修復(fù)和重新封裝,每修復(fù)封裝一次,軟件的名稱就要更新一次。

適合的硬件平臺(tái):由于RPM包要在各種不同的linux硬件平臺(tái)上使用,但是由于每個(gè)不同的硬件平臺(tái)RPM打包封裝的參數(shù)也各不相同,這樣就出現(xiàn)了針對(duì)i386、i686、x86_64、noarch等的平臺(tái)名稱標(biāo)識(shí)。

i386指這個(gè)軟件包適用于intel 80386以后的x86架構(gòu)的計(jì)算機(jī)。

i686指這個(gè)軟件包適用于intel 80686以后(奔騰pro以上)的x86架構(gòu)的計(jì)算機(jī)。

x86_64指這個(gè)軟件包適用于x86架構(gòu)64為處理器的計(jì)算機(jī)。

noarch表示這個(gè)軟件包與硬件構(gòu)架無(wú)關(guān),可以通用。

需要注意的是:i386軟件包可以在任意x86平臺(tái)下使用,無(wú)論是i686或是x86_64的機(jī)器,相反,i686的軟件包不一定能在i386硬件上面使用,由于i686軟件包一般都是對(duì)cpu進(jìn)行了優(yōu)化,所有具有向后兼容性,但是不具有先前兼容的特性。

RPM軟件包標(biāo)識(shí):RPM軟件包標(biāo)識(shí)用于指明此文件是rpm格式的文件,一般有兩種后綴標(biāo)識(shí),分別是以“.rpm”結(jié)尾和以“.src.rpm”結(jié)尾。

2.3 RPM工具的使用

RPM工具的使用分為安裝、查詢、驗(yàn)證、更新、刪除等操作,下面我們分別介紹。

 1. 安裝軟件包

命令格式:rpm -i [輔助選項(xiàng)] file1.rpm file2.rpm…..fileN.rpm主選項(xiàng)說(shuō)明:

-i:install的意思,就是安裝軟件。也可以使用“--install”。

參數(shù)說(shuō)明:file1.rpm file2.rpm…..filen.rpm是指定將要安裝RPM包的文件名,可以多個(gè)文件一起安裝。

輔助選項(xiàng)說(shuō)明:這里的選項(xiàng)很多,我們只列出常用選項(xiàng),詳細(xì)解釋如下:

l -v:顯示附加信息。

l -h:安裝時(shí)輸出標(biāo)記“#”。

l --test:只對(duì)安裝進(jìn)行測(cè)試,并不實(shí)際安裝。

l --nodeps:不檢查軟件之間的依賴關(guān)系。加入此選項(xiàng)可能會(huì)導(dǎo)致軟件不可用。

l --force:忽略軟件包以及軟件沖突。

l --replacepkgs:強(qiáng)制重新安裝已經(jīng)安裝的軟件包。

l --prefix:將軟件包安裝到由 指定的路徑下。

l --percent:以百分比的形式輸出安裝的進(jìn)度。

l --excludedocs:不安裝軟件包中的說(shuō)明文件l --includedocs:安裝軟件包,包含說(shuō)明文件。

舉例:

(1)我們安裝ipvsadm-1.24-6.i386.rpm,使用下面命令:

[root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm執(zhí)行結(jié)果如下:

warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181Preparing...    ############################ [100%]

1:ipvsadm  ############################[100%]

(2)下面操作顯示了安裝gcc-3.4.4-2.i386.rpm包過(guò)程,在安裝過(guò)程中,出現(xiàn)了安裝包依賴問(wèn)題,我們的處理過(guò)程是這樣的:

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm執(zhí)行結(jié)果如下:

warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60eerror: Failed dependencies:

glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386Suggested resolutions:

glibc-devel-2.3.4-2.13.i386.rpm

這里顯示在安裝gcc編譯器之前需要安裝glibc-devel包的支持,這個(gè)包詳細(xì)的版本是glibc-devel-2.3.4-2.13.i386.rpm,因此,我們需要先安裝這個(gè)軟件包。

[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm執(zhí)行結(jié)果如下:

warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60eerror: Failed dependencies:

glibc-headers is needed by glibc-devel-2.3.4-2.13.i386glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386Suggested resolutions:

glibc-headers-2.3.4-2.13.i386.rpm

這里又出現(xiàn)依賴關(guān)系,上面的錯(cuò)誤提示是說(shuō)安裝glibc-devel包需要先安裝glibc-headers軟件包,并且給出了安裝建議版本,于是我們就先安裝glibc-headers包。

[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm執(zhí)行結(jié)果如下:

warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60eerror: Failed dependencies:

kernel-headers is needed by glibc-headers-2.3.4-2.13.i386kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386Suggested resolutions:

glibc-kernheaders-2.4-9.1.98.EL.i386.rpm

依然報(bào)錯(cuò),信息與上面相同,意思是說(shuō)在安裝kernel-headers包之前,需要glibc-kernheaders包的支持,并且給出了建議版本,我們先安裝glibc-kernheaders包。

[root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm執(zhí)行結(jié)果如下:

warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing... ########################### [100%]

1:glibc-kernheaders ###################### [100%]

這次依賴終于解除了,按照相反的順序開(kāi)始安裝,下面顯示安裝步驟。

[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpmwarning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing...  ########################### [100%]

1:glibc-headers  ######################## [100%]

[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpmwarning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing... ########################### [100%]

1:glibc-devel  ######################## [100%]

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpmwarning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing...  ############################## [100%]

1:gcc      ########################### [100%]

(3) 在上例中,如果我們?cè)诎惭bgcc第一步加入“--nodeps”參數(shù),gcc由于不檢查依賴關(guān)系,即可安裝成功:

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm –nodeps執(zhí)行結(jié)果如下:

warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing...  ############################## [100%]

1:gcc      ########################### [100%]

這里加入了忽略依賴關(guān)系的參數(shù),雖然可以安裝成功,但是我們不建議這么做,因?yàn)檫@樣安裝的軟件很有可能是不可用的,或者使用過(guò)程中出現(xiàn)問(wèn)題,除非我們知道忽略依賴關(guān)系對(duì)軟件本身沒(méi)有影響的話,才可使用此參數(shù)。

(4)安裝xxxxxx.src.rpm的方法,這里我們以my-package.src.rpm名稱為例,在redhat linux i386平臺(tái)下進(jìn)行介紹,常用的有兩種方法,操作步驟如下:

方法一:

1)執(zhí)行rpm -i my-package.src.rpm

2) cd /usr/src/redhat/SPECS

3) rpmbuild -bp my-package.specs 一個(gè)和軟件包同名的specs文件。

4) cd /usr/src/redhat/BUILD/my-package/ 一個(gè)軟件包同名的目錄5) ./configure 這一步和編譯普通的源碼軟件一樣,可以加上參數(shù)6) make7) make install

方法二:

1)執(zhí)行rpm -i my-package.src.rpm

2)cd /usr/src/redhat/SPECS

前兩步和方法一相同

3)rpmbuild -bb my-package.specs 一個(gè)和軟件包同名的specs文件。

此時(shí),在/usr/src/redhat/RPM/i386/ (這里的路徑根據(jù)具體包的不同,也可能是i686、noarch等等)在這個(gè)目錄下,有一個(gè)或者兩個(gè)新的rpm包,這個(gè)是編譯好的二進(jìn)制文件。

4)執(zhí)行rpm -i new-package.rpm,安裝完成。

例如:利用xxxx.src.rpm格式的包安裝rsh軟件,操作方法如下:

[root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm[root@localhost ~]#cd /usr/src/redhat/SPECS/rsh.spec[root@localhost SPECS]#rpmbuild  -bb rsh.spec[root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/rsh-0.17-25.3.i386.rpmrsh-debuginfo-0.17-25.3.i386.rpm

rsh-server-0.17-25.3.i386.rpm

[root@localhost i386]#rpm -ivh rsh-*

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

1:rsh-server  ########################## [ 33%]

2:rsh   ############################## [ 67%]

3:rsh-debuginfo  ######################## [100%]

[root@localhost i386]#

2. 查詢軟件包

命令格式:rpm -q [輔助選項(xiàng)] package1……packageN主選項(xiàng)說(shuō)明:

-q:query的意思,也可以使用“--query”。

參數(shù)說(shuō)明:package1……packageN為已經(jīng)安裝的軟件包名稱。

輔助選項(xiàng)說(shuō)明:

l -f:查詢操作系統(tǒng)中某個(gè)文件屬于哪個(gè)對(duì)應(yīng)的rpm軟件包。

例如:

[root@localhost ~]# rpm -qf /bin/bash

bash-3.0-19.2

l -p:查詢以“.rpm”為后綴的軟件包安裝后對(duì)應(yīng)的包名稱。

例如:

[root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpmgcc-3.4.4-2從這里的查詢可以得知,“gcc-3.4.4-2.i386.rpm”安裝到系統(tǒng)以后,對(duì)應(yīng)的包名為gcc-3.4.4-2。

l -l:顯示軟件包中的所有文件列表。此選項(xiàng)后面跟軟件包安裝后對(duì)應(yīng)的包名,切記不是以“.rpm”為后綴的rpm包。

例如:

[root@server ~]# rpm –ql gcc-3.4.4-2

/usr/bin/c89

/usr/bin/c99

/usr/bin/cc

/usr/bin/gcc

/usr/bin/gcov

………(以下省略)………

l -i:顯示軟件包的概要信息,例如軟件名稱、版本、適應(yīng)平臺(tái)、大小等等。此選項(xiàng)后面跟完整的包名,切忌不是以“.rpm”為后綴的rpm包。

例如:在得到一個(gè)軟件,安裝之前一般都需要看下軟件包有什么內(nèi)容,可以使用以下命令:

[root@server ~]# rpm -qi gcc-3.4.4-2.i386或者使用[root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm這里由于用到了“-p”選項(xiàng),首先顯示出了安裝后的軟件包名,所以“-i”選項(xiàng)后可跟“.rpm”結(jié)尾的軟件包。

l -g:查詢系統(tǒng)有哪些軟件包屬于指定的類別,RPM工具根據(jù)軟件功能的不同,將軟件分了很多種類,分別如下,括弧內(nèi)為注釋說(shuō)明:

Amusements/Games (娛樂(lè)/游戲)

Amusements/Graphics(娛樂(lè)/圖形)

Applications/Archiving (應(yīng)用/檔案)

Applications/Communications (應(yīng)用/通訊)

Applications/Databases (應(yīng)用/數(shù)據(jù)庫(kù))

Applications/Editors (應(yīng)用/編輯器)

Applications/Emulators (應(yīng)用/仿真器)

Applications/Engineering (應(yīng)用/工程)

Applications/File (應(yīng)用/文件)

Applications/Internet (應(yīng)用/因特網(wǎng))

Applications/Multimedia (應(yīng)用/多媒體)

Applications/Productivity (應(yīng)用/產(chǎn)品)

Applications/Publishing (應(yīng)用/印刷)

Applications/System (應(yīng)用/系統(tǒng))

Applications/Text (應(yīng)用/文本)

Development/Debuggers (開(kāi)發(fā)/調(diào)試器)

Development/Languages (開(kāi)發(fā)/語(yǔ)言)

Development/Libraries (開(kāi)發(fā)/函數(shù)庫(kù))

Development/System (開(kāi)發(fā)/系統(tǒng))

Development/Tools (開(kāi)發(fā)/工具)

Documentation (說(shuō)明文檔)

System Environment/Base (系統(tǒng)環(huán)境/基礎(chǔ))

System Environment/Daemons (系統(tǒng)環(huán)境/守護(hù))System Environment/Kernel (系統(tǒng)環(huán)境/內(nèi)核)System Environment/Libraries (系統(tǒng)環(huán)境/函數(shù)庫(kù))System Environment/Shells (系統(tǒng)環(huán)境/接口)User Interface/Desktops (用戶界面/桌面)User Interface/X (用戶界面/X窗口)

User Interface/X Hardware Support (用戶界面/X硬件支持)例如:查看當(dāng)前系統(tǒng)屬于“開(kāi)發(fā)/調(diào)試器”類別的包有多少,使用以下命令:

[root@server ~]# rpm -qg "Development/Debuggers"lsof-4.72-1.1crash-4.0-2

sysreport-1.3.15-5

ltrace-0.3.36-2.EL4

strace-4.5.13-0.EL4.1

valgrind-2.2.0-5.EL4

valgrind-callgrind-0.9.9-1

gdb-6.3.0.0-1.63

pstack-1.2-6

l -d:顯示軟件包中的說(shuō)明文件列表,RPM將軟件包中的文件分為三類,一類是配置文件,一類是說(shuō)明文件,一類是可執(zhí)行文件。后面跟完整的包名,切忌不是以“.rpm”為后綴的rpm包。

例如:查看file軟件包中的說(shuō)明文件,使用以下命令:

[root@server108 cicro]# rpm -qd  file-4.10-2/usr/share/doc/file-4.10/LEGAL.NOTICE/usr/share/doc/file-4.10/README

/usr/share/man/man1/file.1.gz

/usr/share/man/man3/libmagic.3.gz

/usr/share/man/man5/magic.5.gz

l -s:與“-l“選項(xiàng)類似,除了顯示軟件包中的所有文件列表信息,而且還顯示每個(gè)文件的狀態(tài)。RPM已安裝的軟件包中各個(gè)文件擁有四種狀態(tài),分別是normal(正常狀態(tài),表示文件沒(méi)有被其它軟件包修改過(guò))、not installed(未安裝狀態(tài),表示文件沒(méi)有安裝)、replaced(已替換狀態(tài),表明此文件已經(jīng)被其它軟件包修改替換過(guò)了)、net shared(網(wǎng)絡(luò)共享狀態(tài),表示此文件處于網(wǎng)絡(luò)共享狀態(tài))。

例如:查看ipvsadm-1.24-6包中每個(gè)文件的狀態(tài),使用以下命令:

[root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm[root@localhost ~]# rpm -qs ipvsadm-1.24-6normal        /etc/rc.d/init.d/ipvsadmnormal        /sbin/ipvsadm

normal        /sbin/ipvsadm-restore

normal        /sbin/ipvsadm-save

not installed /usr/share/doc/ipvsadm-1.24not installed /usr/share/doc/ipvsadm-1.24/READMEnot installed /usr/share/man/man8/ipvsadm-restore.8.gznot installed /usr/share/man/man8/ipvsadm-save.8.gznot installed /usr/share/man/man8/ipvsadm.8.gz從上面可以看到,我們?cè)诎惭bipvsadm-1.24-6.i386.rpm的時(shí)候指定不安裝說(shuō)明文檔,然后通過(guò)“-s”命令查看文件狀態(tài)時(shí),軟件包的說(shuō)明文檔狀態(tài)均為“not installed”。

l -R (或--requires):顯示軟件包所需的功能,所謂功能,可以是軟件包標(biāo)識(shí),也可以是共享動(dòng)態(tài)庫(kù)文件等等,軟件包的依賴關(guān)系就是依靠功能來(lái)實(shí)現(xiàn)的,如果所需的功能不存在,則依賴關(guān)系一定得不到滿足,軟件安裝就會(huì)失敗。

l --provides:顯示軟件包提供的功能,這個(gè)功能可以是動(dòng)態(tài)庫(kù)文件,也可以是虛擬軟件的包名等等。

例如:查看nxclient-2.1.0-17.i386.rpm提供的功能,使用以下命令:

[root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpmnxclient = 2.1.0-17可以看到這個(gè)軟件提供了nxclient的功能。

3. 驗(yàn)證軟件包

驗(yàn)證已經(jīng)安裝的軟件包

校驗(yàn)軟件包比較的是某軟件包安裝的文件和原始軟件包中的同一文件的信息是否一致。它校驗(yàn)每個(gè)文件的大小、權(quán)限、MD5 值、類型、所有者、以及組群。

命令格式:rpm -V [輔助選項(xiàng)] package1……packageN主選項(xiàng)說(shuō)明:

-V:verify的意思,也可以用“--verify”代替。此參數(shù)主要校驗(yàn)已經(jīng)安裝的軟件包內(nèi)的文件和最初安裝時(shí)是否一致。

參數(shù)說(shuō)明:package1……packageN 表示需要校驗(yàn)的且已經(jīng)安裝的軟件包名。

輔助選項(xiàng)說(shuō)明:

l -p:驗(yàn)證軟件包文件

例如:下面是驗(yàn)證rsh包的安裝狀態(tài),操作過(guò)程如下:

[root@localhost ~]# rpm -V rsh-0.17-25.3

package rsh-0.17-25.3 is not installed

[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpmwarning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6emissing     /usr/bin/rcpmissing     /usr/bin/rexec

missing     /usr/bin/rlogin

missing     /usr/bin/rsh

missing   d /usr/share/man/man1/rcp.1.gz

missing   d /usr/share/man/man1/rexec.1.gzmissing   d /usr/share/man/man1/rlogin.1.gzmissing   d /usr/share/man/man1/rsh.1.gz[root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpmwarning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6ePreparing...   ########################### [100%]

1:rsh     ######################## [100%]

[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpmwarning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e[root@localhost ~]# rpm -V rsh-0.17-25.3#上面操作中,我們首先驗(yàn)證rsh,可以知道rsh沒(méi)有在系統(tǒng)中安裝,接著我們安裝了rsh軟件包,再次查看rsh包狀態(tài)時(shí),沒(méi)有任何輸出了,表示軟件包文件全部正常。

l -f:校驗(yàn)文件在所屬的軟件包的狀態(tài),此選項(xiàng)后面跟相應(yīng)的文件名。

例如:檢查MySQLclient包中各個(gè)文件的狀態(tài),我們的操作如下:

[root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1/etc/ld.so.conf.d/mysqlclient10-i386.conf/usr/lib/mysql/libmysqlclient.so.10/usr/lib/mysql/libmysqlclient.so.10.0.0

/usr/lib/mysql/libmysqlclient_r.so.10

/usr/lib/mysql/libmysqlclient_r.so.10.0.0[root@localhost ~]# mv \>/usr/lib/mysql/libmysqlclient.so.10  /usr/lib/mysql/libmysqlclient.so.10.d[root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1missing     /usr/lib/mysql/libmysqlclient_r.so.10[root@localhost ~]# rpm -Vf  /usr/lib/mysql/libmysqlclient_r.so.10missing     /usr/lib/mysql/libmysqlclient_r.so.10#這里我們首先檢查了mysqlclient包中包含的所有文件,然后模擬刪除mysqlclient包中一個(gè)文件,然后查看這個(gè)文件的狀態(tài),可以看到顯示為“missing”,如果我們通過(guò)“-Vf”選項(xiàng)檢查某個(gè)文件,沒(méi)有任何輸出時(shí),表示這個(gè)文件狀態(tài)正常。

l -a:檢驗(yàn)所有的軟件包。

l -g:檢驗(yàn)所有屬于組的軟件包。

驗(yàn)證未安裝的軟件包文件

發(fā)行的RPM格式的軟件包是否值得信任,是否損壞,我們可以通過(guò)RPM提供的選項(xiàng)進(jìn)行驗(yàn)證。RPM軟件包一般使用 Gnu 隱私衛(wèi)士(或稱 GPG)來(lái)簽名,從而幫助使用者肯定下載軟件包的可信任性。

命令格式:rpm -K file1.rpm……fileN.rpm

主選項(xiàng)說(shuō)明:

-K: checksig的意思,也可以用“--checksig”代替。這個(gè)選項(xiàng)用來(lái)檢查 RPM 軟件包文件的md5校驗(yàn)和GPG簽名。

參數(shù)說(shuō)明:file1.rpm……fileN.rpm表示需要校驗(yàn)軟件包名。

例子:如果想要校驗(yàn)?zāi)硞€(gè)軟件包是否被篡改或者是否損壞,可以使用如下命令檢查:

[root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpmnxserver-2.1.0-22.i386.rpm: md5 OK這里的“md5 OK”表示文件在下載中沒(méi)有被損壞或者沒(méi)有被篡改。即這個(gè)文件是安全的。

[root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpmipvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#443e1821)上面的輸出表示這個(gè)軟件沒(méi)有被授權(quán)簽名,在安裝未被linux發(fā)行商授權(quán)的軟件包時(shí),請(qǐng)務(wù)必謹(jǐn)慎,因?yàn)檫@些軟件包內(nèi)可能包含有害的代碼。

4. 更新軟件包

命令格式:rpm -U [輔助選項(xiàng)] file1.rpm……fileN.rpm主選項(xiàng)說(shuō)明:

-U:upgrade的意思,可以使用“--upgrade”代替。

參數(shù)說(shuō)明:file1.rpm……fileN.rpm表示需要升級(jí)的rpm文件包。

輔助選項(xiàng)說(shuō)明:

--oldpackage 表示允許"升級(jí)"到一個(gè)老版本,即軟件版本降級(jí)。

其它選項(xiàng)與安裝RPM軟件包輔助參數(shù)完全相同,這里不再講述。

例子:我們將rsh從rsh-0.17-25.3升級(jí)到rsh-0.17-37.el5,步驟如下:

[root@localhost ~]# rpm  -q rsh

rsh-0.17-25.3

[root@localhost ~]# rpm  -Uvh rsh-0.17-37.el5.i386.rpmwarning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186Preparing... ######################### [100%]

1:rsh    ########################### [100%]

[root@localhost ~]# rpm  -q rsh

rsh-0.17-37.el5

5. 刪除軟件包

命令格式:rpm -e [輔助選項(xiàng)] package1……packageN主選項(xiàng)說(shuō)明:

-e:erase的意思,也可以用“--erase”代替。

參數(shù)說(shuō)明:package1……packageN表示已經(jīng)安裝的軟件包名稱。

輔助選項(xiàng)說(shuō)明:

l --test:只執(zhí)行刪除的測(cè)試。

l --nodeps:不檢查依賴性。

舉例:

(1) 刪除rsh軟件包,使用以下命令:

[root@localhost ~]# rpm  -q rsh

rsh-0.17-37.el5

[root@localhost ~]# rpm  -e rsh-0.17-37.el5[root@localhost ~]# rpm  -q rshpackage rsh is not installed

(2)刪除gcc軟件包,但是存在依賴關(guān)系,操作過(guò)程如下:

[root@server ~]# rpm -e gcc

error: Failed dependencies:

gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386gcc is needed by (installed) systemtap-0.4-0.EL4.i386這里又出現(xiàn)了刪除依賴性了,根據(jù)上面的提示可知,要?jiǎng)h除gcc軟件包,必須刪除與gcc相互依賴的五個(gè)軟件包,這個(gè)操作要非常慎重,除非知道刪除后對(duì)系統(tǒng)沒(méi)有影響,否則一定不要盲目執(zhí)行刪除操作,因?yàn)檫@樣可能導(dǎo)致系統(tǒng)的崩潰。

其實(shí)我們也可以加入“--nodeps”參數(shù),忽略依賴關(guān)系,但是這樣可能會(huì)導(dǎo)致相關(guān)依賴軟件的不可用。

 三、二進(jìn)制軟件安裝方式

Linux下二進(jìn)制格式的軟件是指事先已經(jīng)在各種平臺(tái)編譯安裝好相關(guān)軟件,然后壓縮打包,在安裝時(shí)只需解壓或者執(zhí)行安裝可執(zhí)行文件即可。這種軟件發(fā)行格式類似與windows系統(tǒng),這樣做的原因是保護(hù)源代碼程序不對(duì)外泄露,保護(hù)知識(shí)產(chǎn)權(quán)。二進(jìn)制軟件包的優(yōu)點(diǎn)是安裝簡(jiǎn)單、容易,缺點(diǎn)是缺乏靈活性,相應(yīng)的軟件包執(zhí)行在對(duì)應(yīng)平臺(tái)下安裝,離開(kāi)這個(gè)環(huán)境軟件就無(wú)法運(yùn)行。

二進(jìn)制軟件包提供了很多類型的打包方式,最常見(jiàn)的就是我們上節(jié)講到的RPM格式的包,還有以“*.tar.gz、*.tgz、*.bz2“等形式的二進(jìn)制軟件包,最后還有一個(gè)就是提供安裝程序進(jìn)行安裝的二進(jìn)制軟件包。下面分別介紹:

3.1 安裝“*.tar.gz、*.bz2”二進(jìn)制軟件包

這種格式的軟件包,安裝其實(shí)就是簡(jiǎn)單的解壓過(guò)程,根據(jù)不同的軟件打包格式,我們用相應(yīng)的解壓命令解壓即可。

對(duì)于*.tar.gz軟件格式解壓:tar –zxvf xxxxxx.tar.gz對(duì)于*.bz2軟件格式解壓:  tar  -jxvf xxxxxx.tar.gz這類軟件的卸載,對(duì)于解壓后只有單一目錄的軟件,可以直接刪除對(duì)應(yīng)軟件目錄即可,如果解壓后文件分散在幾個(gè)目錄中,需要一一手動(dòng)刪除目錄。

例如:我們常用的應(yīng)用服務(wù)器容器tomcat軟件就是基于這種打包壓縮格式發(fā)行的。我們只需下載后解壓即可完成安裝,如果需要卸載,直接刪除對(duì)應(yīng)的tomcat目錄即可。

3.2 提供安裝程序的軟件包

這種軟件包都提供了安裝腳本或者安裝向?qū)С绦?,只需在下載此類軟件包后解壓,然后進(jìn)入安裝目錄,找到類似的setup、install、install.sh之類的可執(zhí)行文件運(yùn)行即可,然后根據(jù)提示(比如安裝路徑,參數(shù)設(shè)置等等)進(jìn)行相應(yīng)的設(shè)置,接著安裝就自動(dòng)完成。

這類軟件的卸載也提供了相應(yīng)的卸載腳本或者卸載向?qū)?,根?jù)提示即可完成軟件卸載。

例如:經(jīng)常使用的sun jdk就是這種安裝方式,從網(wǎng)絡(luò)下載下來(lái)的jdk是個(gè)二進(jìn)制可執(zhí)行文件,首先設(shè)置文件的可執(zhí)行權(quán)限(例如chmod 755  jdk1.6.0_07.bin,權(quán)限操作本書(shū)后面會(huì)有詳細(xì)講述) ,然后運(yùn)行軟件(也即是./ jdk1.6.0_07.bin)即可完成安裝。安裝完成會(huì)在當(dāng)前目錄產(chǎn)生一個(gè)對(duì)應(yīng)的jdk程序目錄。

到此,相信大家對(duì)“如何理解Linux下軟件包的安裝與管理”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:如何理解Linux下軟件包的安裝與管理
瀏覽地址:http://bm7419.com/article44/psddhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站商城網(wǎng)站、全網(wǎng)營(yíng)銷推廣網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司