当前位置: > CentOS > CentOS入门 >

CentOS之yum详解

时间:2015-12-30 19:11来源:linux.it.net.cn 作者:IT

yum的地位:yum是rpm的前端管理工具,而且依赖于rpm。

 

 yum仓库:yum repository,仓库里存储了众多rpm包,以及包的相关的元数据文件.yum仓库里会有个repodata目录存在.

 

yum支持的文件服务器类型:

ftp://  http:// file:///(本地服务器,例光盘)   /nfs://

 

查看yum的信息:

[root@yph7yum.repos.d]# rpm -q yum ------查看yum命令的安装包是哪个

yum-3.4.3-125.el7.centos.noarch

[root@yph7yum.repos.d]# rpm -qc yum  ------查看yum命令的配置文件

/etc/logrotate.d/yum

/etc/yum.conf

/etc/yum/version-groups.conf

 

yum的配置文件:

/etc/yum.conf:此文件为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置。配置一个或多个仓库指向,如果多个仓库都有需要的那个程序包包,就选择最近的仓库,或者选择成本低的仓库。

 

用man 5 yum.conf可以查看对yum.conf文件的读取帮助。

yum.conf文件的内容及格式

[root@yph7yum.repos.d]# cat /etc/yum.conf  
[main]----------指公共区
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1  为1表示精确匹配,如果要的是centos7的包,centos6.7的就默认不匹配
obsoletes=1
gpgcheck=1    为1表示检测来源合法性及内容完整性
plugins=1
installonly_limit=5
………………………………………此处省略……字
# PUT YOUR REPOSHERE OR IN separate files named file.repo
# in /etc/yum.repos.d

 

 

仓库的指向的定义:

[repositoryID] 仓库ID

name=Some namefor this repository等号右边是自己定义的文件名

baseurl=url://path/to/repository/   等号右边是要下载的程序包的url

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

gpgcheck={1|0}安装前是否检查来源合法性及完整性,1为默认表示是

gpgkey=URL指明秘钥文件的路径

enablegroups={1|0}是否支持在此仓库上使用组来批量管理包,1为默认,表示是

failovermethod={roundrobin|priority};默认为:roundrobin,意为随机挑选;

cost=1000,表示开销,默认为1000

 

创建yum仓库:

请自行查看/etc/yum.repos.d/CentOs-Base.repo这个文件,然后我们仿照这个yum源仓库文件的格式写一个我们自己的仓库文件。注意:有repodata所在的路径才能是yum源指定的路径。

创建之前先把原仓库重命名一下。mv CentOS-Base.repo CentOS-Base.repo.bak

下面我们来自己创建本地yum源仓库文件centos-local.repo,内容如下:

[base]

name=Base Repo172.16.0.1    ----------自己定义的名字

baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-7-x86_64-1503/  ----下载程序包的路径

gpgcheck=0---------------不检查来源合法性及内容完整性

[epel]

name=Fedora EPELfor EL6 x86 64

baseurl=http://172.16.0.1/fedora-epel/7/x86_64/

gpgcheck=0

这是两个不同的仓库,虽然写在同一个文件。如果是相同的仓库,里面的文件是镜像,就可以把多个url写在同一个“baseurl”下面。

 

 

yum命令的用法:详细信息请manyum

yum [options][command] [package ...]

 

显示仓库列表:默认显示已启用的,即enabled

repolist[all|enabled|disabled]

[root@yph7yum.repos.d]# yum repolist enabled   显示可用的仓库列表

[root@yph7yum.repos.d]# yum repolist all         显示可用的和不可用的仓库列表

[root@yph7yum.repos.d]# yum repolist disabled     显示不可用的仓库列表

显示程序包:

yum list [all |glob_exp1] [glob_exp2] [...]基于文件名通配查找:

 

[root@yph7 yum.repos.d]# yum list | wc –l
15651                                -----------------一共有15651个程序包
[root@yph7 yum.repos.d]# yum list php* | wc –l
657                                  -------------------一共657个php开头的程序包

 

yum list{available|installed|updates} [glob_exp1] [...]

 

[root@yph7 yum.repos.d]# yum list available显示可以用的包

[root@yph7 yum.repos.d]# yum list installed显示已安装的包

[root@yph7 yum.repos.d]# yum list updates显示可更新的包

[root@yph7 yum.repos.d]# yum list updates xorg* | wc–l

13             -------------------------一共有13个可更新的并且以xorg开头的程序包

安装程序包:

install package1[package2] [...]

[root@yph7 ~]# yum install phpwapmail.noarch

[root@yph7 ~]# yum install gcc-4.5.4  如果不想安装最新程序包,可以这样指明要安装程序包的版本

 

reinstall package1 [package2] [...]  重新安装程序包

[root@yph7~]# yum reinstall zsh   在安装zsh之后,要重新安装一次

 

升级程序包:

update [package1][package2] [...]

[root@yph7 ~]#yum update xorg-x11-drv-fbdev

……………………………………………………….

更新完毕:

  xorg-x11-drv-fbdev.x86_64 0:0.4.3-16.el6                                                                         

完毕!

 

downgrade package1 [package2] [...]降级安装

 

检查可用升级:

check-update

[root@yph7 ~]#yum check-update | wc –l

71             ------------------有71个可用升级包

卸载程序包:

remove package1 [package2] [...]

 

[root@yph7 ~]#yum remove zsh ------会默认把依赖cpp的gcc也卸载掉
…………………………………………………..
删除:
  zsh.x86_64 0:4.3.11-4.el6.centos                                                                                 
完毕!

 

查看程序包information:

info [...]

[root@yph7 ~]#yum info zsh
名称    :zsh
架构    :x86_64
版本    :4.3.11
发布    :4.el6.centos
大小    :2.2 M
源    :base
简介    :A powerful interactive shell
网址    :http://zsh.sunsite.dk/
协议    : BSD

 

查看指定的特性或者文件是由哪个程序包所提供:类似 rpm -qf

provides |whatprovides feature1 [feature2] [...]

 

[root@yph7~]# yum provides zsh

[root@yph7~]# yum provides /etc/zshrc
Loadingmirror speeds from cached hostfile
zsh-4.3.11-4.el6.centos.x86_64: A powerful interactive shell
源    :base
匹配来源:
文件名    :/etc/zshrc
zsh-4.3.11-4.el6.centos.x86_64: A powerful interactive shell

 

 

清理本地缓存:

clean [ packages| metadata | expire-cache | rpmdb | plugins | all ]

(对应于上面的单词分别是)包,元数据,过期缓存,rpmdb ,插件,所有缓存

 

[root@yph7 ~]#yum clean expire-cache
正在清理软件源: base epel extra
3 metadata 文件已移除

 

[root@yph7 ~]#yum clean metadata
正在清理软件源: base epel extra
9 metadata 文件已移除
6 sqlite 文件已移除
0 metadata 文件已移除

 

[root@yph7 ~]#yum clean packages
正在清理软件源: base epel extra
0 package 文件已移除

 

 

构建缓存:makecache

 

[root@yph7 ~]#yum makecache
………………………………………………….
(13/13):extra/7/x86_64/other_db                                      | 417kB  00:00:00     
Loading mirrorspeeds from cached hostfile
元数据缓存已建立

 

 

搜索:以指定的关键字或字符串搜索程序包名及概要信息;

search string1[string2] [...]

 [root@yph7 ~]# yum search bash   -------由于结果比较多,只截取一部分内容
bash-argsparse.noarch: An high level argument parsing library for bash
bash-completion.noarch: Programmable completion for Bash
bash-doc.x86_64 :Documentation files for bash
python-argcomplete.noarch: Bash tab completion for argparse -------这个包名没有“bash”,但概要信息里有。

 

 

查看指定包所依赖的capabilities:

deplist package1[package2] [...]

[root@yph7 ~]#yum deplist zsh   -----------  查看zsh与其他包的依赖关系
软件包:zsh.x86_64 4.3.11-4.el6.centos
   依赖:/bin/sh
   provider: bash.x86_64 4.1.2-33.el6
   依赖:/sbin/install-info
   provider: info.x86_64 4.13a-8.el6
   依赖:coreutils
   provider: coreutils.x86_64 8.4-37.el6
……………………………………………………….

 

查看yum事务历史:在什么时候,有谁执行过哪些yum的安装或卸载等操作

history 

[info|list |summary| stats|packages-list|packages-info|addon-info|redo|undo|rollback|new|sync]

 

[root@yph7 ~]#yum history
ID     | 登录用户                 | 日期和时间       | 操作           | 变更数
-------------------------------------------------------------------------------
1 | 系统<空>                |2015-12-08 19:14 | Install        | 1137
[root@yph7 ~]#yum remove zsh
[root@yph7 ~]#yum history
ID     | 登录用户                 | 日期和时间       | 操作           | 变更数
-------------------------------------------------------------------------------
2 | root<root>              | 2015-12-2405:53 | Erase          |    1 <
1 | 系统<空>                |2015-12-08 19:14 | Install        | 1137>

 

 

[root@yph6 yum.repos.d]# yum history summary
Loaded plugins: fastestmirror, refresh-packagekit, security
Login user                 | Time                | Action(s)        | Altered 
-------------------------------------------------------------------------------
root <root>                | Last day            | Install          |        4
root <root>                | Last week           | Install          |       41
System <unset>             | Last 3 months       | Install          |      997
history summary

 

 

安装及升级本地程序包:

安装本地包时,如果有依赖关系的包在网站上,yum会自动下载安装依赖包,rpm无此功能

 

 localinstall  rpmfile1 [rpmfile2] [...]      localinstall只是为了兼容,建议用install

  

[root@yph7 ~]#yum install booth-0.2.0-31.1.x86_64.rpm -----从下面可以看到会自动安装依赖的包
---> 软件包 booth.x86_64.0.0.2.0-31.1 将被 安装
--> 正在处理依赖关系 cluster-glue-libs >= 1.0.6,它被软件包 booth-0.2.0-31.1.x86_64 需要
---> 软件包 clusterlib.x86_64.0.3.0.12.1-73.el6 将被 安装
---> 软件包corosync.x86_64.0.1.4.7-2.el6 将被 安装

 

 

localupdate  rpmfile1 [rpmfile2] [...];同理,建议用update,而不是localupdate

 

[root@yph7 ~]#yum update zsh-5.0.2-7.el7_1.2.x86_64.rpm -------可以看到也是可以自动解决依赖关系的
正在检查zsh-5.0.2-7.el7_1.2.x86_64.rpm: zsh-5.0.2-7.el7_1.2.x86_64
zsh-5.0.2-7.el7_1.2.x86_64.rpm将作为zsh-5.0.2-7.el7_1.1.x86_64 的更新
正在解决依赖关系
--> 正在检查事务
---> 软件包 zsh.x86_64.0.5.0.2-7.el7_1.1 将被 升级
---> 软件包 zsh.x86_64.0.5.0.2-7.el7_1.2 将被 更新
--> 解决依赖关系完成

 

 

包组管理的相关命令:

grouplist  [hidden] [groupwildcard] [...]

 [root@yph7 ~]#yum grouplist | wc –l

96        ----------------------------一共96个包组

 

groupinstall  group1 [group2] [...] ---安装包组内的包,而且自动安装依赖包

 

[root@yph6 ~]#yum groupinstall "Server Platform" 
(15/18):openssl-1.0.1e-42.el6_7.1.x86_64.rpm                               | 1.5 MB     00:05    
(16/18):pam-1.1.1-20.el6_7.1.x86_64.rpm                                   | 658kB     00:01     
(17/18):redhat-lsb-4.0-7.el6.centos.x86_64.rpm                             |  11 kB    00:00     
(18/18):redhat-lsb-compat-4.0-7.el6.centos.x86_64.rpm                      |  10 kB    00:00

 

groupupdate  group1 [group2] [...]   升级包组内包

[root@yph7 ~]#yum groupupdate "Server Platform"

 

groupremove   group1 [group2] [...]   卸载包组内的包

[root@yph7 ~]#yum groupremove "XWindow System " ------------卸载图形界面包组

 

groupinfo   group1 [...]    查看包组的信息

[root@yph7 ~]#yum groupinfo "X Window System" 可以列出包组内的所有包,包含下列三大类。

MandatoryPackages:必须安装的包  

Default Packages:默认安装的包  

OptionalPackages:可选择安装的包

 

 

 

yum的命令行选项:

--nogpgcheck:安装时禁止进行gpgcheck,即便仓库中定义为检测。

-y: 对安装过程的交互自动回答为“yes”。

-q:静默模式;

--disablerepo=repoidglob:临时禁用此处指定的repo;

--enablerepo=repoidglob:临时启用此处指定的repo;

--noplugins:禁用所有插件;

 

repo配置文件中可用的变量:

$releasever: 当前OS的发行版的主版本号;比如centos7中的"7"

$basearch:基础平台;无论i386,i486,还是i586都理解为i386

$arch: 平台

$YUM0-$YUM9:

 

例如:http://mirrors.magedu.com/centos/$releasever/$basearch/os

 

 

用光盘做本地仓库:

 

 

[root@yph6 media]# mkdir /media/cdrom

[root@yph6 media]# mount -r -t iso9660 /dev/cdrom  /media/cdrom

---"-r"为只读,"-t"指明类型,如iso9660;

 

或者用下面的方法挂载光盘:

[root@yph6 media]# mount -o loop /dev/cdrom /media/cdrom

 

新建或者添加yum仓库指向:

[cdrom]

name=cdrom

baseurl=file:///media/cdrom

gpgcheck=0

 

通过光盘做的仓库安装zsh

 
[root@yph6 yum.repos.d]# yum install zsh
................................................
Dependencies Resolved
====================================================================================================================
 Package                 Arch                     Version                           Repository                 Size
====================================================================================================================
Installing:
 zsh                     i686                     4.3.11-4.el6                      cdrom                     2.2 M
Transaction Summary
====================================================================================================================
Install       1 Package(s)
..................................................................
Installed:
  zsh.i686 0:4.3.11-4.el6                                                                                           
 
Complete!

 

 

创建本地yum仓库: 

 

[root@yph7 repo]# createrepo ./  -把当前目录创建为本地yum仓库,会读取包的元数据,并创建repodata目录
Spawning worker 0 with 54 pkgs
Spawning worker 1 with 54 pkgs
Spawning worker 2 with 54 pkgs
Spawning worker 3 with 53 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

 

[root@yph7 repo]# ls repodata ---出现repodata目录说明仓库创建成功,看看repodata里的文件
 
1dc98dfa72c7eeabd25aa5288acf222d46270bf25e4c4695fc929ecbb2bf7c1f-primary.sqlite.bz2
64e03fa19b70d01b9dc3618a3967993d9edc2107d1522f78684538f90424c5b6-other.xml.gz
78ca5492b1c3eedb45c50f6d97f63724f1fb2e2ff8d5dc05f1d2c024c786d513-primary.xml.gz
ae734d43ef5877bfb1d913c516f1bf0c62035bd9d15d3eaeebce92960ffcdd40-filelists.xml.gz
baf986873befe7ab4b59e3a01a3fbd6d8fb69c061ba36869e17b769e860302a4-filelists.sqlite.bz2
dfb93d132de8da0c3c622c8fe8d3ddcb18d5e0c7cd8e2a4501b3ab69ce4641d1-other.sqlite.bz2
repomd.xml

repodata目录下有个repomd.xml文件,这里存储同目录下其他文件的特征码,指纹信息

 

 

[root@yph7 yum.repos.d]# vim centos-xen.repo 新建仓库指向
[xen4centos]
name=Xen 4 centos 6
baseurl=file:///yum/repo
gpgcheck=0

 或者在/etc/repos.d/centos-local.repo里添加新的仓库指向

 

[root@yph7 yum.repos.d]# yum repolist ------查看刚才创建的仓库是否可用
base                                                                                        | 3.6 kB  00:00:00     
Not using downloaded repomd.xmlbecause it is older than what we have:
 Current   : Wed Aug  5 05:49:56 2015
 Downloaded: Wed Apr  1 08:19:442015
epel                                                    | 4.3kB  00:00:00     
extra                                                   |3.4 kB  00:00:00     
xen4centos                                             |2.9 kB  00:00:00     
xen4centos/primary_db                                 | 134 kB  00:00:00    
Loading mirror speeds from cachedhostfile
源标识                                           源名称                                                       状态
base                                            Base Repo 172.16.0.1                                          6,575
epel                                             Fedora EPEL forEL6 x86 64                                   8,508
extra/7/x86_64                                   CentOS 7x86_64 extras                                          277
xen4centos                                       Xen 4 centos 6                                                 215
repolist: 15,575

 

 
 [root@yph7 yum.repos.d]# yum install xen ------利用本地仓库安装xen程序,本地仓库创建完成

 

 

  

程序包编译安装:

 

源代码编译安装过程.

源代码--> 预处理 --> 编译(gcc)--> 汇编(需要汇编器) --> 链接(需要链接器) --> 执行

make会自动调动预处理器做预处理,再调动编译器

 

 

C代码编译安装三步骤:

第一步: ./configure

(1) 通过选项传递参数,指定启用特性、安装路径等;执行./configure时会参考用户的指定以及Makefile.in文件生成makefile;makefile是编译安装时的必须依赖的引导文件。

(2) 检查依赖到的外部环境;

 

第二步:make

make不是编译器,它是管理器,调用编译器完成编译的,只是个项目管理工具,依赖于mkafile这个文件完成对程序的安装等操作。

 

第三步:make install

其实这是一些脚本,把二进制放到指定的二进制的安装路径下去,库文件放到指定的库文件路径下去,作用大致就这些。

 

 

开发工具:

autoconf: 能生成configure脚本

automake:能生成Makefile.in

 建议:安装前查看INSTALL,README

 

开源程序源代码的获取:

1、官方自建站点:

apache.org (ASF)

mariadb.org

2、代码托管:

SourceForge

Github.com

code.google.com

 

程序包编译安装的过程:

下载httpd-2.2.29源码包,解压后查看里面的文件

[root@yph6httpd-2.2.29]# ls
ABOUT_APACHE  buildconf     emacs-style  INSTALL         LICENSE        os               srclib
acinclude.m4  CHANGES       httpd.dep    InstallBin.dsp  Makefile.in   README            support
Apache.dsw    config.layout  httpd.dsp   LAYOUT          Makefile.win   README.platforms  test
build         configure      httpd.mak    libhttpd.dep    modules        README-win32.txt  VERSIONING
BuildAll.dsp  configure.in  httpd.spec   libhttpd.dsp    NOTICE         ROADMAP
BuildBin.dsp  docs          include      libhttpd.mak    NWGNUmakefile  server

 

在INSTALL文件里可以看到安装提示信息如下

$ ./configure--prefix=PREFIX ---------第一步

$ make                    ----------------第二步

$ make install              -------------------第三步

$PREFIX/bin/apachectl start ---------------第四步

 

然后可以查看configure命令的选项:

[root@yph6httpd-2.2.29]# ./configure –help

安装之前先安装好需要用到的工具,即一个包组

[root@yph6httpd-2.2.29]# yum groupinstall "Server Platform Development"

另外gcc也是个必须编译的工具,也要装上。

[root@yph6httpd-2.2.29]# yum install gcc

 

然后需要选择安装路径,因为我们没有通过rpm包安装,所以不能通过rpm管理器卸载,所以我们只能手动卸载并删除其配置文件,所以要指定并记住安装路径。

[root@yph6httpd-2.2.29]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2  ---第一步

[root@yph6httpd-2.2.29]# make     --------------第二步

[root@yph6httpd-2.2.29]# make install  -----------第三步

[root@yph6httpd-2.2.29]# cd /usr/local/apache2

[root@yph6apache2]# ls

bin  build cgi-bin  error  htdocs icons  include  lib logs  man  manual modules

[root@yph6apache2]# ls bin
ab         apr-1-config  apxs     dbmmanage  envvars-std   htdbm    htpasswd  httxt2dbm   rotatelogs
apachectl  apu-1-config checkgid  envvars    htcacheclean htdigest  httpd     logresolve

 

[root@yph6apache2]# ./bin/apachectl start -----------第四步

 

安装后的配置:

(1) 导出二进制程序目录至PATH环境变量中;否则只能用绝对路径

新建建文件/etc/profile.d/apache2.sh,写入下行代码

export PATH=/usr/local/apache2/bin:$PATH

 

(2) 导出库文件路径

新建文件/etc/ld.so.conf.d/apache2.conf

把这个路径/usr/local/apache2/lib添加至文件中,即添加新的库文件所在目录至此新建文件中;

让系统重新生成缓存:ldconfig -v,否则只能下次开机才生效

 

 (3) 导出头文件

本来include目录应该在/usr/include 中才对,但现在却在当前目录下,可以

可以连接整个目录过去,也可以连接每一个文件过去,可以导出整个目录为一个符号链接,也可以导出所有文件为一个符号链接

基于链接的方式实现:

[root@yph6apache2]# ln -sv include /usr/include/apache2

 

 

[root@yph6 apache2]# ln -sv /uar/local/apache2/include /usr/include/apache2

`/usr/include/apache2' -> `/uar/local/apache2/include'

 

 

(4) 导出帮助手册

编辑/etc/man.config文件

MANPATH /usr/man

MANPATH/usr/share/man

MANPATH/usr/local/man

MANPATH/usr/local/share/man

MANPATH/usr/X11R6/man   --------------------前面几行是/etc/man.config本来就有内容

MANPATH/usr/local/apache2/man ----------在MANPATH的行下面添加一行man路径

 

 

 

注意:安装过程的选项:

安装路径的设定:

--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/

--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;

 有需要的话可以加上下面的选项:

System types:

OptionalFeatures: 可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

OptionalPackages: 可选包

--with-PACKAGE[=ARG]依赖关系

--without-PACKAGE不允许依赖

 

 附加:

CentOS 6上通过提供开发组件的两个重要包组为:

 "Development Tools", "ServerPlatform Development",

 


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容