Contents
在 RHEL 机器上使用 CentOS 软件库
CentOS 通过好像 CentOS-Plus 及 Extras 等数个软件库为所重建的 RHEL 增值。还有一些第三方的软件库在 RHEL 系统上是有用的。问题就是 up2date 在处理 yum 软件库方法不太好,因此随著 RHEL 转用 yum,很多人亦希望用 yum 来管理他们的 RHEL 3 及 4 系统。要这样做,下面的事情须要先发生:
- 在 RHEL 上安装 yum。我们会使用来自 CentOS 的 yum 组件,然后对准它来配合 RHEL。
容许 yum 访问 RHEL 的软件库。由於 Red Hat 并不公开他们的软件库,因此你需要创建一个镜像。在这份文件中,我们会利用 Dag Wieers 的 mrepo 工具来达到这个目的。
新增额外的软件库。软件库一般是通过 /etc/yum.repos.d 目录内的 .repo 文件来直接管理。
1. 启用 Yum
你需要以下来自 CentOS 4 的 RPM,他们收录在 http://mirror.centos.org/centos/ :
CentOS 3 内的 yum 版本并不拥有 CentOS4 版本内的所有依赖,因此你可以忽略不存在於 CentOS 3 上的组件
- yum
- sqlite
- python-sqlite
- python-elementtree
- python-urlgrabber
- yum-metadata-parser
要安装这些组件,你必需先安装了一个提供 "yumconf" 的组件。在 CentOS 上,这是由 centos-release RPM 所提供的。但我们不能在 RHEL 上使用这个 RPM,因为它所做的其中一件事就是取代 /etc/redhat-release。要避免这个问题,我们须要创建一个含有适当文件的 RPM。以下的 rpm 正正乎合要求。这个 RPM(redhat-yumconf-4-4.8.el4.nosrc.rpm)的 spec 文件的内容是:
Summary: RHEL-4 Yum configuration. Name: redhat-yumconf Version: 4 Release: 4.8.el4 Copyright: GPL Group: System Environment/Base Source0: CentOS-Base.repo Source1: RHEL-Base.repo NoSource: 1 BuildArch: noarch BuildRoot: %{_tmppath}/redhat-yumconf-root Provides: yumconf Conflicts: centos-release %description Repo files for yum on RHEL 4 %install mkdir -p $RPM_BUILD_ROOT/etc mkdir -p $RPM_BUILD_ROOT/etc/yum.repos.d cp -f %{SOURCE0} $RPM_BUILD_ROOT/etc/yum.repos.d cp -f %{SOURCE1} $RPM_BUILD_ROOT/etc/yum.repos.d %clean rm -rf $RPM_BUILD_ROOT %files %defattr(0644,root,root) %config(noreplace) /etc/yum.repos.d/CentOS-Base.repo %config(noreplace) /etc/yum.repos.d/RHEL-Base.repo
你会发现 RHEL-Base.repo 档被列为一个 NoSource 文件。由於你必须创建自己的软件库,因此没法预先知道这个软件库的位置。我们推荐你使用 CentOS-Base.repo 档作为一个范本,然后创建一个适合你的环境的 RHEL-Base.repo 文件。当你创建好这个文件后,请将它放置在你的创建 rpm 时用的路径(参见「Yum 与 RPM 的技巧」)下的 SOURCES 目录内,然后重建 SRPM(redhat-yumconf-4-4.8.el4.nosrc.rpm)。
如何你不清楚软件库将会放在哪里,你可以暂时创建一个空白的 RHEL-Base.repo,然后在建成镜像后才作出修改。
一旦你创建及安装了这个 RPM,你便可安装 yum 及它所依赖的 RPM。下面的脚本(yum-bootstrap.sh)会协助你引导这个程序。
# Check that the prerequisite of yumconf is installed rpm -q --whatprovides yumconf 2>&1 >/dev/null if [ $? != 0 ]; then echo "You must have a package installed that provides yumconf." echo "See http://wiki.centos.org/HowTos/PackageManagement/YumOnRHEL" echo "for more details on how to accomplish this." exit 1; fi export ARCH=`uname -i` export BSDIR=/tmp/yum-bootstrap export SOURCE=http://mirror.centos.org/centos/4/os/$ARCH/CentOS/RPMS mkdir $BSDIR wget -P $BSDIR -nH $SOURCE/yum-2.4.3-4.el4.centos.noarch.rpm wget -P $BSDIR -nH $SOURCE/yum-metadata-parser-1.0-8.el4.centos.$ARCH.rpm wget -P $BSDIR -nH $SOURCE/python-urlgrabber-2.9.8-2.noarch.rpm wget -P $BSDIR -nH $SOURCE/python-elementtree-1.2.6-5.el4.centos.$ARCH.rpm wget -P $BSDIR -nH $SOURCE/python-sqlite-1.1.7-1.2.1.$ARCH.rpm wget -P $BSDIR -nH $SOURCE/sqlite-3.3.6-2.$ARCH.rpm rpm -Uvh $BSDIR/yum* $BSDIR/python* $BSDIR/sqlite* if [ $? -eq 0 ]; then rm -rf $BSDIR fi # Fix the release package, otherwise $releasever is set to null sed -i "s/centos-release/redhat-release/" /etc/yum.conf
2. 创建一个 RHEL 镜像
如上面所说,你必须创建一个 RHEL 二进制 RPM 的镜像来让 yum 直接使用。让我们以安装 mrepo 作为起点。加入 RPMForge 软件库(见「软件库」)就是最简单的做法。接著从 RPMForge 安装 mrepo、createrepo、及 hardlink++。
创建你想用来存储镜像的目录。mkdir /var/mrepo/rhel4as-x86_64
将 systemid 档从 /etc/sysconfig/rhn 复制到你的新目录内。cp /etc/sysconfig/rhn/systemid /var/mrepo/rhel4as-x86_64
修改所提供的 /etc/mrepo.conf 档来迎合你的环境。设安适当的目录、结构、及电邮地址。你可以继续注释 rhnlogin 这一行,因为它只供订阅频道时使用。由於你使用一个现有的 systemid,因此你多数不需口令,但如何有需要的话它会问你(例如:设置一个系统并未订阅的频道)。
接著,为你的发行版本在 /etc/mrepo.conf.d 内置立一个文件。下面的样例针对拥在 Extras 及 Fastrack 的 RHEL4。要知道其它频道的路径,请参阅 RHN 的网页。每个频道的「细节」页都有一个 Label 栏(在 Summary 及 Description 后面)。这是你须要放在 rhns:/// 后的符串。
现在执行 mrepo -uv rhel4as-x86_64 将内容放进 mrepo 软件库内。
/etc/mrepo.conf.d/rhel4as-x86_64.conf:
[rhel4as-x86_64] name = Red Hat Advanced Server $release ($arch) release = 4 arch = x86_64 updates = rhns:///rhel-x86_64-as-4 extras = rhns:///rhel-x86_64-as-4-extras fastrack = rhns:///rhel-x86_64-as-4-fastrack
创建一个 cron 的工作来执行 mrepo -gu rhel4as-x86_64 是一件很可取的事情,因为这样做可以保持软件库经常带有最新发行的更新。通常 RHEL 每个星期会更新一次,但每晚进行同步可能更合适,尤其是当有 Fastrack 更新或安全性修正出现。
除了从 RHN 下载更新外,mrepo 还有很多用处。要得知更多设置选项,请参阅 mrepo 的网页。
如果你使用非 RHEL 的机器(例如 CentOS)来执行 mrepo,你要留心以下的警告:
/etc/sysconfig/rhn/sources 内须要有 up2date 的设置,这在 http://svn.rpmforge.net/svn/trunk/tools/mrepo/docs/redhat-network.txt 里有所提及 —— 你必须将含有 up2date default 的那一行解除注释。
3. 设置软件库
到了这一步,yum 应该已经被安装了。要增加额外的软件库,你只需在 /etc/yum.repos.d 目录内加入 .repo 文件。「软件库」内有更多关於这方面的信息。有一件事情你要当心,至低限度在 RHEL 4 上如是,就是多数的第三方软件库以 /4/ 作为 releasever,但 RHEL4 却会汇报 releasever 是 /4XX/,当中 XX 可以是 WS、ES、或 AS —— 视乎你的发行版本。解决这个问题的最简单方法就是在 .repo 文件内以 4 取替所有 $releasever 符串。
当你采用上面的 redhat-yumconf RPM,CentOS 的 base 及 update 软件库将会被启用,但只限於 yum 及它依赖的组件。其它的 CentOS 软件库亦可供使用,但缺省是被停用的。你可以在命令行里使用 --enablerepo 选项或编辑 CentOS-Base.repo 档来启用其它软件库。这样做可以让你访问增值的组件,而又避免你不知情地将一台 RHEL 机器转换成一台 CentOS 机器。所有 CentOS 软件库的名称都以 c4- 起首(例如 c4-updates),以免它们与 RHEL-Base.repo 内的软件库有冲突。这样做亦方便你运用类似 yum --enablerepo=c4-\* ... 的指令。
Translation of revision 28