Linux的应用程序安装提供了两中格式的软件包:一种是软件开发者直接提供的源码包;另一种是发行版厂商提供事先编译好打包的软件包;用户需要根据需要来选择何种方式安装软件,作为系统管理运维人员,要想合理应用,必须熟悉这两者之间的内在联系以及各自的特性和差异;
*软件包管理工具)
— RPM软件包管理工具
— YUM软件包前端管理工具
软件包管理工具:
早先用户安装软件是非常痛苦的,只能编译安装,尤其对于一个不是软件开发人员,不熟悉编译过程的人,要想编译安装软件几乎没有办法做到,不过后来有大量的发行版厂商,根据他们自己对用户需求的理解,事先通过软件包管理器在一个通用平台上(比较老的硬件平台架构,因为软件向下兼容)添加一些特性进行编译,然后打包成自己特定的软件包格式,要想灵活应用,必须使用与之对应的软件包管理工具,每个发行版的厂商都有自己对软件组织打包的理解方式,虽然厂商之间的管理工具不同,但是要实现的目的和功能基本上都是一致的,这包含他们必须能够实现软件包的安装、升级、卸载、查询、校验等功能;目前主流的Linux发行版redhat系使用的是自己rpm工具,debian系使用的是dpt工具,虽然都是软件包管理工具,但是理解层次深度还是有所差别的,经过多年相互借鉴学习,为了适应管理更加合理,redhat做出了更多调整进去,事实现在的rpm更是Linux系统中软件包管理模式的一种规范;下面也主要介绍它.
软件包获取途径:
首先要知道软件包获取的途径,跟对一般信息的获取不同,首先要找信任的官方机构或网站;确保程序包是安全可信任的,没有内置其他不正当的后门或恶意程序,作为系统运维人员,系统安全必须考虑到位;下面介绍一下比较值得信任的获取途径:
(1)系统发行版安装光盘;
(2)官方镜像站点;
http://mirrors.aliyum.com
http://mirrors.sohu.com
http://mirrors.163.com
(3)项目官方站点:
apache
(4)第三方组织:
EPEL
(5)搜索站点:
http://rpm.pbone.net
http://pkgs.org
http://rpmfind.net
RPM工具功能详解:
rpm 工作原理:
rpm工具使用rpm命令对软件包进行管理,同时在内部维护一个叫PMS(Package Management Systme)软件包管理系统;rpm工具借助数据库,对rpm软件进行管理;主要记录信息如下:
a:Linux系统安装了什么软件包;
b:每个软件包安装后生产了什么文件在系统中;
c:每个安装后的软件包版本
b:包之间的依赖关系
rpm软件包格式:
一般rpm分为主包和辅助包;带devel字符串的开发包、带utils字符串的工具包等辅助包,通常实现功能较多软件程序包会有较多的辅助包;
一般程序包名称格式如下:
软件名词-软件版本发行号-软件打包发行号-支持的平台架构-以“.”rpm结尾
这里主要介绍一下架构:
一般分为运行在32位CPU系统上的x86系列,和运行在64位CPU系统上的x64位系列,同时64位的平台兼容x86,程序有向下兼容的特性, 需要注意:程序中的高级特性依赖较新的硬件,如果运行在较老的硬件平台架构上,高级功能特性有可能无法实现;noarch字符串表示跟平台无关,不依赖;
rpm包内文件类型:
rpm的元数据,如名称,版本,依赖,描述等
rpm程序文件
rpm脚本:一般有如下脚本:
1.preinstall:安装之前;
2.postinstall:安装之后;
3.preuinstall:卸载之前;
4.postuninstall:卸载之后
(1)安装:
语法格式:
rpm -i[option] PACKAGE_FILE
常用选项:
-i:表示install安装
-v -vv:表示显示安装过程,后者显示更加详细;
-h:以#号显示进度条格式;
–nodeps:忽略依赖关系
–force:强制动作,注意安装成功后可能不能运行;
–test:测试安装,作为测试检查
–nosignature:不检查签名就是来源合法性;
–nodigest:不检查包完整性;MD5头;
注意:根据Linux的哲学之一,每个程序只做好一件事,单一小程序组成完成复杂任务;这样结果就导致每个程序的要想运行,有较强的依赖性,有时A程序依赖B,B又依赖C,这样要想安装A必须先安装最底层依赖的C,如果强制或忽略依赖关系,将会导致程序无法运行,安装也没有意义;
(2)升级:
语法格式:
rpm -U|F[optIon] PACAGE_FILE
常用选项:
-U:表示不管软件事先是否存在都要升级,存在就升级,不存在就安装;
-F:表示软件软件存在就升级,如何不存在,就放弃升级;
–oldpackage:降级,如果升级之后发现有Bug或者兼容性问题,可以使用此选项回滚到升级前的版本;
–force:强制动作,注意安装成功后可能不能运行;
–replacepkgs:注意不能替换配置文件;
注意
(1)不要对kernel做升级操作;支持多kernel并存;可以直接安装;
(2)修改过的配置升级不会覆盖,升级同新文件,会重命名为file.rpmnew
(3)卸载:
语法格式:
rpm -e[option] PACKAGE-NAME
常用选项:
-vh:显示过程
–nodeps:忽略依赖
–noscripts:忽略脚本
–allmatches:卸载所有匹配指定名称的程序包,也就是说卸载软件名称中包含此名称的所有包;
–test:测试检查卸载,不是真卸载
注意:
卸载会检查依赖关系,如果卸载的软件被其他程序依赖,请谨慎卸载,否则导致其依赖程序无法运行;
(4)查询:
语法格式:
rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE]
常用选项:
-qa:查询系统所有已安装的程序包;
-qf /path/to/file:查询文件是由那个程序包生成;
-ql:查询程序生成的文件:
-qi:查询程序属性信息;
-qc:查询程序配置文件;
-qd:查询程序提供的文档
-q –whatprovides CAPABILITY(功能):查询这种CAPABILITY由那个程序提供;
-q –whatrequires CAPABILITY:查询这种CAPABILITY被哪些程序包依赖;
-q –scripts:查询程序包生成的脚本;
-q –changelog:查询软件历史
查询未安装的软件包信息,需要加-p选项跟上面的选项结合使用,后面的参数必须是PACKAGE_FILE;
列如:
-qpi:查询指定PACKAGE_FILE的程序属性信息;
…
(5)校验:
工作原理:校验检查的是软件包来源的合法性和完整性,要想对它们校验检查,必须要有校验机制,这种机制是根据签名和加密实现的,通常发行版的光盘中会有一个包含所有软件特征码的文件,特征码是根据软件包特征提取的,通过单项加密实现的用来校验软件包的完整性,如果软件包在获取途中被修改,在系统中再次提取软件包特征码,跟系统已有的特征码文件比对,不同则判断被攥该,修改过的软件包,根据相同的加密算法提取的特征肯定不同;来源合法性是根据签名实现的;特征码文件被称为公钥;校验是由校验程序完成的,默认rpm命令安装时会调用;
a.公钥获取:
官方网站
系统光盘
系统配置文件中,这是系统在安装时从安装光盘复制进去的
系统公钥位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7
b.导入公钥:
rpm –import /path/to/pub.key
校验软件:
rpm -V PACKAGE-NAME:校验安装文件自安装后是否被修改过,根据PMS记录信息判断;
rpm -K PACKAGE_FILE:对指定未安装的软件包进行手工校验;
(6)RPM数据库维护:
默认数据库目录位置:/var/lib/rpm
语法格式:
rpm –initdb :初始化数据库
rpm –rebuilddb :重新构建
–dbpath=/path/ :指定数据库创建位置;
2.yum软件包管理:
前面的rpm安装和卸载都需要检查依赖关系,尤其是对依赖关系较多较复杂的软件进行管理,是很难快速部署管理的;有没有一种软件管理工具能自自行解决依赖关系呢?yum就可以自动解决依赖关系,实现快速部署;
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包;
yum工作原理:yum工作原理遵循C/S架构(客户端/服务器);在客户端仅需安装yum客户端软件,并且配置yum配置文件指向的yum服务器端地址,为了故障冗余,可以指向多个yum源;在yum服务器端需要创建yum仓库,作为放置所有rpm软件的仓库,同时创建一个名为repodata数据库目录文件,用不同的文件分门别类记录仓库内所有软件包信息,通过网络服务把资源地址发布出去;当客户端yum请求软件包时,同时会先把yum服务器端数据库记录文件请求下载到本地,经过校验信息比对在判断操作是否可行;yum源数据库保存在yum客户端的/var/cache/yum中,每次yum启动都会通过校验码与yum服务器同步更新列表信息。
(1)yum客户端服务配置:
a.首先检查yum程序包是否安装,安装好yum工具才能使用yum工具;
b.确保rpm程序和rpm的数据库记录是完整正常的;yum软件管理依赖rpm管理工具;
c.yum服务主配置文件配置选项说明:
d.yum服务的主配置文件在系统/etc/yum.conf
[root@xia7 ~]# vim /etc/yum.conf
[main] ###仓库ID,在系统中必须全局唯一
cachedir=/var/cache/yum/$basearch/$releasever ###(yum缓存目录,用来缓存请求的yum服务端数据,包括rpm软件和yum源数据库文件)
keepcache=0 ###安装完成后是否清空yum缓存,0表示不保留,1表示清空
debuglevel=2 ###Debug 信息输出等级,范围为0-10,缺省为2
logfile=/var/log/yum.log ###yum日志文件位置,根据日志查询过去的操作
exactarch=1 ### 是否安装跟根系统架构平台匹配的软件,1表示只安装匹配的,0表示两者不检查;
obsoletes=1 ### 是否允许更新老的RPM包,1表示允许,0表示进制更新老的软件包
gpgcheck=1 ###安装时验检查包的合法性和完整性,1表示开启,0表示不检查
plugins=1 ###是否如允许使用插件,1表示允许使用,0表示禁用插件
installonly_limit=5 ###允许保留多少个内核包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor
t_page.php?category=yum
distroverpkg=centos-release
补充选项:
exclude=PACKAGE_NAME ####屏蔽不想更新的软件包,可以使用通配符,多个软件包之间用空格分割
enabled=1 ###是否启用当前的仓库配置指向;1表示开启,0表示禁用;
gpgkey=/file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ###如果启用了gpg校验机制,需要指定校验的文件位置;
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/###yum仓库的位置可以指定多个,当无法访问时才选择下一个;
cost= ###开销,默认是1000,开销越大,优先使用级越低。
补充说明:baseurl= 有三种提供仓库资源获取方式:
a:http:// #htt服务
b:ftp:// #ftp服务
c:file:/// 本地yum源仓库,或者是安装光盘,注意事先需要挂载光盘;
yum配置文件中的路径变量意义:
$releasever:当前系统的发行版本的主版本号;
$arch:平台
$basearch:基础平台;
YUM-$YUM9
d.自定义配置yum配置文件:在/etc/yum.repos.d/YUM-NAMA.repo 注意必须是以“.repo”结尾的文件;
[root@xia7 ~]# vim /etc/yum.repos.d/local.repo
[base]
name=centos 7
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ ###配置http服务提供的yum源仓库
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[local]
name=local centos 7
baseurl=file:///media/cdrom ####配置本地光盘作为yum源仓库
enabled=1
gpgcheck=0
(2)yum服务端仓库创建:
a:首先检查createrepo创建yum仓库程序是否安装;
b:创建仓库目录,并且放置rpm软件包在此目录下;
c:使用createrepo命令在仓库目录中创建仓库生成yum数据库目录repodb
(3)yum命令工具使用:
语法格式:
yum [option] [PACKAGE-NAME]…
常用选项:
查询仓库列表:
repolist [all|deabled|disable]
显示软件包:
list [all|glob_expl]
list [available |installed|updates]
安装程序包
install package1 package2…
升级程序包
update package1 package2…
检查升级包:
check-update
卸载程序包:
remove package1 package2…
查询程序包information
info […]
查看指定的某文件是由那个程序所提供;
provides|whatprovides feature1
清理本地缓存
clean package |metadate |all
构建缓存:
makecache
搜索关键字名软件包
search string1 string2…
重新安装程序包
reinstall package1…
降级程序包:
downgrade package
查看指定包所依赖的capability
deplist package
查询安装程序事物历史;
history info|list |stats
撤销安装
history undo
包组管理:
grouplist :查询包组
groupinstall :安装包组
groupupdate :升级包组
groupinfo :查询包组详细信息
groupremove :删除包组
其他选项
–nogpgcheck :安装不检查包的来源性合法性和完整性;
-y :自动回答交互信息为yes
-q :静默模式,不输出打印信息
–disablerepo=repoid :禁用指定的仓库
–enablerepo=repoid :启用指定的仓库
–noplugins:禁用插件;
特别注意提醒:
(1)很多对yum工具理解不是很深的初学者认为,有了yum工具,不必再使用学习RPM工具,这里需要特别注意的,首先yum只是RPM的前端管理工具,底层完全依赖RPM的数据库,不是很清楚,可以多看几 遍yum工作原理;
(2)yum软件管理操作机制对于突发故障解决不是很好,比如说安装过程中系统宕机,这时根本没办法分析破损的依赖关系和从新部署;目前已经有解决工具DNF;在测试系统上使用,成熟后终将替代YUM;
不过企业版目前还是yum工具;
原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/40840
评论列表(1条)
文章对yum工具的使用进行了详细的介绍,通读整篇文章后能学到很多东西,但文章在逻辑表达的组织上显得略微混乱,如果能再优化下逻辑规划会更让人印象深刻