yum

yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件。
一、yum的配置文件
$ cat /etc/yum.conf
[main]
cachedir=/var/cache/yum #yum下载的RPM包的缓存目录
keepcache=0 #缓存是否保存,1保存,0不保存。
debuglevel=2 #调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)。
logfile=/var/log/yum.log #yum的日志文件所在的位置
exactarch=1 #在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包。
obsoletes=1 #这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1 #是否检查GPG(GNU Private Guard),一种密钥方式签名。
plugins=1 #是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件。
installonly_limit=3 #允许保留多少个内核包。
exclude=selinux* #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离。
pkgpolicy=newest #包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的 repository中同时存在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
distroverpkg=redhat-release #指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
retries=1 #网络连接发生错误后的重试次数,如果设为0,则会无限重试。
tolerant=1 #也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
timeout=120 #如果风速慢的话可以通过增加CentOS yum配置的超时时间,这样就不会总是因为超时而退出。

二、*.repo文件详解
以一份系统自带的repo文件做为实例来探讨(#号后面是笔者加的注释):

[fedora] #方括号里面的是软件源的名称,将被yum取得并识别
name=Fedora $releasever -
$basearch #这里也定义了 软件
仓库的名称,通常是为了方便阅读配置文件,一般没什么作用,$releasever变量定义了发行版本,通常是8,9,10等数字,$basearch变
量定义了系统的架构,可以是i386、x86_64、ppc等值,这两个变量根据当前系统的版本架构不同而有不同的取值,这可以方便yum升级的时候选择
适合当前系统的软件包,以下同……
failovermethod=priority #failovermethod 有两个值可以选择,priority是默认值,表示从列出的baseurl中顺序选择镜像服务器地址,roundrobin表示在列出的服务器中随机选择
exclude=compiz* *compiz* fusion-icon* #exclude这个选项是后来我自己加上去的,用来禁止这个软件仓库中的某些软件包的安装和更新,可以使用通配符,并以空格分隔,可以视情况需要自行添加
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
#上面的一行baseurl第一个字符是'#'表示该行已经被注释,将不会被读取,这一行的意思是指定一个baseurl(源的镜像服务器地址)
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
#上面的这一行是指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。
选择自己访问速度较快的镜像服务器地址复制并粘贴到repo文件中,我们就能获得较快的更新速度了,格式如下baseurl所示:
baseurl=
ftp://ftp.sfc.wide.ad.jp/pub/Linux/Fedora/releases/10/Everything/i386/os
http://ftp.chg.ru/pub/Linux/fedora/linux/releases/10/Everything/i386/os
http://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora/linux/releases/10/Everything/i386/os
http://mirror.nus.edu.sg/fedora/releases/10/Everything/i386/os
http://mirror.yandex.ru/fedora/linux/releases/10/Everything/i386/os
http://ftp.twaren.net/Linux/Fedora/linux/releases/10/Everything/i386/os
http://ftp.itu.edu.tr/Mirror/Fedora/linux/releases/10/Everything/i386/os
enabled=1 #这个选项表示这个repo中定义的源是启用的,0为禁用
gpgcheck=1 #这个选项表示这个repo中下载的rpm将进行gpg的校验,已确定rpm包的来源是有效和安全的
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch #定义用于校验的gpg密钥

关于yum的选项可以man一下:
List of Commands:
check-update 检查可提供的包升级
clean 删除缓存数据 yum clean packages清除遗留在缓存里的包文件 yum clean metadata清除遗留在缓存里的元数据 yum clean headers清除遗留在缓存里的头文件 yum clean all清除包文件,元数据,头文件
deplist 列出包依赖相关
erase 移除一个或多个包从你的系统
groupinfo 显示关于包组的细节
groupinstall 从组里安装软件包到你的系统
grouplist 列出当前的组
groupremove 在一个组中移除包从您的系统
help 显示帮助用法信息
info 显示关于包或一组包的细节信息
install 安装一个或多个软件包在你的系统
list 列出一个包或某组的包
localinstall 安装本地 RPM
makecache 生成原数据缓存
provides Find what package provides the given value yum whatprovides filename 查找特定文件是由什么软件包提供的 yum whatprovides httpd.conf
reinstall 重新安装一个包
repolist 显示软件仓库的配置
resolvedep 决定哪个包提供了给定的依赖
search 查找包细节居给定的字符串
shell 运行交互式的yum shell
update 更新一个或多个包在你的系统
upgrade Update packages taking obsoletes into account
Options:
-h, --help show this help message and exit
-t, --tolerant be tolerant of errors
-C 从缓冲中运行,而不是升级缓存
-c [config file] config file location
-R [minutes] 最大化的命令等待时间
-d [debug level] 调试输出级别
--showduplicates 显示复制, 在repo,list/search命令下
-e [error level] 错误输出级别
-q, --quiet 安静的操作
-v, --verbose verbose operation
-y 回答所有的问题为是
--version 显示 YUM版本信息并退出
--installroot=[path] 设置为root安装
--enablerepo=[repo] 激活一个或多个仓库(支持通配符)
--disablerepo=[repo] 禁掉一个或多个仓库(支持通配符)
-x [package], --exclude=[package] 在名称或glob不包含包。
--disableexcludes=[repo] disable exclude from main, for a repo or for everything
--obsoletes enable obsoletes processing during updates
--noplugins 禁掉yum插件
--nogpgcheck 禁掉GPG验证检查
--disableplugin=[plugin] 用名称禁掉插件
--enableplugin=[plugin] enable plugins by name
--skip-broken 忽略包的依赖问题
--color=COLOR control whether color is used

1.yum的使用:
1)包的更新
1.1)检查可更新包: yum check-update
1.2)更新所有包: yum update
1.3)更新指定包: yum update package_name
1.4)版本升级: yum upgrade
2)包安装与删除
2.1)yum install package_name
2.2)yum remove package_name
3)包搜索
3.1)搜索特定包: yum search package_name
3.2)搜索包含特定文件名的包:yum provides name
4)包列表
4.1)列出所有安装或更新的包: yum list
4.2)列出指定包:yum list name
4.3)列出可更新包:yum list updates
4.4)列出已安装包:yum list installed
4.5)列出已安装但不包含在资源库中的包:yum list extras
yum list available 列出仓库中所有可用的软件包
yum list recent 列出新加入仓库的软件包

yum配置:
1.Fedora10添加上海交大源:
创建一个sjtu.repo文件并把如下内容复制进去并保存:
[Fedora-ftp.sjtu.edu.cn]
name=Fedora 10 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/10/Fedora/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
[Everything-ftp.sjtu.edu.cn]
name=Everything 10 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/10/Everything/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
[updates-ftp.sjtu.edu.cn]
name=Fedora updates
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/updates/10/i386/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
然后把文件: sjtu.repo
放在 /etc/yum.repos.d 的目录中
然后在终端运行:
yum makecache

在下载时偶尔会出现它的最快镜像插件选择不对的情况,如果比较着急的话可以在它下载的时候感觉进度条半天没动或者剩余时间还有很长的时候选择中断这个源的下载,ctrl+C,然后yum会自动开始从别的源去下载更新。

安装第三方软件源:
rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

 

repodata作为软件的仓库,其目录下有四个必要文件:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz]和repomd.xml(md 意思是 metadata),其中最主要的是repomd.xml文件,原因是我们用光盘或ISO文件制作本地源时常看到下面类似的错误:file:///media/cdrom/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 没有那个文件或目录: '/media/cdrom/repodata/repomd.xml'
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: c5-media. Please verify its path and try again
以上的错误提是说找不到repodata目录或文件,而错误的原因通常有三个:一是路径问题;二是没有生成repodate目录;三是*.repo配置文件冲突(这个需要特意注意)。
从CentOS 5(或rhel5)以后,系统光盘或ISO文件里大都已帮我们生成了repodata目录(但不排除没有),而5.0以前的版本则没有,需要我们用createrepo生成,此命令会根据rpm包的依赖关系,生成对应的repodata目录(软件仓库),就此目录,很重要的一个目录,名字也是固定的,里面就是保存有这四个文件:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz]和repomd.xml.[gz](通常还会有comps.xml文件,下面会提到)。对于以上的错误例子,从c5-media可知系统是5.0以上的,系统光盘是自带有repodata目录,所以很明显是路径或*.repo文件的问题,但不排除没有repodata目录这种情况,具体有没有,打开光盘看下就知道了呗,如果确实没有,那就就生成了呗,下面会说到。现在来看下/etc/yum.repos.d/CentOS-Media.repo配置文件的内容:
[c5-media]
name=CentOS-$releasever – Media#name 就是 name了,其格式代表了“操作系统名和释出版本”-
“base”是表明此段寻找的是base包信息。
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
#“baseurl”代表yum在互联网上所查找的链接地址。这里需要解释一下
#“$basearch”代表了系统的构架格式如“i386”和“repodata”存放repomd.xml文件的文件夹位置。
#“repomd.xml”作用,提供了“更新.xml.gz”的下载信息和SHA校验值。
#这里“repomd.xml”里包括了3个文件 “other.xml.gz””filelists.xml.gz””primary.xml.gz”
#作用很明显了,“其他更新包列表”“更新文件集中列表”“主要更新包列表”
gpgcheck=1#gpgcheck 校验,你需要在配置文件里注明GPG-RPM-KEY的位置。
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta
#GPG-RPM-KEY的位置

yum会试图从baseurl指定的目录下查找repodata目录,其实质是想寻找repomd.xml文件,既然repodata目录都找不着,何来repomd.xml文件呢?所以就报错,显示“找不到目录和文件”。
这样yum就能搜索到repodata目录了,上图中CentOS目录保存的是rpm文件包,repodata目录里的文件就是记录CentOS里所有包的依赖关系,文件位置等相关信息。如果觉得baseurl指定的位置不爽,也可以改为其地方,只要在baseurl指定的目录下对能找到repodata目录即可。同时,生成repodata目录后,只要装rpm包的目录位置不变(如上例中的CentOS目录),repodata就可以放到任何地方。对于指定其它协议的baseurl,如http:// ftp://,其实质也是在baseurl指定的位置查找repodata目录,

以上两个repodata目录,一个放在“装rpm包目录”同等级的目录中,而令一个则放在装rpm包的同目录中,这说明可在放任意位置生成repodata,baseurl指向的就是repodata目录位置,而每当添加新的源,用yum进行更新或安装软件时,都会先将repodata目录中的文下载下来,进行分析,便可知道软件包的详细信息和依赖关系,最后进行软件安装和更新。理解这一点非常重要,所以本人特意多次指出,“一个有效的baseurl的特征是:baseurl所指位置存在名repodata目录,此目录下又存在名为repomd.xml文件”理解了之后,便可以随心所欲,自行下载软件包,然后制作自已的本地源了,对于yum localinstall 命令,据说能自行解决包的依赖问题,但其实质是用了现有软件仓库来解决包依赖关系,所以没有仓库,用此命令也没用。

 

df -h
ls /media/
mount -o loop /web/CentOS-6.5-x86_64-bin-DVD1.iso /media/
cd /etc/yum.repos.d/
for i in `ls` ; do mv $i $i.bak ; done
mv CentOS-Media.repo.bak CentOS-Media.repo
vim CentOS-Media.repo
yum clean all
yum makecache
yum groupinstall Base "System Management" "System administration tools" "Server Platform" "Server Platform Development" "Debugging Tools" "Additional Development" "Compatibility libraries" "Development tools" "Legacy UNIX compatibility" "Networking Tools" "Performance Tools" "Perl Support" -y

 

posted on 2019-11-15 12:08  BillyLV  阅读(287)  评论(0编辑  收藏  举报

导航