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