linux程序包管理之yum

上章我们提到,rpm包之间存在依赖关系,有时这些依赖关系很复杂,使用rpm命令安装程序包时,手动解决起来太麻烦。而yum工具能够很好地解决这一让人头疼的问题

一、什么是yum

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装

二、yum的工作机制

①yum是基于C/S架构

②yum仓库:

rpm包提供方提供多个rpm包,然后分析并记录与包相关的元数据,如包名、版本信息、各包所包含的文件列表、包之间的依赖关系、包分组信息等。存放这些rpm包和元数据文件的位置就被称为repository或yum库

元数据文件格式:centos5: xml, centos6,7: sqlite

createrepo: 生成yum仓库元数据文件的工具

③yum客户端:

第一步:当客户端需要安装软件时,会主动向yum仓库获取元数据,并缓存于本地(/var/cache/yum)

  第二步:yum客户端程序在本地分析元数据文件,并结合本地RPM资料库做出要安装的程序包的决策

  第三步:根据决策联系yum仓库,下载各程序包缓存于本地后,一并进行安装

三、使用yum工具前的准备工作

3.1、确保有yum repository可用

①yum库分类

base库:通常为系统发行版所提供的程序包

updates库:一些升级包

extra库:额外程序包

epel库:

客户端可指定多个yum库,并可定义各yum库的使用优先级

②yum库的来源

提供yum库的除了有本地光盘,还有线上的一些文件服务器,如ftp,ntp,http,nfs;另外我们也可以在本地或线上自建yum库。repodata目录所在的父目录就是一个可用仓库

ftp://server/path/to/repository

http://server/path/to/repository

nfs://server/nfs_path

file:///path/to/repository

file:///media/cdrom

如下图,该yum库的地址为http://mirrors.163.com/centos/6/os/x86_64/。repodata目录中存放的是元数据文件,Packages为rpm包目录

3.2、yum客户端

提供repos配置文件,指明仓库访问路径及各种属性信息

主配置文件(中心配置文件):/etc/yum.conf

[[email protected] ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever  #缓存目录
keepcache=0  #是否保留缓存
debuglevel=2  #调试级别
logfile=/var/log/yum.log  #yum日志文件
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
...

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

■一个或几个相关仓库的配置信息可保存为一个文件,以.repo为后缀,位于/etc/yum.repos.d目录中

在.repo文件中指定yum仓库的格式

[REPOSITORY_ID]

name=Some name for this repository

baseurl=url://server1/path/to/reposity  #仓库地址,必须指向repodata目录所在的父目录

url://server2/path/to/reposity  #可指定多个仓库,注意多个仓库的书写格式

mirrorlist=URL to a file  #mirrorlist指向一个包含baseurl列表的文件

enabled={0|1}:是否启用该仓库,默认为启用

gpgcheck={0|1}:是否检测包来源合法性

gpgkey=URL:密钥所在位置

cost=N:指定访问此仓库的开销,默认为1000。开销越小,越先被使用,由此实现了多个仓库的使用顺序差异。如果在所有的仓库配置文件中都没指定该项或者指定的值相同,则依照它们在/etc/yum.repos.d目录中的存放顺序使用

示例:配置本地挂载的光盘作为yum仓库

[[email protected] ~]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[[email protected] ~]# ls /media/cdrom
CentOS_BuildTag  EULA  images    Packages                  repodata              RPM-GPG-KEY-CentOS-Debug-6     RPM-GPG-KEY-CentOS-Testing-6
EFI              GPL   isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# vim dvd.repo
[base]
name=Centos6.5-x86_64-dvd
baseurl=file:///media/cdrom
gpgcheck=1
gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-6
cost=1
[[email protected] yum.repos.d]# ls
CentOS6-Base-163.repo  CentOS-Base.repo.backup  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo  dvd.repo

yum配置文件中可用的四个宏

$releasever: 程序的版本,对yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;

$arch: 系统架构

$basearch: 系统基本架构,如i686,i586等的基本架构为i386;

$YUM0-9: 在系统中定义的环境变量,可以在yum中使用;

当我们在yum仓库配置文件中使用宏时,一个配置文件可适用于不同的平台和系统版本。例如http://mirrors.163.com/centos/$releasever/os/$basearch/,在i386平台的Centos5.5系统上会被替换为http://mirrors.163.com/centos/5/os/i386/;在x86_64平台的Centos6.5上会被替换为http://mirrors.163.com/centos/6/os/x86_64/

获取当前系统相应变量替换结果的办法:

# python

Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import yum,pprint

>>> yb = yum.YumBase()

>>> pprint.pprint(yb.conf.yumvar,width=1)

Loaded plugins: fastestmirror, refresh-packagekit

{‘arch‘: ‘ia32e‘,

‘basearch‘: ‘x86_64‘,

‘releasever‘: ‘6‘,

‘uuid‘: ‘ea249181-2f82-4c40-8c42-d51b3fce319a‘}

>>> quit()

[[email protected] yum.repos.d]# cat CentOS6-Base-163.repo 
...
[base]
name=CentOS-$releasever - Base - 163.com
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#released updates 
[updates]
name=CentOS-$releasever - Updates - 163.com
baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
...

■自建yum仓库

(1)自建基于光盘镜像的yum库,见上方示例

(2)在中心服务器上提供yum库,以http为例

①安装httpd程序,并启动服务

rpm -ivh httpd-XX或者yum install httpd

service httpd start

chkconfig httpd on

②httpd的文档根目录为/var/www/html:

创建子目录,存放某些rpm包

③为仓库生成元数据文件,以使能够作为仓库使用

rpm -ivh createrepo-XX或者yum install createrepo

createrepo /path/to/rpm_repo/

④ 配置yum客户端使用此仓库即可

[[email protected] ~]# yum -y install httpd createrepo
...
Complete!
[[email protected] ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]
[[email protected] ~]# chkconfig httpd on
[[email protected] ~]# ss -tnl
...
LISTEN      0      128           :::80          :::*     
...
[[email protected] ~]# cp -r zabbix-2.4 /var/www/html/
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# mv zabbix-2.4 zabbix
[[email protected] html]# ls zabbix
zabbix-2.4.0-1.el6.x86_64.rpm               zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm    zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm
...
[[email protected] html]# createrepo zabbix
Spawning worker 0 with 17 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[[email protected] html]# ls zabbix
repodata                                    zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm    zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm
[[email protected] html]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# vim testhttp.repo
[zabbix]
name=zabbix repo
base=http://192.168.30.20/zabbix
gpgcheck=0
[[email protected] yum.repos.d]# yum clean all #当指定了新的仓库后,一般应刷新缓存
...
[[email protected] yum.repos.d]# yum repolist
...
repo id                                                                 repo name                                                                                    status
base                                                                    CentOS-6 - Base - 163.com                                                                    0
extras                                                                  CentOS-6 - Extras - 163.com                                                                  0
updates                                                                 CentOS-6 - Updates - 163.com                                                                 0
zabbix                                                                  zabbix repo                                                                                  0
repolist: 0
[[email protected] yum.repos.d]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

三、yum命令的使用

常用选项:

-y:对所有提问都回答yes

-q:静默模式

-v:详细模式

--disablerepo=[repo]:安装时禁用某些yum仓库

--skip-broken:忽略依赖问题
 --nogpgcheck:不对包做验证

1、列出repository

yum repolist {enabled|disabled|all},默认为enabled

[[email protected] ~]# yum repolist
Loaded plugins: fastestmirror, refresh-packagekit, security
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
repo id                                                                 repo name                                                                                    status
base                                                                    CentOS-6 - Base - 163.com                                                                    6,575
extras                                                                  CentOS-6 - Extras - 163.com                                                                     44
updates                                                                 CentOS-6 - Updates - 163.com                                                                   470
repolist: 7,089
[[email protected] ~]# yum repolist disabled
Loaded plugins: fastestmirror, refresh-packagekit, security
Repository base is listed more than once in the configuration
repo id                                                                        repo name                                                                                   
C6.0-base                                                                      CentOS-6.0 - Base                                                                           
C6.0-centosplus                                                                CentOS-6.0 - CentOSPlus
...

2、包管理

①列出rpm包

yum list {all|installed|available},默认为all

yum list {all|installed|available} | grep ‘PATTERN‘

yum list KEYWORD*

[[email protected] ~]# yum list httpd*
Loaded plugins: fastestmirror, refresh-packagekit, security
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
Installed Packages
httpd.x86_64                                                                     2.2.15-47.el6.centos                                                              @updates
httpd-tools.x86_64                                                               2.2.15-47.el6.centos                                                              @updates
Available Packages
httpd-devel.i686                                                                 2.2.15-47.el6.centos                                                              updates 
httpd-devel.x86_64                                                               2.2.15-47.el6.centos                                                              updates 
httpd-manual.noarch                                                              2.2.15-47.el6.centos                                                              updates

②显示包的描述信息(安装或未安装的包都可显示)

yum info package_name #相当于rpm -qi pkg_name,但rpm命令不能查看未安装的包的描述信息

[[email protected] ~]# yum info ftp
Loaded plugins: fastestmirror, refresh-packagekit, security
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
Available Packages
Name        : ftp
Arch        : x86_64
Version     : 0.17
Release     : 54.el6
Size        : 58 k
Repo        : base
Summary     : The standard UNIX FTP (File Transfer Protocol) client
URL         : ftp://ftp.uk.linux.org/pub/linux/Networking/netkit
License     : BSD with advertising
Description : The ftp package provides the standard UNIX command-line FTP (File
            : Transfer Protocol) client.  FTP is a widely used protocol for
            : transferring files over the Internet and for archiving files.
            : 
            : If your system is on a network, you should install ftp in order to do
            : file transfers.

③安装程序包

yum install package_name  #会自动解决依赖关系

yum reinstall package_name  #重新安装

[[email protected] ~]# yum -y install php
...
Installed:
  php.x86_64 0:5.3.3-46.el6_6  
Dependency Installed:
  php-cli.x86_64 0:5.3.3-46.el6_6                     php-common.x86_64 0:5.3.3-46.el6_6                                                   

Complete!

④升级/降级

yum check-update: 检查可用的升级包

yum update [package_name] #升级所有或指定的包

yum downgrade package_name

#可指定升/降级到指定的版本,如yum update httpd-2.2.15

[[email protected] ~]# rpm -q mysql
mysql-5.1.71-1.el6.x86_64
[[email protected] ~]# yum -y update mysql
...
Updated:
  mysql.x86_64 0:5.1.73-5.el6_6                                                           
Complete!
[[email protected] ~]# rpm -q mysql
mysql-5.1.73-5.el6_6.x86_64
[[email protected] ~]# yum -y downgrade mysql
...
Removed:
  mysql.x86_64 0:5.1.73-5.el6_6                                            

Installed:
  mysql.x86_64 0:5.1.71-1.el6                                                   

Complete!
[[email protected] ~]# rpm -q mysql
mysql-5.1.71-1.el6.x86_64

⑤卸载包

yum remove|erase package_name #会将被依赖的包一并卸载

[[email protected] ~]# yum remove mysql-libs
...
Removed:
  mysql-libs.x86_64 0:5.1.71-1.el6      mysql-libs.x86_64 0:5.1.73-5.el6_6

Dependency Removed:
  mysql.x86_64 0:5.1.71-1.el6  #将依赖此包的mysql包卸载

Complete!

⑥查询某文件是由哪个包安装生成的

yum whatprovides|provides /path/to/somefile

[[email protected] ~]# yum provides /var/www/html
...
httpd-2.2.15-45.el6.centos.x86_64 : Apache HTTP Server
Repo        : base
Matched from:
Filename    : /var/www/html

httpd-2.2.15-47.el6.centos.x86_64 : Apache HTTP Server
Repo        : installed
Matched from:
Other       : Provides-match: /var/www/html

⑦特殊场景:从其它处获得一个rpm包,如果此包依赖于其它包(在仓库中),如何安装?

无需从其它库中下载依赖的包手动解决依赖关系,可使用yum命令直接安装

yum install /path/to/pkg_file

[[email protected] ~]# yum install mysql-5.1.73-5.el6_6.x86_64.rpm
...
Installing:
 mysql               x86_64               5.1.73-5.el6_6               /mysql-5.1.73-5.el6_6.x86_64               2.4 M
Installing for dependencies:
 mysql-libs          x86_64               5.1.73-5.el6_6               base                                       1.2 M
 ...
Complete!

3、包组管理

①列出所有的包组

yum grouplist

[[email protected] ~]# yum grouplist
...
Installed Groups:
   Additional Development
   Debugging Tools
   ...
Installed Language Groups:
   Arabic Support [ar]
   Armenian Support [hy]
   ...
Available Groups:
   Backup Client
   Backup Server
   ...
Available Language Groups:
   Afrikaans Support [af]
   Albanian Support [sq]
   ...

②显示包组的信息:例如组中包含的程序包列表

yum groupinfo "GROUP NAME"

CentOS6 跟开发相关的包组:

Development Tools

Server Platform Development

Desktop Platform Development

[[email protected] ~]# yum groupinfo "Development tools"
...
Group: Development tools
 Description: A basic development environment.
 Mandatory Packages:
   autoconf
   automake
   ...
 Default Packages:
   byacc
   cscope
  ...
 Optional Packages:
   ElectricFence
   PyYAML
   ...

③安装包组

yum groupinstall "GROUP_NAME"

[[email protected] ~]# yum groupinstall "Development tools"
Installed:
  autoconf.noarch 0:2.63-5.1.el6           automake.noarch 0:1.11.1-4.el6      bison.x86_64 0:2.4.1-5.el6                          byacc.x86_64 0:1.9.20070509-7.el6      
 ...
Dependency Installed:
  cloog-ppl.x86_64 0:0.15.7-1.2.el6                        cpp.x86_64 0:4.4.7-16.el6                            gettext-devel.x86_64 0:0.17-18.el6                       
  ...

④升级包组

yum groupupdate "group_name"

⑤卸载包组

yum groupremove "GROUP_NAME"

4、清理缓存

yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}

[[email protected] ~]# yum clean all
Loaded plugins: fastestmirror, refresh-packagekit, security
Repository base is listed more than once in the configuration
Cleaning repos: base extras updates
Cleaning up Everything
Cleaning up list of fastest mirrors
[[email protected] ~]# tree /var/cache/yum  #可看到/var/cache/yum各子目录中的内容都被清空
/var/cache/yum
├── timedhosts.txt
└── x86_64
   └── 6
       ├── base
       │   ├── gen
       │   └── packages
       ├── extras
       │   └── packages
       ├── local
       │   ├── gen
       │   └── packages
       └── updates
           └── packages

12 directories, 1 file
时间: 2024-09-29 16:04:02

linux程序包管理之yum的相关文章

Linux程序包管理及yum安装管理

Linux程序包管理: API:ApplicationProgramming Interface   应用编程接口 POSIX:Portable OS    遵循本协议的程序均可在不同系统间移植 程序编写完成后,执行所要经过的处理步骤: 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:直接调用.so共享对象实现 ABI:ApplicationBinary Interface  应用二进制接口 Windows与Linux所支持的可执行二进制

linux程序包管理rpm,yum和编译安装以及冒泡排序练习

linux程序包管理: API:Application Programming Interface POSIX:Portable OS 程序源代码--> 预处理--> 编译--> 汇编--> 链接 静态编译: 共享编译:.so ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WIN

2018-3-14Linux系统管理(12) Linux程序包管理(2)yum前端管理工具

我们在之前的章节中讲到了Linux的程序包管理的基础与实现,后面也讲述了RPM包的管理命令实现了管理包的功能,主要用的是rpm命令,那么rpm实现程序管理总结如下:    rpm命令实现程序管理:       安装:-ivh, --nodeps, --replacepkgs       卸载:-e, --nodeps, --replacepkgs       升级:-Uvh, -Fvh, --nodeps, --oldpackage       查询:-q, -qa, -qf, -qi, -qd

Linux 程序包管理 rpm yum dnf

Linux程序包管理: 包管理器功能:打包,包管理(安装,升级,卸载,查询,校验) 目前Linux中最常见有两种常用工具 deb:debian Linux使用 包括ubuntu rpm:Redhat Package Manager ,Centos等在使用 程序包的组成: 二进制程序:/bin,  /sbin,  /usr/bin, /usr/sbin 库文件: /lib64, /usr/64 配置文件:/etc 帮助文件:manual, info 包管理器: 打包:将源文件,一个一个单一的归档文

linux程序包管理 rpm yum 编译

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE] 安装:-i, --install 升级:-U, --update, -F, --freshen 卸载:-e, --erase 查询:-q, --query 校验:-V, --verify 数据库维护:--builddb, --initdb 安装:rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm  -ivh  PACKAGE_FILE ... GENERAL

Linux程序包管理之yum仓库、源码编译安装

CentOS:yum,dnf URL:ftp://172.16.0.1/pub yum是C/S架构,是rpm的前端工具,依赖于rpm存在的: 1.本地要有yun程序: 2.本地要有配置文件(配置远程服务器yum仓库或本地服务器yum仓库): 3.要有存在的文件服务器(程序包仓库即yum仓库).(也可以在本地配置服务器yum仓库): yum支持的服务器有两种:一种是ftp服务器,第二种是http服务器: yum工作简述: yum是客户端,也认为是自我独立管理的组件,需要联系远程的仓库,从仓库中下载

Linux程序包管理之yum源安装

yum源安装是我们工作中常用的一种方式,它是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装. 在CentOS7里面还有一种更加新颖的安装方式(dnf安装),本篇主要讲解yum安装.在yum源安装之前我们必须对yum命令掌握.下面就来谈谈yum命令的用法和yum源安装. 一.yum命令的用法   

Linux程序包管理:RPM和YUM

Linux程序包管理:RPM和YUM   就像Window一样,我们安装了windows系统如果没有相应的应用软件,如OFFICE,IE,等各种软件,用户是无法使用计算机,linux 完成各种应用功能,也需要各种应用程序,所以程序包的管理就非常必要. Linux平台的内核功能:进程管理.内存管理.网络协议栈.驱动程序....             应用程序:              早期的linux程序包的组成部分:                二进制程序:/bin, /sbin,/ /u

[Linux程序包管理之RPM及YUM]

Linux程序包管理之RPM及YUM 一.RPM和YUM简介 RPM,全称RPM Package Manager,是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用. RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装.卸载.升级.查询.校验等程序管理:通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理. RPM包命名格式: Yum,全称Yellow dog Updater, Modified , 由Duke