[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

在 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 檔案來直接管理。

1. 啟用 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)會協助你啟動這個程序。

# 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++。

  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 的那一行解除註釋。

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


2023-09-11 07:23