在YUM没出来之前,我们对程序包管理都是使用RPM程序包管理器(RPM家族),但RPM也有一个很大的诟病,那就是“软件依赖属性”问题,我们知道,RPM在打包软件时,加入了一些信息记录功能,这些信息包括软件版本、大小、说明、依赖性等,我们也称为元数据,然后在Linux系统上建立一个数据库存储这些信息,当我们要安装一个软件时,首先会去数据库中查找是否存在该软件的相关信息,如果没有则无法安装,这也就是软件依赖的问题,直到YUM出现该问题被很好的解决。
YUM原理:
yum属于C/S架构,它分为yum客户端及yum服务端,yum服务端主要存储的是rpm包及元数据(包名、
大小、依赖关系、软件制作者等),通常我们也会把这些元数据称为清单列表,yum服务器是对外共享的,
当我们要下载某个程序包时,yum客户端对yum服务器发送一个指令(例如:yum isntall httpd),
yum服务器接收到该指定首先会在元数据中查找该程序包名即依赖的包是否存在,然后将查找出来的
元数据(mata_data)发送给yum客户端(存储在yum_cache缓存中),然后yum客户端再向yum服务端
发送一个指定告知要下载的包并下载,最后整个安装的就此结束,如图:
10.png
配置yum仓库:
在上面提到过在使用yum安装程序包的时候,客户端发送指令给yum服务器,那服务端不能莫名其妙
的就能接收指令啊,是不是需要客户端指定一个yum服务器的路径,对的,就是这样,我们在使用
yum的时候需要配置yum仓库,里面涉及到一些相关的属性配置,主要的两个配置文件`/etc/yum.conf
(为所有仓库提供的公共配置)`、`/etc/yum.repos.d/*.repo(为仓库的指向提供配置)`,相
的属性配置释义可以通过man yum.conf配置文件进行了解。
yum.conf相关参数详解:
cachedir | yum缓存及db文件目录 |
---|---|
keepcache | 在yum安装完整后是否要保留头文件和yum包的缓存,不是“1”就是“0”,默认为1,保留文件 |
logfile | yum日志存放路径 |
debuglevel | 调试级别(0-10),默认为2 |
exactarch | 在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包 |
obsoletes | 这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包 |
gpgcheck | 是否检查包的签名,不是“1”就是“0”,默认为0,不检查 |
plugins | 是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件 |
installonly_limit | 允许保留多少个内核包 |
bugtracker_url | bug跟踪器,提交给错给给指定路径yum |
distroverpkg | 确定发行版版本的包 |
配置yum仓库:
配置yum仓库是以.repo扩展名结尾,放在/etc/yum.repo.d目录下,例如我自己配置的一个yum
仓库(11、12图),
11.png
12.png
提示:图12中的“7”、“x86_64可以用$releasever跟$basearch替代,这样就更具有通用性了”
库选项(也就是配置自己的库相关参数):
Example: [repositoryid] | 库的唯一标识,相当于身份证,图12库标识为“epel” |
---|---|
name | 仓库名称 |
baseurl | 指向yum服务器的地址,这里可以指定多个地址,格式参考man yum.conf,指向的服务器可以是http://、ftp://、nfs://、file:// |
enabled | 不是“1”就是“0”,告诉yum是否启用该仓库,默认为1启用 |
keepcache | 覆盖[man]中配置keepache |
gpgcheck | 不是“1”就是“0”,告诉yum是否检查包的签名,默认为“0” |
gpgkey | 表示自动从指定的路径导入key,例如:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6或者在光盘中/media/CentOS_6.10_Final/RPM-GPG-KEY-CentOS-6 |
....
yum用法及示例:
通过man yum获取帮助
用法:
yum [options] [command] [package ...]
Options:
-y:安装程序包都自动回答yes
-nogpgcheck:禁止检查包签名
-q, --quiet:运行时没有信息,可以跟-y一起使用
--disablerepo=repoidglob:临时禁止指定的仓库,可以使用glob特性
--enablerepo=repoidglob:临时启用指定的仓库,支持glob特性
--noplugins:禁用所有的插件
command is one of:
install package1 [package2] [...]:安装程序包,同时确保所有依赖都满足,同一标准
reinstall package1 [package2] [...]:重新安装程序包
update [package1] [package2] [...]:升级程序包
downgrade package1 [package2] [...]:降级程序包
check-update:检查可升级的程序包
remove | erase package1 [package2] [...]:卸载程序包
yum list [all | glob_exp1] [glob_exp2] [...]:列出所有的程序包,可以根据glob来查询
yum list {available | installed | updates} [glob_exp1] [...]:列出available(可用的程序包)、已经安装的程序包installed、可更新的程序包
info [...]:查看程序包的基本信息
provides | whatprovides feature1 [feature2] [...]:查看指定的特性是由哪个程序包所提供的
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]:清除缓存
search string1 [string2] [...](以指定的关键字搜索程序包名及summary简要信息,例如:yum search "z")
deplist package1 [package2] [...]:查询程序包所提供的能力
history [info|list|packages-list|packages-info|summary|addon-
info|redo|undo|rollback|new|sync|stats]:查看yum事务历史
localinstall rpmfile1 [rpmfile2] [...]:安装本地程序包
localupdate rpmfile1 [rpmfile2] [...] :升级本地的程序包
注意:安装或升级本地程序包需要先下载最新的程序包到本地上然后操作
示例:
`
yum -y install zsh:安装zsh程序包,并自动回答yes
yum -q -y install zsh:静默安装zsh程序包,但不建议,中间出了问题都不知道
yum -y install zsh --disablerepo=base:安装zsh程序包,但禁止base仓库(如图14)
`
4
包组的相关命令:
groupinstall(安装包组)
groupinstall group1 [group2] [...](用于在指定类型的组中安装所有单独的包)
grouplist(列出所有包组)
grouplist [hidden] [groupwildcard] [...]
groupremove(是用来删除一个组中的所有包)
groupremove group1 [group2] [...]
groupinfo(用于给出组的描述和包列表以及这些包被标记为什么类型)
groupinfo group1 [...]
rpm源码包编译过程:
编译源码的过程通常是:
源代码 --> 预处理 --> 编译--> 汇编--> 链接--> 执行
源码编译三步曲:
1)运行configure脚本
2)运行make命令(make -j # 增加速度)
3)执行make install
①、首先在官网或者其它途径获取源代码,解压后进入文件中
②、执行./configure脚本,通过选项传递相关的参数,指定启用的特性(如安装路径),执行时会参考用户的指定及Makefile.in生成makefile文件
在执行该脚本时,会检查外部依赖,也就是说会需要依赖其它包才能完成该步骤
③、执行make指令,该步骤会根据makefile文件来判定执行预处理器、编译器、汇编器等操作
④、执行make install安装程序包
⑤、添加PATH路径、帮助文档路径、头文件等
./configure脚本中的选项:
--help:获取其支持的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置。
--sysconfigdir=/PATH/TO/SOMEWHERE:配置文件安装位置
System types:
Optional Features:可选特性
--disable-FEATURE:
--enable-FEATURE[=ARG]
Optional Packages:可选程序包
--with-PACKAGE[=ARG]
--without-PACKAGE
以上为yum基本用法,Thanks
网友评论