本文介紹在Alibaba Cloud Linux 3系統中,使用docker-ce、epel等第三方DNF(YUM)源安裝軟體失敗的解決方案。
問題現象
在符合如下條件的Alibaba Cloud Linux 3系統的ECS執行個體中,執行dnf install docker-ce
命令安裝容器軟體包失敗,並出現如下報錯。
使用適配CentOS 8系統中的第三方DNF(YUM)源。
aliyun_3_x64_20G_alibase_20210425.vhd及之前的所有鏡像版本。
系統顯示報錯資訊類似如下。
Docker CE Stable - x86_64
Failed to download metadata for repo 'docker-ce-stable'
Error: Failed to download metadata for repo 'docker-ce-stable'
問題原因
第三方DNF源僅適配CentOS 8發行版,而在Alibaba Cloud Linux 3中,系統的$releasever
變數值與CentOS 8不同,導致DNF解析後的地址無效,進而導致下載RPM包失敗。
DNF安裝docker-ce時,首先會從系統中擷取版本號碼,即$releasever
變數值,然後替換掉相應源baseurl中對應的$releasever
變數值,之後DNF從替換後的baseurl中擷取相關資料。由於CentOS 8的$releasever
變數值為8,而Alibaba Cloud Linux 3系統的$releasever
變數值為3,因此解析後的baseurl並非預期地址,DNF便無法從這個錯誤的地址中安裝軟體包。
解決方案
請根據實際需求情況,選擇以下對應方案進行修複。
您可以參考方案一:手動修改步驟,通過手動修改
$releasever
變數值進行修複。您可以參考方案二:安裝外掛程式修改步驟,通過安裝dnf-plugin-releasever-adapter外掛程式進行修複。
本文以docker-ce源為例進行介紹,如果您使用的是其他DNF源,解決方案類似。
方案一:手動修改
遠程登入Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令,開啟
/etc/yum.repos.d/docker-ce.repo
設定檔。vim /etc/yum.repos.d/docker-ce.repo
按
i
鍵進入編輯模式,找到docker-ce.repo
檔案中所有存在enabled=1值的源,將源中baseurl
的$releasever
變數替換為8。按下
Esc
鍵後,輸入:wq
並按Enter
鍵以儲存關閉設定檔,重新進行安裝即可。
方案二:安裝外掛程式修改
通過安裝dnf-plugin-releasever-adapter外掛程式實現$releasever
的變數進行自動轉換,即將3轉換為8。
確認執行個體是否支援使用dnf-plugin-releasever-adapter外掛程式。
dnf-plugin-releasever-adapter外掛程式目前的版本及預設支援的第三方repo如下表所示:
外掛程式版本
預設支援的第三方repo
外掛程式的限制
新版本:1.0-2
舊版本:1.0-1.3
說明新版本外掛程式和舊版本外掛程式不相容,新版本的設定檔名稱為
releasever_adapter.conf
,舊版本為releasever-adapter.conf
。升級版本會刪除原來的設定檔。因此升級後,如果需要支援除docker-ce和epel之外的第三方源,需要重新按照步驟修改設定檔的include欄位,其他的保持不變。docker-ce.repo,epel.repo
您需要滿足以下條件,才可以使用該外掛程式:
作業系統需要是Alibaba Cloud Linux 3。
執行以下命令,確認系統中存在alinux3-plus的repo。
cat /etc/yum.repos.d/AliYun.repo |grep -A3 alinux3-plus
系統顯示類似如下,說明存在alinux3-plus的repo。
遠程登入Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令,安裝dnf-plugin-releasever-adapter外掛程式。
說明目前,外掛程式預設對docker-ce和epel源中的
$releasever
變數值做自動轉換。dnf install dnf-plugin-releasever-adapter --repo alinux3-plus
若無其他的DNF源需要轉換,安裝外掛程式後即可直接安裝軟體;若還有其他的DNF源需要轉換,請按照以下方式配置:
執行以下命令,進入
/etc/yum/pluginconf.d/
目錄。cd /etc/yum/pluginconf.d/
執行以下命令,編輯
releasever_adapter.conf
設定檔。vim releasever_adapter.conf
按
i
鍵切換至編輯模式,如果需要添加其他的DNF源,則需要將DNF源的.repo
檔案名稱添加在include欄位後面,並以逗號隔開。說明DNF源的
.repo
檔案一般在/etc/yum.repos.d/
目錄下查看。系統顯示類似如下。
[main] enabled=1 [releasevermapping] 2.1903 = 7 3 = 8 [reposlist] include=docker-ce.repo, epel.repo
說明檔案中參數的具體介紹如下所示:
[main]:此部分為外掛程式的主要控制部分,控制外掛程式的啟用與否,其中enabled=1表示啟用外掛程式,enabled=0表示停用外掛程式。
[releasevermapping]:此部分為待處理的
$releasever
的映射關係,其中2.1903映射為7,3映射為8。[repolist]:此部分為需要修改的源的列表,如果需要添加其他的源,則需要將
.repo
檔案的名字添加在include欄位後面,並以逗號隔開。
一般來說,一個
.repo
檔案中有多個可以使用的源,每個源都有一個獨立的名稱區分其他的源,一個系統中不能出現重複的名稱,例如:docker-ce.repo中有[docker-ce-stable]
和[docker-ce-stable-debuginfo]
等源。
修改完成後,按下
Esc
鍵,然後輸入:wq
並按斷行符號,儲存並關閉設定檔。執行如下命令,通過docker-ce、epel和您添加的源安裝docker-ce軟體。
dnf install docker-ce