備註:
- 本教學課程隨附於 Oracle 提供的免費實驗室環境。
- 此範例使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值替代成雲端環境的特定值。
使用容器建立 DNF 或 ULN 儲存區域鏡像
Oracle 客戶服務部免責聲明
對於下列指示提供的步驟順序,Oracle 不會提供技術支援:這些步驟指 Oracle 提供的開放原始碼專案。本教學課程提供選擇性的說明,方便您處理。
建立 Oracle Linux 軟體發佈鏡像時,Oracle 支援的方法,是在執行 Oracle Linux 的系統上使用 dnf reposync
指令。如需詳細資訊,請參閱 https://docs.oracle.com/en/operating-systems/oracle-linux/software-management/sfw-mgmt-UseSoftwareDistributionMirrors.html#use-mirrors。
簡介
Oracle Linux 8 包含 DNF 的完整功能重新同步工具,讓您可以在任何 yum 儲存區域建立鏡像。對於大多數系統沒有網際網路直接存取的環境,可以將此功能延伸至鏡射 ULN 通道。透過建立組織使用之 yum 儲存區域和 ULN 通道的 yum 鏡像,您可以降低網路負荷並改善整個環境的 yum 效能。如果您正在設定環境的其他服務 (例如離線 Ksplice),Yum 鏡像也會很有用。
在舊版 Oracle Linux 中,納入可用來執行鏡像服務的 uln-yum-mirror
套裝軟體,但這並不特別有效,且相對而言只是設定。
ULN 或 yum 鏡像服務是一組容器中最佳執行的一般服務範例。透過使用 Docker 或 Podman,您可以快速輕鬆地部署使用 oraclelinux:8-slim
映像檔的容器,處理組織內使用的 yum 儲存區域或 ULN 通道排定同步。您也可以部署一個容器,負責處理用戶端系統可存取之 Web 服務內鏡像儲存庫的佈建。
openource GitHub 專案提供 Dockerfile、命令檔與指示,從 https://github.com/Djelibeybi/oraclelinux-reposync 設定這類服務。
目標
在本實驗室中,您將瞭解:
- 安裝容器工具
- 使用所需的軟體建置容器
- 在容器內使用 reposync 建立鏡像服務
必要條件
- 已安裝 Oracle Linux 7 或 Oracle Linux 8 的系統,並且能存取網際網路。
- 本教學課程假設您使用的是 Oracle Linux 8,因此套裝軟體安裝指令使用 dnf,如果使用 Oracle Linux 7,請將這些指令說明替換為 yum。
- 本教學課程將引導我們使用 Podman 和 Buildah 來處理容器的建立和執行,但如果您使用 Oracle Linux 7,則您也可以使用 Docker 執行這些作業。
安裝必要的套裝程式
如果尚未連線,請開啟終端機,透過 ssh 連線到 ol8-server 系統:
ssh oracle@<ip_address_of_ol8-server>
安裝 git,讓您複製容器重新同步儲存區域:
sudo dnf install -y git
安裝 podman 和相關公用程式:
sudo dnf module install -y container-tools:ol8
注意:如果您使用 Oracle Linux 7,則組建和希望套裝程式只能透過不支援的 ESP 儲存區域使用。因此,您可以選擇使用 Docker 來建置和執行容器映像檔。如需瞭解使用 Docker 的詳細資訊,請參閱 openource 專案 README.md。
複製容器儲存區域
複製儲存區域:
git clone https://github.com/Djelibeybi/oraclelinux-reposync.git
cd oraclelinux-reposync
建立映像檔
建立儲存區域中所含的兩個容器映像檔:
buildah build-using-dockerfile -t ol-repo-sync .
buildah build-using-dockerfile -t ol-repo-web -f Dockerfile.nginx .
確認組建:
podman images
建立額外的儲存體目錄
必須建立兩個額外的目錄,容器重新同步服務才能正常運作:
rhn
:如果您想鏡射 ULN 通道,則必須建立一個目錄來儲存 ULN 註冊資訊,讓它在後續的容器重新啟動中持續。您可以在每次執行此目錄時,將此目錄對應至您的容器中,讓它能夠存取 ULN 註冊資料。repo
:必須建立一個目錄來儲存所有從 ULN 或 yum 伺服器鏡射的套裝軟體和描述資料。代管此目錄的檔案系統需要有足夠的磁碟空間,才能滿足您要鏡像的所有儲存庫和通道。您可以選擇將專用儲存體掛載至此位置,或視需要對應至替代位置。
這些目錄可以位於任何位置,但建議您將它們和此容器的組態資訊一起建立。例如:
mkdir rhn repo
設定重新同步的組態變數
ol-repo-sync 影像取決於儲存在配置目錄中不同配置檔中的配置資訊。
config/uln.conf
:此檔案儲存 ULN 存取證明資料 (例如 Oracle SSO 證明資料和作用中的 CSI)。必須設定檔案權限以限制存取。如果您不想從 ULN 鏡射,就不需要此檔案。config/repo-map.json
:此檔案用來建構儲存區域 URL,以及識別如何存取不同的 ULN 通道和 yum 儲存區域。您不應該編輯這個檔案,但是可以參考它來查看可用於鏡像的通道名稱。請注意,可能需要不時更新此檔案,以因應新的 ULN 通道。此外,此檔案中的部分項目只能在 ULN 中使用,包括包含base
、patch
、ksplice
、JavaSE
以及Exadata
等字的所有回應。這些儲存區域也可能會進一步限制為特定的 CSI。config/repos.json
:此檔案用於識別應該鏡射的 ULN 通道或 yum 儲存區域。它分成兩個部分:第一個列出 ULN 通道和第二個列出 yum 儲存區域。如果您只想要鏡射 yum 儲存區域,請完全移除 ULN 區段。ULN 區段應該僅包含 https://yum.oracle.com 上無法使用作為儲存區域的通道,因為這樣可以較有效率地直接從 yum 伺服器鏡射。Oracle Linux yum 伺服器也提供大部分的通道,因此請盡可能使用此區段列出您的通道。如果您新增項目至 ULN 區段,則必須有 ULN 帳戶,且必須使用 ULN 註冊容器影像。
注意:需要 Oracle Linux 支援訂閱與 ULN 同步。如果您沒有支援訂閱,請從
config/repos.json
完全移除uln
陣列。
若要獲得最佳同步效能,請儘可能使用 yum 來源取代 uln,因為 yum.oracle.com 利用 Akamai CDN 來利用 Akamai CDN,而且下載速度幾乎永遠比 ULN 更高。
-
(選擇性) 若您擁有作用中的 Oracle Linux 支援訂閱:
cp config/uln.sample.conf config/uln.conf
將預留位置換成 Oracle SSO 證明資料和作用中的 CSI。若要保護此檔案的內容,請執行:
chmod 400 config/uln.conf
這可防止您以外的任何人存取。
-
執行下列指令建立
config/repo-map.json
檔案:podman run --rm -it \ --name ol-repo-sync \ -v ${PWD}/config:/config:z \ -v ${PWD}/repo:/repo:z \ ol-repo-sync update
如果想要使用最新的儲存區域組態更新
config/repo-map.json
檔案,可以隨時重新執行此命令。當發行新的更新或主要版本時,至少應該執行該指令,以便能同步新的儲存區域。 -
複製
repos.json
cp config/repos.sample.json config/repos.json
新增所有您要同步的儲存區域至 uln 或 yum 陣列。
範例:
以下是將 ULN 中的
Oracle Linux 8 Ksplice aware userspace
套裝程式與 yum.oracle.com 中的Oracle Linux Automation Manager
套裝程式同步的命令檔。如果您在這個實驗室期間沒有 ULN 帳戶,請移除整個 uln 區塊。echo '{ "uln": [ "ol8_x86_64_userspace_ksplice", "ol8_aarch64_userspace_ksplice" ], "yum": [ "ol8_x86_64_automation" ] }' | tee config/repos.json
(選擇性) 使用 ULN 註冊容器
如果您不想從 ULN 鏡射任何通道,就不需要註冊容器。如果您已將 ULN 證明資料輸入 ULN 組態檔,而且已經建立一個目錄來包含 ULN 註冊資料,而且您至少已在儲存區域組態檔中設定一個 ULN 通道,就必須註冊容器。
註冊可以透過執行:
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn:z \
-v ${PWD}/config:/config:z \
-v ${PWD}/repo:/repo:z \
ol-repo-sync register
注意:* 這將需要幾分鐘的時間,不再輸出至終端機,但應在完成後返回命令提示字元。目前工作目錄中的
rhn
和config
目錄會對應至容器中。只要rhn
目錄對應至您執行之每個後續容器的/etc/sysconfig/rhn
,您只需要為該容器執行一次註冊。
植入您的鏡像儲存庫
若要在鏡像儲存庫中配置配置的儲存庫及通道套裝軟體,請執行以下作業:
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn \
-v ${PWD}/config:/config \
-v ${PWD}/repo:/repo:z \
ol-repo-sync
容器會自動新增和訂閱 config/repos.json
中設定的每個通道,並建立 Oracle Linux yum 伺服器所使用的相同階層。
這個指令可以排定使用 cronjob 或 systemd 計時器在週期性排程上執行。
注意:隨著套裝軟體均已下載到本機,此步驟需要一些時間才能完成。
為用戶端系統提供本機 yum 鏡像服務
可使用 ol-repo-web
容器映像檔供 yum 儲存區域供您的用戶端系統使用。此容器可以永久執行,並且可以設定為在開機時啟動:
podman run --detach --name yum-server \
-p 8080:80 \
-v ${PWD}/repo:/var/www/html/repo:ro \
ol-repo-web
注意:儲存區域和通道更新時,儲存區域目錄會對應至含唯讀權限的 yum 伺服器容器,讓容器在更新鏡像的儲存區域和通道時繼續執行並提供服務給從屬端。
驗證本機 yum 鏡像
使用下列內容建立新的 dnf 儲存區域項目:
echo '[ol_automation_http_repo]
name=OL_automation_x86_64_HTTP
baseurl="http://localhost:8080/repo/OracleLinux/OL8/automation/$basearch/"
gpgcheck=0' | sudo tee /etc/yum.repo.d/ol-local.repo
注意:若顯示為外部系統,請將上面的
baseurl
變更為執行容器之系統的 IP 位址或主機名稱。
同時開啟防火牆以允許存取連接埠 8080。sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
然後確認新項目的運作方式:
dnf repolist
dnf info ansible
其他相關資訊
請參閱其他相關資源:
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或是存取更多免費學習內容至 Oracle Learning YouTube 通道。此外,瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請瀏覽 Oracle Help Center。
Use a Container to Create a DNF or ULN Repo Mirror
F54937-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.