鏡像源 - Arch Linux 中文维基

跳至內容

# 鏡像源

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Mirrors，最近一次同步於 2022-03-10，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- 非官方鏡像源
- pacman

本頁面說明如何選擇和配置鏡像，以及列出可用的鏡像。

## 官方鏡像

可以通過軟體包 pacman-mirrorlist包 獲取官方鏡像列表。若要想獲得更新的鏡像列表，請訪問 Pacman Mirrorlist Generator 頁面。

訪問鏡像狀態頁面來檢查鏡像的狀態。這裡推薦使用最新的鏡像，或者說是已同步的鏡像。

如果想要將自己的鏡像添加到官方列表中，參見 arch:DeveloperWiki:NewMirrors。同時，請將其添加至非官方鏡像頁面。

### 支持IPv6的鏡像

Pacman Mirrorlist Generator 也可以用來獲取支持IPv6的鏡像列表。

## 啟用特定的鏡像

想要啟用鏡像，打開 `/etc/pacman.d/mirrorlist` 並定位到你的地理區域。對您想使用的鏡像取消注釋。例如：

    # Any
    # Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch
    Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch

參見按照速度排序查看幫助選擇鏡像的工具。

提示：

- 取消5個你最喜歡的鏡像的注釋，把他們放在 mirrorlist 文件最上方。這樣你就很容易找到它們並且如果第一個鏡像出問題可以很容易切換。這也讓合併 mirrorlist 更新更容易。
- HTTP 鏡像比 FTP 快，因為 HTTP 可以保持連接，而使用 FTP 時 pacman每下載一個新軟體包就需要重新建立連接，這樣也就導致了短暫的停頓。
- HTTPS 鏡像比 HTTP 和 FTP 更難受到干擾和篡改，在部分地區的可用性會更高。

也可以在 `/etc/pacman.conf` 中指定鏡像。對於 [core] 倉庫，默認設置是：

    [core]
    Include = /etc/pacman.d/mirrorlist

如果想要使用 HostEurope 鏡像作為默認鏡像，請把它添加在 `Include` 行之前：

    [core]
    Server = http://ftp.hosteurope.de/mirror/ftp.archlinux.org/core/os/$arch
    Include = /etc/pacman.d/mirrorlist

pacman 會首先嘗試連結這個鏡像。如果需要的話，可以繼續修改[testing], [extra], 和 [community]部分。

注意：如果鏡像直接在 `pacman.conf` 中聲明，記得在所有的倉庫使用同樣的鏡像。否則不相容的包就可能被安裝。如 [core] 中的 linux 和 [extra] 中的舊的內核模塊不相容。

### 強制 pacman 刷新軟體包列表

鏡像可能不同步，並且從舊鏡像中獲取的的軟體包列表也可能與新鏡像中的軟體包列表不一致，即使列表裡的日期可能表明它們是一致的。

創建和編輯 `/etc/pacman.d/mirrorlist` 之後，使用下面命令強制更新鏡像：

    # pacman -Syyu

傳入兩次 `--refresh` 或 `-y` 將強制更新所有軟體包列表，即使系統認為它們已經是最新。每次修改鏡像之後都應該使用 `pacman -Syyu`。

警告：在大多數情況下，如果你強制更新 pacman 資料庫，你將需要強制降級任何可能太新的軟體包以對應新的鏡像所提供的版本。這可以避免軟體包升級不一致導致的部分更新問題。

    # pacman -Syyuu

當正在使用同步成功的鏡像或者檢查鏡像的 lastsync 文件來以確保軟體包列表已經更新後，則沒有必要使用這條命令。

## 鏡像排序

當下載軟體包時，pacman 按照 `/etc/pacman.d/mirrorlist` 中的順序來使用鏡像。伺服器在列表中出現的順序決定了其優先級。

由於速度最快的伺服器可能是不同步的，所以僅基於速度來對鏡像進行排序很可能不是最佳方案。取而代之的是，先製作一個按照速度排序的鏡像列表，然後根據他們的狀態來刪除那些不同步的鏡像。

建議定期重複這一過程，來保持鏡像列表同步。

### 按速度排序

#### 排序已存在的鏡像列表

軟體包 pacman-contrib包 提供了一個 Bash 腳本，`/usr/bin/rankmirrors` 可以根據鏡像建立連接的速度對其進行排序，來使用最快的本地鏡像。

首先，備份已存在的 `/etc/pacman.d/mirrorlist`：

    # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup

接下來準備 `/etc/pacman.d/mirrorlist.backup` 以使用 rankmirrors 進行排序，可執行以下操作：

- 編輯 `/etc/pacman.d/mirrorlist.backup` ，將準備測速的鏡像取消注釋。

- 如果文件中的伺服器已按照國家或地區分組，則可通過以下命令提取特定國家或地區的所有伺服器：

      $ awk '/^## Country Name$/{f=1; next}f==0{next}/^$/{exit}{print substr($0, 1);}' /etc/pacman.d/mirrorlist.backup

- 若要取消所有的注釋，可執行以下 `sed` 命令：

      # sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.backup

- 最後，對鏡像進行排序，這裡使用 `-n 6` 參數來實現只獲取 6 個最快的鏡像：

      # rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist

#### 獲取實時鏡像列表並對其排序

可以從 Pacman Mirrorlist Generator 獲取一些國家/地區的最新鏡像列表來使用 rankmirrors。 下面的命令會獲取位於中國且支持 https 協議的最新鏡像的列表，然後將位於列表的伺服器取消注釋，最後再對其排序後列印輸出 5 個最快的鏡像。

    $ curl -s "https://archlinux.org/mirrorlist/?country=CN&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 -

提示：可以通過使用任何基於文本的瀏覽器（比如 elinks(1)）導航至 `https://archlinux.org/mirrorlist` 來以交互式方式完成這個過程。

現已存在的工具：

Rate Mirrors — 此工具通過獲取鏡像，跳過不同步或正在同步的鏡像，然後使用關於海底電纜和網際網路交換的信息在國家或地區之間切換，最終找到快速的鏡像。並且足夠快以實現在每次更新以前運行。它也支持通過標準輸入自定義鏡像列表。

  https://github.com/westandskif/rate-mirrors || rate-mirrorsAUR, rate-mirrors-binAUR

## 服務端排序

官方的 Pacman Mirrorlist Generator 提供了一個簡單的方式來獲取一個排序過的鏡像列表。因為所有排序是在考慮了多種因素的單一伺服器上完成的，與在每個單獨的客戶端上進行排序相比，鏡像伺服器和客戶端的負載量就要低很多。

Reflector — 從鏡像狀態頁面取回最新的鏡像列表，過濾後通過速度排序再覆蓋寫入 `/etc/pacman.d/mirrorlist`

  https://xyne.dev/projects/reflector/ || reflector包

## 問題解決

### 鏡像列表缺失

如果你遇到以下錯誤：

    error: config file /etc/pacman.d/mirrorlist could not be read: No such file or directory

可以直接從網站上獲取鏡像列表：

    # curl -o /etc/pacman.d/mirrorlist https://archlinux.org/mirrorlist/all/

如果碰到 `$arch` 變量未定義的問題，請在 `/etc/pacman.conf` 中加入：

    Architecture = auto

請確認已如上文對首選的鏡像取消注釋，然後執行：

    # pacman -Syu pacman-mirrorlist

### 異常的鏡像

如果你確定一個鏡像運行不正常，並且其沒有反映在鏡像狀態頁面上，更換鏡像並考慮開啟一個 bug 報告。關於鏡像的問題，issue 應該發在 Arch Linux 項目上（位於登錄框下方的列表，或者通過在頁面上搜索 switch）

## 參見

- GitHub archweb mirrorlist.py - source code of the archweb mirrorlist generator

分類：​

- 關於 Arch
- 包管理

鏡像源
新增話題