首页 > 代码库 > linux服务之yum
linux服务之yum
yum源服务器
yum客户端采用python编写,采用sqlite存储
yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header,header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。
在执行yum update命令的时候,这一步就是yum会从服务器的header目录下载rpm的header,放在本地的缓存中。
架设本地,远程(ftp,http都可以)
首先架设vsftp服务器
rpm -ivh Createrepo-xxx.rpm
createrepo /var/ftp/pub/ #生成数据库
/etc/init.d/vsftpd start #启动ftp服务
baseurl=ftp://192.168.1.88(YUMserver的ip地址)/pub/
安装单个服务已经可以了,下面我们来解决安装组包的问题
修改文件:/usr/lib/python2.4/sit-pachages/yum/yumRepo.py #第441行vi +441 /usr/lib/python2.4/sit-pachages/yum/yumRepo.py #敲命令将 remote= url + ‘/‘ +relative 修改为 remote= "/var/ftp/pub/Server" + ‘/‘ +relative
http类似于ftp,只是路径不同,协议不同而已。http方式是将源文件放入html目录中
yum客户端
yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件。
[root@localhost ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum #yum下载的RPM包的缓存目录
keepcache=0 #缓存是否保存,1保存,0不保存。
debuglevel=2 #调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)。
logfile=/var/log/yum.log #yum的日志文件所在的位置
exactarch=1 #在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包。
obsoletes=1 #这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1 #是否检查GPG(GNU Private Guard),一种密钥方式签名。
plugins=1 #是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件。
installonly_limit=3 #允许保留多少个内核包。
exclude=selinux* #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离。
[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
[fedora] #方括号里面的是软件源的名称,将被yum取得并识别
name=Fedora $releasever - $basearch #这里也定义了软件 仓库的名称,通常是为了方便阅读配置文件,一般没什么作用,$releasever变量定义了发行版本,通常是8,9,10等数字,$basearch变 量定义了系统的架构,可以是i386、x86_64、ppc等值,这两个变量根据当前系统的版本架构不同而有不同的取值,这可以方便yum升级的时候选择 适合当前系统的软件包,以下同……
failovermethod=priority #failovermethod 有两个值可以选择,priority是默认值,表示从列出的baseurl中顺序选择镜像服务器地址,roundrobin表示在列出的服务器中随机选择
exclude=compiz* *compiz* fusion-icon* #exclude这个选项是后来我自己加上去的,用来禁止这个软件仓库中的某些软件包的安装和更新,可以使用通配符,并以空格分隔,可以视情况需要自行添加
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
#上面的一行baseurl第一个字符是‘#‘表示该行已经被注释,将不会被读取,这一行的意思是指定一个baseurl(源的镜像服务器地址)
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
#上面的这一行是指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/09/2203916.html
YUM(Yellow dog Updater, Modified)为多个Linux发行版的前端软件包管理器,例如 Redhat RHEL, CentOS & Fedora. YUM通过调用RPM的软件包信息让用户更方便地进行软件安装,升级,卸载等软件包管理操作。
这篇教程适用所有使用YUM管理软件包的Linux发行版,包括CentOS, RHEL or Fedora.
怎么使用YUM命令升级所有RPM软件包?
yum update
怎么使用YUM命令升级单个RPM软件包
yum update 软件名称
使用YUM安装RPM软件包
yum install 软件名称
使用YUM升级全部软件时怎么排除个别软件,假如你想升级所有软件包,但不想升级内核,就可以用下面的命令:
yum --exclude=package kernel* update
怎么使用YUM来确定某个软件需要升级,下面的命令会检测 Fedora/CentOS/RHEL上的所有软件是否需要升级
check-update
使用YUM卸载软件
yum remove 软件名称 或者 yum erase 软件名称
使用YUM查看软件包相关信息
yum list可以让你获取软件包相关信息,后面不指定软件包名的话,它会列出所有软件包的信息。 yum list 软件名称
使用yum了解软件的主要功能
比如你想知道httpd这个软件是干吗的,可以输入下面的的命令: yum provides httpd
使用YUM查找软件包
如果你不知道某个软件包的全称,这个命令就非常有用了,它会根据你提供的关键词在RPM的软件包数据库里搜索相适配的软件包。比方说我想找 samba这个软件的全称,我只需要输入下面的命令即可: yum search samba
使用YUM查看软件包的基本信息
yum info samba
怎么清除YUM缓存和下载包文件
每安装一个软件包,YUM都是先下载一个RPM软件包然后再安装,安装完后并不会自动删除。时间长了,这些文件占很多空间的。所以,需要定时清理: yum clean all
怎么使用YUM安装本地RPM包
如果你想要自己创建一个RPM软件包,你可以用YUM来确定存在哪些依赖关系: yum localinstall 软件名称.rpm
使用YUM升级本地RPM软件包
如果你想升级一个本地RPM软件包,可以用下面的命令: yum localupdate update-package.rpm
确定RPM包依赖哪些组件
如果你想自己源码安装软件,了解安装的软件包依赖哪些软件非常有必要的。deplist可以让你知道软件包依赖哪些组件,这些组件的全称是什么。 yum deplist 软件名称
查看YUM的版本信息
yum -v
使用YUM安装软件包到chroot环境(chroot)
你可以使用下面的命令把软件安装到chroot: yum --installroot=/path/to/chroot/
使用YUM启用已存在的软件源
如果你安装了第三方的软件源,你需要先启用该软件源才能从其安装软件,输入下面的命令启用EPEL软件源: yum --enablerepo=epel install rsnapshot
使用YUM禁用软件源
如果你安装了第三方软件源但不想从其安装软件,可以用下面的命令禁用: yum --disablerepo=epel install 软件名称
YUM软件集合
YUM软件集合是指多个共同协作的软件统称,比如“Development Tools”(开发工具)。 下面介绍下怎么用yum groupinstall命令来查看/安装/卸载yum软件集合
安装yum软件集合
yum groupinstall ‘Development Tools‘
卸载yum软件集合
yum groupremove ‘Development Tools‘
升级yum软件集合
yum groupupdate ‘Development Tools‘
查看yum软件集合信息
yum groupinfo ‘Development Tools‘
查看有哪些软件集合
yum grouplist | more
使用YUM输出已安装软件包列表
该命令适用所有使用YUM为软件管理器的linux版本,如CentOS, Fedora, RHEL: yum list installed
yum会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包。
yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
fastestmirror配置文件:(一般不用动)
/etc/yum/pluginconf.d/fastestmirror.conf
你的yum镜像的速度测试记录文件:
/var/cache/yum/timedhosts.txt
问题:
[root@name user]# yum
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
原因:
这是因为yum采用python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 5自带的yum采用的是python2.4,当系统将python升级到2.6或3.0后,出现语法解释错误。
解决办法:
很简单,一是升级yum,一是修改yum的解释器为旧版本python2.4(如果你没有采用覆盖升级的话)
升级yum的作法就不详述了;
修改yum的解释器为旧版本python2.4:
vi /usr/bin/yum
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2.4"即可
当YUM时,注:如出现:Existing lock /var/run/yum.pid: another copy is running. Aborting.错误,
要运行: rm -f /var/run/yum.pid 将该文件删除!
yum Existing lock 错误的解决办法
如果系统启动的时候, yum 出现Existing lock /var/run/yum.pid: another copy is running as pid 3380. Aborting.
可以用下面的办法解决:
可以 /etc/init.d/yum-updatesd stop
也可以 rm -f /var/run/yum.pid
主要原因就是yum在自动更新 只要关掉它就可以了
[root@localhost ~]# cd /var/cache/yum/x86_64/6/;ls
/etc/yum.repos.d/下面启用的源,cache目录下才会有相关的目录。
yum就是根据存放在这里的这些rpm的header来检测系统中安装的软件(rpm软件包)是不是最新版本,需不需要update.
如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all 一股脑儿端
如何构建自己的本地安装源呢
1、将所有的rpm包拷贝到一个目录中,此处放在/mnt/local/下
2、安装createrepo包,
rpm -ivh createrepo-0.9.8-4.el6.noarch
3、createrepo -v /mnt/local #-v指定
然后在/etc/yum.repos.d/创建yum仓库配置文件,注意要以.repo结尾
示例:
#vi local.repo
[base] #yum仓库的描述
name=local #仓库名字,任意起,此处只是为了方便我自己查看
baseurl=file:///mnt/local/ #rpm包的路径,即yum指向的安装源
gpgcheck=0 #不检测
设置好以后执行
#yum clean all 即可
当然我么也可以用RedHat的系统镜像来做yum源,方法与上面差不多
挂载镜像文件到目录,例如
mount -o loop -t iso9660 rhel6.iso /mnt/iso/
这时在local.repo文件添加
[server]
name=RHEL
baseurl=file:///mnt/iso/
gpgcheck=0
#yum clean all 即可
[root@localhost yum]# rpm -qa gpg-pubkey*
gpg-pubkey-c105b9de-4e0fd3a3
[root@localhost yum]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
[root@localhost yum]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3 删除key
命令手册
[root@localhost ~]# yum list installed|wc -l
276
[root@localhost ~]# rpm -qa|wc -l
220
[root@localhost ~]# yum search varnish
[root@localhost ~]# yum search all varnish
[root@localhost ~]# yum provides varnish
[root@localhost ~]# yum list varnish
[root@localhost ~]# yum install varnish
[root@localhost ~]# yum info varnish
[root@localhost ~]# yum localinstall varnish.rpm
[root@localhost ~]# yum deplist httpd
[root@localhost ~]# cat /etc/yum.conf
[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
rm -rf /var/cache/yum/*
安装最快镜像插件
yum install yum-fastestmirror
[root@localhost log]# rpm -qa|grep yum
yum-plugin-fastestmirror-1.1.30-14.el6.noarch
yum-metadata-parser-1.1.2-16.el6.x86_64
yum-3.2.29-40.el6.centos.noarch
[root@localhost log]# rpm -ql yum-plugin-fastestmirror
/etc/yum/pluginconf.d/fastestmirror.conf
/usr/lib/yum-plugins/fastestmirror.py
/usr/lib/yum-plugins/fastestmirror.pyc
/usr/lib/yum-plugins/fastestmirror.pyo
/usr/share/doc/yum-plugin-fastestmirror-1.1.30
/usr/share/doc/yum-plugin-fastestmirror-1.1.30/COPYING
[root@localhost log]# rpm -ql yum-metadata-parser
/usr/lib64/python2.6/site-packages/_sqlitecache.so
/usr/lib64/python2.6/site-packages/sqlitecachec.py
/usr/lib64/python2.6/site-packages/sqlitecachec.pyc
/usr/lib64/python2.6/site-packages/sqlitecachec.pyo
/usr/lib64/python2.6/site-packages/yum_metadata_parser-1.1.2-py2.6.egg-info
/usr/share/doc/yum-metadata-parser-1.1.2
/usr/share/doc/yum-metadata-parser-1.1.2/AUTHORS
/usr/share/doc/yum-metadata-parser-1.1.2/ChangeLog
/usr/share/doc/yum-metadata-parser-1.1.2/README
[root@localhost /]# cd /var/cache/yum/
[root@localhost /]# cd /var/lib/yum/