码迷,mamicode.com
首页 > 其他好文 > 详细

五、软件包管理RPM与YUM

时间:2017-04-21 18:18:10      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:rpm、yum、rpm包的制作

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>+ 升级软件包

注意:
  (1) 不要对内核做升级操作;Linux 支持多内核版本并存,因此直接安装新版本内核;
  (2) 如果原程序包的配置文件安装后曾被修改,升级时新版本的提供的同一个配置文件并不会直接

覆盖老版本的配置文件,而把新版本的文件重命名(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

  • 安装本地软件包

[root@mylinux home]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...                                                            (1########################################### [100%]
   1:zsh                                                                ( ########################################### [100%]
  • 刷新软件包

  使用rpm刷新软件包时,如果rpm的刷新选项处理版本比已经安装的版本新,则升级;但是如果软件包没有安装则不会刷新该软件包。而升级选项不管该软件包是否安装都会安装该软件。

[root@mylinux home]# rpm -Fvh zsh-4.3.11-4.el6.centos.2.x86_64.rpm
  • 查询安装的所有软件包

[root@mylinux 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
...
[root@mylinux home]# rpm -qa | wc -l           系统上所有包的数量
743
[root@mylinux home]# rpm -qal | wc -l          系统上所有包中所有文件的数量
120073
  • 校验软件包

[root@mylinux home]# rpm -Vp zsh-4.3.11-4.el6.centos.2.x86_64.rpm  校验软件包中的文件
  • 显示rpm包和其中的文件[root@mylinux 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依赖关系

[root@mylinux 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
  • 卸载软件包

[root@mylinux 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文件

[root@localhost home]# mkdir /media/cdrom
[root@localhost home]# mount -o loop /dev/cdrom /media/cdrom/
[root@localhost home]# cd /media/cdrom/
[root@localhost 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
[root@localhost cdrom]#

 3、配置本地源

[root@localhost 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源

[root@localhost 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
[root@localhost yum.repos.d]# yum mackecache   #缓存本地yum源包信息
Loaded plugins: fastestmirror
No such command: mackecache. Please use /usr/bin/yum --help
[root@localhost 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
[root@localhost 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 程序包

[root@localhost 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!
[root@localhost yum.repos.d]# httpd   #确保httpd顺利运行

技术分享

  2、 在/var/www/html 目录, 使用一个目录来保存准备制作成为 yum 仓库的所有 rpm ;

[root@localhost cdrom]# mkdir /var/www/html/packages
[root@localhost cdrom]# cp Packages/z* /var/www/html/packages/
[root@localhost cdrom]# cp Packages/y* /var/www/html/packages/
[root@localhost cdrom]# cp Packages/x* /var/www/html/packages/
[root@localhost cdrom]# cd /var/www/html/packages/
[root@localhost 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 仓库

[root@localhost 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 仓库

[root@localhost yum.repos.d]# vim centos65http.repo  
[centos-65http]
name=Centos http 65
baseurl=http://192.168.191.128/packages/
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache
[root@localhost 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配置文件

[root@localhost 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
[root@localhost 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%]
[root@localhost 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 #测试版
[root@localhost yum.repos.d]# sed -i -e ‘s@enabled=0@enabled=1@g‘ /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

标签:rpm、yum、rpm包的制作

原文地址:http://yinsuifeng.blog.51cto.com/10173491/1918167

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!