Linux下軟體包的多種安裝方式

大雄45發表於2022-06-24
原始碼包安裝

在Linux下的很多軟體都是透過原始碼包方式釋出的,雖然相對於二進位制軟體包,配置和編譯起來繁瑣點,但是它的可移植性卻好得多,針對不同的體系結構,軟體開發者往往僅需釋出同一份原始碼包,不同的終端使用者經過編譯就可以正確執行。
安裝的具體步驟:

$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
$ cd XXXX
$ ./configure
$ make
# make install            ##安裝
$ make clean              ##安裝完成後用來清理臨時檔案
$ake uninstall            ##用來解除安裝軟體

1、解壓:
最常見原始碼包的就兩種(XXXX.tar.gz or XXXX.tar.bz2),其實這些原始碼包都是由2個工具壓縮而成的,tar.gz結尾的檔案用到的工具是tar和gunzip,而tar.bz2結尾的檔案所使用的工具是tar和bzip2,之所以這樣做是因為,tar僅僅能夠打包多個檔案但是沒有壓縮的功能,而gz和bz2卻剛好相反,僅能夠壓縮單個檔案,這樣我們常見的原始碼包實際上是透過tar先將不同的原始檔打包,然後再透過gunzip或者bzip2壓縮後釋出的,當然這兩個步驟可以透過一條 實現:

$ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
解壓的相關命令如下:
$ tar zxvf XXXX.tar.gz
$ tar jxvf XXXX.tar.bz2

2、./configure:
解壓完成就正式開始安裝了(補充一點,開始configure之前,如有必要,請使用patch工具為原始碼打上相應的補丁),首先跳轉到原始碼的解壓目錄,眾所周知,開始configure前還是應該仔細閱讀原始碼目錄下的README或者INSTALL檔案,好多安裝中的注意事項在這裡都有所羅列,configure實際上是一個 檔案,在當前目錄中鍵入"./configure", 就會執行當前目錄下的configure ,有一點必須說明,在整個configure過程,其實編譯尚未進行,configure僅僅是做編譯相關的準備工作,它主要對您當前的工作平臺做一些依賴性檢查,比如編譯器是否安裝,聯結器是否存在,如果在檢測的過程沒有任何錯誤,你很幸運,configure指令碼會在當前目錄下生成下一步編譯連結所要用到的另一個檔案Makefile,當然configure支援及其豐富的命令列引數,可以鍵入"./configre --help"獲取具體的資訊,最常用的恐怕就是:

$ ./configure --prefix=/opt/XXX
它用來設定軟體的安裝目錄.

3、make:
如果configure過程正確完成,那麼在原始碼目錄,會生成相應的Makefile檔案,Makefile檔案簡單來說包括的是一組檔案依賴關係以及編譯連結的相關步驟,事實上真正的編譯連結工作也不是make所做的,make只是一個通用的工具,一般情況下,make會根據Makefile中的規則呼叫合適的編譯器編譯所有與當前軟體相依賴的原始碼,生成所有相關的目標檔案,最後再使用連結器生成最終的可執行程式:

$ make

4、make install:
當上面兩個步驟正確完成,代表著編譯連結過程已經完全結束,最後要做的就是將可執行程式安裝到正確的位置,在這個步驟,普通使用者可能沒有相關目錄的操作許可權,臨時切換到root是一個不錯的選擇,"install"只是Makefile檔案中的一個標號,"make install"代表著make工具執行Makefile檔案中"install"標號下的所有相關操作,如果在configure階段沒有使用"--prefix=/opt/XXX"指定應用程式的安裝目錄,那麼應用程式一般會被預設安裝到/usr/local/bin,如果/usr/local/bin已經存在於您的PATH中,那麼安裝已經基本結束:

$make install

執行完上述操作就可以等待安裝完成了。

$make clean
$make uninstall

這兩個步驟只是安裝的後續操作,有一點必須注意,"clean"和"uninstall"也是Makefile檔案中相應的兩個標號,執行這兩個步驟的時候Makefile檔案必要保留,"make clean"用來清除編譯連線過程中的一些臨時檔案,"make uninstall"是解除安裝相關應用程式,與make install類似,make uninstall也需要切換到root執行,不過"uninstall"標號在好多Makefile中都被省略掉了。

RPM包安裝

1、如何安裝rpm軟體包
rmp軟體包的安裝可以使用程式rpm來完成。執行下面的命令

rpm -i your-package.rpm

其中your-package.rpm是你要安裝的rpm包的檔名,一般置於當前目錄下。
安裝過程中可能出現下面的警告或者提示:

... conflict with ... 可能是要安裝的包裡有一些檔案可能會覆蓋現有
的檔案,預設時這樣的情況下是無法正確安裝的可以用
rpm --force -i 強制安裝即可
... is needed by ...
... is not installed ... 此包需要的一些軟體你沒有安裝可以用
rpm --nodeps -i 來忽略此資訊
也就是說,rpm -i --force --nodeps 可以忽略所有依賴關係和檔案問題,什麼包
都能安裝上,但這種強制安裝的軟體包不能保證完全發揮功能

2、如何安裝.src.rpm軟體包
有些軟體包是以.src.rpm結尾的,這類軟體包是包含了原始碼的rpm包,在安裝時
需要進行編譯。這類軟體包有兩種安裝方法,
方法一:

1.執行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一個和你的軟體包同名的specs檔案
4. cd /usr/src/redhat/BUILD/your-package/ 一個和你的軟體包同名的目錄
5. ./configure 這一步和編譯普通的原始碼軟體一樣,可以加上引數
6. make
7. make install

方法二:

1.執行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS                 前兩步和方法一相同
3. rpmbuild -bb your-package.specs          一個和你的軟體包同名的specs檔案

這時,在/usr/src/redhat/RPM/i386/ (根據具體包的不同,也可能是i686,noarch等等)目錄下,有一個新的rpm包,這個是編譯好的二進位制檔案,執行rpm -i new-package.rpm即可安裝完成。
3、如何解除安裝rpm軟體包
使用命令 rpm -e 包名,包名可以包含版本號等資訊,但是不可以有字尾.rpm
比如解除安裝軟體包proftpd-1.2.8-1,可以使用下列格式:

rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd

不可以是下列格式:

rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1

有時會出現一些錯誤或者警告:

... is needed by ... 這說明這個軟體被其他軟體需要,不能隨便解除安裝

可以用rpm -e --nodeps強制解除安裝
4、如何不安裝但是獲取rpm包中的檔案
使用工具rpm2cpio和cpio

rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories

引數i和extract相同,表示提取檔案。v表示指示執行程式
d和make-directory相同,表示根據包中檔案原來的路徑建立目錄
m表示保持檔案的更新時間。
5、如何檢視與rpm包相關的檔案和其他資訊
下面所有的例子都假設使用軟體包mysql-3.23.54a-11
1.我的系統中安裝了那些rpm軟體包

rpm -qa  列出所有安裝過的包

如果要查詢所有安裝過的包含某個字串sql的軟體包

rpm -qa |grep sql

2.如何獲得某個軟體包的檔案全名

rpm -q mysql 可以獲得系統中安裝的mysql軟體包全名,從中可以獲得當前軟體包的版本等資訊。

這個例子中可以得到資訊mysql-3.23.54a-11
3.一個rpm包中的檔案安裝到那裡去了?

rpm -ql 包名            注意這裡的是不包括.rpm字尾的軟體包的名稱

也就是說只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm,如果只是想知道可執行程式放到那裡去了,也可以用which,比如

which mysql

4.一個rpm包中包含那些檔案

一個沒有安裝過的軟體包,使用:rpm -qlp ****.rpm
一個已經安裝過的軟體包,還可以使用:rpm -ql ****.rpm

5.如何獲取關於一個軟體包的版本,用途等相關資訊?

一個沒有安裝過的軟體包,使用rpm -qip ****.rpm
一個已經安裝過的軟體包,還可以使用rpm -qi ****.rpm

6.某個程式是哪個軟體包安裝的,或者哪個軟體包包含這個程式

rpm -qf `which 程式名` 返回軟體包的全名
rpm -qif `which 程式名` 返回軟體包的有關資訊
rpm -qlf `which 程式名` 返回軟體包的檔案列表

注意,這裡不是引號,而是`,就是鍵盤左上角的那個鍵,也可以使用 rpm -qilf,同時輸出軟體包資訊和檔案列表
7.某個檔案是哪個軟體包安裝的,或者哪個軟體包包含這個檔案
注意,前一個問題中的方法,只適用與可執行的程式,而下面的方法,不僅可以用於可執行程式,也可以用於普通的任何檔案,前提是知道這個檔名,首先獲得這個程式的完整路徑,可以用whereis或者which,然後使用rpm -qf例如:

# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1

獲得軟體包相關的資訊用rpm -q,q表示查詢query,後面可以跟其他選項,比如

i 表示info,獲得軟體包的資訊;
l 表示list,獲得檔案列表;
a 表示all,在所有包中執行查詢;
f 表示file,根據檔案進行相關的查詢;
p 表示package,根據軟體包進行查詢
需要的查詢條件可以使用grep產生,或者從"` `"中的命令列產生
yum安裝

自動搜尋最快映象外掛:yum install yum-fastestmirror
安裝yum圖形視窗外掛:yum install yumex
1、安裝

yum install 全部安裝
yum install package1 安裝指定的安裝包package1
yum groupinsall group1 安裝程式組group1

2、更新和升級

yum update 全部更新
yum update package1 更新指定程式包package1
yum check-update 檢查可更新的程式
yum upgrade package1 升級指定程式包package1
yum groupupdate group1 升級程式組group1

3、查詢和顯示

yum info package1 顯示安裝包資訊package1
yum list 顯示所有已經安裝和可以安裝的程式包
yum list package1 顯示指定程式包安裝情況package1
yum groupinfo group1 顯示程式組group1資訊yum search string 根據關鍵字string查詢安裝包

4、刪除程式

yum remove | erase package1 刪除程式包package1
yum groupremove group1 刪除程式組group1
yum deplist package1 檢視程式package1依賴情況

5、清除快取

yum clean packages 清除快取目錄下的軟體包
yum clean headers 清除快取目錄下的 headers
yum clean oldheaders 清除快取目錄下舊的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除快取目錄下的軟體包及舊的headers

6、TIPS
1.讓yum命令下載軟體包,但是不安裝
yum有一個plugin叫做yum-downloadonly,它就可以為使用者實現只下載軟體包的功能。
我們可以使用以下命令安裝這個外掛:

yum install yum-downloadonly

完成安裝後,yum就多了兩個命令引數,分別是:

--downloadonly
--downloaddir=/path/to/dir

這兩個命令引數的含義非常明確,不用多作解釋了,這樣,使用者就可以做到使用yum只下載軟體包,不自動安裝了
2.不用yum-downloadonly外掛,安裝或者升級軟體時保留下安裝包
yum 預設情況下,升級或者安裝後,會刪除下載的rpm包。
不過,我們也可以如下設定升級後不刪除下載的rpm包

vim /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0

將 keepcache=0 修改為 keepcache=1, 安裝或者升級後,在目錄 /var/cache/yum 下就會有下載的 rpm 包了。

本文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2902732/,如需轉載,請註明出處,否則將追究法律責任。

相關文章