本文介紹在Alibaba Cloud Linux 2系統的ECS執行個體中,使用docker-ce、epel等第三方YUM源安裝軟體失敗的解決方案。
問題現象
在符合如下條件的Alibaba Cloud Linux 2系統的ECS執行個體中,使用適配CentOS 7系統中的docker-ce、epel第三方YUM源,執行yum install docker-ce
命令安裝Docker軟體包失敗,並提示如下報錯。
鏡像:Alibaba Cloud Linux 2.1903 LTS 64位。
鏡像ID:aliyun_2_1903_x64_20G_alibase_20210325.vhd及之前所有版本。
Loaded plugins: fastestmirror, langpacks, update-motd
Loading mirror speeds from cached hostfile
* epel: mirror.sjtu.edu.cn
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
Downloading packages:
docker-ce-20.10.6-3.el7.x86_64 FAILED
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/Packages/docker-ce-20.10.6-3.el7.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
docker-ce-rootless-extras-20.1 FAILED
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/Packages/docker-ce-rootless-extras-20.10.6-3.el7.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
Error downloading packages:
3:docker-ce-20.10.6-3.el7.x86_64: [Errno 256] No more mirrors to try.
docker-ce-rootless-extras-20.10.6-3.el7.x86_64: [Errno 256] No more mirrors to try.
問題原因
第三方YUM源僅適配CentOS 7發行版,Alibaba Cloud Linux 2作業系統與CentOS 7作業系統的$releasever
值不同,導致YUM解析後的地址無效,從而下載容器軟體包失敗。
YUM安裝docker-ce軟體包時,首先會在系統中擷取版本號碼,即$releasever
值,然後替換相應YUM源中baseurl地址對應的$releasever
變數,YUM從替換後的baseurl地址中擷取相關資料。由於CentOS 7作業系統的$releasever
值為7,Alibaba Cloud Linux 2作業系統的$releasever
值為2.1903,因此解析後的baseurl地址並非預期地址,YUM便無法從這個錯誤的地址中擷取資料。
解決方案
請根據實際需求情況,選擇以下對應方案進行修複。
您可以參考方案一:手動修改步驟,通過手動修改
$releasever
變數值進行修複。您可以參考方案二:安裝外掛程式修改步驟,通過安裝yum-plugin-releasever-adapter外掛程式進行修複。
下列操作以docker-ce源為例進行舉例,如果您使用的是其他YUM源,解決方案類似。
方案一:手動修改
遠程登入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
變數修改為7,修改之後的內容如下所示。修改完成後,按下
Esc
鍵後,輸入:wq
並斷行符號以儲存並關閉設定檔,重新安裝軟體包即可。
方案二:安裝外掛程式修改
安裝yum-plugin-releasever-adapter外掛程式實現$releasever
值的自動轉換,即將2.1903轉換為7。
確認執行個體是否支援使用yum-plugin-releasever-adapter外掛程式。
yum-plugin-releasever-adapter外掛程式目前的版本及預設支援的第三方repo如下表所示:
外掛程式版本
預設支援的第三方repo
外掛程式的限制
1.0-1.3
docker-ce.repo,epel.repo
您需要滿足以下條件,才可以使用該外掛程式:
作業系統需要是Alibaba Cloud Linux 2。
執行以下命令,確認系統中存在plus的repo。
cat /etc/yum.repos.d/AliYun.repo |grep -A3 plus
系統顯示類似如下,說明存在plus的repo。
遠程登入Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令,安裝yum-plugin-releasever-adapter外掛程式,外掛程式預設對docker-ce、epel第三方YUM源中的
$releasever
值自動進行轉換。yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus
若無其他的YUM源需要轉換,安裝外掛程式後即可直接安裝軟體;若還有其他的YUM源需要轉換,請按照以下方式配置:
執行以下命令,進入指定目錄。
cd /etc/yum/pluginconf.d/
執行以下命令,編輯
releasever-adapter.conf
設定檔。如果需要添加其他的YUM源,則需要將YUM源的.repo
檔案名稱添加在includes欄位後面,並以逗號隔開。vim releasever-adapter.conf
系統顯示類似如下。
[main] enabled=1 hostfilepath=timedhosts.txt [releasevermapping] release_dict={'2.1903':'7', '3':'8'} [reposlist] includes=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]
等源。請務必保證新添加到
releasever-adapter.conf
設定檔中的源檔案名稱是源檔案內各個源名稱的首碼,例如:docker-ce.repo
源檔案中包含的docker-ce-stable
和docker-ce-stable-debuginfo
兩個源名稱,均以docker-ce
為首碼。
儲存設定檔,執行以下命令,即可通過docker-ce、epel第三方YUM源安裝軟體包。
yum install docker-ce