Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2794940
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: LINUX

2007-03-19 15:30:05

 最近找到几个新的软件包,觉得挺好用,也刚编译成rpm包,希望在所有使用到的机器上部署。后来发现,需要每一台机器去安装一遍,即使可以远程安装,这也是挺麻烦的。决定参考Redhat的升级机制,把yum也迁移到红旗上来。说做就做,效果还是不错的。
一、原理
 yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系。在建立好yum服务器后,yum客户端可以通过http、ftp方式获得软件包,并使用方便的命令直接管理、更新所有的rpm包,甚至包括kernel的更新。它也可以理解为红旗环境下的apt管理工具。
 要在红旗上部署yum服务,首先需要的就是规划软件包的目录次序:
引用
1、我准备要对红旗服务器DC和桌面DT提供服务;
2、涉及的平台,服务器对i386、x86_64平台,桌面只有i386平台;
3、提供系统本身的升级程序包,官方提供的升级包,自己编译的软件包,以及从其他途径获得、经过测试的软件包四大部分提供更新升级。

 目录架构如下:
点击在新窗口中浏览此图片

二、部署yum服务器
※系统平台:
服务端:红旗DC Server 5.0 for x86
客户端:红旗DC Server 5.0 for x86和DT 5.0 for x86

1、准备
 需要为yum提供python环境,可以从系统光盘获得:
引用

libxml2-2.6.16-6.i386.rpm
libxml2-python-2.6.16-6.i386.rpm
elfutils-0.97-5.i386.rpm
rpm-python-4.3.3-9_nonptl.1AX.i386.rpm
python-urlgrabber-2.9.6-2.noarch.rpm

使用rpm -ivh把上述的包都安装到系统中。
新版的yum使用xml格式的数据文件来分析和获得rpm信息,可以使用createrepo工具实现
官方网站:
下载:
安装:
rpm -ivh createrepo-0.4.4-1.noarch.rpm

2、拷贝
 os目录是用于存放系统原来带的所有软件包的,则我们这样做:
mount -t iso9660 -o loop /iso/redflag-dc5.0-release-disc1.iso /mnt/cdrom
cp /mnt/cdrom/* ./os/i386/
umount /mnt/cdrom
mount -t iso9660 -o loop /iso/redflag-dc5.0-release-disc2.iso /mnt/cdrom
cp /mnt/cdrom/* ./os/i386/

3、生成yum用的repodata目录
运行:
createrepo /yum/dc/5.0/os/i386

运行后,会自动在i386目录下生成repodata目录,里面存放有对应RPM的依赖信息供后续yum使用。
※这里只是演示了os目录,同样的,其他目录也存放上对应的文件,并用上述命令生成repodata目录。今后若有更新,需重新运行createrepo命令,以更新数据库
4、准备ftp服务
yum是通过http或ftp获得rpm包的,所以我们需要设置http或ftp服务,并把上述的yum目录的根目录作为ftp的根目录即可。类似提供这样的关系:
引用
ftp://ip/dc/5.0/os/i386


三、部署yum客户端
 我使用的是一个用最小化安装的红旗DC Server作为客户端。要使用yum服务,必须先解决yum的依赖关系。
1、准备
 下面是需要使用的软件包,请从系统光盘、rpmfind或centos获得:
rpm -ivh libxml2-2.6.16-6.i386.rpm
rpm -ivh libxml2-python-2.6.16-6.i386.rpm
rpm -ivh python-elementtree-1.2.6-4.i386.rpm
rpm -ivh sqlite-3.2.2-1.i386.rpm
rpm -ivh python-sqlite-1.1.6-1.i386.rpm
rpm -ivh python-urlgrabber-2.9.6-2.noarch.rpm
rpm -ivh elfutils-0.97-5.i386.rpm
rpm -ivh rpm-4.3.3-9_nonptl.i386.rpm
rpm -ivh rpm-python-4.3.3-9_nonptl.1AX.i386.rpm

2、安装
我使用的是自己编译的2.6.1-1版本,可以从下面的地址获得。你也可以使用centos提供的2.4.2-2版本。
下载地址:
rpm -ivh yum-2.6.1-1.noarch.rpm

3、配置
yum客户端的配置非常简单,只有一个配置文件:/etc/yum.conf,如下:
引用

[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redflag-release
tolerant=1
exactarch=1
obsoletes=1

# 这里表示,你可以把配置文件放在/etc/yum.repos.d目录中,用.repo文件名# 结尾即可。
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
[base]
name=Red Flag Linux $releasever - $basearch - Base
# 下面是获得rpm的http或ftp地址(yumer是用户名和密码)
baseurl=ftp://yumer:yumer@192.168.228.153/dc/$releasever/os/$basearch/

[updates]
name=Red Flag Linux $releasever - Updates
baseurl=ftp://yumer:yumer@192.168.228.153/dc/$releasever/updates/$basearch/

[extras]
name=Red Flag Linux $releasever - Extras
baseurl=ftp://yumer:yumer@192.168.228.153/dc/$releasever/extras/$basearch/

[addons]
name=Red Flag Linux $releasever - Addons
baseurl=ftp://yumer:yumer@192.168.228.153/dc/$releasever/addons/$basearch/

※注释:配置文件中可以使用几个变量,其他的请参考man yum.conf。
$releasever=distroverpkg定义的对应/etc/redflag-release的版本;
$arch=python中os.uname的定义;
$basearch=把$arch降级到最基础的架构,例如i686会表示为i386
4、使用
上面已经把yum配置完,使用方法是:
# yum <更新项目> <套件名称>

参数说明:
options:这里仅列出常见的参数而已。
-y 如果 yum 在工作过程中需要使用者响应,这个参数可以直接回答 yes  
更新项目:更新的动作有底下几个:
install :安装某个套件,后面需要接套件名称;
update  :这就是升级啦!如果 update 后面接套件名称,表示只要 yum 升级该套件而已
如果 update 后面不接套件名称,表示 yum 针对目前该主机所有已经安装的套件进行升级的动作!这是最常使用的项目了。
list    :列出目前在 yum server 上面有的 RPM 套件;
info    :某个套件的内容,类似 rpm -qi packages 的内容。
clean   :将已将下载到本机的 packages 或 headers 移除。
remove  :移除已经安装在我们系统的某个套件!

例如:

安装所有和mysql有关的套件
yum install *mysql*
检查是否有更新的套件
yum check-update
检查所有提供php的套件,并显示简介信息
yum search php
显示已经安装的套件
yum list installed
移除wget套件
yum remove wget

点击在新窗口中浏览此图片

四、其他
1、相关文件
引用
/etc/cron.daily/yum.cron
每日进行yum及其他软件包定时升级
/etc/init.d/yum
yum服务启动文件

2、更新套件
服务端:把新的套件放入对应的目录,然后运行createrepo更新XML数据库即可;
客户端:yum会定时的情况cache文件,但有时候我们马上就要更新需要的套件,可以这样做:
yum clean all
yum update mirrordir

3、利用其他套件更新
我们在日常的管理中,也可以利用其他的发行版提供的镜像来进行额外的更新。例如,我常用centos镜像来更新部分我的工具包:
在/etc/yum.conf文件中增加:
引用
[centos-update]
name=CentOS-$releasever - Update
baseurl=
gpgcheck=1
gpgkey=

其中不一样的地方就是,centos做了签名,所以,需要加上gpgcheck和gpgkey,接下来我就可以进行更新:
yum clean all
yum install mysql

可以看到,mysql会使用centos提供的4.1.20-1版本,而不会使用系统自带的4.1.10a-2。
点击在新窗口中浏览此图片
但千万要注意区分可使用的套件,并不是所有centos的套件都适合红旗使用的。若不知道如何区分,建议还是使用官方的SP补丁包吧。

五、附录
1、我使用的yum.conf文件:
2、yum客户端需要的rpm软件包:
 
 
 
阅读(1338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~