linux軟體包管理
軟體包管理器:
RedHat 系統中使用的是: rpm (redhat package manager) 現在稱:RPM is Package Manager
Debian : dpt
Ubuntu : apt
在安裝軟體的時候,有可能出現軟體包的相互依賴關係;所以紅帽公司推出了:yum(Yellowdog update modifier)
rpm包的種類
- 二進位制格式:發行商已經編譯好了,我們只要安裝上就可以直接使用;這種安裝最簡單,但是有時候可能因為硬體的不同,應用到不同的硬體平臺後,就有可能發揮不了硬體的優勢;
- 原始碼格式:發行商並沒有進行編譯,我們安裝上後,還要進行編譯才能使用;安裝雖然有點麻煩,但是可以針對自己的伺服器硬體來進行定製,能發揮硬體的最大效能;
rpm包的命名格式
包的組成部分:
主包:
bind-9.7.1-1..e15.i586.rpm
子包:
bind-libs-9.7.1-1..e15.i586.rpm
bind-utils-9.7.1-1..e15.i586.rpm
包名:
PackageName-Version-Release.Arch.rpm
bind-major-minor-releases-release.arch.rpm
包名-主版本號-次版本號-發行號-rpm包的製作者的發行號.硬體平臺.rpm
主版本號:重大改進;
次版本號:某個子功能發生重大變化;
發行號:修改BUG,調整了一點功能;
bind-9.7.1-1.noarch.rpm 這裡的noarch表示不區分硬體平臺,32和64都可以使用;如果是ppc則是在PowerPc上使用的包;
rpm命令
- 安裝
# rpm -ivh /path/to/Package_Name
-i,--install 表示安裝
-v 表示顯示安裝過程的資訊
-h 表示以#顯示安裝的程序,總數為50個;
-vv 顯示更詳細的過程;
--nodeps 安裝的時候忽略依賴關係;
--force 無論之前是否安裝過,都強制安裝,可以實現重灌、降級;
--replacepkgs 重新安裝,替換原有的安裝;
--oldpackage 對軟體包進行降級;
--test Do not install the package, simply check for and report potential conflicts. 不進行安裝,只測試看在安裝的時候有沒有依賴包要裝;
- 查詢
rpm -q soft_name
# rpm -q httpd
rpm -qa 查詢當前系統中已經安裝的rpm軟體包;
# rpm -qa |grep ‘ssh*’
rpm -qi soft_name 查詢軟體包的安裝資訊:
[root@ns2 rpm]# rpm -qi zlib-devel
Name : zlib-devel Relocations: /usr
Version : 1.2.3 Vendor: CentOS
Release : 4.el5 Build Date: 2011年05月11日 星期三 18時57分15秒
Install Date: 2013年07月21日 星期日 17時02分41秒 Build Host: builder10.centos.org
Group : Development/Libraries Source RPM: zlib-1.2.3-4.el5.src.rpm
Size : 269981 License: BSD
Signature : DSA/SHA1, 2011年09月04日 星期日 03時24分25秒, Key ID a8a447dce8562897
URL : http://www.gzip.org/zlib/
Summary : Zlib 開發的標頭檔案和庫。
Description :
zlib-devel 軟體包包括開發使用 zlib 壓縮和解縮庫的程式
所需的標頭檔案和庫。
[root@ns2 rpm]#
rpm -ql soft_name 檢視該軟體包在系統中存放了哪些檔案;
rpm -qf /path/to/file_name 檢視該檔案是由哪個rpm包生成的。
rpm -qc soft_name 檢視指定rpm包安裝的配置檔案的位置;
rpm -qd soft_name 檢視指定rpm包安裝的幫助檔案的位置;
rpm -q --scripts soft_name 檢視指定rpm包在安裝、解除安裝、更新的前後,所要執行的shell指令碼;
- 查詢還未安裝的軟體包的相關資訊:
rpm -qp[i|l|d|c|] 即要加上一個“p”選項;
- 升級
rpm -Uvh /path/to/package_name
如果安裝的指定的軟體包已經安裝過,則進行升級操作,如果沒有安裝過,則就使用指定的這個軟體包進行安裝;
rpm -Fvh /path/to/package_name
如果安裝過,則升級,否則不進行任何操作;
rpm -Fvh --oldpackage package_name 通常用這個來降級一個rpm包;
- 解除安裝
rpm -e package_name
--nodeps 強制解除安裝
- 校驗
rpm -V package_name 也可以使用--verify
通常用來檢查安裝後的檔案是不是被修改過;
- 驗證rpm的完整性和簽名
加密演算法:
對稱加密: 加密和解密使用同一個key
非對稱加密:有一對金鑰(公鑰和私鑰),公鑰大家都可以知道,私鑰只有持有人知道;公鑰加密私鑰解,私鑰加密公鑰也可以解。不能由公鑰摧出私鑰,也不能由私鑰摧出公鑰;私鑰還用來做簽名,因為只有私鑰持有人自己才有;
單向加密:使用這種加密演算法加密後,是不可以再還原的。通常用它來做資料完整性的驗證,也就是驗證資料在傳輸的過程中有沒有被別人修改過。
在紅帽的系統中,/etc/pki/rpm-gpg/目錄下面存放了紅帽公司的gpg-key(相當於公鑰),所以只需要把這個gpgkey匯入到系統中就可以驗證了。匯入方法如下:
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
接下來就可以對將要安裝的rpm包進行驗證了:
# rpm -K /path/to/package_file
dsa,gpg驗證來源的合法性,也就是驗證簽名。但是可以使用--nosignature 來跳過簽名驗證;
sha1,md5驗證軟體包的完整性,可以使用--nodigest 來跳過完整性驗證;
- 重建rpm包資料庫:
rpm --rebuilddb 重建資料庫
--initdb 初始化資料庫
yum相關命令
yum install -y pack1 pack2 安裝指定的軟體包
yum remove pack1 pack2 -y 刪除指定的軟體包
yum update pack1 pack2 更新指定的軟體包
yum list installed 列出所有已經安裝的軟體包
yum update 更新源
yum search string 搜尋包含string的軟體包
yum install package_name 獲取軟體包資訊
原始碼安裝
- 解壓:
# tar zxf nginx-1.4.7.tar.gz -C /usr/src
- 配置:
# configure --prefix=/usr/local/nginx --conf-path=/etc
- 編譯:
# make
- 安裝:
# make install
由於使用的是原始碼包安裝在非正常路徑下。所以還要做以下的調整:
- 修改PATH環境變數,讓系統能夠找到此程式的二進位制檔案;
修改/etc/profile檔案。或是在/etc/profile.d/下建立一個以.sh結尾的檔案;再把二進位制程式的路徑export出來就行了;
- 預設情況下,系統搜尋庫檔案的路徑是/lib,/usr/lib,/lib64,/usr/lib64;要增加額外的搜尋路徑;
在/etc/ld.so.conf.d/中建立一個以.conf檔案結尾的檔案,而後把要增添的路徑直接寫入此檔案中就行了;
這樣系統就會在下次啟動的時候,自動載入這些新增加的庫;如果想讓系統馬上可以找到這些新增加的庫,就必須執行下面的命令:
# ldconfig 通知系統重新搜尋庫檔案,還可以加上-v選項,表示顯示過程;
- 將標頭檔案輸出給系統:
預設的標頭檔案搜尋路徑是:/usr/include/
要新增新的標頭檔案搜尋路徑,可以使用連結的方式:
ln -s /usr/local/nginx/include/* /usr/include/
或
ln -s /usr/local/nginx/include /usr/include/nginx
- man檔案路徑:當使用原始碼包安裝的時候,程式的man手冊會安裝在--prefix指定的目錄下面,名叫:man,
這時可以修改/etc/man.conf檔案,在裡面新增以下內容:
MANPATH /usr/local/nginx/man
還有一種方式就是臨時使用:
# man -M /usr/local/nginx/man nginx 這樣就可以檢視nginx的man手冊了;