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手冊了;