1、Linux 中軟件包的分類html
2、軟件安裝之 RPMlinux
3、軟件安裝之 YUM數據庫
1.概述
2.YUM 在線安裝apache
4、軟件安裝之源碼包centos
5、腳本安裝包緩存
源碼包就是各類源代碼文件組合而成的壓縮包,由於 Linux 是開源的,因此源碼包中的源代碼是能夠查看甚至修改的,用戶能夠根據本身所須要的功能進行安裝。可是源碼包在安裝的時候須要編譯,即從源代碼 abcd
編譯成機器語言 0101
,這個過程須要花費很長的時間。
在 Windows 中的程序都是通過編譯的,而且通常認爲編譯是不可逆的,即反編譯(0101->abcd
是很是困難的),即便能勉強完成,也會丟失部分代碼。也正由於這個緣由,在 Windows 中須要用到某個程序,若是該程序向你收費,你也只能乖乖交錢,除非你不用。這也就是 Linux 開源的魅力所在!服務器
源碼包有以下優勢:
- 開源,若是有足夠的能力,能夠修改源碼包中的源代碼;
- 能夠根據本身的需求選擇安裝特定功能;
- 軟件是編譯安裝,因此更加適合本身的系統,更加穩定高效;
- 卸載方便,只須要把安裝目錄刪除,就能不留痕跡。
源碼包有以下缺點:
- 安裝過程步驟多,尤爲是安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤;
- 編譯過程會比較長,因此安裝的過程也比二進制包安裝時間長;
- 對新手不太友好,由於是編譯安裝,因此一旦報錯,新手很難解決。
二進制包是已經編譯好了的包,二進制包中的數據都計算機能直接識別的 0101
,因此安裝起來就省去了編譯環節,這樣能夠節省不少時間。在 Linux 中,Redhat 系列的二進制包通常都是 rpm 包,而 Ubuntu 系列的二進制包通常都是 deb 包。
二進制包有以下優勢:
- 包管理系統簡單,只須要敲幾個命令就能實現包的安裝,升級,查詢和卸載;
- 安裝速度比源碼包快得多;
二進制包有以下優勢:
- 通過編譯,不能夠再看到源代碼,不能根據本身的需求決定安裝哪些功能;
- 功能的選擇不如源碼包靈活
- 效率不如源碼包
- 依賴性
對於一些複雜的環境搭建(如LAMP),太過於繁瑣,有大神就寫出了該環境的安裝腳本,只須要運行該腳本,全部的東西都能裝上。雖然給腳本安裝包另外分了一個類,可是腳本安裝包實際上仍是安裝源碼包和二進制包。
腳本安裝包有以下優勢:
- 安裝簡單,方便,只須要運行腳本,就能安裝腳本包含的全部軟件,也不會報錯。
腳本安裝包有以下缺點:
- 徹底喪失自定義性,不能按照本身的需求安裝須要的功能,安裝的功能徹底由腳本編寫者幫你決定。
若是是服務器,推薦源碼包安裝。由於服務器要被成千上萬的人訪問,源碼包執行效率高。
若是是我的設備,推薦 RPM 包,固然也看我的本身的愛好了,想裝什麼包就裝什麼包,誰特麼管你。
RPM包來源與光盤中,因此要先掛載光盤,才能夠進行後面的步驟。掛載的示例以下:
建立掛載點並掛載:
mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom/全部的 RPM 包都在 /mnt/cdrom/Packages/ 中,可用
ls
命令查看,以下圖所示:
與掛載相關的內容,能夠參考個人另外一篇博客:
Linux基礎二(掛載、關機重啓與系統等級)
知道了掛載後,還不能直接安裝 RPM 包,還必須具有一些關於 RPM 包的準備知識(命名規則和依懶性)
以下所示:
httpd-2.2.15-29.el6.centos.x86_64.rpm 其中: httpd 爲包名 2.2.15 爲版本號; 29 爲軟件發佈的次數 el6.centos 爲其適合的Linux平臺 x86_64 爲其適合的硬件平臺 rpm 是包的擴展名
包全名指的是完整的包名,包名是開頭的第一個單詞。
在上面的例子中:
httpd
爲包名;
httpd-2.2.15-29.el6.centos.x86_64.rpm
是包全名
- 包全名:在操做沒有安裝的包的時候(安裝和升級),要使用包全名,而且要注意路徑(絕對路徑或相對路徑)
- 包名:已經安裝了該軟件以後,後續對該包的操做(卸載和查詢)使用包名就能夠了。當使用包名的時候,其實是去搜索
/var/lib/rpm/
中的數據庫__db.001到__db.004
(裏面是亂碼)
- 樹形依賴:a->b->c
解決:裝c再裝b再裝a- 環形依賴:a->b->c->a
解決:將a、b、c三個包放在一個命令裏安裝- 模塊依賴:也叫庫依賴。
最噁心,依賴以.so.n(n爲數字)結尾的庫文件,該庫文件是 /mnt/cdrom/Packages 目錄下的某一個rpm包中的文件,要先安裝該包
解決:如何判斷在哪一個包中,查詢 www.rpmfind.net
命令:
rpm -ivh 包全名 選項: -i:安裝(install) -v:顯示詳細信息(verbose) -h:顯示進度(hash) --nodeps:不檢測依賴性(不要用)
用 rpm 命令來安裝軟件時要注意其依賴性。能夠根據 2.2 節中的思路來進行安裝。
示例:安裝 httpd
1. 進入掛載目錄:cd /mnt/cdrom/Packages/ 2. 安裝 httpd:rpm -ivh http-tab(2次tab) 3. 通過 2. 後會提示幾個 rpm 包,其中: 1. httpd-2.2.15-29.centos.x86_64.rpm 爲主包 2. httpd-devel-* 爲庫包 3. httpd-manual-* 爲文檔包 4. httpd-tools-* 爲工具包 4. 通常先安裝主包,再安裝附加包注意:有兩個100% 纔算完成,第一個100% 是準備成功,第二個100% 出現纔算安裝成功
命令:
rpm -Uvh 包全名 選項: -U:升級(Upgrade) --nodeps:不檢測依賴性(不要用) 升級至關於安裝一個版本更新的安裝包,你也能夠用升級命令來安裝新包。
命令:
rpm -e 包名 選項: -e:卸載(erase) --nodeps:不檢測依賴性(不要用)
說明:
- 卸載時只需輸入包名便可,由於該軟件包在安裝的時候已經寫入
/var/lib/rpm/
中的數據庫中了- 卸載命令依然存在依賴性,按照安裝時的反序卸載便可
- rpm 包在安裝時沒有指定安裝位置,安裝位置是該rpm包做者定義好的默認位置(以下圖所示),會分佈在磁盤的各個部分,若要手工刪除不方便,因此纔有了卸載命令。
- 而源碼包沒有卸載命令,由於源碼包在安裝過程當中能夠指定安裝位置,只要把軟件包安裝位置所在目錄刪除就會將軟件完全刪除。
命令:
rpm –q 包名 // 查詢指定軟件包是否安裝 rpm –qa // 查詢全部已安裝的軟件包 rpm –qi 包名 // 查詢指定包名的詳細信息(裏面只有幫助網站有點用) rpm –qip 包全名 // 查詢指定未安裝包的詳細信息(注意路徑) rpm –ql 包名 // 查詢指定軟件包都安裝在哪些位置了 rpm –qf 系統文件名 // 查詢該系統文件屬於哪個軟件(必須是已經安裝了的軟件生成的文件才能反向追查) rpm -qR 包名 // 查看軟件包的依賴關係 (–p 未安裝的軟件包) 選項: -q:查詢(query) -a:全部(all) -i:信息(information) -p:包(package) -l:位置(local) -f:文件(file)
在查詢的時候能夠靈活應用管道符搭配 grep 命令使用
命令:
rpm –V 已安裝的包名 // 校驗指定rpm包中的文件 選項: -V (verify) 校驗 示例: rpm -V httpd
若是文件未被修改,則不會出現任何提示,若文件被修改,則會出現如下提示:
其中,驗證內容(即文件前面的 9 個.
和一個c
)分別表明:
S:文件的大小是否被改變 M:文件的類型或文件的權限是否被改變 5:文件的MD5校驗和是否改變(可當作是文件內容是否改變) D:設備的主從代碼是否改變 L:文件路徑是否改變 U:文件的屬主(全部者)是否改變 G:文件的屬組是否改變 T:文件的修改時間是否改變 c:這個字符所佔的位置有如下意義: c:配置文件 d:普通文檔 g:鬼文件,不多見,就是該文件不該該被這個 RPM 包所包含 L:受權文件 r:描述文件
當某一個軟件的某些配置文件被誤刪除了,致使一些功能執行不了,這時候能夠經過來提取命令來將該文件從 RPM 包提取出來。
命令:
rpm2cpio 包全名 | cpio -idv.文件絕對路徑 其中: rpm2cpio 是將 rpm 包轉化爲 cpio 格式的命令 cpio 是一個標準工具,它用於建立軟件檔案文件和從檔案文件中提取文件 | 是管道符
RPM 安裝的缺點:依賴性太強,手工安裝難度較大。
YUM 安裝的也是 RPM 包,其好處是:全部安裝包都放在官方服務器上,使用 YUM 進行在線安裝時,能夠自動解決依賴性問題;固然,若是網絡不通,也能夠進行本地 YUM 安裝。可是,YUM 在線安裝對於 RedHat 來講是收費服務(CentOS能夠用^_^)。並且 YUM 也只能實現安裝,升級和卸載功能,不支持其餘的功能(如查詢,YUM的查詢只是在服務器上查詢相關軟件名)。
由於 YUM 安裝是在線的,因此須要指定安裝時所需的源文件從哪裏下載。YUM 源文件就是用來指定下載來源的文件,即用來指定下載來源是網絡上的某個網站的仍是本地哪一個文件的。
YUM 源文件保存在 /etc/yum.repos.d/
目錄下,一共有 4 個文件,分別是:CentOS-Base.repo(網絡YUM源)
,CentOS-Debuginfo.repo(調試YUM源)
,CentOS-Media.repo(光盤YUM源)
和CentOS-Vault.repo
。其中,默認只有第一個是生效的。
CentOS-Base.repo 文件的內容(部分)以下:
# 註釋 # 註釋 [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] ··· enabled=0 ··· [extras] ··· [centosplus] ··· [contrib] ···
其中:
形如[base]
的是容器名稱,base
表明基本安裝,update
表明更新等;
name
是容器說明,能夠本身隨便寫;
mirrorlist
是鏡像站點,指定了一個網站地址,安裝時就從該網站上下載所需的文件,與baseurl
的做用同樣,能夠註釋掉其中一個;
baseurl
是 YUM 源服務器的地址,默認是 CentOS 官方的 YUM 源服務器,是可使用的,該服務器在國外,嫌慢的話你也能夠改爲國內的地址;
enabled
此容器是否生效,生效則=1
,不生效則=0
,不寫則默認生效;
gpgcheck
若是是 1 則表明 RPM 的數字證書生效,0 則不生效;
gpgkey
是數字證書公鑰文件保存的位置,不用修改。
若是你能聯網,直接用第一個YUM源就能夠了,若是你閒它太慢能夠改爲國內的服務器地址。
沒有網絡的狀況下,能夠用光盤來搭建本地 YUM 源。步驟以下:
掛載光盤
mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom/
使網絡 YUM 源失效,即:使 /etc/yum.repos.d/CentOS-Base.repo
文件失效,由於系統默認選擇的 YUM 源文件是網絡 YUM 源
能夠經過修改該文件的後綴名使其失效:
cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak
讓光盤 YUM 源生效,即:使 /etc/yum.repos.d/CentOS-Base.repo
文件生效,要改動該文件內的三個地方,以下圖所示:
兩張圖分別爲修改先後的內容。
驗證本地 YUM 源是否搭建完成,可藉助 yum list
命令,若在第三列看到 CentOs-Media.repo
的容器名稱即 c6-media
則表明搭建成功。
這樣一來,即便不能聯網還能經過本地 YUM 源進行軟件安裝。實際上在生產中不少人也更願意使用本地 YUM 源進行軟件安裝。
yum list // 用來查詢全部可安裝的軟件包(不支持本地) yum search keyword // 搜索和關鍵字相關的全部軟件包
若是咱們要使用某個命令提供的服務,如 nslookup
查看 DNS 相關信息,可是系統並無安裝該命令所在的軟件包,怎麼查詢呢?
- yum provides */keyword:如
yum provides */nslookup
,就能看到該命令屬於 'bind-utils' 這個軟件包- 接下來用 yum 安裝該軟件包便可:
yum -y install bind-utils
。
yum -y install 包名 // 安裝軟件包(自動解決依賴關係) 選項: -y 自動回答 yes 例如: yum -y install gcc // gcc 是 C 語言編譯器 yum –y update 包名 // 升級軟件包,不寫包名會升級全部 // 必需要有更高版本的軟件包,我的能夠升級,服務器上不建議(除非是嚴重漏洞) yum –y remove 包名 // 卸載軟件包
注意:服務器上應使用最小化安裝,用什麼裝什麼,儘可能別用 YUM 卸載!由於會卸載掉相關的依賴包,包括系統內核所依賴的包!
Yum軟件組管理命令:
yum grouplist // 列出如有可用的軟件組列表 yum groupinstall 軟件組名 // 安裝指定軟件組,組名能夠由 grouplist 查詢出來 yum groupremove 軟件組名 // 卸載指定軟件組
說明:
對於一些複雜的軟件(如中文支持),用組比較方便。
在遠程工具上,yum grouplist
會用中文顯示軟件組名,可是安裝敲命令的時候必需要用英文組名,咱們能夠修改系統默認語系:LANG=en_US
便可。要改回中文語系,能夠用 LANG=zh_CN.utf8
命令。這是臨時生效,要永久生效須要在文件 /etc/sysconfig/i18n
中修改(shell的環境變量中有詳細)。
咱們在上面對軟件包的分類中,有提到源碼包和二進制包的優缺點,在這裏就再也不贅述。實際上,上面提到的優缺點是在軟件安裝以前體現出來的差異,可是源碼包與二進制包(RPM)在安裝後還有一些區別。安裝前的區別主要是在概念上有所不一樣,能夠簡單地理解爲編譯前和編譯後的不一樣;而安裝後的區別主要是安裝位置的區別,而由安裝位置的區別又形成後續的管理方法的不一樣。
在上文中已經貼有一張圖,這邊再貼一次:
實際上,安裝者並不能決定 RPM 包安裝的位置,而 RPM 包的安裝位置是由編寫該安裝包的做者定義的,因此咱們在安裝的時候並不須要指定安裝位置。上圖是一個常見的 RPM 包所安裝的目錄,不表明全部的安裝包都按照這個目錄進行安裝。
不過 RPM 包仍是支持指定安裝位置的,由命令:rpm --prefix=<dir>
實現。可是咱們並不建議指定 RPM 包的安裝位置,緣由以下:
- 若不指定安裝位置,則會按照默認的位置安裝,系統能夠正常調用;
- 若指定安裝位置,則系統會去默認的安裝位置中找,反而找不到;
- 可是不指定安裝位置,默認的安裝位置會很零散,處處都是,可是咱們還有卸載命令
rpm -e 包名
。
源碼包的安裝位置能夠隨意指定,可是爲了方便管理,咱們一般安裝在 /usr/local/軟件名/
目錄下,軟件安裝包能夠保存在 /usr/local/src/
目錄中。可是咱們爲何要指定源碼包的安裝位置呢?由於源碼包並無卸載命令,若不指定安裝位置,則會裝獲得處都是,當咱們想要卸載該軟件時刪起來很麻煩;若指定了安裝位置,刪除安裝目錄便可。
管理方法的不一樣實際上就是啓動方法的不一樣:
- RPM 包在安裝時,若不指定安裝位置,則會安裝在默認位置,同時將啓動程序放在
/etc/rc.d/init.d/
目錄下,能夠經過service 軟件名 start|stop|restart
命令管理軟件。- 源碼包在安裝時,並不會將啓動程序放在該目錄下,因此也不能用 service 命令其管理源碼包安裝的程序,因此只能用絕對路徑來啓動或關閉。固然啦,也能夠將該軟件的啓動程序(以apache爲例默認放在
/usr/local/apache2/bin/apachectl
目錄下)複製到該目錄下而後用 service 命令來管理。
此外,還有一些命令也只能針對 RPM 包安裝的服務使用,如:查看服務自啓動狀態的命令 chkconfig --list
和管理服務自啓動的命令 ntsysv
,默認狀況下均不能對源碼包使用。
- 安裝 C 語言編譯器
gcc
:由於在 Linux 中,全部的源代碼包都使用 C 語言編寫的,因此咱們須要確保在安裝源碼包以前已經安裝了 C 語言編譯器。值得注意的是,gcc 必需要用二進制包安裝,由於 gcc 的源碼包也是 C 語言編寫的,須要進行編譯才能安裝。- 下載源碼包:安裝完了 gcc 以後,咱們能夠去官網下載源碼包,如 Apache 官網下載地址是
http://mirror.bit.edu.cn/apache/httpd
。新手練習的話能夠下載 2.2 版本的 Apache 源碼包,由於它不會報錯
- 源碼包的保存位置:
/usr/local/src/
。其中,usr
是用戶資源;local
是本地;src
指源碼包- 軟件安裝位置:
/usr/local/軟件名/
。其中,usr
是用戶資源;local
是本地如何肯定安裝報錯?
① 安裝過程中止(只有安裝過程中止了才能判斷) ② 看是否出現 error|warning|no 的提示(只須要看最後幾行便可)
- 下載源碼包
- 解壓下載的源碼包
- 進入壓縮目錄(必須執行,由於後續操做都在該目錄下進行)
執行
./configure 軟件配置與檢查
命令,可當作是編譯前的準備(基本上每一個源碼包都有這個命令或者相似的命令),執行完成會生成(寫入) MakeFile 文件,後續依賴該文件進行安裝
做用以下:① 定義須要的功能選項: ./configure --help 命令能夠看到支持的功能選項,須要的話在安裝的時候加上便可 如:./configure --prefix=/usr/local/apache2 其中,--prefix 選項的做用是在安裝時會自動建立 /usr/local/apache2/ 這個目錄,並將安裝期間產生的一系列文件都複製到該目錄下 ② 檢測系統環境是否符合安裝要求 如:檢測是否安裝了 gcc ③ 把定義好的功能選項和檢測系統環境的信息,都寫入 MakeFile 文件,用於後續的編輯- 執行
make
命令進行編譯。檢查有無報錯,若報錯可以使用make clean
清除編譯產生的緩存文件,恢復到 make 以前的狀態,再想辦法。
截止到目前,若出現錯誤,無需刪除/usr/local/apache2
目錄,由於還沒安裝- 執行命令
make install
對軟件進行安裝。檢查有無報錯,若報錯則刪除安裝目錄;若沒報錯能夠進入安裝目錄查看相關文件啓動該軟件:以 httpd 爲例執行
/usr/local/apache2/bin/apachectl start
。
注:如何知道 Apache 的啓動文件是 apachectl ?
在解壓的源碼包中有一個INSTALL
文件,裏面有相關信息以下圖所示:去瀏覽器上輸入 IP 地址測試服務是否開啓成功啦,若訪問不了能夠試試關閉 Linux 上的防火牆(setup)
源碼包無卸載命令,直接刪除安裝目錄便可
網頁保存位置是:/var/www/html/
,裏面默認是空的,能夠本身建立一個文件 index.html
網頁保存文件是:/usr/local/apache2/htdocs/index.html
,能夠 vi 進行編輯
腳本安裝包在本文一開始的分類中有介紹,很簡單,只要執行該腳本便可,腳本安裝包實際上仍是安裝 RPM 包或源碼包。這裏就再也不再也不贅述。
對於搭建複雜的環境 LNMP(Linux,Nginx,MySQL,PHP) 可使用腳本安裝包,這邊推薦一個網站:https://lnmp.org/