Linux程序包管理:RPM和YUM
就像Window一樣,我們安裝了windows系統如果沒有相應的應用軟件,如OFFICE,IE,等各種軟件,用戶是無法使用計算機,linux 完成各種應用功能,也需要各種應用程序,所以程序包的管理就非常必要。
Linux平臺的內核功能:進程管理、內存管理、網絡協議棧、驅動程序、...
應用程序:
早期的linux程序包的組成部分:
二進制程序:/bin, /sbin,/ /usr/bin, /usr/sbin,
庫文件:/lib64, /usr/lib64
配置文件:/etc
幫助文件:manual, info,
所以早期在linux上安裝管理應用程序非常的不便。直到包管理器的出現
包管理器的作用:打包,包管理(安裝、升級、卸載、查詢及校驗)
deb: debian 最早的包管理器
rpm: redhat package manager 現在最爲流行的包管理器,
RPM is Package Manager
如何獲取rpm包:
1、發行版提供的程序包;
2、Fedora-EPEL
3、項目的官方站點
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
CentOS識別光盤用的設備文件:/dev/cdrom
以下是我的操作:
基於rpm命令實現程序包管理:
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i: 安裝軟件包
-v:顯示詳細過程,-vv, -vvv
-h:軟件包安裝的時候列出哈希標記 (和 -v 一起使用效果更好)
由於每個rpm包都提供一個或多個capabilities,所以rpm包會有依賴關係
--nodeps:忽略依賴關係安裝
--replacepkgs:重裝程序包
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh: 如果有舊版程序包,則升級之;如果沒有,則安裝之;
-Fvh: 如果有舊版程序包,則升級之;如果沒有,則不安裝;
--nodeps:不驗證軟件包依賴
--oldpackage:降級;linux服務器要的是穩定,所以有時我們需要降級,經常使用
先升級:
卸載:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
查詢:
rpm {-q|--query} [select-options] [query-options]
查詢選項:
-qa: 查詢本機已經安裝的所有程序包;
-qf /PATH/TO/SOMEFILE: 查詢此處的文件由哪個程序包安裝生成;
-qc: 查詢指定程序包安裝生成的配置文件
-q --scripts:查詢程序包相關的腳本:
preinstall: 安裝前腳本
postinstall:安裝後腳本
preuninstall: 卸載前腳本
postuninstall: 卸載後腳本
-p: 查詢針對是未安裝的程序包文件;
校驗:
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
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 --import /PATH/TO/KEY_FILE
校驗:rpm -K /PATH/TO/RPM_FILE
YUM: Yellowdog Updater Modified
yum repositories:
文件服務器:
ftp://hostname/PATH/TO/REPO
http://hostname/PATH/TO/REPO
file:///PATH/TO/REPO
yum程序的配置文件:
/etc/yum.conf
定義全局配置:對所有倉庫都適用的配置
/etc/yum.repos.d/*.repo
一個文件通常用於一個或一組功能相近或相關的倉庫
定義一個YUM倉庫指向:
[REPO_ID] 倉庫的名字,不能與其他倉庫重名
name= 說沒倉庫的意義
baseurl= 定義倉庫的實際有效地址
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE 該倉庫的鏡像站點
enabled={1|0} 1表示啓用,0表示不啓動,默認爲啓用
gpgcheck={1|0} 檢驗包的合法,完整,0爲不啓動
gpgkey= 公鑰文件的位置
cost= 倉庫的開銷
定義倉庫指向可用變量:
$releasever: 引用當前系統的主版本號;
$basearch: 當前系統的基本架構;
i386, i486, i586, i686: i386
例如: http://mirrors.magedu.com/CentOS/$releasever/os/$basearch
yum命令:
yum [options] [command] [package ...]
命令:
安裝:install
卸載:remove
查詢:
info
search KEYWORD
list all|installed|availiable
provides /PATH/TO/SOMEFILE: 查詢指定文件由哪個包安裝生成
重新安裝:reinstall
清理緩存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生動生成緩存:makecache
包組:
grouplist
groupinfo "GRP_NAME"
groupinstall "GRP_NAME"
groupremove "GRP_NAME"
倉庫:
repolist [all|enabled|disabled] 列出所有可用倉庫,默認是all
repoinfo [all|enabled|disabled] 查看倉庫相關信息
如何使用光盤當做本地倉庫:
掛載光盤至某目錄
1:掛載光盤到/media/cdrom
2:/創建並編輯/etc/yum.repos.d/cdrom.repo文件,定義倉庫,使用file:///指明其訪問路徑;
添加如下:
3:備份源倉庫文件並改名:
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
創建本地倉庫:
yum install createrepo
createrepo /PATH/TO/RPMFILES/