程序包管理:
內核功能:進程管理、內存管理、網絡協議棧、驅動程序、...
應用程序:
包管理器:打包,包管理(安裝、升級、卸載、查詢及校驗)
deb: debian
rpm: redhat package manager (早起使用perl語言寫)
RPM is Package Manager ————>通過C語言實現,性能大幅提升
程序包的組成部分:
二進制程序:/bin, /sbin,/ /usr/bin, /usr/sbin, 可執行文件
庫文件:/lib64, /usr/lib64 共通的功能通過庫文件進行互通
配置文件:/etc 通過配置文件來定義工作屬性
幫助文件:manual, info, 程序基本使用方式
包管理器:
打包:一個單一的歸檔文件中;
安裝:把打包的文件展開在當前系統上,各種文件放置在正確的路徑下
卸載:把每一個安裝生成的文件蒐集起來,並且刪除
升級:新版本文件替換老版本的文件
查詢:查詢安裝的程序包的信息
校驗:程序包安裝後是否又被篡改等(來源的合法性、完整性)
rpm包:
打包工具:rpmbuild: 基於specs文件進行打包
一個rpm包總共包含10個功能,5個常用,3個少用,2個基本不用;但是打包只打了5個常用功能,此時就需要“分包機制”來解決有些人需要3個少用的情況。
分包機制:
testapp-VERSION.tar.gz
核心包:testapp-VERSION
支包:testapp-devel-VERSION
VERSION:major(主版本號).minor(次版本號).release(修正版本號)
base-4.2.4.tar.gz
主版本號定義了應用程序最關鍵的功能。
次版本號一般是小功能的改進
修正版本號一般是修復bug等
rpm包的命名機制:
name(報名)-VERSION(RPM包的Version)-RELEASE(發行版本號).ARCH(架構).rpm
bash-4.2.4-1.el7.x86_64.rpm
bash-devel-4.2.4-1.el7.x86_64.rpm
包和包之間:有可能存在依賴關係:
X --> Y Y的功能需要X來支持。
rpm數據庫:/var/lib/rpm/ 記錄了包名,生成的文件,校驗碼等
如何獲取rpm包:
1、發行版提供的程序包;
2、Fedora-EPEL
3、項目的官方站點
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
CentOS識別光盤用的設備文件:/dev/cdrom,
首先建立光盤的一個掛載點,然後將光盤進行掛在到這個點上。、
mkdir /var/mnt
mount /dev/cdrom /var/mnt
基於rpm命令實現程序包管理:
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i:安裝
-v:顯示詳細過程,-vv, -vvv
-h:用#來顯示安裝進度
[root@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
-vv:可以展示出非常具體的安裝信息,哪些個文件被裝到哪個路徑下面等信息。
每個rpm包都提供一個或多個capabilities
[root@Centos6 Packages]# rpm -ivh php-mysql-5.3.3-40.el6_6.x86_64.rpm warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-mysql-5.3.3-40.el6_6.x86_64 php-pdo(x86-64) is needed by php-mysql-5.3.3-40.el6_6.x86_64
上圖表示依賴關係沒有解決。不給安裝
--nodeps:忽略依賴關係安裝
php-mysql-5.3.3-40.el6_6.x86_64.rpm --nodeps warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:php-mysql ########################################### [100%]
加上參數--nodeps則忽略依賴關係進行安裝。
--replacepkgs:重裝程序包
對已經存在的包需要重新安裝,則可以使用這個參數
[root@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] package zsh-4.3.11-4.el6.centos.x86_64 is already installed
表示zsh這個包已經安裝了。
使用--replacepkgs參數重新安裝
[root@Centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm --replacepkgs warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh: 如果有舊版程序包,則升級之;如果沒有,則安裝之;
升級也是使用Install的選項,比如--nodeps等
-Fvh: 如果有舊版程序包,則升級之;如果沒有,則不安裝;
--nodeps
--oldpackage:降級;升級版本比原先版本要低
--force:強制升級。老的版本依賴當前的包,如果升級了可能老的其他服務不支持,那麼就會阻止升級,則使用這條參數進行強制升級。
卸載:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] 包名(比如zsh,而不是xxxxx.rpm)
[root@Centos6 Packages]# rpm -e zsh [root@Centos6 Packages]#
不會顯示任何信息,如果異常則會出現報錯。如果一個程序包被另外一個程序包依賴,則卸載的時候會報錯,因爲另外一個包存在依賴關係。
查詢:
rpm {-q|--query} [select-options] [query-options]
[root@Centos6 Packages]# rpm -q zsh zsh-4.3.11-4.el6.centos.x86_64
表示已經被安裝
查詢選項:不能更換先後順序,必須q在前。
-qa: 查詢本機已經安裝的所有程序包;
-qf /PATH/TO/SOMEFILE: 查詢此處的文件由哪個程序包安裝生成;
-qc: 查詢指定程序包安裝生成的配置文件
[root@Centos6 Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
-qd: 查詢指定的程序包安裝生成的文檔
[root@Centos6 Packages]# rpm -qd zsh /usr/share/doc/zsh-4.3.11/BUGS /usr/share/doc/zsh-4.3.11/CONTRIBUTORS /usr/share/doc/zsh-4.3.11/FAQ /usr/share/doc/zsh-4.3.11/FEATURES /usr/share/doc/zsh-4.3.11/LICENCE /usr/share/doc/zsh-4.3.11/MACHINES
-qi: 查詢指定的程序包的相關信息;
[root@Centos6 Packages]# rpm -qi zsh Name : zsh Relocations: (not relocatable) Version : 4.3.11 Vendor: CentOS Release : 4.el6.centos Build Date: Fri 24 Jul 2015 05:41:25 PM CST Install Date: Thu 27 Aug 2015 10:15:37 AM CST Build Host: c6b8.bsys.dev.centos.org Group : System Environment/Shells Source RPM: zsh-4.3.11-4.el6.centos.src.rpm Size : 5283457 License: BSD Signature : RSA/SHA1, Sat 25 Jul 2015 04:41:32 AM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://zsh.sunsite.dk/ Summary : A powerful interactive shell
-ql: 查詢程序包安裝生成的所有文件的列表;
-q --scripts:查詢程序包相關的腳本:
preinstall: 安裝前腳本
postinstall:安裝後腳本
preuninstall: 卸載前腳本
postuninstall: 卸載後腳本
[root@Centos6 Packages]# rpm -q zsh --scripts postinstall scriptlet (using /bin/sh): if [ ! -f /etc/shells ] ; then echo "/bin/zsh" > /etc/shells else grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells fi if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \ --entry="* zsh: (zsh). An enhanced bourne shell." fi **** *** ** *
-p: 查詢針對是未安裝的程序包文件;
比如我沒安裝zenity這個rpm包,我可以使用-qpi跟隨這個包的rpm名稱來查詢信息
[root@Centos6 Packages]# rpm -qi zenity package zenity is not installed [root@Centos6 Packages]# rpm -qip zenity error: open of zenity failed: No such file or directory [root@Centos6 Packages]# rpm -qpi zenity error: open of zenity failed: No such file or directory [root@Centos6 Packages]# rpm -qpi zenity-2.28.0-1.el6.x86_64.rpm warning: zenity-2.28.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Name : zenity Relocations: (not relocatable) Version : 2.28.0 Vendor: CentOS Release : 1.el6 Build Date: Tue 17 Aug 2010 07:12:21 AM CST Install Date: (not installed) Build Host: c6b2.bsys.dev.centos.org Group : Applications/System Source RPM: zenity-2.28.0-1.el6.src.rpm Size : 4338271 License: LGPLv2+ Signature : RSA/8, Sun 03 Jul 2011 01:07:05 PM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://directory.fsf.org/zenity.html Summary : Display dialog boxes from shell scripts Description : Zenity lets you display Gtk+ dialog boxes from the command line and through shell scripts. It is similar to gdialog, but is intended to be saner. It comes from the same family as dialog, Xdialog, and cdialog.
-whatprovides 查詢哪種功能被哪個程序包所提供
-whatrequires 查詢哪種能力被哪個程序包所依賴
校驗:檢查安裝的rpm包文件是否被改動。如果對安裝完的配置文件進行改動然後使用校驗,則能發現被改動的文件具體路徑。
[root@Centos6 Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [root@Centos6 Packages]# vim /etc/skel/.zshrc
我對.zshrc進行了改動,之後使用rpm -V zsh就能發現:
[root@Centos6 Packages]# rpm -V zsh S.5....T. c /etc/skel/.zshrc
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
只要將RPM-GPG-KEY-CentOS-6導入則能進行對Packages下的rpm包進行校驗
[root@Centos6 mnt]# ls /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
導入密鑰(對方的公鑰):rpm --import /PATH/TO/KEY_FILE
[root@Centos6 mnt]# rpm --import ./RPM-GPG-KEY-CentOS-6 [root@Centos6 mnt]#
校驗:rpm -K /PATH/TO/RPM_FILE
[root@Centos6 mnt]# rpm -K ./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm ./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
導入公鑰後,則使用rpm安裝不會出現warning告警了。
當RPM依賴關係複雜的時候,就有了YUM這個功能,來解決包之間的依賴關係。
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
一個文件通常用於一個或一組功能相近或相關的倉庫
定義一個倉庫指向:
[REPO_ID]
name= 指明repo名稱
baseurl= 可以使用的路徑 ftp http file 可以存在多個,隨機挑選一個使用,所提供的包和源數據需要一樣
mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE
enabled={1|0} 1啓用 0禁用
gpgcheck={1|0} 1啓用包校驗 0禁用包校驗
gpgkey= 如果啓用校驗,則指明使用哪個密鑰校驗
cost= 如果多個倉庫,則這個倉庫的開銷,開銷越小越容易被使用
定義倉庫指向可用變量:
$releasever: 引用當前系統的主版本號;
$basearch: 當前系統的基本架構;
i386, i486, i586, i686: i386
http://mirrors.magedu.com/CentOS/$releasever/os/$basearch
通過yum repolist查看可用yum
[root@Centos6 yum.repos.d]# yum repolist Loaded plugins: fastestmirror, security Determining fastest mirrors repo id repo name status aa aa 6,575 repolist: 6,575
yum命令:
yum [options] [command] [package ...]
命令:
安裝:install
[root@Centos6 yum.repos.d]# yum install php-mbstring Loaded plugins: fastestmirror, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package php-mbstring.x86_64 0:5.3.3-40.el6_6 will be installed --> Processing Dependency: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-mbstring-5.3.3-40.el6_6.x86_64 --> Running transaction check ---> Package php-common.x86_64 0:5.3.3-40.el6_6 will be installed --> Finished Dependency Resolution Dependencies Resolved =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: php-mbstring x86_64 5.3.3-40.el6_6 aa 458 k Installing for dependencies: php-common x86_64 5.3.3-40.el6_6 aa 527 k Transaction Summary =========================================================================================== Install 2 Package(s) Total download size: 985 k Installed size: 5.0 M
yum自己會自己解決依賴關係
卸載:remove
依賴此包的其他包也會被卸載
升級:update
yum check-update 檢查哪些升級包可用
yum update 包名
查詢:
info
search KEYWORD
[root@Centos6 Packages]# yum search zsh Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile ==================================== N/S Matched: zsh ===================================== python-twisted-core-zsh.x86_64 : Tab completion for Zsh and Twisted Core zsh-html.x86_64 : Zsh shell manual in html format zsh.x86_64 : A powerful interactive shell
search KEYWORD list all|installed|availiable列出安裝了的包,可用的包,全部的包等
provides /PATH/TO/SOMEFILE: 查詢指定文件由哪個包安裝生成
重新安裝:reinstall
降級:downgrade
清理緩存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
清理包,清理元數據,清理過期緩存,清理rpm數據庫文件,清理插件,全部清理
生動生成緩存:makecache
包組:
grouplist
groupinfo "GRP_NAME"
groupinstall "GRP_NAME"
groupremove "GRP_NAME"
倉庫:
repolist [all|enabled|disabled]
repoinfo [all|enabled|disabled]
如何使用光盤當做本地倉庫:
掛載光盤至某目錄
定義倉庫,使用file:///指明其訪問路徑;
簡單yum配置,使用本地光盤內的源:
[aa] name=aa baseurl=file:///var/mnt enable=1 gpecheck=0
創建本地倉庫:
yum install createrepo
createrepo /PATH/TO/RPMFILES/
DNF:yum前端管理升級版,由SUSE研發,在cenots7裏面只要yum install dnf,以後可以使用dnf命令。