1、軟件包管理簡介 node
1、軟件包組成 算法
咱們都在windows系統中安裝過軟件,基本就是用鼠標點擊下一步,於是有些人認爲安裝軟件是一件很是容易的事,不管是在何種操做系統上。然而,事實並不是如此。在Linux系統上安裝軟件的方法徹底不一樣於在Windows上安裝,至少不會是簡單的用鼠標點擊下一步就好了。要想在Linux系統上安裝軟件包,首先要了解軟件包的組成。數據庫
軟件包由二進制程序、庫文件、配置文件、幫助文件等重要部分組成。windows
軟件包的安裝目錄以下:
centos
二進制程序:
安全
默認:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, bash
/usr/local/sbin服務器
自定義:/usr/local/APP/{bin,sbin}ide
庫文件(開發庫和運行庫):
工具
默認:/lib64, /usr/lib64, /usr/local/lib64
自定義: /usr/local/APP/lib
配置文件:
默認:/etc
自定義:/usr/local/APP/etc或conf目錄
幫助文件:
默認:/usr/share/man, /usr/local/share/man
自定義:/usr/local/APP/man
2、軟件包管理
問:安裝軟件包時,會在不少不一樣的目錄下存放文件,若是要卸載軟件包,怎樣才能卸載得乾淨呢?
答:若是在安裝軟件包時,把安裝存放軟件包文件的目錄記錄下來,卸載時,根據這個記錄就能把軟件包卸載得乾淨。這就是軟件包管理器中數據庫的做用了!
在Linux系統中,通常會使用軟件包管理工具對軟件包進行管理。
程序包管理器功能:將編譯好的程序打包成一個文件或有限的幾個文件,可用於實現安裝、卸載、升級、查詢等功能;
程序包管理器中應該包含:
(1)數據庫:
程序名及版本
程序的依賴關係:X --> Y,Z (X依賴於Y、Z)
程序的功能性說明
安裝生成的各文件路徑及校驗碼
(2)程序的組成清單:
文件清單
安裝卸載時運行的腳本
常見的軟件包管理器有:
Debian: dpkg,(以.deb後綴結尾)
RedHat: rpm(redhat package manager),(以.rpm後綴結尾)
2、rpm包介紹
RPM是RedHat Package Manager(RedHat軟件包管理工具)的縮寫,這一文件格式名稱雖然打上了RedHat的標誌,可是其原始設計理念是開放式的,如今包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,能夠算是公認的行業標準了。
利用rpm軟件包管理工具能夠把軟件包打包成rpm格式(以.rpm爲後綴),rpm包能夠用rpm工具統一管理。
一、rpm包命名格式
rpm包命名格式:name-version-relase.arch.rpm
name : 表示軟件包的名字,包括主包名和分包名
分包機制:
核心包,主包:命名與源程序一致
bash-4.2.3-3.centos7.x86_64.rpm
子包:(在主包名後加上子包的功能性描述字串)
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
version:包源代碼的版本號
version: major.minor.release
主版本號.次版本號.源代碼的發行版本號
relase :rpm自身的發行號,與程序源碼的發行號無關,僅用於標識對rpm包不一樣製做的修訂;同時,release還包含此包適用的OS
如:bash-4.2.3-3.centos5
arch :該程序包使用的硬件平臺
如:x86: i386, i486, i586, i686等;
x86_64: x86_64
powerpc: ppc
noarch: 依賴於虛擬機
二、rpm包獲取的途徑
(1)發行的光盤或站點服務器
鏡像:
http://mirrors.163.com
http://mirrors.sohu.com
(2)項目的官網
源代碼
rpm包
(3)不少第三方機構或我的製做並公開發布許多rpm包(不必定安全)
http://rpmfind.net
http://rpm.pbone.net
(4)可靠的途徑:EPEL(建議使用可靠的包)
Fedora-EPEL(Fedora官方維護,會驗證包的合法性和可靠性)
三、rpm包的合法性驗正
rpm包的合法性驗正主要包括:
a、來源合法性
b、包的完整性
(包製做者製做完成以後會附加數字簽名於包上)
包的製做者使用單向加密提取原始數據的特徵碼,然後使用本身的私鑰加密這段特性碼,附加原始數據後面。
驗正過程:
前提:必須有可靠機制獲取到包製做者的公鑰;
(1)使用製做者的公鑰解密加密的特徵碼,能解密則意味着來源合法;
(2)使用與製做者一樣的意向加密算法提取原始數據的特徵碼,並與解密出來的特徵做比對,相同,則意味着完整性沒問題;
3、rpm的核心功能
一、安裝程序包
安裝程序包:
rpm [option] /path/to/package_file (要指明包文件才能安裝)
-i: install 安裝指定的程序包
-v: 顯示詳細的安裝信息
-vv: 顯示更詳細的安裝信息
-vvv: 顯示更多的詳細安裝信息(比-vv更詳細)
-h: 使用「#」顯示安裝進度,一個「#」表示%2的安裝進度
組合選項:-ivh
--test: 僅做測試,沒有真正執行安裝
若是依賴於其它包:
(1)解決依賴關係
(2)忽略依賴關係
能安裝上,但有可能沒法運行;
--nodeps (忽略依賴關係)
從新安裝:
--replacepkgs
若是原有配置文件做了修改,頗有可能不執行替換,而是將應該安裝生成的配置文件重命名爲 .rpmnew
二、卸載程序包:
rpm [option] package_name
-e: erase 卸載指定包名的程序包
若是被其它包所依賴:
(1)將依賴於此包的全部包一併卸載
(2)忽略依賴關係
能卸載,但依賴於此包程序包可能會運行不正常;
--nodeps (忽略依賴關係)
若是包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如:
warning: /etc/zprofile saved as /etc/zprofile.rpmsave
三、升級程序包:
新版本替換老版本
rpm [option] /path/to/package_file
(1)升級或安裝
-Uvh (若是裝有老版本的,則升級,不然,則安裝)
(2)純升級
-Fvh (若是裝有老版本的,則升級,不然,退出)
--force: 強制升級
注意:不該該對內核執行升級操做,而是安裝
系統容許多內核並存
四、查詢操做:
(1)查詢某包是否安裝
rpm -q package_name...
(2)查詢全部已經安裝的包
rpm -qa
按條件過濾:rpm -qa | grep 'PATTERN'
(3)查詢包的描述信息
rpm -qi package_name
(4)查詢某包安裝生成了哪些文件
rpm -ql package_name
a、查詢某包安裝生成了哪些配置文件
rpm -qc package_name
b、查詢某包安裝生成了哪些幫助文件
rpm -qd package_name
c、查詢程序包的相關腳本
rpm -q --scripts package_name
腳本有四類:
preinstall:安裝前腳本
postinstall: 安裝後腳本
preuninstall: 卸載前腳本
postuninstall: 卸載後腳本
(5)查詢某文件是由哪一個包安裝生成的
rpm -qf /path/to/some_file
(6)對還沒有安裝的包執行查詢
rpm [option] /path/to/package_file
-qpi :查詢還沒有安裝的包的描述信息
-qpl :查詢還沒有安裝的包安裝後會生成哪些文件
-qpc :查詢還沒有安裝的包安裝後會生成哪些配置文件
-qpd :查詢還沒有安裝的包安裝後會生成哪些幫助文件
五、校驗:
用於檢查包安裝生成的文件屬性是否發生變化
rpm -V package_name
S file Size differs (大小發生了改變)
M Mode differs (includes permissions and file type) (權限發生改變了,包括文件類型)
5 digest (formerly MD5 sum) differs (MD5校驗碼發生了改變)
D Device major/minor number mismatch (設備文件的主設備號或次設備號發生了改變)
L readLink(2) path mismatch (路徑發生了改變)
U User ownership differs (屬主改變了)
G Group ownership differs (屬組改變了)
T mTime differs (修改時間變化了)
P caPabilities differ (能力發生改變了)
某屬性無變化,顯示爲.
六、rpm包來源合法性及完整性檢驗:
前提:在當前系統上導入包的製做者的公鑰
導入:
rpm --import /path/to/key_file
# rpm -qa gpg-pubkey*
顯示全部已經導入的gpg格式的公鑰
# rpm -qi gpg-pubkey-NAME
顯示密鑰的詳細信息
檢查包:安裝過程當中會自動執行
手動檢查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
不檢查包完整性:
rpm -K --nodigest
不檢查來源合法性:
rpm -K --nosignature
七、數據庫重建:
數據庫目錄:/var/lib/rpm
重建:
rpm --initdb:初始化
若是事先沒有庫,會新建一個;若是有,則不新建;
rpm --rebuilddb: 重建
直接重建,覆蓋原有的數據庫