2013年(4)
分类: LINUX
2013-02-05 18:15:11
一、什么是源?
说的简单一点,源就是一些软件包的集合,我们用windows下载软件都会到天空、太平洋,ZOL等网站寻找,那么这些网站就可以看做一个软件源。 Linux管理的更加严谨一些,基本上会将我们寻找软件的网站都列出来(当然都是安全的网站了),然后将几乎所有的软件业做一个列表,当我们下载的时候就 会根据这些文件下载,省去了我们到处寻找的麻烦,当然也安全多了。二、yum常用的命令
2.1 yum list [available|installed|extras|updates|obsoletes|all|recent] [pkgsspec]
列出来制定的软件包,这些软件包可以是可安装的,安装过的,附加的,升级的,废弃的,所有的,最近的等等。
$yum list installed
$yum list vim
2.2 yum install/remove/update/search
安装,卸载,升级,查找制定的软件包
2.3 yum makecache
这个命令比较有用,当我们更新“源文件”后,yum使用的仍然是保存在缓存中的源,所以我们更新一下源的缓存,一般来说
源改变以后,都要执行一下这个命令。
2.4yum info
这个命令可以查看制定软件包的信息
三、更改自己的源
当我们安装好系统后,系统默认的源都是官方的,但是有的速度并不好(我感觉CentOS的还可以)。这时我们就可以使用国内的源替代官方源。
3.1 备份官方源
$mkdir /etc/yum.repos.d/bak
$mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
3.2 下载国内源(163的源)
$cd /etc/yum.repos.d
$wget wget
$yum makecache #更新一下源的缓存,就可以使用163的源了
四、创建自己的源
yum用的源仅仅是一个有一个活多个rpm包的文件夹,这个文件夹中还包含着一个必须的控制信息(比如包之间的依赖关系,文件列表等)。我们可以通过ftp/http或者直接用文件路径找到这些文件夹。4.1 收集自己要做源的rpm包
把自己搜集到的包放到一个文件夹中,这个文件夹可以有许多的子文件夹,但是所有的包含rpm安装包的文件都应该在这一个文件夹下。我们要用这个文件夹创建我们的源。在这里我们假设吧搜集到的rpm包都放在了“/usr/local/repository"下面。
4.2 制作自己的源
4.2.1制作源的基本命令
yum是通过rpm包中的信息摘要工作,这些信息可以通过“createrepo"程序搜集。如果你的机子上没有装,你可以通过
$yum install createrepo$createrepo /usr/local/repository
执行完以后,我们就会发现里面多了几个文件,比如repodata,或则更多,这时我们的源就已经做好了,但是还是不能够使用。
4.2.2.设置源的高级选项
(1)--database 加上这个选项后回产生一个.sqlite的数据库,这个是新版本才有的功能,如果是老版本的yum则会忽略这个数据库文件,
而读取.xml文件
(2)--unique-md-filenames 为所有的元文件起不同的名字,这尤其有用当你用的是镜像,及mirrors
(3) --changelog-limite 限制记录条目一节约下载时间。
(4)--update 当我们只更新一小部分rpm包时,往往加上这个选项节约时间。
4.3 注册自己的源
现在我们的源已经做好了,但是yum还不能够用,因为yum不知道我们的源在哪里,所以我们要写一个文件告诉yum,我们的源在哪里。yum主要通过/etc/yum.conf和/etc/yum.repos.d/里面的文件信息来访问源 。/etc/yum.conf主要负责源整体的配置,一般不用修改。对于每一个源的配置都放在/etc/yum.repos.d/下面,是一些以repo结尾的违建。下面是一个”源文件“的格式:
[myrepo] #源的标识,注意不能有空格否则不能识别baseusr=file:///usr/local/repository #源的位置
enabled=1 #是否启用源
gpgcheck=1 #是否检查gpgkey
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-6 #gpgkey的位置
将以上内容存为一个后缀名为repo的文件即可。这里需要注意的是在本地可以直接访问的话用file,后面有3个”/",而不是两个,而http,ftp则是两个。
五、实战
5.1 背景以及要求
我用的Linux发行版是CentOS(超喜欢,推荐大家使用),下载的镜像是两张DVD,原因就是我上网的时间有限制,但是上网时网速很快,所以决定下
载体积庞大的DVD两张,当然,如果只是安装的话,只要DVD1就行了,但是为了以后安装软件的方便,我便将两张DVD都下载下来,因为DVD2中包含了比较要用的一些软件,有了这两张DVD,基本上就不需要联网安装软件,这就正好解决了我不能上网的问题。我在这里要做的也已经很清楚了,就是利用下载的两张DVD作为本地源,从而满足我日常安装软件的需要。
5.2 安装createrepo
这里分两种情况,一种是安装后不能不能联网(我就是这种,上网得去其他地方),一种是能够联网的。
(1)能够使用外网的,直接
$yum install createrepo
就行了
(2)不能够使用外网的,可以使用安装使用的DVD,首先将DVD1拷贝到文件系统中,我拷贝到了/root下(刚安装,还没有创建其他用户),
$mkdir
/media/cdrom
"创建挂载目录,最好不要更改,后面会提到
$mount -tiso9660 -oloop CentOS-6.3-i386-bin-DVD1.iso /media/cdrom "挂载镜像
$mkdir
/etc/yum.repos.d/bak
"建立备份文件夹
$mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak "备份源
$cp /etc/yum.repos.d/bak/CentOS-Media.repo /etc/yum.repos.d/ "取出我们需要修改的源,
$vi /etc/yum.repos.d/CentOS-Media.repo "编辑我们要修改的源
将里面的"enabled=0"改为"enable=1"
$yum
makecache
"更新yum缓存
$yum install
createrepo
"安装软件包
到这里createrepo就安装好并可以使用了,我们修改的CentOS-Media.repo其中baseusl的路径就是我们可以讲DVD1挂载的路径,挂载到其他地方则要修改。
其实到这里大家也该明白了,源的大概工作流程,因为这里我们已经使用了自己的源,就是以DVD1作为源。当然这样有些麻烦,因为每次我们都需要挂载DVD,如果我们需要的软件又在DVD2中,那么就更麻烦了,所以我才决定将两张DVD在制作成本地源。
5.3 创建自己的源
接下来我们要创建我们的源了,我要用的软件包是DVD1和DVD2中的软件包,这两个软件包包含了常用的软件包,目前从我设置好本地源以后,我没有从网络
上下载过任何包,也就是说这两张DVD的包很多,足够我们使用了,当然更新除外。我记得好像4700多个包总共。首先要将两张DVD里面的包拷贝到一个文
件夹下,也就是我们要穿件源的文件夹下,我将源创建在/usr/local/repository下。
$mkdir /usr/local/repository "创建源文件夹
$cp -r /media/cdrom/Packages/ /usr/local/repository "将DVD1的包文件拷贝到源文件夹下
$umount /media/cdrom "卸载DVD1
$mount CentOS-6.3-i386-bin-DVD2.iso /media/cdrom "挂载DVD2
$cp -ur /media/cdrom/Packages/ /usr/local/repository "拷贝DVD2
$createrepo /usr/local/repository ”建立源,耐心等,估计得3到5分钟
$mv /etc/yum.repos.d/CentOS-Media.repo /etc/yum.repos.d/CentOS-Local.repo "修改配置文件
$vi /etc/yum.repos.d/CentOS-Local.repo
修改后如下所示:
[CentOS-Local]
name=LocalRepository
baseusr=file:///usr/local/repository
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CENTOS-6
$yum makecache "更新缓存
$yum install vim-enhanced "安装测试包,这里可以安装自己想要的包
$umount /media/cdrom "卸载DVD2
5.4 添加一些新的软件包
到了这里,我们的本地源已经配置好了,此外如果我们有单独的软件包需要的话,可以下载到/usr/local/repository/Packages下面,然后执行
$createrepo --update
这样就不会每次都花费很长的时间等待"createrepo" 了。
六、写在最后的屁话
到这里,基本上关于yum的应用就结束了,也希望能够帮助大家。如果大家有什么问题可以给我留言,虽然我不一定能够解决,呵呵!!