如何修補位於已中斷連線環境內的 Linux 電腦

若您擁有位於已中斷連線環境內的 Linux 用戶端電腦,代理程式便無法運用 YUM 從網際網路下載 RPM 套件。 您需要改為進行下列步驟:

  • 設定並填入一個或多個包含整個可用 RPM 程式庫的本機「內部部署」存放庫
  • 指定您的用戶端電腦以查看正確的本機存放庫以取得缺少的 RPM,而非查看網際網路

以下資訊可作為設定及使用本機存放庫的一般原則。 如果您有特殊疑問或問題,請與您的 Linux 作業系統廠商聯絡。

如何設定本機存放庫

需求

您可以將任何支援的 Linux 伺服器電腦用作本機存放庫。 而唯一的需求是,其必須具備足夠的可用磁碟空間供容納完整的可用 RPM 套件資產。 網路上存在著眾多包含 RPM 套件的不同公共存放庫。 例如,有一個公共存放庫用於 RHEL 9 RPM,另有一個公共存放庫用於 RHEL 8 RPM 等。 一般而言,您的本機存放庫應至少具備 100GB 的磁碟空間,供即將下載的各個公共存放庫使用。

您有可能需要用到兩部或以上 Linux 伺服器電腦來完成此程序。

  • 情況 1: 在此情況下,您當作存放庫使用的電腦可以下載該存放庫電腦上所使用的相同發行版本的 RPM。 不過,您將需要另一部電腦下載組織內所用各個發行的各個不同版本的 RPM。
  • 例如,若貴組織擁有 RHEL 9 x64、RHEL 8 x64 和 CentOS 7 x64 的用戶端電腦,您可以將 RHEL 9 x64 伺服器電腦當作本機存放庫使用,並將其用於下載所有適用於 RHEL 9 伺服器、工作站與桌上型電腦等的 RPM。 然後您可以單獨使用其他的 RHEL 8 x64 和 CentOS 7 x64 電腦來下載所有適用於 RHEL 8 和 CentOS 伺服器、工作站與桌上型電腦等的 RPM。 接著再將這些 RPM 傳送至本機存放庫電腦。

  • 情況 2: 您可以選擇維護三個不同的本機存放庫: 一個供所有 RHEL 9 RPM 使用,另一個供所有 RHEL 8 RPM 使用,至於第三個則供所有 CentOS 7 RPM 使用。 一個供所有 RHEL 7 RPM 使用,另一個供所有 RHEL 6 RPM 使用,至於第三個則供所有 CentOS 7 RPM 使用。 此情況需要三部專用電腦做為存放庫,但這樣可省去額外的傳輸步驟與維護共同存放庫的麻煩。

組態程序

由於要將可用 RPM 套件的完整程式庫下載至本機存放庫可能需花費數小時,因此建議分為兩個不同階段來執行組態程序。 階段 1 為下載所有可用的 RPM,這應該在接近下班時間時執行,這樣下載程序可以連夜進行。 而階段 2 可以在隔天時進行。

您必須具備根權限才能執行下列命令。

階段 1

  1. 建立您要用作存放庫的目錄。
    例如,下列命令會建立將用於包含 Red Hat 9 RPM 的目錄。
  2. mkdir –p /repos/redhat/9

  3. 顯示可供您用於填入本機存放庫的公共存放庫清單。
    您可以使用的公共存放庫是以您的 RHEL 訂閱為基礎。
  4. yum repolist

  5. 使用 YUM,安裝包含 reposync 的套件。
  6. yum install yum-utils

  7. 從您所選擇的公共存放庫下載所有可用的套件。
    例如,下列命令會從 rhel-9-for-x86_64-baseos-rpms 公共存放庫下載 RPM。
  8. reposync –-gpgcheck –l –-repoid=rhel-9-for-x86_64-baseos-rpms –-download_path=/repos/redhat/9

    下載程序將會花費較長時間,所以請做好相應計畫因應。 -gpgcheck 選項會移除在下載過程中無法通過簽章檢查的套件。

  9. 針對各個所需公共存放庫變體重複執行步驟 3。
  10. 例如,若貴組織在 Intel 和 ARM 上都包含 RHEL 9,便需要從這兩個相關的公共存放庫下載 RPM。 您可能需要費時多日進行所有必要的下載。

    請勿嘗試下載適用於不同 Red Hat 或 CentOS 版本的 RPM。 例如,RHEL 9 電腦無法用於下載適用於 RHEL 8 x64 電腦或 RHEL 7 x64 電腦的 RPM。

階段 2

此處描述的程序會建立一個可透過 HTTP 存取的存放庫。 還有其他可用於建立存放庫的方式。 請隨意使用您最為熟悉的方式。

  1. 使用 YUM,安裝可供建立存放庫的程式。
  2. yum install createrepo

  3. 建立存放庫。
  4. createrepo /repos/redhat/9

    若您遇到一則錯誤,說明其無法開啟 *.rpm 檔案,請確認仍有可用的磁碟空間。 若可用空間並不是問題所在,請再次執行下載步驟 (階段 1 的步驟 3)。 有可能是在初次進行下載時,遺漏了部分檔案。

  5. 安裝 Apache Web 服務。
    這將能提供使用 HTTP 通訊協定存取本機存放庫的功能。
  6. yum install httpd

  7. 開啟本機防火牆的連接埠 80。
    這是因為我們將存放庫設定為使用 HTTP。 HTTPS 也是一種選擇,不過在此選用 HTTP 的原因只是為了簡化範例。
  8. 編輯 httpd.conf 檔案,並新增下列任何目前缺少的條目。
  9. vi /etc/httpd/conf/httpd.conf

     

    ServerAdmin root@localhost

    DocumentRoot /var/www/html

    ServerName <machinename>

  10. 將新的存放庫連結至預設網站位置。
  11. ln -s /repos/redhat /var/www/html/redhat

  12. 確認 Apache Web 服務的語法。
  13. httpd -t

  14. 啟動 Apache Web 服務。
  15. systemctl start httpd

    您可能需要在伺服器每次重新啟動時重複此命令。 您可以使用下列命令在伺服器重新啟動時自動啟動該服務:
    systemctl enable httpd

  16. 取得 updateinfo.xml.gz ZIP 檔案。
  17. 步驟 9 - 13 僅適用於 Red Hat 電腦。

    yum list-sec

  18. 從預設位置將 *updateinfo.xml.gz 檔案複製到 /repodata 資料夾。
  19. cp /var/cache/yum/x86_64/9rhServer/rhel-9-for-x86_64-baseos-rpms/*updateinfo.xml.gz /repos/redhat/9/repodata/

  20. 解壓縮 *updateinfo.xml.gz 檔案。
  21. gzip –d /repos/redhat/9/repodata/*updateinfo.xml.gz

  22. 重新命名 *updateinfo.xml 檔案,將不必要的前置字元刪除。
  23. mv /repos/redhat/9/repodata/*updateinfo.xml /repos/redhat/9/repodata/updateinfo.xml

  24. 修改存放庫以確認其包含 updateinfo.xml 檔案。
  25. modifyrepo /repos/redhat/9/repodata/updateinfo.xml /repos/redhat/9/repodata/

  26. (僅適用於已啟用 SELinux 的電腦) 為 www/html/redhat 提供存取 /repos/redhat 的權限。
  27. cd /var/www/html

    chcon -R -t httpd_sys_content_t redhat/

重複執行其他 Linux 版本和分發的組態程序

您將需要為貴組織內所支援 Linux 各個發行的各個不同版本重複執行部分或全部的組態程序。 例如,您必須使用 RHEL 9 電腦下載 RHEL 9 RPM、使用 CentOS 7 x64 電腦下載 CentOS 7 x64 RPM、使用 RHEL 8 x64 電腦下載 RHEL 8 x64 RPM,依此類推。 依各個 Linux 唯一版本的需要更改命令。

情況 1: 您目前採用單一存放庫供所有不同 Linux 版本使用

假設您目前使用 Red Hat 9 電腦做為存放庫,以下是您需要重複進行的作業,這樣才能擷取 Red Hat 8 RPM:

  1. 在 Red Hat 9 存放庫電腦上,重複進行階段 1,步驟 1,但需指定 /repos/redhat/8。
  2. 在 Red Hat 8 電腦上,進行階段 1,步驟 3 和 4。
    在步驟 3 中,由於 repos/redhat/9 目前將不會存在於 Red Hat 8 電腦上,所以請將 -download_path 選項移除並將其指向預設位置或指定不同位置。
  3. 在下載 RPM 作業完成時,將 RPM 傳送至您本機存放庫上的 repos/redhat/8 目錄。
    完成後,就可在單一電腦上具備單一存放庫,其中包含所有支援版本 Red Hat 的 RPM 套件。

情況 2: 您目前單獨維護多個存放庫供各個不同 Linux 版本使用

為貴組織所支援的各個不同 Linux 版本重複執行整個組態程序。

將您的 Linux 用戶端電腦指向本機存放庫

您必須修改每個 Linux 用戶端上的 YUM,這樣它才會在本機存放庫內搜尋 RPM,而不是在網際網路上搜尋。

若您選擇為 Linux 各個版本維護不同的本機存放庫,請確保讓各個用戶端指向正確的本機存放庫。

  1. 登入用戶端電腦。
  2. 切換至列出存放庫所在位置的目錄。
  3. cd /etc/yum.repos.d

  4. 建立名為 local.repo 的檔案,接著將其設定為指向新的本機存放庫。
  5. nano local.repo

    [mylocalrepo]

    name=Local Rhel9 Server Repo

    baseurl=http://es-nxt-rhel9-repo.example.com/redhat/9

    gpgcheck=0

  6. 指定在本機存放庫缺少 RPM 的情況下,用戶端不應試圖在網際網路 (中斷用戶端電腦的連線) 上尋找。
  7. ls

    vi any file other than local.repo (example redhat.repo)

    Look for your repoid (example rhel-9-for-x86_64-baseos-rpms)

    Set enabled = 0

存放庫的定期維護

您將需要讓本機存放庫與公共存放庫定期重新同步,藉此維持其最新狀態。 執行下列命令時,僅新的 RPM 套件會下載至本機存放庫。

reposync –gpgcheck –l –repoid=rhel-9-for-x86_64-baseos-rpms –download_path=/repos/redhat/9

createrepo --update /repos/redhat/9

氣隙網路

若貴組織設有「氣隙」網路,即代表不允許用戶端電腦連接至任何具備網際網路連線的電腦,您必須設定並維護第二個存放庫。 下圖已說明此點。

在此情況中,已依上述說明設定及配置連線存放庫後,您將會在已中斷連線電腦上設定第二個存放庫,並手動使用卸除式媒體從連線存放庫將檔案傳輸至已中斷連線存放庫。 接著應將您的 Linux 用戶端電腦設定為指向已中斷連線存放庫,而非指向連線存放庫。

相關資訊

https://access.redhat.com/solutions/23016