建立本地軟件庫
如果你曾經自行下載、建立、或重建 RPM 套件(如 zh-tw/TipsAndTricks/YumAndRPM 內「設置好以不是 root 的身份來重建套件」所解釋的),你或許會想將它們放在一個讓你區域網絡上的機器都能存取的地方。
註:如果只有單一個套件或一台用戶端系統,你不必費時建立一個正式的 NFS 匯出檔案系統及軟件庫 —— 你只需利用:
[root@server1 ~]# yum --nogpgcheck localinstall packagename.arch.rpm
或針對未簽署套件的一個更早期及更簡單的方法:
[root@server1 ~]# rpm -Uvh packagename.arch.rpm
利用 rpm 這個方法的好處,就是一個開發者可以漸進式地解決依賴性,而 rpm 會建議接著所需的套件,因此你更可以建立一個「剛剛好」的安裝方案:
[root@server1 ~]# rpm -Uvh package1.arch.rpm package2.arch.rpm ...
運用 yum 軟件庫還有其它好處,因為 yum 能判斷依賴性的套件並自動利用現存的軟件庫滿足需要。
以下的步驟會解釋如何建立一個 NFS 分享,當中藏有一個收錄自行建立/重建/下載套件的軟件庫,然後容讓其它相同發行版本的系統以統一的方式存取這些套件。這個做法亦可以用來開設 os、updates 等的本地鏡像,這樣做避免從外置的鏡像伺服器進行下載,及讓你可控制更新於測試後才在本地機器上出現。
- 這個範例會針對 i386 架構的 CentOS4。同一個方法亦適用於其它架構及版本。你亦可以用其它方式提供軟件庫的存取權,例如 HTTP 及/或 FTP 伺服器。有關指令行部份的常規: # 代表以 root 執行; $ 代表以用戶執行 —— 在範例中他名叫 builduser。
- 首先在伺服器上 —— 假設是 server1 —— 建立目錄結構:
[root@server1 ~]# mkdir -p /share/CentOS/4/local/i386/RPMS
- 如果 createrepo 未被安裝 —— 因為預設它不會被安裝 —— 請安裝它。
[root@server1 ~]# yum install createrepo
- 由 foo-1.2.3.4-1.el4.src.rpm 建立新一組套件(或者從可靠的來源下載套件)。
[builduser@server1 ~]$ rpmbuild --rebuild /path/to/srpm/foo-1.2.3.4-1.el4.src.rpm
這樣做便建立了(舉個例說)/home/builduser/rpmbuild/RPMS/foo-1.2.3.4-1.el4.i386.rpm /home/builduser/rpmbuild/RPMS/foo-devel-1.2.3.4-1.el4.i386.rpm /home/builduser/rpmbuild/RPMS/foo-docs-1.2.3.4-1.el4.i386.rpm
- 將檔案移至軟件庫並建立中繼資料:
[root@server1 ~]# mv /home/builduser/rpmbuild/RPMS/foo* /share/CentOS/4/local/i386/RPMS [root@server1 ~]# chown -R root.root /share/CentOS/4/local [root@server1 ~]# createrepo /share/CentOS/4/local/i386 [root@server1 ~]# chmod -R o-w+r /share/CentOS/4/local
- 註:當新套件被加進軟件庫時,請重覆第三及第四步。
- 建立 /etc/yum.repos.d/local.repo
警告:這個範例假設 yum-plugin-protectbase 插件(見 zh-tw/PackageManagement/Yum/ProtectBase)已被安裝,而你期望軟件庫預設是被啟動的、受到保護、及可取代核心套件。它亦假設你的套件未經 GPG 簽署。另一個更強勁的選擇就是採用 zh-tw/PackageManagement/Yum/Priorities.
[local] name=CentOS-$releasever - local packages for $basearch baseurl=file:///share/CentOS/$releasever/local/$basearch enabled=1 gpgcheck=0 protect=1
- 針對 HTTP 或 FTP 軟件庫,baseurl 這行必須作相應改動。
- 在伺服器上安裝套件來測試軟件庫。它們如果沒有用的話可以稍後移除。
[root@server1 ~]# yum install foo foo-devel foo-docs
- 透過 NFS 匯出目錄 —— 如果它並不在一個分享目錄上。(你亦可能需要安裝及啟動 NFS,及/或在初次使用前重新開機。這個步驟就留給各位同學作為一個練習。)將 IP 位址改至適合你的網絡。如果你希望分享能夠被某些授權的機器寫入,請不要用 "ro",但應用 "rw" 及處理 root_squash 的問題。
[root@server1 ~]# echo "/share 192.168.1.0/24(ro,async)' >>/etc/exports [root@server1 ~]# exportfs -r
- 以 root 的身份登入客戶端的機器(假設是 client1),然後設置 NFS 掛載及 yum 的設定檔。
- 註:
你或許需要 autofs 這個套件(yum install autofs)令下面的例子生效。另一個方法就是建立 /share 並透過 /etc/fstab 掛載 NFS 在 /share 上。這個範例假設 root 可以運用 ssh/scp。你需要一台支援本地主機名稱的 DNS 伺服器,或者設定了 IP 位址及主機名稱的 /etc/hosts。
[root@client1 ~]# scp server1:/etc/yum.repos.d/local.repo /etc/yum.repos.d/ [root@client1 ~]# ln -s /net/server1/share /share
- 註:
- 測試設置 —— 應該能看見軟件庫。
[root@client1 ~]# ls /share/CentOS/4/local
- 在客戶端安裝套件。
[root@client1 ~]# yum install foo foo-devel foo-docs
請按需要為額外客戶端重覆最後三個步驟。
這頁的英文版本由 PhilSchaffner 建立及維護。歡迎其他 Wiki 用戶作出更正、添加、或修改。
Translation of revision 13