第九章-安裝RPM包或源碼包

windows下安裝一個軟件很輕鬆,只要雙擊.exe的文件,安裝提示連續下一步便可,然而linux系統下安裝一個軟件彷佛並不那麼輕鬆了,由於咱們不是在圖形界面下。因此你要學會如何在linux下安裝一個軟件。 node

在前面的內容中屢次提到的yum, 這個yumRedhat所特有的安裝RPM程序包的工具,使用起來至關方便。由於使用RPM安裝某一個程序包有可能會由於該程序包依賴另外一個程序包而沒法安裝。而使用yum工具就能夠連同依賴的程序包一塊兒安裝。固然CentOS一樣可使用yum工具,並且在CentOS中你能夠無償使用yum,但Redhat中只有當你付費後才能使用yum,默認是沒法使用yum的。在介紹yum以前先說一說RPM相關的東西。 linux

 

RPM工具 git

 

RPM 「Redhat Package Manager」 的縮寫,根據名字也能猜到這是Redhat公司開發出來的。RPM 是以一種數據庫記錄的方式來將你所須要的套件安裝到你的Linux 主機的一套管理程序。也就是說,你的linux系統中存在着一個關於RPM的數據庫,它記錄了安裝的包以及包與包之間依賴相關性。RPM包是預先在linux機器上編譯好並打包好的文件,安裝起來很是快捷。可是也有一些缺點,好比安裝的環境必須與編譯時的環境一致或者至關;包與包之間存在着相互依賴的狀況;卸載包時須要先把依賴的包卸載掉,若是依賴的包是系統所必須的,那就不能卸載這個包,不然會形成系統崩潰。 數據庫

 

若是你的光驅中還有系統安裝盤的話,咱們能夠經過 mount /dev/cdrom /mnt 命令把光驅掛載到/mnt目錄下,那麼你會在/mnt/Packages目錄下看到不少.rpm的文件,這就是RPM包了。 apache

 

[root@localhost test]# mount /dev/cdrom /mnt/ vim

mount: /dev/sr0 寫保護,將以只讀方式掛載 windows

mount: /dev/sr0 已經掛載或 /mnt centos

/dev/sr0 已經掛載到 /mnt 緩存

 

[root@localhost test]# ls /mnt/ 安全

 

每個rpm包的名稱都由 - . 分紅了若干部分。就拿 「abrt-cli-2.0.8-15.el6.centos.i686.rpm」 這個包來解釋一下, 「abrt-cli」 爲包名, 「2.0.8」 則爲版本信息, 「15.el6.centos」 爲發佈版本號, 「i686」 爲運行平臺。其中運行平臺常見的有i386, i586, i686, x86_64 ,須要你注意的是cpu目前是分32位和64位的,i386,i586i686都爲32位平臺,x86_64則表明爲64位的平臺。另外有些rpm包並無寫具體的平臺而是noarch,這表明這個rpm包沒有硬件平臺限制。例如 「alacarte-0.10.0-1.fc6.noarch.rpm」. 下面介紹一下rpm經常使用的命令。

 

1.安裝一個rpm

[root@localhost] cd /mnt/Packages/

[root@localhost Packages]# rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.90-5.el7.x86_64.rpm

準備中... ################################# [100%]

正在升級/安裝...

1:libjpeg-turbo-devel-1.2.90-5.el7 ################################# [100%]

 

 

「-i」 : 安裝的意思

「-v」 : 可視化

「-h」 : 顯示安裝進度

另外在安裝一個rpm包時經常使用的附帶參數有:

--force : 強制安裝,即便覆蓋屬於其餘包的文件也要安裝

--nodeps : 當要安裝的rpm包依賴其餘包時,即便其餘包沒有安裝,也要安裝這個包

 

a.升級一個rpm

命令 rpm -Uvh filename

「-U」 : 即升級的意思

 

b,卸載一個rpm

命令 rpm -e filename

 

這裏的filename是經過rpm的查詢功能所查詢到的,稍後會做介紹。

[root@localhost ~]# rpm -qa |grep libjpeg-turbo-devel

libjpeg-turbo-devel-1.2.1-1.el6.i686

[root@localhost ~]# rpm -e libjpeg-turbo-devel

卸載時 -e後邊跟的filename和安裝時的是有區別的,安裝時是把一個存在的文件做爲參數,而卸載時只須要包名便可。

 

c.查詢一個包是否安裝

命令 rpm -q rpm包名 (這裏的包名,是不帶有平臺信息以及後綴名的)

 

[root@localhost ~]# rpm -q libjpeg-turbo-devel

package libjpeg-turbo-devel is not installed

[root@localhost ~]# rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.90-5.el7.x86_64.rpm

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

1:libjpeg-turbo-devel ########################################### [100%]

[root@localhost ~]# rpm -q libjpeg-turbo-devel

libjpeg-turbo-devel-1.2.90-5.el7.x86_64

咱們可使用 rpm -qa 查詢當前系統全部安裝過的rpm包,限於篇幅,阿銘只列出前十個。

 

[root@localhost ~]# rpm -qa |head

 

d.獲得一個已安裝rpm包的相關信息

命令 rpm -qi 包名 (一樣不須要加平臺信息與後綴名)

 

[root@localhost ~]# rpm -qi libjpeg-turbo-devel

 

 

f.列出一個rpm包安裝的文件

命令 rpm -ql 包名

 

[root@localhost ~]# rpm -ql libjpeg-turbo-devel

 

 

經過上面的命令能夠看出文件 「/usr/lib/libjpeg.so」 是經過安裝 「libjpeg-turbo-devel」 這個rpm包得來的。那麼反過來如何經過一個文件去查找是由安裝哪一個rpm包得來的?

[root@localhost Packages]# rpm -qf /usr/lib64/libjpeg.so

libjpeg-turbo-devel-1.2.90-5.el7.x86_64

 

 

2.yum工具

 

在前面的章節中,阿銘屢次提到yum工具,今天終於該講它了。這個工具比rpm工具好用多了,固然前提是你使用的linux系統是支持yum的。yum最大的優點在於能夠聯網去下載所須要的rpm包,而後自動安裝,在這個工程中若是要安裝的rpm包有依賴關係,yum會幫你解決掉這些依賴關係依次安裝全部rpm包。

 

a.列出全部可用的rpm 「yum list」

[root@localhost ~]# yum list |head -n 20

 

 

限於篇幅,阿銘只列舉出來前14個包信息。從上例中能夠看到有 「mirrors.btte.net」 信息出現,這是在告訴用戶,它是從mirrors.btte.net這裏下載到的rpm包資源。從上面的例子中你還能夠看到最左側是rpm包名字,中間是版本信息,最右側是安裝信息,若是安裝了就顯示相似 「@anaconda-CentOS」, 「@base」 或者 「@extras」, 他們前面都會有一個 「@」 符號,這很好區分。未安裝則顯示base或者extras, 若是是該rpm包已安裝但須要升級則顯示updates. 若是你看的仔細會發現,」yum list」 會先列出已經安裝的包(Installed Packages) 而後再列出能夠安裝的包(Available Packages)

 

b.搜索一個rpm

命令 yum search [相關關鍵詞]

 

[root@localhost ~]# yum search vim

除了這樣搜索外,阿銘經常使用的是利用grep來過濾

 

[root@localhost ~]# yum list |grep 'vim'

 

 

咱們一樣能夠找到相應的rpm包。

 

c.安裝一個rpm

 

若是不加 「-y」 選項,則會以與用戶交互的方式安裝,首先是列出須要安裝的rpm包信息,而後會問用戶是否須要安裝,輸入y則安裝,輸入n則不安裝。而阿銘嫌這樣太麻煩,因此直接加上 「-y」 選項,這樣就省略掉了問用戶是否安裝的那一步。

 

[root@localhost ~]# yum install vim-X11

 

在這個過程當中,它首先會把須要安裝的RPM包列出來,若是有依賴關係,也會把全部依賴的包列表出來,而後詢問用戶是否須要安裝,輸入y則安裝,輸入n則不安裝,但啊銘以爲這樣太麻煩,因此會直接加上-y選項,這樣就省略了詢問用戶是否安裝的那一步。

 

 

d.卸載一個rpm

 

[root@localhost ~]# yum remove vim-X11

卸載和安裝同樣,也能夠直接加上 「-y」 選項來省略掉和用戶交互的步驟。在這裏阿銘要提醒一下,卸載某個rpm包必定要看清楚了,不要連其餘重要的rpm包一塊兒卸載了,以避免影響正常的業務。

 

e.升級一個rpm

 

[root@localhost ~]# yum update bash

 

 

以上介紹瞭如何使用yum搜索、安裝、卸載以及升級一個rpm包,若是你掌握了這些那麼你就已經能夠解決平常工做中遇到的與rpm包相關問題了。固然yum工具還有好多其餘好用的命令,阿銘再也不列舉出來,若是你感興趣就去man 一下吧。除此以外,阿銘還會教你一些關於yum的小應用。

 

f.使用本地的光盤來製做一個yum

 

有時候你的linux系統不能聯網,固然就不能很便捷的使用聯網的yum源了,這時候就須要你本身會利用linux系統光盤製做一個yum源。具體步驟以下:

 

1)掛載光盤

[root@localhost ~]# mount /dev/cdrom /mnt

2)刪除/etc/yum.repos.d目錄全部的repo文件

[root@localhost ~]# cp -r /etc/yum.repos.d /etc/yum.repos.d_bak

[root@localhost ~]# rm -rf /etc/yum.repos.d/*

3) 建立新文件dvd.repo

[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo

加入如下內容:

[dvd]

name=install dvd

baseurl=file:///mnt

enabled=1

gpgcheck=0

4) 刷新 repos 生成緩存

[root@localhost ~]# yum makecache

而後就可使用yum命令安裝你所須要的軟件包了

利用yum工具下載一個rpm

 

g.利用yum工具下載RPM

 

在進行下面的操做以前,咱們須要先恢復以前的yum源,不然後續使用yum還會出問題,具體操做以下:

rm -rf /etc/yum.repos.d

mv /etc/yum.repos_bak /etc/yum.repos.d

yum list

 

下載RPM包而不安裝命令以下:

 

[root@localhost ~]# yum install -y yum-presto.noarch --downloadonly --downloaddir=/tmp/

[root@localhost ~]# ls /usr/local/src/

deltarpm-3.5-0.5.20090913git.el6.i686.rpm yum-presto-0.6.2-1.el6.noarch.rpm

 

若是下載過了,再下載不成功那咱們能夠這樣:

yum reinstall -y bash --downloadonly

ls /var/cache/yum/x86_64/7/..............................

 

 

 

 

3.安裝源碼包

 

其實,在linux下面安裝一個源碼包是最經常使用的,阿銘在平常的管理工做中,大部分軟件都是經過源碼安裝的。安裝一個源碼包,是須要咱們本身把源代碼編譯成二進制的可執行文件。若是你讀得懂這些源代碼,那麼你就能夠去修改這些源代碼自定義功能,而後再去編譯成你想要的。使用源碼包的好處除了能夠自定義修改源代碼外還能夠定製相關的功能,由於源碼包在編譯的時候是能夠附加額外的選項的。

 

源碼包的編譯用到了linux系統裏的編譯器,常見的源碼包通常都是用C語言開發的,這也是由於C語言爲linux上最標準的程序語言。Linux上的C語言編譯器叫作gcc,利用它就能夠把C語言變成可執行的二進制文件。因此若是你的機器上沒有安裝gcc就沒有辦法去編譯源碼。你可使用 yum install -y gcc 來完成安裝。

 

安裝一個源碼包,一般須要三個步驟:

 

1./configure

在這一步能夠定製功能,加上相應的選項便可,具備有什麼選項能夠經過 ./configure --help 命令來查看。在這一步會自動檢測你的linux系統與相關的套件是否有編譯該源碼包時須要的庫,由於一旦缺乏某個庫就不能完成編譯。只有檢測經過後纔會生成一個Makefile文件。

2 make

使用這個命令會根據Makefile文件中預設的參數進行編譯,這一步其實就是gcc在工做了。

3 make install

 

安裝步驟,生成相關的軟件存放目錄和配置文件的過程。

上面介紹的3步並非全部的源碼包軟件都同樣的,阿銘之前也曾經遇到過,安裝步驟並非這樣,也就是說源碼包的安裝並不是具備必定的標準安裝步驟。這就須要你拿到源碼包解壓後,而後進入到目錄找相關的幫助文檔,一般會以INSTALL或者README爲文件名。因此,你必定要去看一下。下面阿銘會編譯安裝一個源碼包來幫你更深入的去理解如何安裝源碼包。

 

a.下載一個源碼包

下載源碼包必定要去官方站點去下載,不要在網上隨便下載,那樣很不安全。由於你下載到的源碼包頗有多是被人修改過的。

 

[root@localhost src]# cd /usr/local/src/

[root@localhost src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.27.tar.gz

 

解壓源碼包

[root@localhost src]# tar zxvf httpd-2.4.27.tar.gz

配置相關的選項,並生成Makefile

[root@localhost src]# cd httpd-2.2.27

[root@localhost httpd-2.2.27]# ./configure --help |less

 

後面的內容阿銘省略掉了,阿銘使用 ./configure --help 命令查看可使用的選項。通常經常使用的有 --prefix=PREFIX 這個選項的意思是定義軟件包安裝到哪裏。到這裏,阿銘再提一個小小的建議,一般源碼包都是安裝在/usr/local/目錄下的。好比,咱們把apache安裝在/usr/local/apache2下,那麼這裏就應該這樣寫 --prefix=/usr/local/apache2 其餘還有好多選項,若是你有耐心能夠挨個去看一看都有什麼做用。

 

[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2

checking for chosen layout... Apache

checking for working mkdir -p... yes

checking build system type... i686-pc-linux-gnu

checking host system type... i686-pc-linux-gnu

checking target system type... i686-pc-linux-gnu

 

Configuring Apache Portable Runtime library ...

 

checking for APR... reconfig

configuring package in srclib/apr now

checking build system type... i686-pc-linux-gnu

checking host system type... i686-pc-linux-gnu

checking target system type... i686-pc-linux-gnu

Configuring APR library

Platform: i686-pc-linux-gnu

checking for working mkdir -p... yes

APR Version: 1.4.6

checking for chosen layout... apr

checking for gcc... no

checking for cc... no

checking for cl.exe... no

configure: error: in `/usr/local/src/httpd-2.2.27/srclib/apr':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details

configure failed for srclib/apr

不幸的是,阿銘一開始就報錯了,由於沒有gcc編譯器,須要先安裝一下。

 

[root@localhost httpd-2.2.27]# yum install -y gcc

因爲gcc依賴的包不少,因此安裝時間會長一些。安裝完後,再繼續上面的步驟。

 

tcode:

 

[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2

驗證這一步是否成功的命令是:

 

[root@localhost httpd-2.2.27]# echo $?

0

返回值若是是 「0」 則執行成功,不然就是沒有成功。此時就成功生成 Makefile 了。

 

[root@localhost httpd-2.2.27]# ls -l Makefile

-rw-r--r-- 1 root root 8954 5 13 12:02 Makefile

進行編譯

[root@localhost httpd-2.2.27]# make

-bash: make: command not found

又發生錯誤了,提示 「make」 命令沒有發現,解決辦法是安裝make工具。

 

[root@localhost httpd-2.2.27]# yum install -y make

繼續make

 

[root@localhost httpd-2.2.27]# make

Making all in srclib

make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib'

Making all in apr

make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'

make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'

/bin/sh /usr/local/src/httpd-2.2.27/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I./include -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I./include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include -o passwd/apr_getpass.lo -c passwd/apr_getpass.c && touch passwd/apr_getpass.lo

編譯的時候,就會出現相似這麼多亂七八糟的信息,編譯的時間比較長,CPU使用率會很高,這是由於CPU高速計算,編譯完後,再使用 echo $? 驗證一下是否正常成功。

 

[root@localhost httpd-2.2.27]# echo $?

0

若是是0的話,就能夠執行最後一步了。

 

安裝

[root@localhost httpd-2.2.27]# make install

Making install in srclib

make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib'

Making install in apr

make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'

make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'

make[3]: Nothing to be done for `local-all'.

make[3]: Leaving directory `/usr/local/src/httpd-2.2.27/srclib/apr'

固然你也可使用 echo $? 看看有沒有正確安裝,執行完這一步,則會在 「/usr/local/apache2」 目錄下增長了不少目錄。

 

[root@localhost httpd-2.2.27]# ls /usr/local/apache2/

bin cgi-bin error icons lib man modules

build conf htdocs include logs manual

到此,apache源碼的安裝就完成了,其實在平常的源碼安裝工做中,並非誰都像阿銘這樣順利完成安裝的,遇到錯誤不能完成安裝的狀況是不少的。一般都是由於缺乏某一個庫文件致使的。這就須要你仔細琢磨報錯信息或者查看當前目錄下的 「config.log」 去獲得相關的信息。另外,若是本身不能解決那就去網上google一下吧,一般你會獲得想要的答案。

相關文章
相關標籤/搜索