一、簡介
在windows系統上我們安裝軟件的時候加上了一些與這些程序相關的信息,將他建立稱為了數據庫,就可以實現軟件的安 裝、卸載、升級與驗證了,類似於windows的“添加刪除程序”。由於在linux系統上利用源碼包設置編譯參數、實際編譯、最後還要根據需要的方式來安裝程序,這個過程很是麻煩,而且對於不熟悉整個系統的用戶來說,更是一種負擔,所以後來在我們linux系統下至有兩種常見的套件管理程序,分別是RPM和Debian的dpkg,其中RPM最為常見,那麼晚我們 下面就來介紹下RPM。
RPM的全名為“RedHat Package Manager”,顧名思義它是由RedHat公司開發的。Rpm是以一種數據庫記錄的方式將所 需要的套件安裝到linux主機的一套管理程序,它最大的特點就是將要安裝的套件先編譯並打包,通過包裝好的套件中默 認的數據庫記錄,記錄這個套件在安裝的時候所依賴的屬性模塊。用戶在安裝的時候,RPM會根據套件裡的記錄信息,查 詢主機的依賴屬性套件是否滿足,如滿足則給予安裝。若不滿足在不給於安裝、安裝的時候將該套件的信息全部寫入RPM 的數據庫中,以方便將來的查詢、驗證與卸載。這樣做的優點:
1、由於已經編譯完成並且打包,所有安裝方便。
2、由於套件信息已經記錄在了Linux主機的數據庫中,方便查詢、升級與卸載。
當然其也有其缺點,由於所有的數據已經編譯完成,所以安裝的時候一定需要當初安裝時的主機環境,也就是說,當初建立這個套件的安裝環境,必須在用戶主機上出現,如果不出現就無法進行安裝。缺點主要如下:
1、安裝環境必須與打包時的環境一致
2、需要滿足套件的依賴屬性需求
3、卸載時需要特別小心,最底層的套件不可先刪除,否則可能對整個系統造成問題。
RPM程序的數據庫位置/var/lib/rpm,這裡面定義了關於RPM管理的所有屬性,當然我們如果還可以更新這個數據庫的,
rpm --rebuilddb:重建數據庫,一定會重新建立。
rpm --initdb:初始化數據庫,沒有才建立,有就不用建立。
RPM相關軟件包名字格式:
name-version-release.arch.rpm
name-version-release-release.arch.rpm
version:主版本號.此版本號.發行版本號.平台.rpm,對於其命名需要遵循以下規則:
主版本號改變:軟件的功能發送了重大的改變。
此版本號改變:某個子功能發生了重大變化
發行號改變:修改了部分bug,調整了一點點小功能。
二、
linux下軟件管理套件RPM的出現大大降低了基本軟件的安裝和升級等管理難度,當然linux此'出生'一來就是 一一切皆文件、系統字符界面而著稱的,所以雖然軟件管理套件可以幫我們實現那麼大的功能,也不會像windows上面的 那樣,我們還需要掌握關於RPM的相關命令才能實現軟件的安裝、升級、卸載等功能,當然現在也有了圖形界面下軟件的 管理套件,但是我們linux系統的偉大之處是可以穩定、永久不宕機的提供服務的系統,我們不會讓其運行在圖形界面下 的,所以作為一個合格的linux系統運維人員掌握軟件的管理命令是必備、基礎的要求了。下面我們來介紹介紹關於RPM 的相關命令吧~~~
RPM命令主要包括四類:安裝、查詢、升級、卸載
⑴、rpm安裝命令
rpm -i /PATH/TO/PACKAGE_FILE:安裝軟件包
rpm -h :以#顯示安裝進度,每個#表示2%
rpm -v :顯示安裝詳細信息
rpm -vv :更詳細的信息
rpm -ivh :組合使用,一般使用這個組合來安裝軟件
rpm --nodeps:忽略依賴關系。
rpm --replacepkgs:重新安裝、替換原來安裝。
rpm -ivh --oldpackage:降級安裝。
rpm -ivh --force:強行安裝,可以實現重裝或降級
rpm --test:僅測試有沒有依賴關系
實例:
安裝zsh的安裝包
rpm --test:僅測試有沒有依賴關系
⑵、rpm軟件查詢命令:
rpm -q PACKAGE_NAME:查詢指定的包是否安裝
rpm -qa :查詢以安裝的所有包
rpm -qi PACKAGE_NAME:查詢指定包的說明信息
rpm -ql PACKAGE_NAME:查詢指定包安裝後生成的文件列表
rpm -qc PACKAGE_NAME:查詢指定包安裝的配置文件
rpm -qd PACKAGE_NAME:查詢指定包安裝的幫助文件
rpm -q --scripts PACKAGE_NAME:查詢指定包中包含的腳本
rpm -qf /path/to/somefile:查詢指定的文件時由那個rpm包安裝生成的
如果某個rpm包尚未安裝,我們需要查詢其說明信息,安裝後會生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE
i:軟件說明信息
rpm -qpL /PATH/TO/PACKAGE_FILE
L:軟件文件列表
⑶、軟件升級命令:
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則,則安裝
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則,則退出
rpm -Uvh --oldpackage 低版本的包:降級
⑷rpm軟件卸載命令:
卸載的時候此包不能被其他軟件包依賴
rpm -e PACKAGE_NAME //直接卸載、但是此時如果卸載的軟件被其他軟件包多以來的話則不能卸載
rpm –nodeps //忽略軟件包之間的依賴關系
⑸、其他相關命令
rpm軟件校驗命令:
rpm -V PACKAGE_NAME:無輸出信息就是正常,(linux的哲學思想:沒有回答則是最好的回答!嘿嘿~~)
rpm重建數據庫:
數據庫位置:/var/lib/rpm
rpm --rebuilddb:重建數據庫,一定會重新建立。
rpm --initdb:初始化數據庫,沒有才建立,有就不用建立。
rpm檢驗來源合法性及軟件完整性:
加密類型:
對稱:加密解密使用同一個秘鑰
公鑰:一對秘鑰,公鑰、私鑰;公鑰隱含與私鑰中,可以提取出來並公開出去。
公鑰:加密,私鑰:身份驗證
紅帽公鑰:ls /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:導入秘鑰文件
rpm -K /PATH/TO/PACKAGE_FILE
dsa,gpg:驗證來源合法性,也即驗證簽名;可以使用--nosignature,略過此項
sha1,md5:驗證軟件包完整性;可以使用--nodigest,略過此項
rpm -K --nodigest /PACKAGE_NAME:只驗證簽名。
三、YUM
從上面我們學會了利用rpm套件管理工具在linux系統上進行軟件包的安裝、升級、查詢、卸載等相關命令的操作和方法,
但是我們從上面了解到我們利用rpm來進行安裝軟件的時候會存在軟件包之間的依賴關系,而rpm並不能自己智能的解析其
各個包之間的依賴關系,但是如果我們利用rpm –nodeps和rpm -ivh --force進行安裝的時候很可能造成安裝的軟件
無法正常運行,為了解決這個問題,後來又出現了一個功能更強大的工具:YUM,yum在rpm的基礎上很好的解決了軟件包
之間的依賴關系。
YUM是一種基於C/S架構的服務,需要Server和Client來進行使用,即yum倉庫和本地的yum工具。
⑴、 服務器端配置:yum倉庫可以是本地文件、ftp服務器和http服務器。在其服務器端有yum倉庫的配置文件,yum倉庫的配置文件叫YUM的元數據文件,元數據文件需要存放在一個叫repodata的目錄下面,其目錄和組成yum池的rpm包需要同處於同一個目錄下,下面我們來認識一下yum的元數據把~~
各個元數據文件的解釋:
primary.xml.gz:定義了當前倉庫中所有的rpm包列表以及各包之間的依賴關系和每個軟件包安裝生成的文件列表
filelists.xml.gz:當前倉庫中所有RPM包的文件列表
other.xml.gz:額外信息,rpm包的修改日志
repomd.xml:記錄的是上面三個文件的時間戳和校驗和
comps-*.xml:RPM包分組信息(需要手動定義)
⑵、YUM服務客戶端的配置
首先確定我們系統上面安裝了yum服務軟件包:yum-3.2.22-39.el5,可以利用rpm –q yum來進行查看,趁著也聯系聯系使用上面的rpm命令~嘿嘿
客戶端配置文件在/etc/yum.repos.d/*.repo文件內進行定義,可以定義多個.repo文件,也可以在一個repo文件定義多個yum服務器,其格式如下:
[Repo_ID]
name=Description
baseurl=yum倉庫路徑
enabled={0|1}:是否啟用此倉庫,默認不寫的時候是啟用
gpgcheck={0|1}:校驗文件的完整性
注:關於yum倉庫的路徑有三種:
ftp服務器的時候: ftp://…..
http服務器的時候:http://…..
本地文件的時候: fiel:///
⑶、上面我們完成了YUM服務的相關配置,那麼我們下面來說說關於yum操作的相關命令吧
yum list:查看yum列表
yum list all:默認選項,會列出所有的yum庫
yum list available:列出倉庫中未安裝的包
yum list installed:列出顯示已經安裝的軟件
yum list updates:列出可以升級的軟件包
yum clean:清除緩存
yum clean {packages | headers | metadata | dbcache | all}:清除緩存再查看會再次統計數據並顯示出來。
⑷、yum的安裝命令
yum install PACKAGE_NAME //安裝軟件、此項選擇會讓你選擇
yum –y install PACKAGE_NAME //直接自動完成軟件的安裝
yum install --nogpgcheck:不做校驗,安裝軟件,
yum update PACKAGE_NAME : 升級軟件包
yum update_to PACKAGE_NAME :升級到指定版本
yum remove|erase PACKAGE_NAME :卸載軟件
yum info PACEAGE_NAME:查看軟件包信息
yum provides|whatprovides file:查看指定文件是由那個軟件包生成的
⑸、yum關於組的管理命令
yum grouplist //查看組,包括安裝或未安裝的
yum groupinstall GROUPNAME //安裝組,注意如果組名中間有空格,需要使用雙引號
groupinfo 組名:顯示組包含包信息(如果組名中間有空格,使用"")
四、源碼程序安裝
1、在我們進行編譯安裝的時候需要提前安裝編譯軟件需要的開發環境和開發庫:"Development Tools"和”Development Libraries“
先配置好yum庫,然後利用yum庫安裝
yum –y groupinstall "Development Tools" //安裝開發工具
yum groupinstall -y "Development Libraries" //安裝開發庫
2、解壓源碼程序包
3、cd 進入源碼解壓目錄
./configure //編譯安裝配置命令
./config –help //查看編譯幫助信息
yum groupinstall -y "Development Libraries"
--sysconfdir=/PATH/TO/CONFFILE_PATH:配置文件安裝路徑,如果不指定則在安裝目錄下的config目錄下
make編譯
make install安裝
4、安裝完成以後我們需要對我們自定義安裝的軟件進行設置,設置環境和man等信息
修改PATH環境變量,以便識別此程序的文件路徑:在/etc/profile.d/目錄下簡歷一個以.sh為後綴的文件,在裡面定
義export PATH=$PATH:/path/to/somewhere
要想此配置生效,重新登錄或者自己手動執行此腳本
5、庫文件配置:默認情況下,系統搜索庫文件的路徑為/lib,/usr/lib;要增加額外的搜尋路徑:在/etc/ld.so.conf.d/中創建以.conf為後綴的文件,然後把要增加的路徑直接寫至此文件中。
ldconfig:通知系統重新搜尋庫文件。
ldconfig -v:顯示重新搜尋庫的過程
6、頭文件輸出
默認是/usr/inclode
增添頭文件搜尋路徑,使用鏈接進行
添加頭文件有兩種方式:ln -s /usr/local/tengine/include/* /usr/include/ 或者
ln -s /usr/local/tengine/include /usr/include/tengine
7、man文件路徑添加
man文件路徑:默認安裝在--prefix指定的目錄下的man目錄內,而系統默認的是/usr/share/man,我們需要在/etc/man.conf內定義man 的查找路徑:在/etc/man.config內添加一條MANPATH
下面我們通過編譯、安裝web服務器來說明編譯安裝的相關過程
1、安裝開發環境
2、解壓源碼包
tar xf httpd-2.2.22.tar.bz2
3、進入解壓包,然後配置參數、編譯、安裝
cd httpd-2.2.22 //進入源碼目錄
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd //設置安裝目錄/usr/local/apache,配置文件為/etc/httpd
make && make install //編譯和安裝
下面啟動httpd服務吧~~測試一下能否做成工作
是不是啟動不了?哈哈~那就對了,那是因為現在我們自定義的軟件的命令不在當前的環境變量中
那麼下面我們來在系統內添加一下環境變量吧~~
vim /etc/profile.d/httpd.sh ,添加如下內容
export PATH=$PATH:/usr/local/apache/bin //增加環境變量
此時若想環境變量生效可以重新登錄客戶端或者執行一下這個腳本
這裡執行下腳本吧~~看看能不能生效
. /etc/profile.d/httpd.sh
httpd
下面我們來測試一下吧~
為了更好的說明效果,我們把主頁內容更改一下~~
刷新下網頁,查看下內容
ok,到此就可以實現比較簡單的web服務了,但是此時是那麼的丑,所以我們需要對其程序進行進一步的優化,man文件、頭文件、庫文件、服務啟動腳本等信息增加等相關操作,由於此處所說內容已經比較多了,暫時把其相關的操作我們就在下一篇博文內進行討論吧~當然我們利用上面的有關內容是可以自己實現的~對吧,大俠們!下篇博文暫定為“黃金組合LAMP”~~嘿嘿,四天之後放出,到時候希望大家給還是菜鳥的我指正錯誤--linux系統博大精深,需要逐步、深入!
上面所說內容只是個人總結,還望各位大俠不吝賜教!指出其中錯誤~~~~--chrinux(chris linux)。
本文出自 “Chris—on the way” 博客,請務必保留此出處http://chrinux.blog.51cto.com/6466723/1193854