离线安装
airootfs.sfs)或复制 live 环境的根文件系统不是一个受支持的安装方法。airootfs.sfs 包含不适合或不安全的自定义配置,不适用于已安装的系统。本文档提供了在没有互联网连接的系统上安装 Arch Linux 的说明。要实现此目的,需要另一台具有正常互联网连接的系统。
首先,遵循 安装指南,跳过需要互联网连接的步骤(例如 安装指南#连接到互联网),然后继续本指南,而不是遵循 安装指南#安装基本软件包。
准备本地仓库
按照 Pacman/技巧和窍门#从 CD/DVD 或 U 盘安装软件包 中的说明,在另一台主机安装上准备包含所需文件的本地仓库。
至少,为了一个可运行的系统,建议安装以下软件包
# mkdir /tmp/blankdb # pacman -Syw --cachedir $PWD --dbpath /tmp/blankdb base linux linux-firmware
创建您的自定义离线仓库
# repo-add ./custom.db.tar.zst ./*[^sig]
挂载与配置
准备好仓库后,将外部媒体连接到新安装的系统,并将其挂载到新创建的根文件系统上
# mount --mkdir /dev/sdxy /mnt/repo
编辑您的 archiso /etc/pacman.conf 并添加一个新的节
/etc/pacman.conf
[custom] SigLevel = Optional Server = file:///mnt/repo/
注释掉 [core] 和 [extra],这样 pacman 在访问默认仓库时就不会失败。
Pacstrap
默认情况下,pacman 的密钥环仅在 NTP 激活后(https://bbs.archlinux.org/viewtopic.php?id=283075)在 live 会话中初始化一次。如果 NTP 无法激活(例如,您没有互联网访问权限),您需要手动运行
pacman-key --init pacman-key --populate
在此之后,您可以继续使用 pacstrap 将您本地可用的软件包安装到新系统中
# pacstrap -K /mnt base linux linux-firmware
离线安装软件包
从文件安装
如果离线安装过程只是临时的,但在能够访问网络之前需要手动安装一些软件包,请参阅 pacman#附加命令 以了解如何安装本地软件包。
# pacman -U /package/folder/*.tar.zst
离线缓存
您可以将所需文件放入 /var/lib/pacman/sync 和 /var/cache/pacman/pkg,以便 pacman 认为它拥有执行搜索、更新和安装所需的一切。以下方法基于两个论坛帖子:[1][2]。
步骤如下
- 在有互联网连接的计算机上下载最新的软件包数据库,
- 将它们传输到离线计算机,
- 生成离线计算机更新所需的软件包列表,
- 在有互联网连接的计算机上下载它们及其签名,
- 将它们传输到离线计算机的 pacman 缓存中,
- 安装更新。
/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
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 命令来对离线系统进行任何更新。
参见
- 帮助:浏览#离线查看:用于离线浏览 ArchWiki。