Linux之yum工具详解

Linux 程序包管理

linux系统中的诸多程序都是由源代码编译或者由二次发行商选择性编译分布,其大部分的程序安装得了需要依赖于三方的库文件,甚至很多的程序依赖关系会进入到死循环的情况中。由于直接使用源代码编译安装比较繁,故出现了一系列的安装包管理程序。

各系统包及包管理程序:

Debian

1、软件包后缀
  • .deb
2、前端管理工具
  • apt-get

RHEL系

1、软件包后缀
  • .rpm
2、前端管理工具
  • rpm
  • yum(centos5、6)
  • dnf(centos 7)

SUSE

1、软件包后缀
  • .rpm
2、实现工具
  • zypper

Fedora

1、软件包后缀
  • .rpm
2、前端管理工具
  • dnf

RHEL Linux软件包命名规范

源代码
  • name-major-minor-release
RPM包命名格式
  • name-version-release.arch.rpm
    • release : 2.el7
      * 2 : 编译次数
      * el7: 适用于centos7平台
      * arch : 架构
      * rpm : 以rpm后缀命名

程序包管理器

功能
  • 将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便的快捷实现程序包的安装,查询,卸载,升级等功能
组成部分
  1. 程序包的组成清单
    • 文件清单
    • 安装或卸载时运行的脚本,有如下四类:
      • preinstall : 安装过程开始之前运行的脚本,%pre定义 —nopre
      • postinstall: 安装过程完成之后运行的脚本,%post定义 —nopost
      • preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun定义 —nopreun
      • postuninstall: 卸载过程完成之后运行的脚本,%postun定义 —nopostun
注意:他将程序的多个功能分拆多个安装包,单独实现
  1. 数据库部分
    • 存储程序包的名称和版本
    • 包与包的依赖关系
    • 各包的功能说明
    • 程序安装生成的各文件的文件路径及检验码信息

正确获取安装程序包的途径

1. 系统发行版的光盘或官方的镜像站点
2. 项目的官方站点
3. 第三方的组织制作方
4.明确知道来源的RPM(自已制作等)
注意:建议在使用程序安装包时检查其合法性,针对其做来源合法性程序包的完整性做校验

RPM包管理程序

1. RPM包的安装

synopsis: rpm {-i| —install} [install-options] PACKAGE_FILE

  • options:

    • -i , --install: 安装
    • -v : verbos,输出详细信息
    • -vv : verbos,输出更详细的信息
  • install-options:

    • -h : 以hash marks格式输出进度条,每个#代表2%的进度
    • --test : 测试安装,只做环境检查,并不真正安装
    • --nodeps : 忽略程序依赖关系
    • --replacepkgs: 覆盖安装,如果文件修改错误,需要将其找回,可以使用此方法,但需要把修改错误的文件提前删除
    • --justdb: 不执行安装操作,只更新数据库
    • --noscripts: 不执行rpm自带的所有脚本
    • --nosignature: 不检查包签名信息,即不检查来源合法性
    • --nodigest:不检查包完整性信息

2. RPM包的升级

synopsis:
  • rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

  • rpm {-F|--freshen} [install-options] PACKAGE_FILE …

  • [options]

    • -U : 升级或安装
    • -F : 升级但不安装
  • [install-options]

    • --oldpackage : 降级
    • --force : 强制升级
注意:
  1. 不要对内核做升级操作;4.0之前内核升级需要重启系统,Linux支持多内核版本并存,因此直接安装新版本内核,以防止新的内核出故障,导致系统无法正常启动,或者会中断在线业务
  2. 如果某源程序包的配置文件安装后曾被修改过, 升级时新版本的程序包提供的同一个配置文件不会覆盖老版本已经修改过的文件,而是把新版本的文件重命名后提供(filename.rpm.new的格式)

3. RPM包的卸载

synopsis:

rpm {-e|--erase} [--allmatches] [--nodeps] [—noscripts]

  • [options]:
    • -e : 删除指定程序
    • --allmatches : 卸载所有匹配指定名称的程序包的各版本
    • --nodeps : 卸载时忽略依赖关系
    • --test : 测试卸载,dry run模式

4. RPM包的查询

synopsis : rpm {-q|--query} [select-options] [query-options]

  • options

    • -qa ,-all : 查询所有已经安装的包
    • -f , --file FILE : 查询指定的文件是由哪个包安装生成的
    • -g , --group GROUP: 查询指定包由哪个包组提供
    • -p, --package PACKAGE_FILE : 对未安装的程序包执行查询操作
    • --wahtprovides CAPADILITY: 查询指定的capability由哪个程序包提供
    • —whatrequires CAPABILITY: 查询指定的capability被哪个包所依赖
  • [query-options]

    • --changelog : 查询rpm包的changelog
    • -l ,--list : 列出程序包安装生成的所有文件列表
    • -i , --info : 查询程序包想着的infomation.包括其版本号、大小、所属的包组等信息
    • -c --configfiles : 查询指定的程序包提供的配置文件
    • -d --docfiles : 列出指定的程序包提供的文档
    • --provides : 列出指定的程序包提供的所有capability
    • -R --requires: 查询指定程序包的依赖关系
    • --script : 查看程序包自带的脚本
  • 用法

  • -qi -qc -ql -qd

  • -qpi -qpc -qpl -qpd

注意:RPM的查询支持正则表达式的格式

5. RPM包的校验

synopsis: rpm {-V|--verify} [select-options] [verify-options]

  • [options]:

    • -V PACKAGE_FILE: 自动检查其数据的完整性及合法性
    • -K PACKAGE_FILE: 手动检查其数据的完整性及合法性
    • --import KEY : 手动导入GPG KEY
  • 校验程序包后的Format

    • 例:
      • rpm -V zsh
      • S.5....T. d /usr/share/doc/zsh-4.3.11/README
S.5....T. : 说明
         S 文件大小改变了
         M 文件权限改变了
         5 MD5校验码变了
         D 主次设备不匹配
         L read link变化 了
         U 属主改变了
         G 属组改变了
         T 修改时间变了
         P CAPABILITY变了
注意:如果其在某位上有变化,才会显示相应值," . "代表未修改过

程序包来源合法性验证和完整性验证:

1. 取公钥
  • 系统路径为:/etc/pki/rpm-gpg/RPM-GPG-KEY-Centos7
  • 系统安装盘:镜像文件根目录下RPM-GPG-KEY-CentOS-6
2. 导入公钥
  • rpm --import /path/from/keyfile
3.检验方式
  • 安装此组织签名的程序时,会自动执行验证
  • 手动验证:rpm -K package_file
4.查看导入的公钥
  • rpm -qa gpg-pub*
    • 所有被导入的GPG-KEY都会显示出来
5.删除导入的公钥
  • rpm -e gpg-pubkey-c105b9de-4e0fd3a3(获取这个公钥需要使用 rpm -qa gpg-pub*查看)

6.数据库的重建

1. RPM的数据库存放路径
  • /var/lib/rpm/
2. 获取帮助
  • Centos 6
    • man rpm
  • Centos 7
    • man rpmdb
3. 重建方法

synopsis: rpm {--initdb|—rebuilddb}

  • --initdb
    • 初始化数据库,当前无任何数据库时, 可初始化并创建一个新的,当前有时不执行任何操作
  • --rebuilddb
    • 重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
  • --dbpath
    • 指明库的路径,一般用于重建
例:
  • rpm --initdb --dbpath /tmp/rpmdb/
  • rpm --rebuilddb --dbpath /tmp/rpmdb/

=========

7.RPM检查合法性和完整性原理

1. 作者首先使用非对称加密算法生成一组密钥,即公钥与私钥
2. 作者再使用单身加密算法算出程序包特征码
3. 利用私钥对其特征码进行加密,这个过程叫签名
4. 使用者拿到作者发布的公钥对其特征码解密 ,如果这个过程通过,即能验证其来源的合法性
5. 使用与作者一样的单向加密算法算出已经拥有软件包的特征码,与之前解密后的特征码进行对比,其称之为完整性校验

=============

yum前端程序包管理工具

yum工具的出现

Linux平台中软件的安装都由源码文件编译成二进制文件后再运行,其在很多的制作好的rpm程序包,制作方在制作的过程中把通常不常用的功能去除进行编译打包,或者再将不同功能的包进行单独编译打包,提供多个功能程序包,这个情况安装软件时,一个功能包或者程序会依赖于其他程序的库文件,甚至有的时候会出现死循环依赖,导致软件的安装不正常工作或者根本安装不成功。此yum工具就是为了有效解决程序之间的依赖关系。早期yum工具是由RHEL的程序人员使用perl语言开发,随着长时间的使用后,发现性能比较低下或难于使用,此后再由RHEL官方使用C语言重写。

yum工具的实现原理

将诸多程序的包信息和头文件提取出来,放到一个集中的地方,记录其依赖关系。在下次安装的时候,均于存储的库文件查找相应的对应关系,再安装所依赖的软件程序。

yum的工作机制

其更像C/S架构模式,提供yum源的一方类似服务端,使用yum工具的一方类似客户端。客户端每次下载远程服务器软件包的一个元数据表,存放至本地进行缓存 ,在要安装程序时,查询缓存,如果存在, 就向远程服务器请求软件安装,如果有依赖关系,YUM服务器会检查其软件安装情况并记录本地,把有依赖并没有安装的软件提示用户安装。下载的元数据缓存至本地时,服务器会对元数据进行特征算法,与自己本地进行对比,如果变动了, 就要下载新的元数据

yum工具的传输协议及格式

  • http
    • 格式为:http://mirrors.aliyun.com
  • ftp
    • 格式为:ftp://mirros.aliyun.com
  • nfs
    • 格式为:
  • file
    • 格式为:file:///media/cdrom

yum的安装及卸载

  • 安装
    • rpm -i yum-version.rpm
  • 卸载
    • rpm -e yum

yum配置文件及格式:

/etc/yum.conf
  • 各仓库文件的公共配置,或者不属于仓库的配置,格式如下:
    • [main]:主名称,固定名称
    • cachedir= : 缓存目录
    • keepcache=0:要不要保存缓存
    • exactarch=1:要不要做精确严格的平台匹配
    • gpgcheck=1:检查来源法性和完整性
    • plugins=1:要不要支持插件
    • installonly_limit: 同时安装几个
/etc/yum.repos.d/*.repo
  • 为仓库的指向及其配置,格式如下:
    • [repository ID] :ID名称,即仓库名称,不可与其他ID重命
    • name= : 对ID名称的说明
    • baserul=URL1
      URL2
      URL3 (如果同一个源有多个镜像,可以在此我写几个,但每个URL需换行)
    • mirrorlist= (有一台服务器在网络上,保存了多个baseurl,如果使用这项,就不使用baseurl项)
    • enabled={1|0}
    • gpgcheck={1|0}
    • repo_gpgcheck= : 检查仓库的元数据的签名信息
    • gpgkey=URL (gpg密钥文件)
    • enablegroups= {1|0}}是否在此仓库中上使用组来指管理程序包
    • failovermethod= roundrobin|priority (对多个baseurl做优先级的,roundrobin为轮循,priority为优先级,默认为轮循,意为随机)
    • keepalive= 如果对方是http 1.0是否要保持连接
    • username= yum的验证用户
    • password= yum的验证用户密码
    • cost=默认baseurl都为1000
      * 注意:等号左右不能出现空格

yum命令

yum - yum - Yellowdog Updater Modified
synopsis: yum [options] [command] [package ...]
  • options:

    • —nogpgcheck : 禁止进行gpg check
    • -y : 自动回答为Yes
    • -q : 静默模式
    • —enablerepo : 临时启用此处指定的repo
    • —disablereop :临时禁用此处指定的reop
    • —noplugins:禁用所有插件

========

yum软件管理

yum的程序安装:
  • install Package1.... : 安装
  • reinstall Package1... : 重新安装
  • downgrade Package1...:降级安装
  • localinstall Package1... : 安装本地程序
yum程序包的升级
  • update soft_name
  • localupdate Package1...
yum检查升级
  • check-update
yum程序卸载
  • remove | erase soft_name
yum显示程序包
  • list {all|available|updates|installed}
    • all : 显示所有仓库中的包
    • available : 显示可用的软件包
    • updates : 显示可用于升级的包
    • installed : 显示已经安装的包
      • yum list php* : 显示想着以php开头的所有软件包
yum查看包的infomation信息
  • info Packages1....
yum查看文件是由哪个包提供
  • provides packages1 | FILE….
yum清理本地缓存
  • clean [ package ] | metadata | expire-cache| rpmdb | plugins | all ]
yum生成缓存
  • makecache
yum搜索程序包名及summary信息
  • search [ string1…]
yum显示程序包的依赖关系:
  • deplist packages1….
查看yum事务历史(事务只记录安装、升级、卸载的信息)
  • history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

yum显示仓库列表:

  • repolist [all | enabled| |disabled}
    • all : 查看全部的仓库
    • enabled : 查看地可用的仓库
    • disabled : 查看不可用的仓库
此项就是在/etc/yum.repos.d/*.reop中定义了enabled=1或者等于0的

=========

yum组管理

yum组的安装
  • groupinstall
yum组的查看
  • grouplist
yum组的基本信息查看
  • groupinfo
yum组的删除
  • groupremove
yum组的更新
  • groupupdate

==========

YUM的repo配置文件中可用的变量
  • $releasever:当前os的发行版本的主版本号
  • $arch:平台
  • $basearch:基础平台
  • $YUM0-$YUM9:用户自定义的变量

===========

yum仓库的配置文件示例
    [base]  #光盘的基本软件,即os代表光盘
    name=CentOS $releasever $basearch on local server 172.16.0.1
    baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-$basearch/ #此处如果使用公网公开的repo,这里的地址一定要为repodata目录相同层级地址
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enable=1 #如果此项未写,默认表示启用

    [extra] #  extra表示额外的程序
    name=CentOS $releasever $basearch extras
    baseurl=http://172.16.0.1/centos/$releasever/extras/$basearch/
    gpgcheck=0

    [epel]  # 是由公共组织权威维护
    name=Fedora EPEL for CentOS$releasever $basearch on local server 172.16.0.1
    baseurl=http://172.16.0.1/fedora-epel/$releasever/$basearch/
    gpgcheck=0
    
    [cdrom]
    name=cdrom
    baseurl=file:///media/
    gpgcheck=0

=========

创建yum仓库:
  • yum install createrepo
createrepo - Create repomd (xml-rpm-metadata) repository
  • synosis: createrepo [options] <directory>
    • [options]
      • —baseurl : 指定repodate的目录位置

        • repodate: 使用sqlite格式存储
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 175,490评论 5 419
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 74,060评论 2 335
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 124,407评论 0 291
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 47,741评论 0 248
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 56,543评论 3 329
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,040评论 1 246
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,107评论 3 358
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 32,646评论 0 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 36,694评论 1 271
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,398评论 2 279
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 33,987评论 1 288
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,097评论 3 285
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,298评论 3 282
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,278评论 0 14
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,413评论 1 232
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,397评论 2 309
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,099评论 2 314

推荐阅读更多精彩内容