背景:

使用yum工具安装软件包(packages)有两个前提:

1,存在有效的yum配置文件

2,在yum配置文件指明有效的yum仓库(repository)。

 

yum的配置文件有两类:主配置文件及片段配置文件

CentoOS6.4系统上主配置文件为/etc/yum.conf,主配置文件通常用来作为yum的全局配置,对其它所有yum仓库都生效;

这些全局配置都是定义在[main]段中,常用的配置说明如下:

[main]
cachedir=/var/cache/yum/$basearch/$releasever   ##指明yum的缓存目录
keepcache=0                                ##定义主机下载rpm包至本地完成安装后package是否删除
debuglevel=2                               ##定义调试级别,级别越高,调试信息越详细
logfile=/var/log/yum.log             ##指明yum安装的log文件
exactarch=1                                 ##定义下载rpm包时是否需要和主机平台完全精确匹配
obsoletes=1                                 ##定义update时,是否更新老版本的package
gpgcheck=1                                 ##定义下载rpm包安装前是否检查来源合法性

 

 CentOS6.4系统上,片段配置文件的目录为:/etc/yum.repose.d,通常通过此目录下的.repo结尾的文件来定义yum仓库

.reo文件格式 
    [repository_ID]             ##每一个[]代表一个仓库,其中内容即为仓库ID名,通常是仓库名
        name=                     ##通常是仓库描述信息  (=号前后不能有空格,后面内容可以有)
        baseurl=                  ## yum仓库的路径
        enabled={1|0}          ##是否启用此仓库,1 表示启用(默认是1)
        gpgcheck={1|0}       ##是否检查软件包来源合法性,默认1
        gpgkey=                 ##若检查gpg,指定密钥文件的路径
        cost=                      ##指定代价(默认2000)即当有多个yum仓库时,系统会选择使用代价小的

 

    对于红帽系列的系统,原光盘本身就是一个有效yum仓库,将其(/dev/cdrom)挂载在/media/cdrom下,然后启用此仓库。即可拿来使用。

操作环境:

VmwareWorkstation 9CentOS 6.4

步骤:

1,虚拟机中装载系统镜像

2,将光盘挂载在/media/cdrom目录下

CentOS系统上配置YUM仓库_ yum源

查看光盘目录,已存在repodata目录,则意为此目录已是一个有效的yum数据库。则已满足了上述的其中一个条件,接下来查看是否存在有效的yum配置文件,其指向此yum仓库。

3,修改repo配置文件

CentOS系统上配置YUM仓库_ yum源_02

/etc/yum.repos.d目录下默认已存在文件CentOS-Media.repo,其即为光盘yum仓库对应的yum配置文件,查看此文件,其中一项baseurl= file:///media/cdrom/,这也是为什么要将光盘挂载在/media/cdrom目录下的原因。其中enabled=0,即默认未启用光盘yum仓库。将其值修改为1,即启用此yum仓库。

4,至此,yum工具使用的两个前提条件都已满足。

测试是否可以使用:

CentOS系统上配置YUM仓库_ yum源_03

使用yum repolist命令即可查看到已显示光盘yum仓库,id为存c6-media

但是使用yum list all名命令查询yum仓库中所有的软件包时,命令执行失败。通过返回的信息,可得知此命令在查找yum仓库base时,由于网络故障,而终止命令。由于此实验环境中操作系统的确是未连接网络。但实验的对象为光盘作为的yum仓库c6-media,不涉及网络连接,如何解决呢?

思路1:系统默认存在配置文件CentOS-Base.repo,其中已启用了yum仓库baseextrasupdates。若禁用这些yum仓库,则系统中只剩下一个可用的yum仓库c6-media,即可完成测试。

方法a: 修改配置文件名使其失效

CentOS系统上配置YUM仓库_ 镜像_04

方法b:临时禁用所有的yum仓库,只启用c6-media,用以执行yum命令

CentOS系统上配置YUM仓库_ 镜像_05

思路2:由于,命令yum list all查询的是当前系统中所有的已启用的yum仓库,如果指定只是从yum仓库c6-media中查询,即可完成实验。那么如何查询指定的yum仓库?

思路3:由于,命令yum list all查询的是当前系统中所有的已启用的yum仓库,系统默认是先从base中查找,查找失败,则自动终止命令,如何使其失败后,可以继续查找其他yum仓库?或者是优先查找指定的yum仓库?

已尝试修改cost值无效。(测试修改cost后,install package是否可以,无效)

实验中遇到的问题:

1Q: 启用yum仓库,修改配置文件中enabled=1即可,如果通过命令实现?

Ayum--enablerepo=repoid COMMAND

    此命令只是一次性启用yum仓库,执行后面的命令。并不会修改配置文件中enabled值。

2Q: 存在多个可用的yum仓库时,yum命令如何指定yum仓库操作,如yumlistinstall ?

    A#yum--disablerepo=* --enablerepo=c6-media COMMAND 此命令可以实现。

    有无其他方法?

3Q: yum list命令机制,存在多个仓库时,是如何选择的?(yum install是按cost值选择,但此实验中,base仓库中url无效时,即使修改了c6-mediacost值为最低,也无法绕过base

 

注:实际应用中,可能并不会使用真正的物理光驱,此时可以把iso文件拷贝至系统中,然后挂在此iso文件使用

把iso文件挂载到某目录下(iso文件在Linux系统中,只能作为设备文件挂载读取)
#mount -t iso9660 -o loop/where/file/**.iso  /path/to/file 
    -t指定挂载的文件系统类型为iso9660    
    -o指定挂载选项为loop