- 什么是 yum
yum 是 yellowdog updater modified 的缩写。yellowdog 是一个 Linux 的 distribution,RH 将这种升级技术利用到自己的 distribution 形成了现在的 yum,感觉上 yum和 apt 的原理类似,但是 apt 是编译代码,执行效率远高于使用 python 写成的 yum。
yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个 distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了 Linux 用户一直头痛的 dependencies 的问题。这一点上,yum 和 apt 相同。apt 原为 debian 的 deb 类型软件管理所使用,但是现在也能用到 RH 门下的rpm 了。
一般这类软件通过一个或者多个配置文件描述对应的 repository 的网络地址,通过 http 或者 ftp 协议在需要的时候从 repository 获得必要的信息,下载相关的软件包。这样,本地用户通过建立不同的 repository 的描述说明,在有 Internet 连接时就能方便进行系统的升级维护工作。另外,如果需要使用代理,可以用 http_proxy 和ftp_proxy 这些 shell 里面标准环境变量的设定。
repository 是用 yum-arch 或者 createrepo 命令创建的,也可以用别人已有的 repository 作为镜像,这里探讨如何建立一个 repository。
yum 的基本操作
yum 的基本操作包括软件的安装(本地,网络),升级(本地,网络),卸载,另外还有一定的查询功能。设定好了本地的 yum 之后,就可以很方便的进行安装。
1.列出所有可更新的软件清单
命令:yum check-update
2.安装所有更新软件
命令:yum update
3.仅安装指定的软件
命令:yum install <package_name>
4.仅更新指定的软件
命令:yum update <package_name>
5.列出所有可安裝的软件清单
命令:yum list
用YUM安装删除软件
装了系统添加删除软件是常事,yum同样可以胜任这一任务,只要软件是rpm安装的。
安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断。
删除的命令是,yum remove xxx,同安装一样,yum也会查询数据库,给出解决依赖关系的提示。
1.用YUM安装软件包
命令:yum install <package_name>
2.用YUM删除软件包
命令:yum remove <package_name>
用YUM查询软件信息
我 们常会碰到这样的情况,想要安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字。这时yum的查询功能就起作用了。你可以用yum search keyword这样的命令来进行搜索,比如我们要则安装一个Instant Messenger,但又不知到底有哪些,这时不妨用 yum search messenger这样的指令进行搜索,yum会搜索所有可用rpm的描述,列出所有描述中和messeger有关的rpm包,于 是我们可能得到gaim,kopete等等,并从中选择。
有时我们还会碰到安装了一个包,但又不知道其用途,我们可以用yum info packagename这个指令来获取信息。
1.使用YUM查找软件包
命令:yum search <keyword>
2.列出所有可安装的软件包
命令:yum list
3.列出所有可更新的软件包
命令:yum list updates
4.列出所有已安装的软件包
命令:yum list installed
5.列出所有已安装但不在 Yum Repository 內的软件包
命令:yum list extras
6.列出所指定的软件包
命令:yum list <package_name>
7.使用YUM获取软件包信息
命令:yum info <package_name>
8.列出所有软件包的信息
命令:yum info
9.列出所有可更新的软件包信息
命令:yum info updates
10.列出所有已安裝的软件包信息
命令:yum info installed
11.列出所有已安裝但不在 Yum Repository 內的软件包信息
命令:yum info extras
12.列出软件包提供哪些文件
命令:yum provides <package_name>
清除YUM缓存
yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all一 股脑儿端
1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages
2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean oldheaders
4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
Yum 是yellowdog updater modified的缩写。yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个 distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了 Linux 用户一直头痛的 dependencies 的问题。
一般这类软件通过一个或者多个配置文件描述对应的 repository 的网络地址,通过 http 或者 ftp 协议在需要的时候从 repository 获得必要的信息,下载相关的软件包。这样,本地用户通过建立不同的 repository 的描述说明,在有 Internet 连接时就能方便进行系统的升级维护工作。另外,如果需要使用代理,可以用 http_proxy 和 ftp_proxy 这些 shell 里面标准环境变量的设定。
现在的操作系统中都已经安装了YUM 工具,如果没有安装可以自己从网上下载安装。
Yum包的下载:
可以用wget 直接从网上下载,该命令下载的文件会放在当前目录下。如:
[[email protected] yum]# wget http://yum.baseurl.org/download/3.2/yum-3.2.26.tar.gz
[[email protected] yum]# wget http://yum.baseurl.org/download/3.2/yum-3.2.26-0.src.rpm
Linux下的安装包有集中形式:
1.1 tar.gz 格式
tar.gz文件的安装,是属于自己编译源代码的方法。tar是把文件打成一个包,并不压缩;.gz是用gzip把打成包的.tar文件压缩,所以成了一个.tar.gz的文件。
这种格式的安装分四部:
1) 解包
tar -zxvf xxx.tar.gz,这样会生成一个以文件名命名的文件夹。
2) 执行configure的脚本
该脚本用于完成配置的任务。可以加很多参数,具体的可以运行. /configure --help得到帮助的,比如./configure --prefix=xxx是设定软件安装到哪里。设置好参数,运行./configure,会生成makefile文件。
3) 编译
Configure 生成了makefile文件,运行make就可以完成编译。make是将读入所有由configure脚本程序建立的制作文件。这些制作文件会告诉make哪些文件需要被编译以及按照怎样的顺序对它们进行编译,因为可能会有上百个源程序文件。当make工作的时候,会在屏幕上显示出正在执行的每一个命令,以及与这个命令相关的全部参数。这些输出通常都是编译器的调用声明和所有传递给编译器的参数。如果编译器顺利地完成了工作,就不会出现什么错误信息。大多数编译器的错误信息十分清楚和明确,因此不用担心可能会漏掉一个错误。如果确实看到有一错误,也不用慌张。大多数错误信息并不反映出程序本身出现了一个问题,通常都是系统这里或者那里的问题。典型情况下,这些信息大多是因为文件访问权限不正确而产生的或者是因为文件没有找到。
4) 安装软件
执行make install,这个命令将启动安装脚本程序。因为make命令会在执行每一个命令的时候把它显示出来,所以将会看到许许多多的文字掠过眼前。如果没有看到什么错误信息,就说明这个软件包安装好了。
卸载:make uninstall
注意:如果下载的包里已经有了makefile 文件,就说明已经configure过了,直接安装就可以了。
1.2 *.src.rpm
这中rpm 格式的包也是一种源码包,需要编译后才能安装。 具体有2种安装方法:
方法一:
1)执行rpm -i you-package.src.rpm
2)cd /usr/src/redhat/SPECS
前两步和方法一相同
3)rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件
这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等)
4)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
执行rpm -i new-package.rpm即可安装完成。
方法二:
1)执行rpm -i your-package.src.rpm
2)cd /usr/src/redhat/SPECS
3)rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4) cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5)./configure 这一步和编译普通的源码软件一样,可以加上参数
6) make
7.)make install
注:还有一种格式rpm格式的包: *.rpm , 这种包无需编译,直接安装即可:rpm -ivh *.rpm
安装完后我们可以用yum update 来更新repository。 第一更新的文件总大小在800M左右.
- 配置YUM 服务器
YUM是Yellow dog Updater, Modified的缩写,是由Duke University所发起的计划,目的就是为了解决RPM的依赖关系的问题,方便使用者进行软件的安装、升级等等工作。在此在特别说明的是,YUM只是为了解决RPM的依赖关系的问题,而不是一种其它的软件安装模式。当然可以实现这样功能的除了YUM外,还有APT (Advanced Package Tool,是由debian所发展的一个软件管理工具)。
YUM的工作原理,在每一个 RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装哪些基础软件。也就是说,在服务器上面先以分析工具将所有的RPM档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可以知道所有相关联的软件。
所以YUM的基本工作流程如下:
服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
在这篇文章里,我们配置通过FTP的YUM服务器。 在RHEL的安装盘上有所有的YUM包。 我们只需要把这些YUM 软件放到硬盘上,并配置好FTP。 在客户端修改相关的YUM 参数就可以了。
一. 服务器端配置 (FTP方式)
1.1 安装FTP 服务,并配置自启动
[[email protected] Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm
warning: vsftpd-2.0.5-16.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:vsftpd ########################################### [100%]
[[email protected] Server]# chkconfig vsftpd on
[[email protected] Server]# chkconfig vsftpd --list
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[[email protected] Server]# service vsftpd restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: [ OK ]
[[email protected] Server]#
linux FTP 的配置,在下篇文章里会做说明, 这篇只演示如何使用。
1.2 复制RPM 包
将RHEL 5光盘中的Server、VT、Cluster、ClusterStorage四个目录复制到/var/ftp/pub下。
[[email protected] RHEL_5.4 i386 DVD]# du -k
253 ./Cluster/repodata
69571 ./Cluster
143 ./ClusterStorage/repodata
10300 ./ClusterStorage
10546 ./Server/repodata
2626369 ./Server
182 ./VT/repodata
47724 ./VT
8512 ./images/pxeboot
8914 ./images/xen
166766 ./images
8646 ./isolinux
2934671 .
[[email protected] RHEL_5.4 i386 DVD]# cp -rf Cluster /var/ftp/pub/
[[email protected] RHEL_5.4 i386 DVD]# cp -rf ClusterStorage /var/ftp/pub/
[[email protected] RHEL_5.4 i386 DVD]# cp -rf VT /var/ftp/pub/
[[email protected] RHEL_5.4 i386 DVD]# cp -rf Server/ /var/ftp/pub/
[[email protected] pub]# pwd
/var/ftp/pub
[[email protected] pub]# ls
Cluster ClusterStorage Server VT
[[email protected] pub]# du -k
276 ./Cluster/repodata
69816 ./Cluster
10584 ./Server/repodata
2638388 ./Server
160 ./ClusterStorage/repodata
10468 ./ClusterStorage
200 ./VT/repodata
47924 ./VT
2766600 .
[[email protected] pub]#
1.3. 安装createrepo包,并重建包依赖关系
createrepo包是用来生成RPM 依赖关系及分组信息的。 搭建YUM服务器,必须要重建着2个信息。
1.3.1 检查包安装情况
[[email protected] Server]# rpm -q yum
yum-3.2.22-20.el5.centos
[[email protected] Server]# rpm -q createrepo
package createrepo is not installed
[[email protected] Server]# 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 37017186
Preparing... ########################################### [100%]
1:createrepo ########################################### [100%]
[[email protected] Server]# rpm -q createrepo
createrepo-0.4.11-3.el5
[[email protected] Server]#
1.3.2 重建分组及依赖关系
在RHEL 5中每个目录下的repodata目录下都有一个repomd.xml,该文件中就记录了rpm包的依赖关系,还有一个comps-rhel5-*.xml文件,这个文件主要记录分组情况,建立yum仓库时,需要先重建该文件。
[[email protected] repodata]# pwd
/var/ftp/pub/Server/repodata
[[email protected] repodata]# ls
comps-rhel5-server-core.xml filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml TRANS.TBL
重建Server:
[[email protected] pub]# createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server/
2292/2292 - xorg-x11-xinit-1.0.2-15.el5.i386.rpm --这里有2千多个包
Saving Primary metadata
Saving file lists metadata
Saving other metadata
[[email protected] pub]#
重建VT:
[[email protected] pub]# createrepo -g /var/ftp/pub/VT/repodata/comps-rhel5-vt.xml /var/ftp/pub/VT/
36/36 - Virtualization-or-IN-5.2-11.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
重建Cluster:
[[email protected] pub]# createrepo -g /var/ftp/pub/Cluster/repodata/comps-rhel5-cluster.xml /var/ftp/pub/Cluster/
32/32 - Cluster_Administration-zh-TW-5.2-1.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
重建ClusterStorage:
[[email protected] pub]# createrepo -g /var/ftp/pub/ClusterStorage/repodata/comps-rhel5-cluster-st.xml /var/ftp/pub/ClusterStorage/
39/39 - Global_File_System-or-IN-5.2-1.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
[[email protected] pub]#
1.4 修改YUM 配置文件
在每个客户端使用YUM时,必须需要修改配置文件。
我们先看文件: /etc/yum.repos.d/*.repo。 这个文件名称可以随便定义,但是扩展名必须是repo.
[[email protected] pub]# cat /etc/yum.repos.d/CentOS-Base.repo
[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
...
这个是我CentOS上的部分内容。 其他的类似。 这个文件其实是在使用yum安装的客户端使用的。 我们在服务器创建这个配置文件的原因是方便使用。 假如在公司里的Linux客户端非常多,我们不必去修改每个客户端的这个YUN配置文件。 只需要从服务器上将这个文件下载到本机就可以了。
在YUM服务器上创建文件:
[[email protected] pub]# cat /etc/yum.repos.d/rhel54.86.repo
[rhel-base]
name= TianleSoftware Redhat Enterprise 5.4
baseurl=ftp://192.168.6.2/pub/Server
gpgcheck=0
enabled=1
[rhel-vt]
name= TianleSoftware Redhat Enterprise 5.4
baseurl=ftp://192.168.6.2/pub/VT
gpgcheck=0
enabled=1
[rhel-cluster]
name= TianleSoftware Redhat Enterprise 5.4
baseurl=ftp://192.168.6.2/pub/Cluster
gpgcheck=0
enabled=1
[rhel-ClusterStorage]
name= TianleSoftware Redhat Enterprise 5.4
baseurl=ftp://192.168.6.2/pub/ClusterStorage
gpgcheck=0
enabled=1
说明: 这里提供的只是一个FTP地址,所以可以使用其他的方式来实现FTP。 不一定非要像第一步里说明的,使用LINUX的FTP。
相关参数说明:
[ ]:内的是仓库的名字,不重复即可。
name:仓库的描述.
baseurl: YUM源地址, 这里配置的是FTP,还可以是HTTP,FILE等。
enabled :是否启用这个仓库,1为起用,0为禁用
gpgcheck :是否检查GPG签名(验证要安装的包是不是REDHAT官方的)。
二. 服务器端配置(本地光盘方式)
步骤也很简单,如下:
1. 创建介质装载目录
mkdir /media/disk
2. 插入系统光盘
一般在系统光盘里有我们所有需要的RPM 包,所以,可以直接从系统盘里获取RPM 包,而不用从网上在下载。
3. 挂载介质到我们之前创建的目录
mount /dev/cdrom1 /media/disk
4. 创建yum 配置文件
[[email protected] /]#touch /etc/yum.repos.d/anqing.repo
--这里的文件名可以自己指定,不影响使用。
5. 在yum 配置文件里添加如下内容:
[dave] --这里可以自己指定
name = Dave YUM Server --这里也可以自己指定
baseurl=file:///media/disk/Server/
gpgcheck=0
enabled=1
6. 验证YUM:
[[email protected] yum.repos.d]# yum update
Loaded plugins: refresh-packagekit
dave | 3.7 kB 00:00 ...
dave/primary_db | 3.1 MB 00:00 ...
Setting up Update Process
No Packages marked for Update
--查找libXp包
[[email protected] /]# rpm-qa|grep libXp
libXpm-3.5.8-2.el6.x86_64
libXp-1.0.0-15.1.el6.x86_64
--卸载libXp 包
[[email protected] /]# rpm -e libXp-1.0.0-15.1.el6.x86_64
--安装libXp 包:
[[email protected] /]# yum -y install libXp
Loaded plugins: refresh-packagekit
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libXp.x86_640:1.0.0-15.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
libXp x86_64 1.0.0-15.1.el6 dave 22 k
Transaction Summary
====================================================================================================
Install 1 Package(s)
--这里可以看到使用的yum 的配置文件。
Total download size: 22 k
Installed size: 39 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
Installing : libXp-1.0.0-15.1.el6.x86_64 1/1
Installed:
libXp.x86_64 0:1.0.0-15.1.el6
Complete!
[[email protected] /]#
三. 客户端配置
[[email protected] yum.repos.d]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# wget ftp://192.168.6.2/pub/rhel54.86.repo
--2011-01-03 11:39:53-- ftp://192.168.6.2/pub/rhel54.86.repo
=> `rhel54.86.repo.1‘
Connecting to 192.168.6.2:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /pub ... done.
==> SIZE rhel54.86.repo ... 471
==> PASV ... done. ==> RETR rhel54.86.repo ... done.
Length: 471
100%[==========================================================>] 471 --.-K/s in 0s
2011-01-03 11:39:53 (23.6 MB/s) - `rhel54.86.repo.1‘ saved [471]
[[email protected] yum.repos.d]# yum update
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
rhel-ClusterStorage | 1.1 kB 00:00
rhel-ClusterStorage/primary | 8.3 kB 00:00
rhel-ClusterStorage 39/39
rhel-base | 1.1 kB 00:00
rhel-base/primary | 806 kB 00:00
rhel-base 2292/2292
rhel-cluster | 1.1 kB 00:00
rhel-cluster/primary | 5.9 kB 00:00
rhel-cluster 32/32
rhel-vt | 1.1 kB 00:00
rhel-vt/primary | 9.0 kB 00:00
rhel-vt 36/36
Skipping security plugin, no data
Setting up Update Process
No Packages marked for Update
用yum 安装 ant :
[[email protected] yum.repos.d]# yum -y install ant
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ant.i386 0:1.6.5-2jpp.2 set to be updated
--> Processing Dependency: xml-commons-apis for package: ant
--> Running transaction check
---> Package xml-commons-apis.i386 0:1.3.02-0.b2.7jpp.10 set to be updated
--> Processing Dependency: xml-commons = 1.3.02-0.b2.7jpp.10 for package: xml-commons-apis
--> Running transaction check
---> Package xml-commons.i386 0:1.3.02-0.b2.7jpp.10 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
ant i386 1.6.5-2jpp.2 rhel-base 2.0 M
Installing for dependencies:
xml-commons i386 1.3.02-0.b2.7jpp.10 rhel-base 19 k
xml-commons-apis i386 1.3.02-0.b2.7jpp.10 rhel-base 335 k
Transaction Summary
====================================================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 2.4 M
Downloading Packages:
(1/3): xml-commons-1.3.02-0.b2.7jpp.10.i386.rpm | 19 kB 00:00
(2/3): xml-commons-apis-1.3.02-0.b2.7jpp.10.i386.rpm | 335 kB 00:00
(3/3): ant-1.6.5-2jpp.2.i386.rpm | 2.0 MB 00:00
----------------------------------------------------------------------------------------------------
Total 3.3 MB/s | 2.4 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : xml-commons 1/3
Installing : xml-commons-apis 2/3
Installing : ant 3/3
Installed:
ant.i386 0:1.6.5-2jpp.2
Dependency Installed:
xml-commons.i386 0:1.3.02-0.b2.7jpp.10 xml-commons-apis.i386 0:1.3.02-0.b2.7jpp.10
Complete!
[[email protected] yum.repos.d]#
参考: http://blog.csdn.net/tianlesoftware/article/details/6113902