软件包管理RPM与YUM
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件包管理RPM与YUM相关的知识,希望对你有一定的参考价值。
5.1、程序包管理器
程序包管理器的基本功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;其文件组成一般可以分为两类:
1)、程序的组成组成清单 (每个包独有):文件清单、 安装或卸载时运行的脚本 2)、数据库(公共):程序包名称及版本、依赖关系;功能说明;安装生成的各文件的文件路径及校验码信息;软件包的组成部分。 |
软件包安装后,一般分布到如下一些目录:
RPM 全名是『RedHat Package Manager ,RPM is Package Manager』。对于rpm软件包的名称组成有其特有的格式,如某软件包的名称组成为:
namne-version.type.rpm
name:表示软件包名称 version:表示软件包的版本号 type:软件包的类型 i[3456]86:表示在Intel X86计算机平台上编译的 sparc:表示在SPARC计算机平台上编译的 alpha:表示在Alpha计算机平台上编译的 src:表示软件包源代码 rpm:表示文件扩展名 |
gdm-libs-5.30.4-21.el6.i386.rpm
name:软件包名称为gdm-libs version:软件包版本号5.30.4-21 type:i386表示IntelX86计算机平台上编译的 rpm:文件扩展名 |
5.2、rpm命令的使用
rpm [选项]
查询/验证软件包选项: -a, --all 查询/验证所有软件包 -f, --file 查询/验证文件所属的软件包 -g, --group 查询/验证组中的软件包 -p, --package 查询/验证一个软件包 -W, --ftswalk 查询/验证软件包的顶层文件树 --pkgid 查询/验证软件包标示 --hdrid 查询/验证软件包头标示 --triggeredby 查询/验证软件包的触发 --whatrequires 查询/验证软件包需要依赖的软件包 --whatprovides 查询/验证提供相关依赖的软件包 --nomanifest 不把非软件包文件作为清单处理 查询选项(用-q或--query): -c, --configfiles 列出所有的配置文件 -d, --docfiles 列出所有的程序文件 --dump 转储基本文件信息 -L,--licensefiles 列出所有的许可文件 -l, --list 列出软件包中的文件 --queryformat=QUERYFORMAT 使用QUERYFORMAT格式打印信息 -s, --state 显示列出文件状态 验证选项(用-V或--verify): --nofiledigest 不验证文件摘要 --nofiles 不验证软件包中的文件 --nodeps 不验证包依赖 --noscript 不执行验证脚本 安装/升级/移除选项: --allfiles 安装全部文件,包括配置文件,否则配置文件会被跳过 --allmatches 移除所有符合<package>的软件包(如果<package>被指定为多个软件包, 可能会导致错误) --badreloc 对不可重定位的软件包重新分配文件位置 -e, --erase=<package>+ 卸载软件包 --excludedocs 不安装程序文档 --excludepath=<path> 略过以<path>开头的文件 --force --replacepkgs --replacefiles 的缩写 -F, --freshen=<packagefile>+ 如果软件包已经安装,则升级软件包 -h, --hash 软件包安装时列出hash标记(和-v一起使用更好) --ignorearch 不验证软件包架构 --ignoreos 不验证软件包安装操作系统 --ignoresize 安装前不检查磁盘空间 -i, --install 安装软件 --justdb 更新数据库,但不修改文件系统 --nodeps 不验证软件包依赖 --nofiledigest 不验证文件摘要 --nocontexts 不安装文件的安全上下文 --noorder 不对软件包安装重新排序以满足依赖关系 --noscripts 不执行软件包脚本 --notriggers 不执行软件包触发的任何脚本 --oldpackage 更新到软件包的旧版本(带--force自动完成这一功能) --percent 安装软件包时打印百分比 --prefix=<dir> 如果可重定位,把软件包重定位到<dir> --relocate=<old>=<new> 将文件从<old>重定位到<new> --replacefiles 忽略软件包之间冲突的文件 --replacepkgs 如果软件包已经有了,重新安装 --test 不安装,只是判断是否能安装 -U, --upgrade=<packagefile>+ 升级软件包 注意: 覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;检查包安装后生成的文 件是否被修改。 所有rpm模式和可执行文件的通用选项: -D, --define=‘MACRO EXPR‘ 定义值为EXPR的MACRO -E, --eval=‘EXPR‘ 打印EXPR的宏展开 --macros=<FILE:...> 从文件 <FILE:...> 读取宏,不使用默认文件 --nodigest 不验证软件包摘要 --nosignature 不验证软件包签名 --rcfile=<FILE:...> 从文件 <FILE:...> 读取宏,不使用默认文件 -r, --root=ROOT 使用ROOT作为顶级目录 (默认是"/") --querytags 显示已知的标签 --showrc 显示最终的rpmrc和宏 --quiet 提供更少的详细信息输出 -v, --verbose 提供更多的详细信息输出 --version 打印使用的RPM版本信息 |
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;
配置文件为: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache
安装本地软件包
[[email protected] home]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm Preparing... (1########################################### [100%] 1:zsh ( ########################################### [100%]
刷新软件包
使用rpm刷新软件包时,如果rpm的刷新选项处理版本比已经安装的版本新,则升级;但是如果软件包没有安装则不会刷新该软件包。而升级选项不管该软件包是否安装都会安装该软件。
[[email protected] home]# rpm -Fvh zsh-4.3.11-4.el6.centos.2.x86_64.rpm
查询安装的所有软件包
[[email protected] home]# rpm -qa | sort | more 系统上所有软件包的排序列表 acl-2.2.49-6.el6.x86_64 acpid-1.0.10-3.el6.x86_64 alsa-lib-1.1.0-4.el6.x86_64 alsa-utils-1.1.0-8.el6.x86_64 apr-1.3.9-5.el6_2.x86_64 apr-util-1.3.9-3.el6_0.1.x86_64 apr-util-ldap-1.3.9-3.el6_0.1.x86_64 arprec-2.2.18-1.el6.x86_64 arprec-devel-2.2.18-1.el6.x86_64 ... [[email protected] home]# rpm -qa | wc -l 系统上所有包的数量 743 [[email protected] home]# rpm -qal | wc -l 系统上所有包中所有文件的数量 120073
校验软件包
[[email protected] home]# rpm -Vp zsh-4.3.11-4.el6.centos.2.x86_64.rpm 校验软件包中的文件
显示rpm包和其中的文件[[email protected] home]# rpm -ql zsh 显示rpm包和其中的文件
/bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc /usr/lib64/zsh /usr/lib64/zsh/4.3.11 /usr/lib64/zsh/4.3.11/zsh /usr/lib64/zsh/4.3.11/zsh/attr.so /usr/lib64/zsh/4.3.11/zsh/cap.so /usr/lib64/zsh/4.3.11/zsh/clone.so ...
显示rpm依赖关系
[[email protected] home]# rpm -qR zsh /bin/sh /bin/sh /bin/sh /bin/sh /bin/zsh /sbin/install-info /sbin/install-info config(zsh) = 4.3.11-4.el6.centos.2 coreutils grep grep libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libncursesw.so.5()(64bit) libtinfo.so.5()(64bit) mktemp rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH) rpmlib(PayloadIsXz) <= 5.2-1
卸载软件包
[[email protected] home]# rpm -e zsh
5.3、yum软件包管理
YUM的宗旨是自动化升级、安装/移除RPM包、收集rpm包的相关信息、检查依赖性并自动提示用户解决依赖。YUM客户端的主要作用有:
1、 配置文件:指定各可用的 yum 仓库;
2、 缓存元数据:yum 会到各可用 yum 仓库获取元数据, 并缓存至本地;
3、 分析元数据:根据具体操作请求完成元数据分析,可能包括检查依赖关系、文件列表等信息;
4、 执行具体操作。
yum命令的使用
命令: yum [options] [command] [package ...]
Optinon: --nogpgcheck: 禁止进行 gpg check; -y: 自动回答为“ yes” ; -q: 静默模式; --disablerepo=repoidglob: 临时禁用此处指定的 repo; --enablerepo=repoidglob: 临时启用此处指定的 repo; --noplugins: 禁用所有插件; Command: repolist [all|enabled|disabled]: 列出yum repo[所有的|可使用的|不可使用的] clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存 list [all|installed|available]: 列出 rpm 包[所有的|已安装的|可以安装的] info package_name: 列出包的描述信息 grouplist: 列出所有包组 groupinfo "package_group_name": 显示包组信息 install package_name ...: 安装指定的程序包 reinstall package_name ...: 重新安装指定的程序包 check-update: 检查可升级的软件包 update package_name ...: 升级指定的程序包 downgrade package_name: 降级 whatprovides|provides /path/to/somefile: 查询某文件是由哪个包安装生成的 erase|remove package_name ...: 卸载 groupinstall "group_name": 安装指定的包组 groupremove "group_name": 卸载指定的包组
yum install package --downloadonly --downloaddir=/var (只下载不安装)
YUM配置文件
/etc/yum.conf: 为所有仓库提供公共配置
/etc/yum.repos.d/*.repo: 为仓库的指向提供配置
配置文件格式:由两段组成,类似 windows 的 ini 配置文件
[main] :主配置段 cachedir=/var/cache/yum 指定yum存储缓存和数据文件的默认位置 keepcache=[1|0] 设置为1时,YUM在成功安装软件包之后保留缓存的头文件和软件包 debuglevel=2 指定排错级别,默认为2,取值0-10 logfile=/var/log/yum.log 指定yum的日志文件 exactarch=1 是否只升级与已经安装的软件包CPU体系结构一致的包,1表示是。 obsoletes=1 是否只升级已经过时的软件包,1表示是。 gpgcheck=1 为所有的软件仓库的软件包启用或禁用GPG签名验证。 plugins=1 是否启用插件,1表示启用。 installonly_limit=5 安扎un不过内核类型软件包数量,默认5 [repo] :仓库配置段 [repo_ID] name=String 仓库名称 baseurl= 仓库的访问路径 http:用于指定远程http协议源; ftp: 用于指定远程FYP源; file:用于本地镜像或NFS挂载文件系统 enabled={1|0} 指定是否使用本地仓库,1可用。 gpgcheck={1|0} 指定是否检查软件包的GPG签名 gpgkey= 公钥文件(可以在本地,也可是服务器端路径) cost=定义此仓库开销, 默认为 1000 mirrorlist: 指定仓库的镜像站点
建立一个本地源的方法
1、虚拟机中装载光驱
2、挂载ISO文件
[[email protected] home]# mkdir /media/cdrom [[email protected] home]# mount -o loop /dev/cdrom /media/cdrom/ [[email protected] home]# cd /media/cdrom/ [[email protected] cdrom]# ls CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6 EFI Packages RPM-GPG-KEY-CentOS-Security-6 EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6 GPL repodata TRANS.TBL images RPM-GPG-KEY-CentOS-6 [[email protected] cdrom]#
3、配置本地源
[[email protected] yum.repos.d]# vim /etc/yum.repos.d/centos.6.5.repo [centos-65media] name=Centos 65 #自己定义 baseurl= #本地镜像文件路径 enabled=1 #1启动yum源 gpgcheck=0 #0不检查gpg-key
4、清除缓存,缓存本地yum源
[[email protected] yum.repos.d]# yum clean all #清除缓存 Loaded plugins: fastestmirror Cleaning repos: base centos-65media extras updates Cleaning up Everything Cleaning up list of fastest mirrors [[email protected] yum.repos.d]# yum mackecache #缓存本地yum源包信息 Loaded plugins: fastestmirror No such command: mackecache. Please use /usr/bin/yum --help [[email protected] yum.repos.d]# yum makecache Loaded plugins: fastestmirror Determining fastest mirrors * base: mirrors.cn99.com * extras: mirrors.cn99.com * updates: mirrors.zju.edu.cn base | 3.7 kB 00:00 centos-65media | 4.0 kB 00:00 ... centos-65media/group_gz | 220 kB 00:00 ... centos-65media/filelists_db | 5.8 MB 00:00 ... centos-65media/primary_db | 4.4 MB 00:00 ... centos-65media/other_db | 2.7 MB 00:00 ... extras | 3.4 kB 00:00 extras/filelists_db | 38 kB 00:00 extras/prestodelta | 1.3 kB 00:00 extras/primary_db | 37 kB 00:00 extras/other_db | 51 kB 00:00 updates | 3.4 kB 00:00 updates/filelists_db | 644 kB 00:03 updates/prestodelta | 24 kB 00:00 updates/primary_db | 803 kB 00:02 updates/other_db | 8.8 MB 00:18 Metadata Cache Created [[email protected] yum.repos.d]# yum repolist enabled #显示所有可用的yum仓库 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.cn99.com * extras: mirrors.cn99.com * updates: mirrors.zju.edu.cn repo id repo name status base CentOS-6 - Base 6,706 centos-65media Centos 65 6,367 extras CentOS-6 - Extras 64 updates CentOS-6 - Updates 252 repolist: 13,389
yum仓库的建立
1、 准备文件服务器;使用 httpd 为例,先确保已经安装 httpd 程序包
[[email protected] yum.repos.d]# yum install httpd -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.cn99.com * extras: mirrors.cn99.com * updates: mirrors.zju.edu.cn Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.2.15-59.el6.centos will be installed --> Processing Dependency: httpd-tools = 2.2.15-59.el6.centos for package: httpd-2.2.15-59.el6.centos.x86_64 --> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-59.el6.centos.x86_64 ... Complete! [[email protected] yum.repos.d]# httpd #确保httpd顺利运行
2、 在/var/www/html 目录, 使用一个目录来保存准备制作成为 yum 仓库的所有 rpm 包;
[[email protected] cdrom]# mkdir /var/www/html/packages [[email protected] cdrom]# cp Packages/z* /var/www/html/packages/ [root[email protected] cdrom]# cp Packages/y* /var/www/html/packages/ [[email protected] cdrom]# cp Packages/x* /var/www/html/packages/ [[email protected] cdrom]# cd /var/www/html/packages/ [[email protected] packages]# ls x3270-3.3.6-10.5.el6.x86_64.rpm x3270-text-3.3.6-10.5.el6.x86_64.rpm x3270-x11-3.3.6-10.5.el6.x86_64.rpm x86info-1.25-1.32.el6.x86_64.rpm xalan-j2-2.7.0-9.8.el6.noarch.rpm xcb-util-0.3.6-1.el6.i686.rpm xcb-util-0.3.6-1.el6.x86_64.rpm xchat-2.8.8-1.el6.x86_64.rpm xdelta-1.1.4-8.el6.i686.rpm xdelta-1.1.4-8.el6.x86_64.rpm xdg-user-dirs-0.12-4.el6.x86_64.rpm ...
3、 创建 yum 仓库
[[email protected] packages]# createrepo /var/www/html/packages Spawning worker 0 with 164 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete
4、 启动 httpd 服务
5、 配置使用自建的 yum 仓库
[[email protected] yum.repos.d]# vim centos65http.repo [centos-65http] name=Centos http 65 baseurl=http://192.168.191.128/packages/ enabled=1 gpgcheck=0 [[email protected] yum.repos.d]# yum clean all [[email protected] yum.repos.d]# yum makecache [[email protected] yum.repos.d]# yum repolist enabled Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.nwsuaf.edu.cn * updates: mirrors.nwsuaf.edu.cn centos-65http | 2.9 kB 00:00 repo id repo name status base CentOS-6 - Base 6,706 centos-65http Centos http 65 164 自建仓库 centos-65media Centos 65 6,367 extras CentOS-6 - Extras 64 updates CentOS-6 - Updates 252 repolist: 13,553
配置epel源
如果想获得高质量、高性能、高可靠又方便易用的软件包更新功能,可以使用Fedora Project 推出的EPEL源。其配置方法也十分简单。
1、下载epel配置文件
[[email protected] yum.repos.d]# rpm -ivh Retrieving http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm curl: (22) The requested URL returned error: 404 Not Found error: skipping http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm - transfer failed [[email protected] yum.repos.d]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm Retrieving http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm warning: /var/tmp/rpm-tmp.ywqhs2: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Preparing... (1########################################### [100%] 1:epel-release ( ########################################### [100%] [[email protected] yum.repos.d]# ls -l #出现两个epel源配置文件 total 32 -rw-r--r--. 1 root root 99 Apr 21 22:04 centos65http.repo -rw-r--r--. 1 root root 82 Apr 21 21:22 centos.6.5.repo -rw-r--r--. 1 root root 1926 Nov 27 2013 CentOS-Base.repo -rw-r--r--. 1 root root 638 Nov 27 2013 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 630 Nov 27 2013 CentOS-Media.repo -rw-r--r--. 1 root root 3664 Nov 27 2013 CentOS-Vault.repo -rw-r--r--. 1 root root 957 Nov 5 2012 epel.repo #正式版,所有软件都稳定可以信赖 -rw-r--r--. 1 root root 1056 Nov 5 2012 epel-testing.repo #测试版 [[email protected] yum.repos.d]# sed -i -e ‘[email protected][email protected][email protected]‘ /etc/yum.repos.d/epel.repo #启动epel源
5.4、下载工具 wget/curl/mirror
wget [option]... [URL]... 默认数据下载到硬盘中
-q: 静默模式
-c: 续传
-O: 保存位置
--limit-rates=: 指定传输速率
curl:默认将下载数据打印到终端,若要保存须从定向到文件中
-A/--user-agent <string> 设置用户代理发送给服务器
-basic 使用 HTTP 基本验证
--tcp-nodelay 使用 TCP_NODELAY 选项
-e/--referer <URL> 来源网址
--cacert <file> CA 证书 (SSL)
--compressed 要求返回是压缩的形式
-H/--header <line>自定义头信息传递给服务器
-I/--head 只显示响应报文首部信息
--limit-rate <rate> 设置传输速度
-u/--user <user[:password]>设置服务器的用户和密码
-0/--http1.0 使用 HTTP 1.0
mirror:下载目录
本文出自 “随风而飘” 博客,请务必保留此出处http://yinsuifeng.blog.51cto.com/10173491/1918167
以上是关于软件包管理RPM与YUM的主要内容,如果未能解决你的问题,请参考以下文章
大数据与云计算学习计划 云计算系统管理 6 Linux中RPM软件包管理操作 Yum软件包仓库操作(概念与实操)