yum 笔记

一、软件包管理概述

在漫长的 Linux 发展史中,由于 Linux 系统的特性,所有软件都为绿色的,编译成二进制解压后即可运行,所以软件安装和管理成了一个复杂的体力劳动,而软件包管理器应运而生。

1.1、相关术语概述

  • POSIX : Portable Openratin System 跨平台调用
  • API 兼容 : 开发库兼容,因此源代码可跨平台
  • ABI 兼容 : 编译后的程序可以跨平台
  • 库 : 可执行程序,本身不能作为程序执行入口,但可以被调用是编译好的二进制格式
  • 程序的过程 : 预编译、编译、汇编、链接
    • 静态链接 : 将库包含在程序中
    • 动态链接 : dll,so(shared object)
  • 编译 : 源代码翻译成cpu指令集的过程

软件编译主要考虑以下两个因素 :

  • os 平台 : 编译好的应用程序必须为特定平台所支持的版本
  • 硬件平台 : 应用程序为特定的cpu所支持

1.2、软件包组成部分

  • 二进制程序 : 通常为程序源码编译后产生的二进制文件,一般存放于 bin/sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin
  • 自身库文件 : 程序自身所用到的库文件,一般存放于 /lib/lib64/usr/lib/usr/lib64/usr/local/lib/usr/local/lib64;程序开发时调用 API,运行时调用 ABI,通过调整 /etc/ld.so.conf.d/*.conf 可改变内核装载的共享库文件
  • 配置文件 : 配置文件一般存放在 /etc 目录中,同时如果程序安装选择了指定目录,如 /usr/local/nginx,那么此时程序的可执行文件等将可能不会在标准目录中。
  • 帮助文件 : 帮助文件一般包括 info文件、README、INSTALL、ChangeLog

1.3、应用管理器功能

应用管理器一般应该实现以下功能 :

  • 数据库 : 应用程序管理器应该能够维护一个数据库,数据库中应该维护 程序名称和版本、安装生成的各文件路径、程序文件校验码、程序间的依赖关系(解决循环依赖、版本依赖等)、提供功能性的说明
  • 程序组成格式 : 应用程序管理器应当能够提供应用程序的组成说明,如 文件清单、安装卸载时运行的脚本等
  • 版本管理 : 应用程序管理器应当能管理应用程序的版本;应用程序源代码版本格式为 name-major.minor.release.tar.gz

1.4、常用的软件包管理器

常用发行版都有其自己的软件包管理器,如 :

  • Debian : .deb 格式,使用 dpkg 管理
  • RadHat : .rpm 格式,使用 rmp 管理
  • SUSE : .rpm 格式,使用 rpm 管理,注意,SUSE 的系统结构与 RadHat 不同,虽然都是用 rpm 管理,但其软件包内部文件组织不同,不能通用

常用的软件包管理器都具备以下功能 : 打包、安装、查询、升级、卸载、校验、数据库管理

包管理器虽然解决了软件包的管理混乱问题,但是其无法解决包分发等问题,因此出现了基于软件包管理器的前端管理器,如 Debian 系列的 apt-get、RadHat 系列的 yum

二、rpm 使用

2.1、rpm 术语和概述

rpm 全称 RadHat Package Manager,后经过 Linux 基金委员会吸纳为标准包管理工具,重新定义为 RPM is Package Manager.

  • rpm 包名称 : name-version-release.arch.rpm
    • release : 通常包含rpm的制作发行号,还包含使用的OS
    • OS 平台 : OS 平台即为操作系统平台,如 el6(redhat enterprise linux6)、CentOS5、suse11 等
    • 硬件平台 : 硬件平台用 arch 表示,常见的如 x86_64、i386、i586、i686、ppc 等,如软件包无平台要求,则表示为 noarch
  • 分包 : 分包机制即将一个大的应用程序打包为多个 rpm 包,一般包含主包和支包,作用是满足不同用户需要,有些用户可能用不到太多的功能,可选择性安装支包
  • 来源合法性校验 : 对于软件包来源一般要对源码进行 md5 或 sha1 校验码验证,对于 rpm 包则认为发行商提供的即为合法的,包完整性使用检验码校验,包的来源采用公钥加密机制校验
  • rpm 包获取途径 :
    • 首先考虑发行商的光盘或站点服务器
    • rpmfind : http://rpmfind.net
    • rpmpbone : http://rpm.pbone.net
    • Fedora EPEL : 对于发行商尚未提供或需要更高版本的 rpm 包可考虑 Fedora 维护的 EPEL 源,但对于 RadHat 企业版某些安全机制要求较高的地方可能会不被信任

2.2、rpm 常用命令

2.2.1、安装和卸载

  • rpm -i PACKAGE [...] : -i 即 –install,安装软件包
    • -v : 安装时显示安装信息,如进度
    • -vv : 二级详细显示
    • -vvv ; 三级详细显示
    • -h : -h 即 hash,以 # 的形式显示安装进度,通常一个 # 代表 2%
  • rpm -ivh --test PACKAGE : 仅测试,不进行安装
  • rpm -ivh --nodeps ; 忽略依赖关系,当出现包依赖时,可使用此选项强制安装(装完可能不能用)
  • rpm -ivh --replacepkgs : 重新安装软件包,原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
  • rpm -e PACKAGE : -e 即 –erase,卸载指定软件包,如果该软件包被其他程序依赖,可使用 --nodeps 忽略依赖

2.2.2、查询

  • rpm -q PACKAGE : 查询某软件包是否安装,rpm -q 用于查询,一般需要附带查询参数如 a
  • rpm -qa PACKAGE : 查询安装的所有软件包,包名支持通配符,如 rpm -qa php* 查询 php 开头的所有包
  • rpm -qi PACKAGE : 查询包的描述信息,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Name        : docker
Version : 1.10.3
Release : 44.el7.centos
Architecture: x86_64
Install Date: 2016年07月25日 星期一 10时28分19秒
Group : Unspecified
Size : 43643976
License : ASL 2.0
Signature : RSA/SHA256, 2016年06月24日 星期五 11时43分08秒, Key ID 24c6a8a7f4a80eb5
Source RPM : docker-1.10.3-44.el7.centos.src.rpm
Build Date : 2016年06月24日 星期五 08时10分54秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://github.com/docker/docker
Summary : Automates deployment of containerized applications
Description :
Docker is an open-source engine that automates the deployment of any
application as a lightweight, portable, self-sufficient container that will
run virtually anywhere.

Docker containers can encapsulate any payload, and will run consistently on
and between virtually any server. The same container that a developer builds
and tests on a laptop will run at scale, in production*, on VMs, bare-metal
servers, OpenStack clusters, public instances, or combinations of the above.
  • rpm -ql PACKAGE : 查询软件包安装后的文件列表
  • rpm -qf FILE : 反查询,查询某个文件由那个软件包生成/释放的
  • rpm -qd PACKAGE : 查询某个包安装完成后生成的文档文件
  • rpm -qc PACKAGE : 查询某个软件安装后生成的配置文件
  • rpm -q --scripts : 查询软件爱你安装脚本,脚本一般包含4类,如下:
    • preinstall : 安装前脚本
    • postinstall : 安装后脚本
    • preuninstall : 卸载前脚本
    • postuninstall : 卸载后脚本
  • rpm -qpl PACKAGE : 查询某尚未安装软件包安装后生成的文件列表
  • rpm -qpi PACKAGE : 查询某尚未安装软件包的描述信息

2.2.3、升级

  • rpm -U PACKAGE : 升级或安装软件包(可以与 v、h等一起使用)
  • rpm -F PACKAGE : 升级软件包(可以与 v、h等一起使用)
  • rpm -U --force PACKAGE : 强行升级或安装,当当前软件包被其他软件包所依赖、或升级后新版本跟其他软件包冲突时,可使用此选项进行强制升级或安装

2.2.4、管理

  • rpm -V PACKAGE : 检验指定软件包是否被修改,以下为修改后返回状态位含义
1
2
3
4
5
6
7
8
9
S file Size differs  大小
M Mode differs (includes permissions and file type) 头文件
5 digest (formerly MD5 sum) differs MD5
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 -K PACKAGE : 校验 rmp 完整性和来源(-checksig)
    • --nosigeature : 不检查来源合法性
    • --nodigest : 不检查完整性
  • rpm --import KEY : 导入 rpm 包制作商密钥

2.2.5、rpm 数据库

rpm 数据库位置: /var/lib/rpm

  • rpm --initdb : rpm 数据库初始化,如果事先不存在则新建
  • rpm --rebuilddb : rpm 数据库重建,直接重建并覆盖原有数据

三、yum 使用

yum 全称 Yellowdog Update Modifier,是一个基于 rpm 软件包管理器的前端软件包管理器,其最主要的功能便是能自动管理软件包依赖关系。

3.1、yum 仓库简介

yum 仓库顾名思义是一个 rpm 软件仓库,域名安装软件时从仓库下载至本地并安装。yum 仓库实质是一个 rpm 软件包共享服务器,其中主要包含 rpm 的各种软件包,以及各个软件包之间相互依赖关系的元数据信息,服务器使用的协议可自行选择,比如 ftp、http、nfs、file 等。

yum 客户端在使用 yun 仓库时,主要完成以下操作 :

  • 配置文件 : yum 客户端要能够自行配置使用的 yum 仓库,保证最优的下载速度和 rpm 包质量
  • 缓存元数据 : yum 客户端要能够缓存 yum 仓库提供的软件包元数据,以便本地快速读取
  • 分析元数据 : yum 客户端要能够分析理解 yum 仓库提供的元数据,包括软件依赖关系等
  • 执行具体操作 : yum 客户端要能够根据仓库提供的元数据和用户指令完成各种操作,如 rpm 安装卸载等

3.2、yum 客户端配置

yum 客户端配置文件主要存放于 /etc/yum.conf(主配置文件)/etc/yum.repo.d/*.repo(自定义仓库配置)
yum 配置文件一般分为 主配置段([main])、仓库配置段([repo]),类似于 Windows 的 ini 文件,yum 仓库配置示例如下 :

1
2
3
4
5
6
7
[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0} 1:表示启用 0:表示不启用
gpgcheck={1|0} 1:验证gpg 0:表示不验证
gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
cost=定义此仓库开销,默认为1000

3.4、yum 常用命令

  • yum repolist[all|enabled(默认)|disabled] : 列出所有可用的 yum repo
  • yum clean [all|packeages(包)|metadata(元数据)|expire-cache(过期数据)|rpmdb(rpm数据)|plugins] : 清理 yum 缓存
  • yum list [all|installed(已安装过的)|available(可用)] : 列出 yum 软件包
  • yum info PACKAGE : 显示软件包信息
  • yum grouplist : 列出所有软件包组
  • yum groupinfo GROUP : 列出软件包组信息,包括必要的安装软件包和可选的软件包,其中有三个跟开发相关的包组:
    • Desktop Platform Development : 有图形程序时需安装此组
    • Server Platform Development
    • Development Tools
    • 如果系统为Centos 5,开发包组为 Development ToolsDeveLopment Libraries
    • 如何系统为centos 6,常用的开发包为 Development toolsServer Platform Development
  • yum install PACKAGE : 安装软件包,PACKAGE 可为本地 rpm 包路径,此时为安装本地 rpm 包,如包检查不通过可使用 –nogpgcheck 手动禁用包来源和完整性验证
  • yum reinstall PACKAGE : 重新安装软件包
  • yum check-update PACKAGE : 检查软件包是否有升级
  • yum update PACKAGE : 升级指定软件包
  • yum downgrade PACKAGE : 降级软件包
  • yum erase|remove PACKAGE : 删除/卸载软件包
  • yum whatprovides|provides FILE : 查询某文件是有那个软件包提供的
  • yum groupinstll GROUP : 安装软件包组
  • yum groupremove GROUP : 删除软件包组
  • yum history : 查看 yum 历史

3.5、yum 宏

yum 配置文件中有很多可用的宏变量,用于动态替换,以下列举常用的 :

  • $releasever : 程序的版本,对Yum而言指的是redhat-relrase版本.只替换为主版本号,如Redhat6.5 则替换为6
  • $arch : 系统架构
  • $basharch : 系统基本架构,如i686,i586等的基本架构为i386
  • $YUM0-9 : 在系统定义的环境变量,可以在yum中使用

3.6、搭建 yum 仓库

  • 安装仓库创建工具 yum install createrepo -y
  • 准备文件服务器,比如 httpd yum install httpd -y
  • 在 http 的访问目录下创建仓库目录
  • 复制仓库要存放的 rpm 到创建的目录
  • 创建仓库元数据 createrepo /var/www/html/openstack(仓库目录)
  • 配置客户端 yum 仓库文件指向自建的 yum 仓库
  • 为避免仓库中 rpm 包不全最好同时配置 epel 源
  • 测试使用

yum 笔记
https://mritd.com/2016/08/02/yum-note/
作者
Kovacs
发布于
2016年8月2日
许可协议