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 |
|
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 |
|
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 |
|
3.4、yum 常用命令
yum repolist[all|enabled(默认)|disabled]
: 列出所有可用的 yum repoyum 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 Tools
和DeveLopment Libraries
- 如何系统为centos 6,常用的开发包为
Development tools
和Server 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 源
- 测试使用