离线安装

来自 Arch Linux 中文维基

此文提供在无互联网连接时安装 Arch Linux 的指南。要达到此目的,需要另一有互联网连接的系统。

首先,按照安装指南,跳过安装指南-连接到互联网部分,直接跳到安装指南#安装必需的软件包步骤。

警告: 从 ISO 解压根文件系统镜像 (airootfs.sfs) 或复制 live 环境根文件系统不是受支持的方法。

准备本地仓库[编辑 | 编辑源代码]

Pacman/Tips and tricks#Installing packages from a CD/DVD or USB stick 获取有关在单独的主机安装上准备具有必要文件的本地仓库的说明。

至少,对于正常运行的系统,建议使用以下软件包:

# pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel linux linux-firmware mkinitcpio vim

创建您的自定义离线仓库

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

挂载和配置[编辑 | 编辑源代码]

这篇文章的某些内容需要扩充。

原因: 添加:如何在 ISO 内添加自定义仓库的可选指南。 (在 Talk:离线安装 中讨论)

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

# 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 -K /mnt base base-devel linux linux-firmware mkinitcpio vim

软件包的离线安装[编辑 | 编辑源代码]

从文件安装[编辑 | 编辑源代码]

当离线安装仅是临时的,但需要在可访问互联网前安装自定义的包,参见 pacman#其它命令以了解安装本地包的方法。

Shell通配符可用于立即安装:

# 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 -additionaly- debug and staging packages.

转化为可执行文件并运行。您将得到多个 .db 文件。

下列步骤将传输 .db 文件至离线电脑,使您可更新包列表(效果与在线的 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 命令。

另见[编辑 | 编辑源代码]