linux yum及yum仓库
1. yum的由来
为了解决程序间的依赖关系,RedHat曾推出了一款名为update的工具。这款工具虽然达到了目的,但用户体验并不是很好。后来一个基于RedHat的二次发行版yellowdog,由此也推出了一个工具:yellowdog update modifier,简写为yum. 由于比update好用,于是便流行开来。后来导致RedHat也弃update不用而使用yum
2. yum的特性
yum相对于rpm来说:rpm为基础包管理器,yum则是rpm的前端工具。yum无法独立存在
系统不允许有两个yum命令同时运行,如果有两个,第二次运行时会报错。这是为了防止yum之间的冲突
3. yum的工作方式
yum工作需要依赖C/S架构工作模式的文件服务器,服务器中存放了yum工作时所需的程序包。yum接收到需要安装的程序包的名称之后,通过文件共享协议(或者文件传输协议),在配置文件中指向的yum仓库(可以是多个)中查询需要的程序包。找到之后,通过文件下载协议,将程序包下载至本地yum的缓存目录中,当安装完成后,缓存目录便会被删除
但如果yum每次到yum仓库都需要遍历,就会导致速度很慢。而yum仓库中有两类数据:程序和程序的元数据。yum仓库在创建时,会将所有程序的名字、大小、版本以及依赖关系这类的属性信息提取出来并保存至repodata目录中。所以在yum第一次访问yum仓库时,会获取仓库中元数据(repodata),并下载至本地。因此,下次需要安装程序包时,只需从本地缓存中获得信息,直接到仓库下载即可
如何保持本地缓存repodata和服务器端的repodata实时同步呢?yum每次访问仓库都会先获取repodata目录中每个文件的特征码,并与本地的进行比较,如果不相同,就重新下载并覆盖
4. yum的配置文件
指向仓库的位置以及相关的各种配置信息。每个yum命令行可以同时指向多个仓库,仓库间可以进行优先级等相关配置,优先级是由开销决定的
配置文件有两部分组成:主配置文件以及各仓库的配置文件。因为如果所有的配置信息都放在一个文件中就显得太臃肿、不方便。其中主配置文件所在路径为/etc/yum.conf,它为各仓库指向提供公共配置文件;而各仓库的配置文件所在路径为:/etc/yum.repos.d/*.repo,里面都是以赋值的格式存在
主配置文件
[root ~]# cat /etc/yum.conf # 查看主配置文件 [main] # 所有仓库公共的配置 cachedir=/var/cache/yum/$basearch[p1] /$releasever # 缓存目录 keepcache=0 # 程序包在安装完成后不再保存至缓存中 debuglevel=2 # 程序安装时的输出信息,数字越大输出信息越多。生产环境中关闭最好,但是开启可以让我们快速定位安装中出现问题的所在 logfile=/var/log/yum.log # 日志文件 exactarch=1 # 安装程序的版本和当前平台保持一致 obsoletes=1 # 检查包已被废弃 gpgcheck=1 # 检查来源合法性和包完整性,还应该有个gpgkey,用于指明仓库的公钥文件从哪获取,但这是公共配置,而配置仓库都不相同,所以不放在这里 plugins=1 # 支持插件 installonly_limit=5 # 一次安装的程序包限制5个 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php? category=yum # bug追踪的路径 distroverpkg=centos-release # 判定当前系统的信息 # This is the default, if you make this bigger yum won‘t see if themetadata # is newer on the remote and so you‘ll"gain" the bandwidth of not having to # download the new metadata and"pay" for it by yum not having correct # information. # Itis esp. important, to have correct metadata, for distributions like # Fedora which don‘t keep old packagesaround. If you don‘t like this checking # interupting your command line usage, it‘smuch better to have something # manually check the metadata once an hour(yum-updatesd will do this). # metadata_expire=90m # PUT YOUR REPOS HERE OR IN separate filesnamed file.repo # in /etc/yum.repos.d # 可以往下附加配置信息,也可以放在各配置文件中 # 可通过man yum.conf进行详细查看
各配置文件
[root ~]# cat/etc/yum.repos.d/CentOS-Media.repo # 随便打开一个仓库的配置文件 [c6-media] # id,最好能够见名知意,并且必须唯一 name=CentOS-$releasever - Media # 当前仓库的描述信息 #mirrorlist= # 可以将所有的镜像站点url写入一个文件,然后指向这个文件,然后会挑一个速度最快的来使用。一般不和baseurl一起使用 baseurl=ftp:// # 指向仓库的路径,指向多个备用 http:// # 备用的路径不能顶格写,至少需要有1个空格 file:///media/cdrecorder/ gpgcheck=1 # 此处定义的优先级更高,需要和gpgkey配合 enabled=0 # 此仓库不被使用 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 cost= # 优先级,数字越小表示开销小,优先级越高。默认1000 [media] # 第二个仓库
5. yum命令
-y:自动回答为yes
list:列出所有仓库中的程序包,支持通配符
all:所有程序包
available:可用的,仓库中有尚未安装的
installed:已经安装的
clean:清理缓存。yum缓存路径:/var/cache/yum/
yum clean all:清除所有缓存信息,但不会清除目录
repolist:显示仓库列表及其简要信息
all:所有的仓库
enabled:已经启用的仓库
disabled:未启用的仓库
install:安装
yum install [-y] PACKAGE_NAME
remove|erase:卸载。和此程序包有依赖性的其他包也会被一并卸载
infoPACKAGE ... :查询程序的相关简要信息。这个包装不装都没有关系,只要仓库中有就行
grouplist:列出所有包组
groupinstall:安装包组
可直接用install、remove或update来管理包组,在包组前面加@用以区分:yuminstall @"Server Platform Development"
6. 配置基于centos发行光盘rpm包的yum仓库
安装createrepo命令
[root Packages]# yum install -y createrepo
挂载镜像光盘,上一篇博客中有提到怎么加载并挂载镜像
[root Packages]# mount -r /dev/cdrom /mnt/
使用creatrepo命令创建存放程序包元数据的repodata目录。因此,创建的时指向的路径必须是存放rpm包的路径
[root Packages]# mkdir /var/repo # 新建目录进行rpm包存放 [root Packages]# cd /var/repo [root repo]# cp /mnt/Packages/* . # 文件很多,需要等会 [root repo]# createrepo /var/repo/ Spawning worker 0 with 4184 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete # 恩,总算创建好了,等的时间够长 [root repo]# cd repodata/ [root repodata]# ls 318f1b79bc13b0daf243cdf4fad87af1e49fef06920b74f135e3d6d9af3a3abf-primary.sqlite.bz2 5015d87cfb7d1484fc9949b398c5d2d4916cb5c257939be34d0b9595e3bd734d-filelists.xml.gz 62d8a6fade0ecb892b8a58601665a77c95f5c278d57927274f9d3afef8378119-filelists.sqlite.bz2 75d262ab21744dd239762ac72543a4ebe74c7b7bd333dd7a96ff0a4636814144-primary.xml.gz 81cdd7de2b2e08780255e5c7e711f0499fc0f2e01e322e4f05b03f61434ea2f7-other.sqlite.bz2 fad987423b71003dbf3661f6bc4f51f50584c4fb0881b6506ccf7baf99c7aa1d-other.xml.gz repomd.xml # 这些就是元数据信息了 [root repodata]# cd /etc/yum.repos.d/ [root yum.repos.d]# vim centos6.6.repo # 新建配置文件,必须以repo结尾!或者就用里面现成的也行 [test2] name=fuck me baseurl=file:///var/repo enabled=1 gpgcheck=0 # 上面讲到了,这里就不重复了,保存退出! [root yum.repos.d]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile test2 | 2.9 kB 00:00 ... repo id repo name status test epel 4,184 test1 epel 41 test2 fuck me 4,184 repolist: 8,409 # 成功显示
到此,本地yum仓库配置完毕!但可以将其作为FTP服务器给其他用户提供服务
[root yum.repos.d]# yum install -y vsftpd # 下载FTP服务 [root yum.repos.d]# service vsftpd start # 启动服务 [root yum.repos.d]# cd /var/ftp/pub/ # 这是FTP默认目录,启动服务后自动创建 [root pub]# mv /var/repo . [root pub]# ls repo [root pub]# vim /etc/yum.repos.d/centos6.6.repo baseurl=ftp://172.16.249.135/pub/repo/ # 就改这一项,必须指向repodata所在的路径 [root pub]# service iptables stop # 关闭防火墙 # 可以在浏览器下ftp://172.16.249.135/pub/repo/查看了
配置完毕,这个可以说是最傻瓜式的ftp配置了,因为这里只是讲yum。另外还可以将其做成http服务器,方法基本一样
END