请参考以下文档,实现配置本地Yum源库,适用本地目录上建立一个Yum源库,RPM包来自安装光盘。
在使用Linux系列版本时,我们常常会有需要安装RPM库的情况。同Windows环境相同,rpm包是Linux很多版本的可执行程序版本。但是在我们使用时,经常会遇到rpm相互依赖的困境。我们安装一个RPM,可能需要连带安装很多依赖的rpm,需要我们一个个的进行寻找安装。
当我们需要的rpm包都在安装光盘介质上,一个个的寻找定位还可以。但是如果我们需要升级RPM或者手边恰好没有光盘,那么寻找的难度就很大了。这个时候,我们可以借助Yum工具。
1、 Yum简说
Yum是在目前Linux主流版本中配置的一个shell前端软件管理器。在使用yum进行指定包安装的时候,可以自动的进行依赖软件的定位、指定服务器的下载,实现一次性的将所有包安装完成。
Yum使用有很多好处,最大的好处莫过于简单化RPM软件包的安装、删除和更新,同时自动的解决了软件包依赖和下载包库(Repository)方便配置问题。
在Yum的使用上,配置文件管理和使用是一个重点内容。具体来说,有两个主要配置文件需要关注,分别为Yum服务端配置文件和Yum源配置文件。
✓ Yum服务端配置文件/etc/yum.conf
在目前流行的Linux版本中,大都已经配置了Yum工具。配置文件/etc/yum.conf中,详细定义了yum的工作方式和参数。
[root@bspdev etc]# cat /etc/yum.conf
[main] //主配置信息
cachedir=/var/cache/yum //保存缓存和数据库文件的位置
keepcache=0
debuglevel=2 //调试信息输出等级
logfile=/var/log/yum.log //日志位置
distroverpkg=redhat-release //yum使用的RPM包distribution版本;
tolerant=1 //默认为0,如果为1表示当安装多个包是,失败了继续安装其他;
exactarch=1 //精确匹配硬件平台,只有完全相同才更新;
obsoletes=1 //当使用升级模式时,一些包没有用了,可以删除(取值1)
gpgcheck=0 //安装时是否检查RPM包的PGP签名;
plugins=1 //Yum插件是否可用
bugtracker_url=http://bugs.centos.org/yum5bug
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d //定义可选的位置
[root@bspdev etc]#
✓ Yum源配置/etc/yum.repos.d/*.repo
要定义好yum源库的信息,以配置文件的方式进行。
[root@bspdev etc]# cd /etc/yum.repos.d/
[root@bspdev yum.repos.d]# ls -l
total 8
drwxr-xr-x 2 root root 4096 Jun 17 05:47 bak //笔者自己做的备份
-rw-r--r-- 1 root root 72 Jun 17 05:52 localyum.repo
[root@bspdev yum.repos.d]# cd bak
[root@bspdev bak]# ls -l
total 36
-rw-r--r-- 1 root root 1926 Feb 25 16:20 CentOS-Base.repo
-rw-r--r-- 1 root root 631 Feb 25 16:20 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 626 Feb 25 16:20 CentOS-Media.repo
-rw-r--r-- 1 root root 6118 Feb 25 16:20 CentOS-Vault.repo
[root@bspdev bak]# pwd
/etc/yum.repos.d/bak
[root@bspdev bak]# cat CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base] //容器名称
name=CentOS-$releasever – Base //容器说明信息
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os //容器地址
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
(篇幅原因,省略部分……)
[root@bspdev bak]#
目前,Yum支持的源地址种类很多,有本地、FTP和Internet等。三种方式的差异仅仅在于客户端访问Yum的方式不同。本篇仅介绍本地Yum源的配置和使用。
2、配置本地Yum源库
目的是在本地目录上建立一个Yum源库,RPM包来自安装光盘。
使用Mount命令,将插入的光盘Mount到Linux的目录结构上。
[root@bspdev /]# mount /dev/cdrom /media//将光盘mount到/media目录上
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@bspdev /]# cd /media
[root@bspdev media]# ls –l//挂载CentOS版本;
total 484
dr-xr-xr-x 2 root root 432128 Mar 5 10:16 CentOS //CentOS RPM包位置
-r--r--r-- 1 root root 14 Mar 2 05:00 CentOS_BuildTag
-r--r--r-- 1 root root 212 Oct 1 2009 EULA
-r--r--r-- 1 root root 18009 Oct 1 2009 GPL
dr-xr-xr-x 4 root root 2048 Mar 5 10:12 images
(篇幅原因,省略部分)
-r--r--r-- 1 root root 7058 Mar 5 10:22 TRANS.TBL
[root@bspdev media]#
[root@bspdev CentOS]# pwd
/media/CentOS
安装repository工具包。
[root@bspdev CentOS]# pwd
/media/CentOS
[root@bspdev CentOS]# rpm -ivh createrepo-0.4.11-3.el5.noarch.rpm
warning: createrepo-0.4.11-3.el5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID e85627
Preparing... ########################################### [100%]
1:createrepo ########################################### [100%]
将rpm包拷贝的准备好的/yum/server中去。
[root@bspdev CentOS]# cd /
[root@bspdev /]# mkdir /yum/server -p
[root@bspdev media]# cd CentOS
[root@bspdev CentOS]# cp * /yum/server/
You have mail in /var/spool/mail/root
[root@bspdev CentOS]#
这样,我们将所有的rpm包保存在了/yum/server上。
最后,我们建立reposity的索引。
[root@bspdev CentOS]# createrepo /yum/server
2669/2669 - totem-devel-2.16.7-7.el5_6.1.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
3、配置参数文件
修改服务端文件,设置行为。
[root@bspdev CentOS]# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=0 //本地一般不需要设置该选项
plugins=1
bugtracker_url=http://bugs.centos.org/yum5bug
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
installonly_limit = 5
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
~
在客户端,我们创建新的容器和配置文件。首先我们先将原有的信息备份保存。
--客户端
[root@bspdev CentOS]# cd /
[root@bspdev /]# mkdir /etc/yum.repos.d/bak
[root@bspdev /]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
[root@bspdev /]# cd /etc/yum.repos.d/bak/
[root@bspdev bak]# ls -l
total 36
-rw-r--r-- 1 root root 1926 Feb 25 16:20 CentOS-Base.repo
-rw-r--r-- 1 root root 631 Feb 25 16:20 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 626 Feb 25 16:20 CentOS-Media.repo
-rw-r--r-- 1 root root 6118 Feb 25 16:20 CentOS-Vault.repo
[root@bspdev bak]# cd /
[root@bspdev /]# vim /etc/yum.repos.d/localyum.repo
[localyum] //容器名
Name=localyum
baseurl=file://yum/server //目录
enable=1
gpgcheck=0
~
4、验证启动yum程序
最后,通过配置的方法,进行验证。
//清理缓存
[root@bspdev yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, security
Cleaning up Everything
Cleaning up list of fastest mirrors
//列出可用的mirrors
[root@bspdev yum.repos.d]# yum list
Loaded plugins: fastestmirror, security
Determining fastest mirrors
localyum | 951 B 00:00
localyum/primary | 950 kB 00:00
最后,可以使用yum安装程序。
[root@bspdev ~]# yum install elfutils-libelf-devel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package elfutils-libelf-devel.i386 0:0.137-3.el5 set to be updated
--> Processing Dependency: elfutils-libelf-devel-static-i386 = 0.137-3.el5 for package: elfutils-libelf-devel
--> Running transaction check
---> Package elfutils-libelf-devel-static.i386 0:0.137-3.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================
Package Arch Version Repository Size
========================================================
Installing:
elfutils-libelf-devel i386 0.137-3.el5 localyum 24 k
Installing for dependencies:
elfutils-libelf-devel-static i386 0.137-3.el5 localyum 66 k
Transaction Summary
==================================================
Install 2 Package(s)
Upgrade 0 Package(s)
Total download size: 90 k
Is this ok [y/N]: y
Downloading Packages:
-----------------------------------------------------------
Total 85 MB/s | 90 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : elfutils-libelf-devel 1/2
Installing : elfutils-libelf-devel-static 2/2
Installed:
elfutils-libelf-devel.i386 0:0.137-3.el5
Dependency Installed:
elfutils-libelf-devel-static.i386 0:0.137-3.el5
Complete!
5、结论
Yum工具是可以帮助我们解决很多依赖困扰的有用软件。无论是个人开发还是团队开发,都可以发挥重要的作用。下载本文