镜像源 - 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
- 包管理

镜像源
添加话题