从现有 Linux 安装 Arch Linux
本文档描述了从正在运行的 Linux 主机系统安装 Arch Linux 所需的引导过程。 引导完成后,安装将按照安装指南中的描述进行。
从正在运行的 Linux 系统安装 Arch Linux 对于以下情况很有用:
- 远程安装 Arch Linux,例如(虚拟)根服务器
- 在没有安装介质的情况下替换现有 Linux(参见#在没有安装介质的情况下替换现有系统)
- 创建新的 Linux 发行版或基于 Arch Linux 的 LiveMedia
- 创建 Arch Linux chroot 环境,例如用于 Docker 基础容器
- 用于无盘机器的 rootfs-over-NFS
引导过程的目标是建立一个环境,从中可以运行来自arch-install-scripts的脚本(例如pacstrap(8)和arch-chroot(8))。
如果主机系统运行的是 Arch Linux,则只需安装arch-install-scripts即可实现。 如果主机系统运行的是另一个 Linux 发行版,则需要首先设置一个基于 Arch Linux 的 chroot。
备份和准备
备份所有数据,包括邮件、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 安装
按照安装指南#安装。
在该过程中,可以跳过第一步安装指南#选择镜像,因为主机应该已经有一个正确的镜像列表。
/etc/pacman.conf
配置以及 pacman hooks,来自主机。 请参阅archlinux/arch-install-scripts#60。 如果您的设置偏离标准(例如,您的 pacman 配置中有 Noextract=
行),这也将影响新安装。-c
选项来使用您的主机软件包缓存。创建现有 Arch 安装的副本
可以通过将主机文件系统复制到新分区并对其进行一些调整以使其可启动和唯一,来复制现有的 Arch Linux 安装。
第一步是将主机文件复制到已挂载的新分区中,为此,请考虑使用rsync#完整系统备份中展示的方法。
然后,按照安装指南#配置系统中描述的步骤进行,但有一些注意事项和附加步骤
- 安装指南#时间、安装指南#本地化和安装指南#Root 密码可以跳过。
- 安装指南#Initramfs 可能需要,尤其是在更改文件系统时。 例如,从 ext4 到 Btrfs。
- 关于安装指南#启动引导程序,有必要重新安装启动引导程序。
- 删除
/etc/machine-id
并使用 systemd-machine-id-setup(1) 创建一个新的。
如果镜像的 Arch 安装可能在不同的配置或不同的硬件中使用,请考虑以下附加操作
- 在安装指南#启动引导程序步骤期间,使用适用于目标系统的 CPU 微代码更新
- 如果主机上存在任何特定的 Xorg#配置,并且可能与目标系统不兼容,请按照将现有安装移动到(或移出)虚拟机#禁用任何与 Xorg 相关的文件进行操作
- 进行任何其他适合目标系统的调整,例如重新配置网络或音频。
从运行其他 Linux 发行版的主机
有多种工具可以自动化以下小节中描述的大部分步骤。 有关详细说明,请参阅它们各自的主页。
- archstrap (Bash)
- digitalocean-debian-to-arch(重新分区磁盘,DigitalOcean 特有;不执行 PGP 签名验证)
- image-bootstrap(Python;不执行 PGP 签名验证)
- vps2arch(Bash;不执行 PGP 签名验证)
以下小节介绍了手动方法。 其思路是让 pacman 直接在主机系统上工作,或者在主机系统内部运行 Arch 系统,实际安装从 Arch 系统执行。 嵌套系统包含在 chroot 中。
从主机系统使用 pacman
Pacman 可以在大多数 Linux 发行版上编译,并直接在主机系统上用于引导 Arch Linux。 arch-install-scripts 应该可以在任何最新的发行版上直接从下载的源代码运行,而不会出现问题。
某些发行版在其官方存储库中为 pacman 和/或 arch-install-scripts 提供了软件包,可用于此目的。 截至 2020 年 7 月,已知 Void Linux 提供 pacman 软件包,Alpine Linux 和 Fedora 已知同时提供 pacman 和 arch-install-scripts。
创建 chroot
下面介绍了设置和进入 chroot 的两种方法,从最简单到最复杂。 仅选择两种方法中的一种。 然后,继续#使用 chroot 环境。
方法 A:使用引导 tarball(推荐)
从 镜像 下载引导 tarball 到 /tmp/
。
从 下载页面 下载引导 tarball 签名,并将其放置在同一目录中。 不要从镜像下载它。
解压 tarball
# tar xf /path-to-bootstrap-image/archlinux-bootstrap-x86_64.tar.zst --numeric-owner
请注意最后的 --numeric-owner
选项,这对于在现有 Linux 系统使用的数字与 Arch Linux 不同时,保留解压文件的正确 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
方法 B:使用安装环境的根文件系统镜像
可以挂载最新的 Arch Linux 安装介质的根镜像,然后 chroot 进入它。 这种方法的优点是在主机系统内部提供一个可工作的 Arch Linux 安装,而无需通过安装特定的软件包来准备它。
FATAL ERROR aborting: uncompress_inode_table: failed to read block
。根镜像可以在 镜像 之一的 iso/latest/arch/x86_64/
下找到。 squashfs 格式不可编辑,因此我们解压根镜像并挂载它。
要解压根镜像,请运行
# unsquashfs airootfs.sfs
killed
错误。 您可以更改 unsquash 命令以使用更少的内存。 此示例命令使用 32 MiB 的内存: unsquashfs -da 16 -fr 16 airootfs.sfs
通过编辑 squashfs-root/etc/pacman.d/mirrorlist
选择存储库服务器。
在 chroot 到解压的根镜像之前,我们需要设置一些挂载点并复制 resolv.conf
以进行联网。
# mount --bind squashfs-root squashfs-root # mount -t proc none squashfs-root/proc # mount -t sysfs none squashfs-root/sys # mount -o bind /dev squashfs-root/dev # mount -o bind /dev/pts squashfs-root/dev/pts ## important for pacman (for signature check) # cp -L /etc/resolv.conf squashfs-root/etc ## this is needed to use networking within the chroot
现在,一切都已准备就绪,可以 chroot 进入新安装的 Arch 环境
# chroot squashfs-root bash
使用 chroot 环境
引导环境非常简陋(没有 nano 或 lvm2)。 因此,我们需要设置 pacman 以下载其他必要的软件包。
初始化 pacman 密钥环
在开始安装之前,需要设置 pacman 密钥。 运行以下命令
# pacman-key --init # pacman-key --populate
有关详细信息,请参阅 pacman/Package signing#初始化密钥环。
下载基本工具
刷新软件包列表并安装您需要的:base-devel、parted 等。
error: could not determine cachedir mount point /var/cache/pacman/pkg
。 要解决此问题,请运行# 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 解决方案并启用其服务器实例在启动时自动启动。
- 设置您的 网络配置,以便在启动时自动启动连接。
- 设置一个 启动引导程序 并将其配置为使用您之前分配的交换分区作为根分区。 您可能希望将启动引导程序配置为能够启动到旧系统; 为此,在新系统中重用服务器现有的
/boot
分区很有帮助。
在没有安装介质的情况下替换现有系统
在磁盘上的某个位置找到约 700 MiB 的可用空间,例如,通过分区交换分区。 您可以禁用交换分区并在那里设置您的系统。
将旧的交换分区设置为新的根分区
检查 cfdisk
、/proc/swaps
或 /etc/fstab
以查找您的交换分区。 假设您的硬盘驱动器位于 sdaX
上(X
将是一个数字)。
执行以下操作
禁用交换空间
# 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 到主分区。