离线安装

来自 ArchWiki
警告: 解压根文件系统镜像 (airootfs.sfs) 或复制 Live 环境的根文件系统不是受支持的安装方法。 airootfs.sfs 包含自定义配置,不适合或不安全用于已安装的系统。

本文介绍了在没有互联网连接的系统上安装 Arch Linux 的说明。为此,需要另一台具有工作互联网连接的系统。

首先,按照安装指南,跳过需要互联网连接的步骤(例如安装指南#连接到互联网),然后继续阅读本指南,而不是按照安装指南#安装基本软件包

准备本地仓库

按照 Pacman/技巧和窍门#从 CD/DVD 或 USB 驱动器安装软件包 中的说明,在单独的主机安装上准备包含必要文件的本地仓库。

至少,为了使系统正常运行,建议使用以下软件包

# pacman -Syw --cachedir . --dbpath /tmp/blankdb base linux linux-firmware
提示: 考虑添加其他需要的软件,请参阅安装指南#安装基本软件包以获取有用的软件包列表。

创建您的自定义离线仓库

# repo-add ./custom.db.tar.zst ./*[^sig]

挂载和配置

本文或本节需要扩充。

原因:添加有关将自定义仓库放置在 ISO 中的可选说明。(在Talk:Offline installation 中讨论)

仓库准备好后,将外部介质连接到新安装的系统,并将其挂载到新创建的根文件系统

# mount --mkdir /dev/sdxy /mnt/repo

编辑您的 archiso /etc/pacman.conf 并添加一个新节

/etc/pacman.conf
[custom]
SigLevel = Optional
Server = file:///mnt/repo/

注释掉 [core][extra],以便 pacman 不会在默认仓库上失败。

Pacstrap

现在您可以继续使用 pacstrap 将本地可用的软件包安装到新系统中

# pacstrap -K /mnt base linux linux-firmware
提示: 在此命令中匹配 #Prepare local repository 中使用的软件包。

软件包的离线安装

从文件安装

如果离线安装过程只是暂时的,但在能够访问网络之前需要手动安装一些软件包,请参阅pacman#其他命令以了解如何安装本地软件包。

Shell globbing 可用于一次安装多个软件包

# pacman -U /package/folder/*.tar.zst

离线缓存

您可以将所需的文件放入 /var/lib/pacman/sync/var/cache/pacman/pkg 中,以便 pacman 认为它拥有执行搜索、更新和安装所需的一切。以下方法基于两个论坛帖子:[1][2]

步骤如下:

  1. 在具有互联网访问权限的计算机上下载最新的软件包数据库,
  2. 将它们传输到离线计算机,
  3. 从离线计算机生成更新所需的软件包列表,
  4. 在具有互联网访问权限的计算机上下载它们及其签名,
  5. 将它们传输到离线计算机的 pacman 缓存中,
  6. 安装更新。
提示: 如果您将默认仓库从默认值(core、extra 和 multilib)更改了,则应查看您的 /etc/pacman.conf 文件。

以下脚本将下载更新的软件包数据库。如果需要,请将 MIRROR 更改为镜像状态列表中的任何镜像。

download_databases.sh
#!/bin/sh

ARCH="x86_64"
MIRROR="https://mirrors.kernel.org/archlinux/"

wget "${MIRROR}/core/os/${ARCH}/core.db"
wget "${MIRROR}/extra/os/${ARCH}/extra.db"
wget "${MIRROR}/multilib/os/${ARCH}/multilib.db"

# and possibly -uncomment- (if customized in /etc/pacman.conf or pacman.conf.d):

#wget "${MIRROR}/core-testing/os/${ARCH}/core-testing.db"
#wget "${MIRROR}/extra-testing/os/${ARCH}/extra-testing.db"
#wget "${MIRROR}/multilib-testing/os/${ARCH}/multilib-testing.db"

# and -additionally- debug and staging packages.

使脚本可执行并运行它。您将获得多个 .db 文件。

以下步骤是将 .db 文件传输到离线 PC,使其像运行 pacman -Sy 一样使用最新的软件包列表,然后生成更新所需的软件包列表

# cp *.db /var/lib/pacman/sync/
# pacman -Sup --noconfirm > pkglist
注意: 确保您已启用 /etc/pacman.d/mirrorlist 文件中定义的至少一个服务器。否则,您将收到的只是误导性的错误消息:error: no database for package: package-name

您还需要下载相应的软件包签名,因此请准备要下载的签名列表

# sed -e 's/\.zst$/.zst.sig/' ../pkglist > ../siglist

接下来,将这两个列表带到您有互联网的地方,并在空目录中下载列出的软件包。

# wget -nv -i ../pkglist
# wget -nv -i ../siglist
提示: 当使用 cygwin 或其他类型的 Windows 环境下载软件包时,文件名将被损坏,因为默认的 Windows 文件命名要求转义例如冒号。为了避免这种情况(在 cygwin 下,因为它不遵循此类限制),请使用 wget --restrict-file-names=unix

将所有 *.pkg.tar.zst*.pkg.tar.zst.sig 文件带回家,将它们放在 /var/cache/pacman/pkg 中,最后运行

# pacman -Su

本地仓库

如果新系统预计保持离线或气隙隔离,则应将其配置为仅期望本地仓库。

完整仓库

在 chroot 到您的新安装后,以与之前相同的方式编辑新的 /etc/pacman.conf(但没有 /mnt 前缀)。

/etc/pacman.conf
[custom]
SigLevel = Optional
Server = file:///repo/

注释掉所有其他仓库并保存。像往常一样继续配置新系统。

从现在开始,对离线系统的任何更新都可以通过 가져오기 本地仓库的最新副本,将其挂载到 /repo 并像往常一样运行 pacman 命令来完成。

参见