包管理器的功能:打包,包管理(安装,升级,卸载,查询及验证)
打包:将源码包中的各种组成文件放在一个单一的归档文件中
安装:相当于将打包文件中的各个文件放到对应的目录中去
卸载:将安装的文件收集起来,然后删除
升级:更新已经安装的包,新版本替换老版本
查询:查询程序包的信息
验证:验证包安装后生成的文件是否被改变
Linux常用的包管理器
dpkg:debian 下的包管理器
rpm:redhat package manager
RPM is Package Manager
程序包的组成部分及存放目录:
二进制程序:一般存放于/bin,/sbin,/usr/bin,/usr/sbin
库文件:一般存放于/lib64,/usr/lib64
配置文件:一般存放于/etc
帮助文件:manual,info-->一般存放于/usr/share/doc, /usr/share/man
rpm包:
rpmbuild: 打包工具,依赖specs文件打包,生成 .rpm 包
10:5,3,2
rpm包制作时分包机制:按照功能划分
testapp-VERSION.tar.gz,源码压缩程序包,做成rpm包后被分成不同功能的.rpm包
核心rpm包命名格式:testapp-VERSION-RELEASE.ARCH.rpm
支rpm包命名格式:testapp-devel-VERSION-RELEASE.ARCH.rpm
VERSION的格式一般为:major.minor.release
如:bash-4.2.4.tar.gz
rpm包的命名机制解释:
name-VERSION-RELEASE.ARCH.rpm
bash-4.2.4-1.el7.x86_64.rpm
bash-devel-4.2.4-1.el7.x86_64.rpm
VERSION:如4.2.4 ,包括应用源程序的主版本,次版本,和release
RELEASE:如1.el7 ,rpm 包制作者的release版本
ARCH:如x86_64 为平台架构
包和包之间,有可能存在依赖关系:
x包--->Y包
rpm数据库目录:/var/lib/rpm/
如何获取rpm包:
1、发行版提供的程序包
2、Fedora-EPEL项目仓库提供的程序包
3、项目的官方站点,也通常提供rpm包
4、搜索引擎,第三方发行商,可能被植入恶意程序,使用的时候要特别小心
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
CentOS识别光盘用的设备文件:/dev/cdrom
基于rpm命令实现程序包管理:
安装
rpm {-i|--install} [install-options] PACK_FILES...
-i:表示安装
-v:显示详细过程,vv,vvv显示的信息更详细
-h:安装过程打印#号和进度百分比
每个rpm包都提供一个或多个capabilities,若某个包安装时,依赖其它包,则需要先安装被依赖的包
--nodeps:安装或升级之前不做包依赖性检测,但强行安装完后软件包不一定能正常工作
--replacepkgs:如果包已经存在,可以重装程序包, rpm -ivh --replacepkgs name-VERSION-release.ARCH.rpm
升级
rpm {-U|--upgrade} [install-options] PACK_FILES...
rpm {-F|--freshen} [install-options] PACK_FILES...
-Uvh:如果有老版本的包,怎升级之,如果没有,则安装
-Fvh:如果有老版本的包,怎升级之,如果没有,则不安装
--nodeps:忽略包的依赖关系强行升级安装,安装升级之前不做包依赖性检测
--oldpackage:降级,安装一个比现有版本低的程序版本, rpm -Uvh --oldpackage *.rpm, 降级不能用-Fvh
--force:强制升级,若被升级的程序包,被其他程序包依赖,可能不可以直接升级。
Same as using --replacepkgs, --replacefiles, and --oldpackage
卸载
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACK_NAME...
--nodeps
--noscripts do not execute package scriptlet(s)
--notriggers do not execute any scriptlet(s) triggered by this package
--test don't install, but tell if it would work or not,可用于安装,升级,卸载过程中的测试,不进行实际的操作
查询
rpm {-q|--query} [select-options] [query-options]
select选项:
-qa:查询本机安装的所有程序包
-qf /PATH/TO/SOMEFILE:查询此处的文件是由哪个程序包安装生成
-qc PACK_NAME:查询指定程序包安装生成的配置文件
-qd PACK_NAME:查询指定程序包安装生成的文档
-qi PACK_NAME:查询已安装的指定程序包相关信息
-ql PACK_NAME:查询程序包安装生成的所有文件列表
-qR PACK_NAME:查询安装包所依赖的功能文件
-R, --requires List capabilities on which this package depends
-q --provides PACK_NAME: 查询某个包提供的capabilites
--provides list capabilities that this package provides
-q --scripts PACK_NAME:查询程序包相关的脚本
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
-p:查询针对的是*.rpm程序包文件
验证:检查程序包安装的文件是否被改变
rpm {-V|--verify} [select-options] [verify-options] PACK_FILE...
默认结果一般显示以下内容:
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 ,KEY_FILE一般在/etc/pki/rpm-gpg目录下
校验:rpm -K /PATH/TO/RPM_FILE
[root@apache ~]# rpm -K ftp-0.17-53.el6.x86_64.rpm
ftp-0.17-53.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
YUM:Yellowdog Updater Modifier
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=
baseurl=
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE
enable={1|0},1表示启用仓库
gpgcheck={1|0},是否校验包,一般只要上面4行即可
gpgkey=:当gpgcheck=1时,要该项指定用于校验的gpgkey
cost=:用户指明仓库的开销
定义仓库指向可用的变量
$releasever:引用当前系统的主版本号
$basearch:引用当前系统的基本架构
如i386,i486,i586,i686,x86_64
示例:http://mirrors.edu.com/CentOS/$releasever/os/$basearch
yum 命令:
yum [options] [command] [packages]
软件包命令:
安装:install
卸载:remove
升级:update
yum -y update:升级所有包,改变软件设置和系统设置(有待验证),系统版本内核都升级
yum -y upgrade升级所有包,不改变软件设置和系统设置,系统版本升级,内核改变
查询:info
search KEYWORD
list all | installed | available
provides /PATH/TO/SOMEFILE:查询指定文件由那个安装包生成
重行安装:reinstall
降级:downgrade
清理缓存:clean all
生成缓存:makecache
包组命令:
grouplist: 列出所有包组
groupinfo "GRP_NAME":显示某个包组信息
groupinstall "GRP_NAME":安装某个包组
grroupremove "GRP_NAME":删除组包
groupupdate "GRP_NAME": 升级组包
仓库命令:
repolist [all|enabled|disabled]
使用光盘当作本地仓库:
挂在光盘至某目录
定义仓库,使用baseurl=file:///指明其访问路径
如何创建本地仓库,把下载的程序包组做成仓库:
yum install createrepo
createropo /PATH/TO/RPMFILES/
DNF:yum 升级版,下一代包管理器