[FrontPage] [TitleIndex] [WordIndex

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

如何在一台虛擬伺服器上安裝 yum

1. 但我已經擁有 yum,而且用的是 CentOS

很多 Linux 發行版本都採用 yum 的一個變種。所有 CentOS 的發佈都附上 yum 及一組相應的設定檔。某程度上這容讓你的系統能運用 CentOS 在世界各地的鏡像及更新系統日。有些下游的分叉損壞了些 yum 設定,導致它們的系統無法兼容。

基於下列種種原因,CentOS 的支援隊決意不會惡化一個本身壞的情況(一個損壞了的 yum)。

2. 我的 CentOS 安裝上沒有 yum

假若 yum 未被安裝或不能正常運作,你的系統不是 CentOS。如果你的安裝是「建基於」或「改裝自」CentOS,但 yum 並不存在,它其實不是真正的 CentOS。非開發者根本就沒可能在未安裝 yum 的情況下安裝 CentOS。

有數間 VPS(虛擬伺服器)的提供者、某些 CentOS 的下游分叉、及它們的管理工具(例如:OpenVZcPanelPleskwebminDirect AdminBlueQuartzAsteriskTrixboxElastix)似乎只會將 CentOS 的某部份安裝在它們的虛擬伺服器上。有些甚至將 yum 從系統中移除,或者更改 yum 的設定檔。常見的改動是將某些本地更改的套件「排除」於 yum 套件管理之外。 {{{ grep -ir exclud /etc/yum.* }}} 這個指令一般能列出被排除的套件。有些就在套件管理系統之外自行「管理」台機器。在[http://wiki.centos.org/AdditionalResources/OtherVoices 「其它聲音」]這一頁裡,你可以找到更多全部或局部基於 CentOS 的分叉版本。

他們如此做的原因並不清楚。或許他們想令阻止你取代他們的內核。或許他們這樣做是出於無知或懶惰。在 CentOS 的立場這樣做是考慮不周。yum 擁有保護特定套件不受更改的機制。或許他們不懂得閱讀 man yum 來查看 'exclude' 這個選項;又或許他們不想接聽支援電話,因此甘願銷售一套無法更新的系統。採用第二個政策,當新發現的漏洞由於他們而無法修補,進而導致系統被入侵,他們便可以向你收取重新安裝、或由備份還原的費用。

<!> 在你嘗試做任何事情之先:請停下來,並詢問你的 VPS 提供者為甚麼他們移除了 yum,以及你如何能夠在沒有 yum 的情況下保持系統在最新的狀態。請篇文章作了設些假設,如果除了內核之外還有其它套件需要受保護,盲目跟隨下面的建議或許會損壞你的系統!

3. 你是說我被騙及誤導?

對。一個真正的 CentOS 安裝擁有 CentOS 內核、CentOS centos-release 套件、CentOS yum 套件,而且 /etc/yum.repos.d/ 目錄的內容沒有經過增加或刪減[或許還會有個本地鏡站,或已設置但不啟用的附加軟件庫]。除了設定檔(見 man rpm),所有依賴性都被乎合,當你執行

$ sudo rpm -Va

這個指令除了顯示預期被修改的設定檔外便沒有其它輸出。(請參考 man rpm 來協助你閱讀這種清單,它包含了左邊細節列的解讀表。)

一個真正的 CentOS 系統亦可以在任何時候隨意進行更新。我們提及這個條件,因為安全性修正亦可能隨時出現。如果代管機架的供應商只提供 CentOS 4.X(當中 X 是一個數目字),而不是 CentOS 4,如此類推,這可能意味著有潛在的問題。CentOS 小組(以及上游發行版本的穩定小組)並不容許一個「停留」在不是最新、較舊的子版本,擁有正貨產品的身份。

一個測試 yum 是否提供預期輸出的快速方法是:

$ sudo yum grouplist \*

這樣做應該傳回 CentOS 4 及 CentOS 5 上所有可供安裝的套件群組清單。

irc.freenode.net 上的 #centos IRC 頻道裡的成員很多時會要求你進行這個測試,以及下面一些相關的測試:

$  lsb_release -a ; uname -a ; rpm -V yum centos-release ; ls /etc/yum.repos.d/ ; yum repolist all

這樣做會產生多行的輸出。完整的輸出(應該只有數行 —— 少於十,除非嚴重地出了錯)應該被放上 CentOS 剪貼桶,而你應該在頻道上通告內容的 URL。另外,有時一個快捷的分辨方法是利用:

$ uname -a

這裡所得的單行輸出可以直接貼在 #centos IRC 頻道上。在這兩種情況下,尋求這些資訊的目的是要快速地評估系統的狀況。

當被斷定所牽涉的不是一台 CentOS 安裝時,IRC 頻道上常客及「知情」成員便不會繼續提供支援或建議。他們不希望建議一個可能進一步損壞你的系統的方法,又或者以「填鴨式」教育那些不願學好系統管理的人們。有關代管機架供應商對系統所做的改動,及它與真正的 CentOS 環境之間的差異,頻道上的常客根本無法亦不可能知道。

假若你被騙,請要求你的供應商彌補他的過錯。你可以要求他們:

4. 安裝 yum

好啦、好啦 —— 我明白了 —— 我擁有的不是 CentOS。但我依然想要 yum,或者嘗試移除及維修一組損壞了的 yum 設定檔。

<!> 首先,請進行完整的備份並確定它們可被讀取。這個步驟可能會失敗。

接著,你必須有下列套件才能令 yum 運作 —— 它們都可以從任何一個 CentOS 鏡像下載:

你應該已經安裝了這個套件。你可以這樣檢查

rpm -q centos-release
centos-release-4-4.3.i386

如果它已經在你的系統上,請檢查 yum 的設定檔沒有被移走,而且存在於你的系統上:

ls -l /etc/yum.repos.d/

這個目錄應該只藏有這些檔案:CentOS-Base.repoCentOS-Media.repo。如果它們不在裡面,你應該在那裡建立一個 'attic' 的目錄,然後將現有的內容 'mv' 入 attic 中作備份,準備重裝所有 centos-release 套件:

rpm -Uvh --replacepkgs centos-release.*.rpm

如果你的系統沒有安裝 centos-release,你可以在上述指令去除 --replacepkgs。請建立 ./attic/ 備份目錄並將現有的任何檔案都移進裡面,這樣即使你覺得「太深奧」了,仍有一條回頭路。

接著你須要下列套件:

CentOS 4

(收錄於你取得 centos-release 套件的地方):

CentOS 5

(收錄於你取得 centos-release 套件的地方):

CentOS 6

(收錄於你取得 centos-release 套件的地方):

<!> 這是根據某些受影響人仕所提供的資料而初步為 CentOS 6 預備的列表(截至 2012 年 7 月 19 日)。還有其它套件可能被違漏了,也有可能上述套件已安裝在你的系統上。

將這些下載到一個獨立的目錄,並在這個目錄以下列指令安裝它們

rpm -Uvh *.rpm

如前,請將 /etc/yum.conf 備份,好讓你可以取消任何改動。

5. 確保你的內核不會被取替

現在我們考慮到你期望(運作中的)內核,舉例說是個專為 VPS 而設的內核,不會被 CentOS 的內核更新所取替,。

請在你喜歡的編輯器開啟 /etc/yum.conf,然後在 [main] 部份的結尾加入下面一行:

exclude=kernel*

這樣做會防止 yum 安裝以 kernel 字串開頭的套件,因此你的 VPS 內核便不用怕被 yum 所取替。

6. 還原 yum 只用原裝的 CentOS 軟件庫

<!> 有些系統管理員發現他們的 yum 設定檔內含有「自己施加」的改變,例如新增、啟用、或編輯了設定檔來應用非 CentOS 的軟件庫。這部份描述一個復原的方法。

你所需的「原裝」檔案都收錄在 centos-release 套件內。其中一個辦法就是以手動方式取得這個套件,然後將這些檔案復原到 /etc/yum.repos.d 這個目錄內。很明顯的,/etc/yum.conf 或其它檔案或許都曾經被修改,而一個類同的修復方法亦適用。

我們假設這個範例是一個 CentOS 4 發行,於是我們利用 wget 將適當的 centos-release rpm 取到 /tmp/unpack 內:

$ # …… 以一般用戶的身份
$ cd /tmp
$ mkdir unpack
$ wget http://mirror.centos.org/centos-4/4.6/os/i386/CentOS/RPMS/centos-release-4-4.4.i386.rpm
$ mkdir -p /tmp/unpack/var/lock/rpm/
$ # 在這個特殊情況下(一個「主目錄樹外」的 RPM --root),
$ # 使用 --nodeps 是沒有不妥的
$ sudo rpm -Uvh --root /tmp/unpack/ --nodeps centos-release*rpm
$ # …… 成為 root
$ su -
# cd /etc/yum.repos.d/
# mkdir attic
# mv *.repo attic/
# cp /tmp/unpack/etc/yum.repos.d/* .

這樣,你使再次有一個原裝的 CentOS yum 軟件庫設定。因為我們已經完成在「主目錄樹外」解壓設定檔,我們可以用:rm -rf /tmp/unpack 作善後清理。

7. 其它有用的連結

有時人們會在 IRC 頻道上為一台機器,它的代管機構聲稱安裝了 CentOS,但 yum 無法正常運作,亦找不到發行在網上鏡像的更新,即管已計算傳播的延誤在內。這一頁提供了一些捷徑讓頻道上的常客能辨認冒牌 CentOS 的特性。

Translation of revision 37


2023-09-11 07:23