首页 > 代码库 > CentOS下rpm与yum的应用

CentOS下rpm与yum的应用

在我们学习和生产的环境中,经常需要安装现有系统中没有的软件来满足相应的需求。debian里管理deb文件的是 dpkg包管理器,而redhat管理rpm文件的rpm包管理器,就是我们的主角了。今天阿拉就CentOS6.9与CentOS7.3的环境,跟大伙唠一下红帽经典的包管理器——rpm。当然,要说rpm,当然离不开他的老伙计yum。自然,阿拉提及的未必全面,欢迎各位补充哟。科科。


因为linux开源软件提供的都是源码。编译源码虽然并不复杂,但在生产环境中,编译后的软件包无疑更为普及,也更方便安装和使用。为了生产效率,也为了提高Linux的通用性,就有了方便安装的编译后的二进制应用包。好吧,以上这些都是阿拉信口胡扯的。总之,二进制应用程序由二进制文件、库文件、配置文件、帮助文件组成。为了管理程序包,红帽推出了名为rpm的编辑器,这也就是我们今天的话题来由。


rpm包的命名如下:

name-VERSION-release.arch.rpm


举个例子的话就比如:

tree-1.6.0-10.el7.x86_64.rpm


VERSION是源码的版本号,release对应e17,是编译号,一啊不能用来指编译的次数。arch指平台,常见的有x86_64,指64位系统,i386代表32位系统,noarch则与平台无关,即适用于任何系统。很多程序的包不止一个。按其形式大致有如下几种:

Application-VERSION-ARCH.rpm: 主包 

Application-devel-VERSION-ARCH.rpm 开发子包 

Application-utils-VERSION-ARHC.rpm 其它子包 

Application-libs-VERSION-ARHC.rpm 其它子包


因为rpm自身也是个包,我们可以以此为例:

[root@centos7 Packages]# ls rpm-* 
rpm-4.11.3-21.el7.x86_64.rpm
rpm-apidocs-4.11.3-21.el7.noarch.rpm
rpm-build-4.11.3-21.el7.x86_64.rpm
rpm-build-libs-4.11.3-21.el7.i686.rpm
rpm-build-libs-4.11.3-21.el7.x86_64.rpm
rpm-cron-4.11.3-21.el7.noarch.rpm
rpm-devel-4.11.3-21.el7.i686.rpm
rpm-devel-4.11.3-21.el7.x86_64.rpm
rpm-libs-4.11.3-21.el7.i686.rpm
rpm-libs-4.11.3-21.el7.x86_64.rpm
rpm-plugin-systemd-inhibit-4.11.3-21.el7.x86_64.rpm
rpm-python-4.11.3-21.el7.x86_64.rpm
rpm-sign-4.11.3-21.el7.x86_64.rpm


对了,使用rpm之前记得光盘或iso要挂载呦。科科,不会的小伙伴自行百度啦!光是rpm就够呛,阿拉实在无力兼顾这个啦!

总之,我们可以从上对rpm的包名有个大体的认知。一般情况下,第一个直接软件名-版本号的就够我们用的啦!但是其他的,我们也有了解,不然以后耍帅都不够格呐!


鉴于我们的废话还要再说一会,接下来我们先小窥门径,安装个软件包试试看:

[root@centos7 Packages]# rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm 
warning: gcc-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        cpp = 4.8.5-11.el7 is needed by gcc-4.8.5-11.el7.x86_64
        glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-11.el7.x86_64
        libmpc.so.3()(64bit) is needed by gcc-4.8.5-11.el7.x86_6


看运行结果,第一行看着有点懵,我们后面说,第二行,清晰晰写着error。error后面Failed dependencies是说由于依赖关系,当前软件需要安装以下几个包后才能安装。这里就要提到一个概念了。

包之间可能存在依赖关系,甚至循环依赖。


不懂,好,让我们继续刚才的。既然安装gcc需要cpp,那我们就干脆装一下好了。

[root@centos7 Packages]# rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm 
warning: cpp-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        libmpc.so.3()(64bit) is needed by cpp-4.8.5-11.el7.x86_64


这样下去要装到什么时候啊!正常人都会这样想的。

关键是,哪个libmpc.so.3的又是个什么鬼啊!装一下试试。诶,tab补全不了。嗯~硬敲!

[root@centos7 Packages]# rpm -ivh libmpc.so.3
error: open of libmpc.so.3 failed: No such file or directory


作为和linux闹脾气的结果,丫果然给报了个错。

好吧,还记得我们提过的二进制应用程序由二进制文件、库文件、配置文件、帮助文件组成的概念吗?这个libmpc开头的,是一个库文件啦!库文件里一般存放算法和函数、变量或类之类可供程序调用的信息。你可以简单的将其理解为仓库。


包的依赖关系很是麻烦,于是解决依赖包的管理工具yum也就应运而生了。类似的linux常用包管理器有:

yum:rpm包管理器的前端工具 

apt-get:deb包管理器前端工具 

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具 


关于库文件相关的命令则如下:

ldd /PATH/TO/BINARY_FILE 查看二进制程序所依赖的库文件 

ldconfig 加载库文件 

/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件 名及文件路径映射关系 

相关配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 

相关缓存文件:/etc/ld.so.cache 


现在再来重申概念实在微妙。不过我们事先熟悉了部分理念,现在不来总结实在浪费。嘛嘛,阿拉会用尽量精简的言语啦!

 包管理器的功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作

包文件组成 (每个包独有):RPM包内的文件;RPM的元数据,如名称版本依赖性描述等;安装或卸载时运行的脚本 

数据库(公共):/var/lib/rpm (程序包名称及版本、依赖关系、功能说明、包安装后生成的各文件路径及校验码信息)

[root@centos7 Packages]# ls /var/lib/rpm 
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5


要获取rpm可直接安装的包非常容易啦!我们可以从本地ISO镜像直接安装,当然镜像可以自官网得到,地址为https://www.centos.org/download/。官网上提供有阿里云、搜狐等的国内链接,在国内下载更快呦。 另外Fedora-EPEL和Rpmforge也是官方及其推广的网站。不过第三方的包还是要仔细检查下其合法性及完整性哟,不然丢失数据就得不偿失啦!

同时,rpm我们是可以自己制作的,此处不再细说。其实阿拉还没学到啦,科科。


终于要真实的说到rpm啦!啦啦啦,让我们先瞅瞅这个能够进行安装、卸载、升级、查询、校验、数据库维护的家伙的用法!

安装: rpm {-i|--install} [install-options] PACKAGE_FILE… 

-v: verbose 

-vv: 

-h: 以#显示程序包管理执行进度 

rpm -ivh PACKAGE_FILE ... 

rpm包安装 [install-options] 

--test: 测试安装,但不真正执行安装,即dry run模式 

--nodeps:忽略依赖关系 

--replacepkgs | replacefiles 

--nosignature: 不检查来源合法性 

--nodigest:不检查包完整性 

--noscripts:不执行程序包脚本 

%pre: 安装前脚本; --nopre 

%post: 安装后脚本; --nopost 

%preun: 卸载前脚本; --nopreun 

%postun: 卸载后脚本; --nopostun


升级: rpm {-U|--upgrade} [install-options] PACKAGE_FILE... 

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

upgrade:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则“安装” 

freshen:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则不执行升级操作 

rpm -Uvh PACKAGE_FILE ... 

rpm -Fvh PACKAGE_FILE ... 

--oldpackage:降级 

--force: 强制安装 


升级注意项 注意: (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此 ,对直接安装新版本内核 (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本 的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而 把新版本的文件重命名(FILENAME.rpmnew)后保留 21 包查询 rpm {-q|--query} [select-options] [query-options] [select-options] -a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p rpmfile:针对尚未安装的程序包文件做查询操作 --whatprovides CAPABILITY:查询指定的CAPABILITY 由哪个包所提供 --whatrequires CAPABILITY:查询指定的CAPABILITY被 哪个包所依赖 rpm2cpio 包文件|cpio –itv 预览包内文件 rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件 22 包查询 [query-options] --changelog:查询rpm包的changelog -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information -l: 查看指定的程序包安装后生成的所有文件 --scripts:程序包自带的脚本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查询指定的程序包所依赖的CAPABILITY 23 包查询 常用查询用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa 包卸载: rpm {-e|--erase} [--allmatches] [--nodeps] [-- noscripts] [--notriggers] [--test] PACKAGE_NAME ... 24 包校验 rpm {-V|--verify} [select-options] [verify-options] S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs 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 25 包校验 包来源合法性验正及完整性验正 完整性验正:SHA256 来源合法性验正:RSA 公钥加密 对称加密:加密、解密使用同一密钥 非对称加密:密钥是成对儿的 public key: 公钥,公开所有人 secret key: 私钥, 不能公开 导入所需要公钥 rpm -K|checksig rpmfile 检查包的完整性和签名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7 rpm -qa “gpg-pubkey*” 26 rpm数据库 数据库重建: /var/lib/rpm rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之 否则,不执行任何操作 rebuilddb:重建已安装的包头的数据库索引目录 27 yum CentOS: yum, dnf YUM: Yellowdog Update Modifier,rpm的前端程序,可解 决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具 yum repository: yum repo,存储了众多rpm包,以及 包的相关的元数据文件(放置于特定目录repodata下) 文件服务器: http:// https:// ftp:// file:// 28 yum配置文件 yum客户端配置文件: /etc/yum.conf:为所有仓库提供公共配置 /etc/yum.repos.d/*.repo:为仓库的指向提供配置 仓库指向的定义: [repositoryID] name=Some name for this repository baseurl=url://path/to/repository/ enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} roundrobin:意为随机挑选,默认值 priority:按顺序访问 cost= 默认为1000 29 yum仓库 yum的repo配置文件中可用的变量: $releasever: 当前OS的发行版的主版本号 $arch: 平台,i386,i486,i586,x86_64等 $basearch:基础平台;i386, x86_64 $YUM0-$YUM9:自定义变量 实例: http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i384 30 yum源 阿里云repo文件: http://mirrors.aliyun.com/repo/ CentOS系统的yum源 阿里云: https://mirrors.aliyun.com/centos/$releasever/os/x86_64/ 教学环境: http://172.16.0.1/cobbler/ks_mirror/$releasever/ EPEL的yum源: 阿里云: https://mirrors.aliyun.com/epel/$releasever/x86_64 教学环境: http://172.16.0.1/fedora-epel/$releasever/x86_64/ 3131 生成172.16.0.1_cobbler_ks_mirror_CentOS-Xx86_64_.repo yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/ yum-config-manager --disable “仓库名" 禁用仓库 yum-config-manager --enable “仓库名” 启用仓库 yum-config-manager 32 yum命令 yum命令的用法: yum [options] [command] [package ...] 显示仓库列表: yum repolist [all|enabled|disabled] 显示程序包: yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...] 安装程序包: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安装) 33 yum命令 升级程序包: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降级) 检查可用升级: yum check-update 卸载程序包: yum remove | erase package1 [package2] [...]

yum命令 查看程序包information: yum info [...] 查看指定的特性(可以是某文件)是由哪个程序包所提供: yum provides | whatprovides feature1 [feature2] [...] 清理本地缓存: 清除/var/cache/yum/$basearch/$releasever缓存 yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 构建缓存: yum makecache 35 yum命令 搜索:yum search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息 查看指定包所依赖的capabilities: yum deplist package1 [package2] [...] 查看yum事务历史: yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats] yum history yum history info 6 yum history undo 6 日志 :/var/log/yum.log 36 yum命令 安装及升级本地程序包: yum localinstall rpmfile1 [rpmfile2] [...] (用install替代) yum localupdate rpmfile1 [rpmfile2] [...] (用update替代) 包组管理的相关命令: yum groupinstall group1 [group2] [...] yum groupupdate group1 [group2] [...] yum grouplist [hidden] [groupwildcard] [...] yum groupremove group1 [group2] [...] yum groupinfo group1 [...] 37 yum命令 yum的命令行选项: --nogpgcheck:禁止进行gpg check -y: 自动回答为“yes” -q:静默模式 --disablerepo=repoidglob:临时禁用此处指定的repo --enablerepo=repoidglob:临时启用此处指定的repo --noplugins:禁用所有插件 38 系统光盘yum仓库 系统安装光盘作为本地yum仓库: (1) 挂载光盘至某目录,例如/media/cdrom # mount /dev/cdrom /media/cdrom (2) 创建配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 创建yum仓库: createrepo [options] 

首先放一张看起来很好玩的泡泡图。

http:/10681.html 

好玩的泡泡图


olkit/LATEST/




三:

pt

功间。

环境介绍:192.168.56.132主库,192.168.56.133从库


操作如下:

在主库上执行:

1
2
[root@node3 bin]# ./pt-heartbeat --database test --update 
--create-table --daemonize -uroot -proot123

test为我监控同步的库,在该库下创建一张监控表heartbeat,后台进程会时时更新这张表。


在从库上执行监控主从同步延迟时间的语句:

master-server-id是主库的server-id, -h(主库ip)

gjkl

时间是0s,目前没有延迟的出现。



锦囊妙计四:

pt-table-checksum

功能检查主从复制一致性

原理:在主上否一致。

比较test库的差异情况,在主库上面执行:

hhjkl

可见diff都为0,证明主从的test库没有差异情况。


比较test库哪些表有差异(需要添加replicate-check-only),在主库上面执行:

ghjkl

可见test库下面t这张表主从数据不一致。



锦囊妙计六:

pt-ioprofile

功能:方便定位IO问题,可通过IO吞吐量来定位。



通过这个报告我们可以看到,哪个文件占用IO的时间比较多,跟磁盘交互最为繁忙,便于锁定IO问题。


因为这个工具集命令很多,今儿先给大家介绍这些比较常用的,其他的一些大家感兴趣可以私下去研究下。

官方地址:https://www.percona.com/doc/percona-toolkit/LATEST/index.html


最近学习的知识点又多又碎,但看到老师最后非但


本文出自 “RightNow” 博客,谢绝转载!

CentOS下rpm与yum的应用