解決 CentOS 7 官方 yum 倉庫無法使用的最佳實踐

来源:https://www.cnblogs.com/zengzuo613/p/18292809
-Advertisement-
Play Games

光貓在家裡只能擔當撥號上網的角色嗎?不,稍加改造就是一臺NAS! 在這裡,使用natmap映射IPV4,使用nginx+njs+vList5打造線上文件預覽+管理,使用nginx+davext實現遠程文件管理 甚至還可以使用aria2下載磁力做下載器,使用clash讓光貓變成真的貓!只要你敢想,光貓... ...


一、背景介紹

2024 年 7 月 1 日,在編譯基於 CentOS 7.6.1810 鏡像的 Dockerfile 過程中,執行 yum install 指令時,遇到了錯誤:Could not resolve host: mirrorlist.centos.org; Unknown error

特別指出: 編譯 Dockerfile 並執行其中的 yum install 指令時,所使用的是正在編譯的鏡像中的 yum 倉庫,非編譯機上的。

二、原因分析

2024 年 7 月 1 日 官方停止維護 CentOS 7。該系統內置的 yum.repo 所使用的功能變數名稱 mirrorlist.centos.org 已不再提供 A 記錄。如下所示:

root@93b1bbdc2e60:/home/# dig mirrorlist.centos.org +trace

; <<>> DiG 9.16.1-Ubuntu <<>> mirrorlist.centos.org +trace
;; global options: +cmd
.                       0       IN      NS      c.root-servers.net.
.                       0       IN      NS      i.root-servers.net.

## 省略:根和頂級功能變數名稱伺服器的相關解析

centos.org.             3600    IN      NS      ns1.centos.org.
centos.org.             3600    IN      NS      ns2.centos.org.
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A GDTREA8KMJ2RNEQEN4M2OGJ26KFSUKJ7 NS SOA RRSIG DNSKEY NSEC3PARAM
qeunu2n7u9cespp9113b9aougs8bsje9.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A QEUO6270NIE81LB4QN59HMMDKF8L01MV NS DS RRSIG
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN RRSIG NSEC3 8 2 3600 20240730022208 20240709012208 36783 org. SJRvhqxd780LYLBKJvh+HK1XHVN4Jm3FReq030r3Aewe0Sus1xpbl7L9 xOJOudja1lZoBdgfVXFBQT4Ev9M6XSG6c9qYJvDT9Q9U8PQyG+KDGGTy zTNgK1QFgFM7Sq1DPiqeUc5Jc/mmD7H26TV2qrCem4Fz8/TYYlK9CirT VKU=
qeunu2n7u9cespp9113b9aougs8bsje9.org. 3600 IN RRSIG NSEC3 8 2 3600 20240722152150 20240701142150 36783 org. wq21TFtc5dCtXghEDYN+dJLnZUiJzzcoVLIWQ2aA5FCIV/pHKfUPg7Mn jXjOGMK5Xx8lu7gBjdKvu7yQaVrlEJXC0wo8QqzlrB/yL6EcBhypBfNk b+vH7RCfrfOsIqwMKCv82wF91/S4/3uVijxeD2F+nEjvPLJheRQcxQR1 r/g=
;; Received 619 bytes from 199.249.120.1#53(b2.org.afilias-nst.org) in 179 ms

centos.org.             3600    IN      SOA     ns1.centos.org. hostmaster.centos.org. 2024070401 28800 7200 2400000 3600
;; Received 129 bytes from 38.145.60.38#53(ns2.centos.org) in 269 ms

dig 命令詳解,可參閱我的文章:DNS 簡介及 dig 命令詳解

三、解決方案

1. 最佳方案 - 更新及啟用 CentOS-Vault.repo 存檔倉庫

(1)背景介紹

CentOS-Vault.repo 是 CentOS 發行版中自帶的一個 YUM 軟體倉庫。它定義了一系列舊版本的軟體包和更新,這些軟體包和更新不再由 CentOS 項目的主要倉庫維護。當 CentOS 發佈新的版本(例如,從 CentOS 7.4 升級到 CentOS 7.5)時,舊版本的軟體包通常會被移動到 Vault 倉庫中。vault.centos.org 是 CentOS-Vault.repo 關聯的倉庫站點,主要功能包括:

  1. 保存舊版本的 CentOS 系統包:當 CentOS 發佈新的主版本或更新時,舊版本的 ISO 映像文件、軟體包和源代碼會被移動到這個存檔站點。

  2. 保存歷史軟體包:用戶可以瀏覽和下載舊版本 CentOS 中的軟體包,這對於運行舊軟體或維護遺留系統可能非常有用。

因此,啟用 CentOS-Vault.repo 並將倉庫站點配置為 vault.centos.org 是 CentOS 內置的處理預案及最佳方案。

(2)配置操作

在 CentOS-Vault.repo 添加如下配置,以啟用 CentOS 7 的存檔倉庫,添加配置如下:

# 文件路徑 /etc/yum.repos.d/CentOS-Vault.repo
# Vault
[Vault-base]
name=Vault - CentOS-$releasever - Base
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[Vault-updates]
name=Vault - CentOS-$releasever - Updates
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[Vault-extras]
name=Vault - CentOS-$releasever - Extras
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

使用 enabled=0 禁用 CentOS-Base.repo 中的所有倉庫,修改後配置如下:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# 下同

特別說明: CentOS 7 各子版本中,$releasever 值都為 7。具體原因請看:releaseve 變數詳解

清除 YUM 緩存,如有需要可再生成新的緩存

yum clean all ; yum makecache

(3)驗證方法

首先,使用 yum repolist 驗證可用倉庫,結果如下:

[root@93b1bbdc2e60 /]# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
repo id                                                                  repo name                                                                    status
!Vault-base/7/x86_64                                                     Vault - CentOS-7 - Base                                                      10,072
!Vault-extras/7/x86_64                                                   Vault - CentOS-7 - Extras                                                       526
!Vault-updates/7/x86_64                                                  Vault - CentOS-7 - Updates                                                    6,173
repolist: 16,771

驗證結果說明:

(1)repolist: 16,771 表示當前所有已啟用的倉庫中,總共有 16,771 個可用的軟體包,各倉庫的 status 表示其倉庫可用包的數量。

(2)repo id 添加 !首碼表示該倉庫的元數據已經被成功下載並緩存到本地(執行了yum makecache)。這個標記意味著 YUM 已經有了這個倉庫的所有必要信息,可以進行包的安裝、更新和依賴性解析等操作。

其次,要求安裝包正常,如執行 yum install lrzsz -y 正常。

2. 臨時方案一 - 更新 CentOS 倉庫配置

(1)配置操作

啟用 *.repo 中的 baseurl,註釋 mirrorlist,將 baseurl 倉庫地址替換為 vault.centos.org 存檔站點。具體操作如下:

sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo
sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo

清除 YUM 緩存,如有需要可再生成新的緩存

yum clean all ; yum makecache

(2)驗證方法

最佳方案-更新及啟用 CentOS-Vault.repo 存檔倉庫 ->(3) 驗證方法 。

3. 臨時方案二 - 基礎倉庫替換為阿裡雲倉庫

將 CentOS 7 基礎倉庫修改為阿裡雲倉庫,具體操作如下:

(1)首先,備份 CentOS 7 基礎倉庫配置文件

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

(2)然後,下載阿裡雲倉庫配置文件,並替換系統內置基礎倉庫(CentOS-Base.repo)配置文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-7.repo

(3)清除 YUM 緩存,如有需要可再生成新的緩存

yum clean all ; yum makecache

(4)驗證方法

最佳方案-更新及啟用 CentOS-Vault.repo 存檔倉庫 ->(3) 驗證方法 。

四、背景知識

1. 簡介 CentOS 7 內置的各類倉庫

CentOS-Base.repo:這是 CentOS 的基礎倉庫,包含了大部分用戶安裝軟體時需要的包。

CentOS-CR.repo:CR 倉庫包含了新的 CentOS 點版本發佈後,下一個版本在發佈前的一些新的更新和改進。

CentOS-Debuginfo.repo:這個倉庫包含了用於調試的包,一般用戶不會使用到。

CentOS-fasttrack.repo:FastTrack 倉庫包含了一些新的,可能不完全穩定的包。這些包是為了提供一些新功能而提前發佈的。

CentOS-Media.repo:這個倉庫是用於從 CD 或者 DVD 安裝包的。

CentOS-Sources.repo:這個倉庫包含了一些軟體的源碼包。

CentOS-Vault.repo:Vault 倉庫包含了舊的,不再被維護的版本的包。

預設情況下,僅啟用 CentOS-Base.repo 中的 base、updates 和 extras 倉庫,可以通過 yum repolist 查看

2. *.repo 文件中各變數說明

在 repo 文件中,$releasever$basearch$infra 是預定義的變數,在解析 repo 文件時被替換為具體的值。

(1)$releasever:代表你的系統版本。

[root@774ea9a9b006 yum.repos.d]# rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)
7

(2)$basearch:代表你的系統架構。

[root@774ea9a9b006 yum.repos.d]# arch
x86_64
# 或
[root@774ea9a9b006 yum.repos.d]# uname -i
x86_64

(3)$infra:代表你的系統基礎架構,如虛擬機或物理機。這個變數通常在 /etc/yum/vars/infra 文件中定義,但並非所有系統都有這個文件。你可以通過查看這個文件獲取,如果文件不存在,那麼 $infra 可能會被替換為預設值或空字元串。

[root@774ea9a9b006 yum.repos.d]# cat /etc/yum/vars/infra
container

3. $releaseve 變數詳解

$releasever 是 CentOS 中的一個變數,它的值來自 /etc/yum.conf 文件中的 distroverpkg 參數。預設情況下,distroverpkg 的值是 centos-release,這是一個包含有關 CentOS 發行版的信息的包。

當你運行 yum 命令時,yum 會查找 distroverpkg 包並從中提取發行版號。在 CentOS 7 中,centos-release 包的版本號是 7.x.y,但 yum 只提取主版本號,也就是 7,因此 $releasever 的值是 7

這是因為 CentOS 的軟體源是按主版本號組織的,所有 7.x.y 的版本都使用相同的軟體源,所以 $releasever 只需要主版本號。

4. *.repo 配置文件中的參數 mirrorlist 與 baseurl 的區別

在 CentOS 的 YUM 倉庫配置文件中,mirrorlistbaseurl 是兩個常見的參數,它們用於指定軟體包倉庫的位置。以下是它們的區別:

(1)mirrorlist

定義mirrorlist 參數指定了一個 URL,該 URL 返回一個包含多個倉庫站點的列表。

用途:YUM 客戶端會從這個列表中選擇一個可用、合適的倉庫站點進行連接和下載軟體包。

優點:提供了更高的可用性、高速度和負載均衡的倉庫站點,如果一個倉庫站點不可用,YUM 可以自動切換到另一個倉庫站點。

示例

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

(2)baseurl

定義baseurl 參數直接指定了一個單一的倉庫站點。

用途:YUM 客戶端會直接連接到這個指定的 URL 進行軟體包的下載。

優點:配置簡單,適用於有特定需求的場景,比如內部私有倉庫。

示例

baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

(3)總結

mirrorlist 提供了一個鏡像列表,YUM 會自動選擇一個可用的倉庫站點進行包的下載,適用於希望自動負載均衡、高性能和高可用性的場景。

baseurl 直接指定了一個固定的倉庫站點,適用於需要特定倉庫的場景。

五、引文

(1)mirrorlist.centos.org no longer resolve?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 本隨筆是非常菜的菜雞寫的。如有問題請及時提出。 可以聯繫:[email protected] GitHhub:https://github.com/WindDevil (目前啥也沒有 設計方法 瞭解了特權級機制,實際上如果要設計一個應用程式就需要保證它符合U模式的要求,不要去訪問S模式下的 ...
  • 1.字元集 在電腦科學中,信息的存儲和處理都是基於二進位數的,這是因為二進位數在電腦硬體層面上實現起來最為簡單和高效。二進位數由兩個基本元素組成:0和1,這兩個元素可以通過電子器件(如晶體管)的開關狀態來輕鬆表示。而我們在屏幕上看到的數字、英文、標點符號、漢字等字元是二進位數轉換之後的結果。按照 ...
  • ArchLinux Vmware安裝指北 在本文開始之前,首先允許我提前聲明一點,Arch Linux的安裝並不算難,但是絕對也算不上簡單,中間的安裝可能會遇到很多問題,本篇文章不能保證完全貼合你的真實機器環境,但是我會在我安裝過程中遇到的一點點小問題都說出來,給大家避個坑,這裡我安裝Arch的時候 ...
  • bitwarden本地搭建(無需購買SSL證書) 在安裝之前,筆者在這裡先聲明一下,我安裝bitwarden使用的操作環境為ArchLinux,我的想法是,因為這隻是一個“密碼本”,並且最好能保證其能夠在開機後占用儘量少的記憶體讓密碼本保持穩定運行。在此前提下,我選擇了乾凈整潔的ArchLinux,關 ...
  • 介紹DSLogic_邏輯分析儀參數 基本參數 主要特征 外部介面 供電要求 輸入輸出埠 技術規格 輸入電壓和閾值 輸入阻抗 最大採樣率 最大採樣深度 解析度 雜訊/干擾 安裝 基本概念 運行模式: 使用 硬體連接 簡單直接波形採集 觸發採集 重覆採集 協議解碼 邏輯分析儀和示波器的區別 ...
  • GICV3中斷控制器初始化調用鏈 /kernel/irq/handle.c: #ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER int __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) { if (h ...
  • 本文介紹了:外設寄存器查找 ① 名稱 ② 偏移地址 ③ 寄存器位表 ④ 位功能說明 寄存器基本操作 C語言的置位和清零 具體方法 設置GPIO流程 給寄存器賦值 帶參數巨集 STM32F1xx 晶元識別 存儲器映射 寄存器映射 讓GPIOB埠的16個引腳輸出高電平,要怎麼實現? STM32寄存器映射... ...
  • 1、設置tabsize縮進為4修改點兩個位置,然後搜索"detectindentation"將前面的勾選取消 二、配置c語言格式化代碼 1、打開設置,選擇用戶配置,找到文本編輯器 "Default Formatter"(如果找不到可以直接在上方搜索) 安裝了C/C++插件後可以選擇:C/C++ms- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...