跳转至内容

从现有 Linux 系统安装 Arch Linux

来自 ArchWiki

本文档描述了从运行中的 Linux 主机系统安装 Arch Linux 所需的引导(bootstrapping)过程。引导完成后,安装过程将按照 安装指南 中所述进行。

从运行中的 Linux 安装 Arch Linux 在以下场景中非常有用:

引导程序的目的是搭建一个环境,以便能够运行 arch-install-scripts 中的脚本(例如 pacstrap(8)arch-chroot(8))。

如果主机系统运行的是 Arch Linux,只需安装 arch-install-scripts 即可实现。如果主机系统运行的是其他 Linux 发行版,则需要先建立一个基于 Arch Linux 的 chroot 环境。

注意 本指南要求现有主机系统能够执行新的目标 Arch Linux 架构程序。这意味着主机必须是 x86_64 架构。
警告 在继续操作之前,请确保您理解每个步骤。很容易导致系统损坏或数据丢失!

备份与准备

备份所有数据,包括邮件、Web 服务器等。确保所有信息触手可及。保留所有服务器配置、主机名等。

以下是您可能需要的数据列表:

  • IP 地址
  • 主机名 (hostname),(注意:根服务器通常也是供应商域的一部分,在删除前请检查或保存您的 /etc/hosts
  • DNS 服务器 (检查 /etc/resolv.conf)
  • SSH 密钥(如果其他人也在您的服务器上工作,他们必须接受新密钥,否则无法登录。这包括来自 Apache、邮件服务器、SSH 服务器等的密钥。)
  • 硬件信息(网卡等。参考预安装的 /etc/modules.conf
  • 引导加载程序(Boot loader)配置文件。

一般来说,在本地硬盘上保留一份原始 /etc 目录的副本是一个好主意。

从运行 Arch Linux 的主机安装

安装 arch-install-scripts 软件包。

参考 安装指南#挂载文件系统 来挂载将用于根目录的文件系统以及所有其他必要的挂载点。如果您已经将 /mnt 目录用于其他用途,只需创建另一个目录(如 /mnt/install)并将其作为后续安装的挂载点根目录即可。

在此阶段,Arch Linux 既可以从零开始安装,也可以镜像主机安装。以下描述了这两种选项。

创建新的 Arch 安装

参考 安装指南#安装

在操作过程中,第一个步骤 安装指南#选择镜像源 可以跳过,因为主机应该已经拥有正确的镜像列表(mirrorlist)。

警告
  • pacstrap 将使用来自主机/etc/pacman.conf 配置以及 pacman 钩子(hooks)。参见 archlinux/arch-install-scripts#60。如果您的配置与标准配置不同(例如,在 pacman 配置中有 Noextract= 行),这将同样影响新的安装。
  • 如果需要,可以下载 默认的 pacman.conf,并使用 pacstrap-C 选项指向该文件。
提示 为了避免重新下载所有软件包,请考虑参考 Pacman/技巧与秘诀#网络共享 pacman 缓存,或使用 pacstrap-c 选项来使用主机机器的软件包缓存。

创建现有 Arch 安装的副本

可以通过将主机文件系统复制到新分区,并进行一些调整使其可启动且唯一,从而复制现有的 Arch Linux 安装。

第一步是将主机文件复制到挂载的新分区,为此,请参考 rsync#全系统备份 中展示的方法。

然后,按照 安装指南#配置系统 中描述的步骤操作,但需注意以下几点并增加额外步骤:

如果镜像后的 Arch 安装将在不同的配置或硬件上使用,请考虑以下额外操作:

从运行其他 Linux 发行版的主机安装

有多种工具可以自动完成以下子章节中描述的大部分步骤。详细指令请参阅其各自的主页。

以下子章节介绍了手动方法。其核心思路要么是直接在主机系统上让 pacman 运行起来,要么是在主机系统中运行一个 Arch 系统,并从该 Arch 系统执行实际安装。这个嵌套系统包含在一个 chroot 中。

在主机系统中使用 pacman

Pacman 可以在大多数 Linux 发行版上编译,并直接在主机系统上用于引导 Arch Linux。arch-install-scripts 在任何近期发行版上直接从下载的源码运行应该都没有问题。

一些发行版在官方仓库中提供了 pacman 和/或 arch-install-scripts 的软件包,可用于此目的。截至 2020 年 7 月,已知 Void Linux 提供 pacman 包,Alpine Linux 和 Fedora 提供 pacmanarch-install-scripts

创建 chroot

镜像站 下载 bootstrap 压缩包到 /tmp/

下载页面 下载 bootstrap 压缩包的签名,并将其放在同一目录下。不要从镜像站下载签名。

使用 GnuPG 验证签名.

解压 tarball

# tar xf /path-to-bootstrap-image/archlinux-bootstrap-x86_64.tar.zst --numeric-owner

请注意最后的 --numeric-owner 选项,如果您的现有 Linux 系统使用的 UID 和 GID 数字与 Arch Linux 不同,该选项对于保留解压文件的正确数字 ID 至关重要。

通过编辑 /tmp/root.x86_64/etc/pacman.d/mirrorlist 选择一个仓库服务器。

进入 chroot

  • 如果安装了 bash 4 或更高版本,且 unshare 支持 --fork--pid 选项(util-linux 2.24 或更高版本)
    # /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
  • 否则,运行以下命令
# mount --bind /tmp/root.x86_64 /tmp/root.x86_64
# cd /tmp/root.x86_64
# cp /etc/resolv.conf etc
# mount -t proc /proc proc
# mount --make-rslave --rbind /sys sys
# mount --make-rslave --rbind /dev dev
# mount --make-rslave --rbind /run run    # (assuming /run exists on the system)
# chroot /tmp/root.x86_64 /bin/bash

使用 chroot 环境

引导环境非常简陋(没有 nanolvm2)。因此,我们需要配置 pacman 以便下载其他必要的软件包。

初始化 pacman 密钥环

在开始安装之前,需要设置 pacman 密钥。运行以下命令:

# pacman-key --init
# pacman-key --populate

详情请参阅 pacman/软件包签名#初始化密钥环

下载基础工具

刷新软件包列表安装 您需要的工具:base-devel, parted 等。

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 此错误在 arch-chroot(8) § 描述 (DESCRIPTION) 中有解释,应当在其中建立链接。(在 Talk:Install Arch Linux from existing Linux 中讨论)
注意 当您尝试用 pacman 安装软件包时,可能会遇到 error: could not determine cachedir mount point /var/cache/pacman/pkg。要解决此问题,请在进入 chroot 之前运行:
# mount --bind directory-to-livecd-or-bootstrap directory-to-livecd-or-bootstrap
参见 FS#46169

安装技巧

现在您可以继续执行 安装指南#挂载文件系统 并遵循 安装指南 的其余部分。

某些主机系统或配置可能需要额外的步骤。请参阅以下章节获取技巧。

基于 Debian 的主机

/dev/shm

在某些基于 Debian 的主机系统上,pacstrap 可能会产生以下错误:

# pacstrap -K /mnt base
==> Creating install root at /mnt
mount: mount point /mnt/dev/shm is a symbolic link to nowhere
==> ERROR: failed to setup API filesystems in new root

这是因为在某些版本的 Debian 中,/dev/shm 指向 /run/shm,而在基于 Arch 的 chroot 中,/run/shm 并不存在,导致链接失效。要修正此错误,请创建目录 /run/shm

# mkdir /run/shm

基于 Fedora 的主机

在基于 Fedora 的主机和 Live USB 上,使用 genfstab 生成 fstab 时可能会遇到问题。请删除重复条目以及出现的 seclabel 选项,因为这是 SELinux 特有的,会导致系统无法正常启动。

重启前需要检查的事项

在重启之前,请仔细检查安装中的几个细节以确保安装成功。为此,请先 chroot 进入新安装的系统,然后:

  • 创建带密码的用户,以便您可以通过 ssh 登录。这至关重要,因为自 OpenSSH-7.1p2 起,默认禁用了 root 登录。
  • 设置 root 密码,以便稍后可以通过 su 切换到 root
  • 安装 ssh 方案并 启用 其服务器实例以便在启动时自动启动。
  • 设置您的 网络配置,以便在启动时自动建立连接。
  • 安装 引导加载程序 (boot loader) 并将其配置为使用你之前预留的交换分区作为根分区。你可能希望配置引导加载程序以便能够启动进入旧系统;为此,在新系统中重新使用服务器现有的 /boot 分区会很有帮助。

在没有安装介质的情况下替换现有系统

在磁盘上的某个位置寻找大约 700 MiB 的可用空间,例如通过划分一个交换分区。你可以禁用该交换分区并在其中搭建你的系统。

将旧的交换分区设置为新的根分区

检查 cfdisk/proc/swaps/etc/fstab 以找到你的交换分区。假设你的硬盘位于 sdaXX 将是一个数字)。

执行以下操作

禁用交换空间

# swapoff /dev/sdaX

在其上创建文件系统

# fdisk /dev/sda
(set /dev/sdaX ID field to "Linux" - Hex 83)
# mke2fs -j /dev/sdaX

创建用于挂载该分区的目录

# mkdir /mnt/newsys

最后,挂载该新目录以安装中间系统。

# mount -t ext4 /dev/sdaX /mnt/newsys

安装

在临时分区中安装必要软件包以及任何其他使系统能够联网运行所需的软件包,请注意约 700 MiB 的空间限制。在使用 pacstrap 指定要安装的软件包时,考虑添加 -c 标志,以避免因将软件包下载到宿主系统而占用宝贵的空间。

一旦新的 Arch Linux 系统安装完成,修复引导加载程序配置,然后重启进入新创建的系统,并将整个系统 rsync 到主分区。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.