跳转至内容

从现有 Linux 系统安装 Arch Linux

来自 ArchWiki

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

从运行中的 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 地址
  • 主机名(注意:根服务器通常也是提供商域的一部分,删除前请检查或保存您的 /etc/hosts 文件)
  • DNS 服务器(检查 /etc/resolv.conf
  • SSH 密钥(如果其他人需要访问您的服务器,他们将不得不接受新密钥。这包括您的 Apache、邮件服务器、SSH 服务器等的密钥)
  • 硬件信息(网卡等。参考您预装的 /etc/modules.conf
  • 引导加载程序配置文件。

通常,最好将原始 /etc 目录的本地副本保存在本地硬盘上。

从运行 Arch Linux 的主机进行安装

安装 arch-install-scripts 包。

按照 安装指南#挂载文件系统 来挂载将用作根目录的文件系统以及所有其他需要的挂载点。如果您已经使用了 /mnt 目录,只需创建一个新目录,例如 /mnt/install,并将其用作其余安装的挂载点基础。

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

创建新的 Arch 安装

按照 安装指南#安装 进行。

在此过程中,第一步 安装指南#选择镜像 可以跳过,因为宿主系统应该已经有一个正确的 mirrorlist。

警告
  • pacstrap 将使用宿主系统的 /etc/pacman.conf 配置以及 pacman hook。参见 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 环境

镜像下载引导 tarball 到 /tmp/

下载页面下载引导 tarball 的签名,并将其放在同一个目录中。不要从镜像下载。

使用 GnuPG 验证签名.

解压 tarball

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

注意最后的 --numeric-owner 选项,这对于在现有 Linux 系统使用与 Arch Linux 不同的 UID 和 GID 号时保留提取文件的正确 UID 和 GID 号非常重要。

通过编辑 /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-develparted 等。

本文或本节需要在语言、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
然后 chroot。参见 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 解决方案并启用其服务器实例在启动时自动启动。
  • 设置您的网络配置,以便在启动时自动建立连接。
  • 设置引导加载程序并配置它以使用您之前分配的 swap 分区作为根分区。您可能希望配置您的引导加载程序以便能够启动到旧系统;为此,重用服务器现有的 /boot 分区在新系统中会很有帮助。

不使用安装介质替换现有系统

在磁盘上找到约 700 MiB 的可用空间,例如通过分区一个 swap 分区。您可以禁用 swap 分区并将其用于设置您的系统。

将旧的 swap 分区设为新的根分区

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

执行以下操作:

禁用 swap 空间

# 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 整个系统到主分区。