在 RHEL 机器上使用 CentOS 软件库

CentOS 通过好像 CentOS-Plus 及 Extras 等数个软件库为所重建的 RHEL 增值。还有一些第三方的软件库在 RHEL 系统上是有用的。问题就是 up2date 在处理 yum 软件库方法不太好,因此随著 RHEL 转用 yum,很多人亦希望用 yum 来管理他们的 RHEL 3 及 4 系统。要这样做,下面的事情须要先发生:

  1. 在 RHEL 上安装 yum。我们会使用来自 CentOS 的 yum 组件,然后对准它来配合 RHEL。
  2. 容许 yum 访问 RHEL 的软件库。由於 Red Hat 并不公开他们的软件库,因此你需要创建一个镜像。在这份文件中,我们会利用 Dag Wieers 的 mrepo 工具来达到这个目的。

  3. 新增额外的软件库。软件库一般是通过 /etc/yum.repos.d 目录内的 .repo 文件来直接管理。

启用 Yum

你需要以下来自 CentOS 4 的 RPM,他们收录在 http://mirror.centos.org/centos/

/!\ CentOS 3 内的 yum 版本并不拥有 CentOS4 版本内的所有依赖,因此你可以忽略不存在於 CentOS 3 上的组件

要安装这些组件,你必需先安装了一个提供 "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)会协助你引导这个程序。

#!/bin/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

创建一个 RHEL 镜像

如上面所说,你必须创建一个 RHEL 二进制 RPM 的镜像来让 yum 直接使用。让我们以安装 mrepo 作为起点。加入 RPMForge 软件库(见「软件库」)就是最简单的做法。接著从 RPMForge 安装 mrepo、createrepo、及 hardlink++。

  1. 创建你想用来存储镜像的目录。mkdir /var/mrepo/rhel4as-x86_64

  2. systemid 档从 /etc/sysconfig/rhn 复制到你的新目录内。cp /etc/sysconfig/rhn/systemid /var/mrepo/rhel4as-x86_64

  3. 修改所提供的 /etc/mrepo.conf 档来迎合你的环境。设安适当的目录、结构、及电邮地址。你可以继续注释 rhnlogin 这一行,因为它只供订阅频道时使用。由於你使用一个现有的 systemid,因此你多数不需口令,但如何有需要的话它会问你(例如:设置一个系统并未订阅的频道)。

  4. 接著,为你的发行版本在 /etc/mrepo.conf.d 内置立一个文件。下面的样例针对拥在 Extras 及 Fastrack 的 RHEL4。要知道其它频道的路径,请参阅 RHN 的网页。每个频道的「细节」页都有一个 Label 栏(在 SummaryDescription 后面)。这是你须要放在 rhns:/// 后的符串。

  5. 现在执行 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 更新或安全性修正出现。

{i} 除了从 RHN 下载更新外,mrepo 还有很多用处。要得知更多设置选项,请参阅 mrepo 的网页

/!\ 如果你使用非 RHEL 的机器(例如 CentOS)来执行 mrepo,你要留心以下的警告:

  1. /etc/sysconfig/rhn/sources 内须要有 up2date 的设置,这在 http://svn.rpmforge.net/svn/trunk/tools/mrepo/docs/redhat-network.txt 里有所提及 —— 你必须将含有 up2date default 的那一行解除注释。

设置软件库

到了这一步,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

zh/HowTos/PackageManagement/YumOnRHEL (last edited 2010-01-18 08:28:50 by TimothyLee)