从现有 Linux 发行版安装 Arch Linux
本指南给出了从当前 Linux 发行版安装 Arch Linux 所需的准备步骤。 准备完成后的安装参考 Installation guide。
从当前 Linux 发行版安装 Arch Linux 对以下情形有所帮助:
- 远程安装 Arch Linux,如一台(虚拟的)根服务器
- 无需 LiveCD 替换当前 Linux 发行版(参见#无 LiveCD 替换当前系统)
- 创建基于 Arch Linux 的新 Linux 发行版或 LiveCD
- 创建 Arch Linux 的 chroot 环境,如可为 Docker 基础容器创建
- 为无盘机器准备 rootfs-over-NFS
这些准备步骤的目的在于为搭建一个 arch-install-scripts包(如 pacstrap(8) 和 arch-chroot(8))可运行的环境。
如果当前系统是 Arch Linux,这个目的可通过在当前系统安装 arch-install-scripts包 达成。如果当前系统不是 Arch Linux,可以构建基于 Arch Linux 的 chroot 环境。
备份和准备
备份你的所有数据,包括邮件、网页服务器等,把所有数据都放在手边。记录下你的服务器配置、hostname 等数据。
你可能会用到的数据:
- IP 地址
- hostname(s),(注意:根服务器可能是域名提供的一部分,在你删除
/etc/hosts前先检查并备份) - DNS 服务器(检查
/etc/resolv.conf) - SSH 密钥(如果其它人也要用你的服务器,如果你删除了 SSH 密钥,他们就需要新的密钥了。这些密钥可能来自:Apache、邮件服务器、SSH 服务器和其它服务)
- 硬件信息(比如网卡,参考你的
/etc/modules.conf) - 引导加载程序(Boot Loader)的配置文件。
总之,在本地备份一份原本的 /etc 总不会错。
从一个正在运行 Arch Linux 的主机
安装 arch-install-scripts包。
参考 Installation guide#挂载分区来挂载用来安装的文件系统根目录,以及其它必要的挂载点。如果 /mnt 文件夹已经被占用 , 只要新建一个文件夹,比如 /mnt/install 用来替代即可。
目前,Arch Linux 可以从头安装,或者作为宿主系统的镜像,这两种选项会在下面说明。
进行全新的 Arch Linux 安装
参考 Installation guide#Installation。
你可以跳过 Installation guide#选择镜像,因为主机中应该已经有了合适的镜像列表。
pacstrap 会使用 来自宿主机的 /etc/pacman.conf 的配置文件以及 pacman 钩子。参见 archlinux/arch-install-scripts#60。 如果你的设置偏离了标准(例如你在你的 pacman 配置中有 Noextract=),这也会影响到新安装的系统。
- 如果需要,下载默认的 pacman.conf 并通过 pacstrap 的
-C选项来指定这个文件。
- 要避免重新下载所有软件包,可以参考 pacman/Tips and tricks#在网络上共享pacman缓存。或者使用 pacstrap 的
-c选项,来使用宿主系统上的软件包缓存。
创建已有的 Arch 的备份
复制宿主系统的文件系统到新分区,再做一些必要的调整,就可以备份已有的 Arch Linux。
第一步是拷贝宿主文件到新的分区里,可以考虑使用 Rsync#全盘系统备份里展示的方法。
然后,参考 Installation guide#配置系统里的步骤,注意以下几点:
- 可以跳过 Installation guide#时区、Installation guide#本地化和 Installation guide#Root 密码
- 如果改变了文件系统,比如从 ext4 改为 Btrfs,必须进行 Installation guide#Initramfs
- 参考 Installation guide#安装引导程序,务必重新安装引导程序
- 删除
/etc/machine-id,并使用 systemd-machine-id-setup(1) 来创建一个新的。
如果镜像 Arch 必须要使用与宿主系统不同的配置,或者要安装到不同的硬件上,考虑进行以下操作:
- 在进行 Installation guide#安装引导程序时,使用目标系统 CPU 的微码
- 如果宿主系统上有于目标系统上不兼容的 Xorg#配置,参考 Moving an existing install into (or out of) a virtual machine#Disable any Xorg-related files
- 其它针对目标系统的配置诸如网络和音频。
从一个运行另一个 Linux 发行版的主机
下列是多个可以自动处理大量步骤的工具。具体方法可以参考他们各自主页的相关说明。
- archstrap (Bash)
- digitalocean-debian-to-arch (需要重新分区,针对 DigitalOcean; does not perform PGP signature verification)
- image-bootstrap (Python; does not perform PGP signature verification)
- vps2arch (Bash; does not perform PGP signature verification)
以下是介绍手动处理的办法,具体思路要么是直接在宿主系统上运行 pacman,要么是在宿主系统里运行一个 Arch 系统,这个嵌套系统位于 chroot 中。
在宿主系统上运行 pacman
Pacman 可以在大部分 Linux 发行版上编译运行,可以直接用来在宿主系统上创建 Arch Linux。最近的发行版上 arch-install-scripts 应该可以顺利运行。
一些发行版官方提供 pacman 和 / 或者 arch-install-scripts 的软件包。截止 2020 六月,Void Linux 提供了 pacman 软件包,Apline Linux 和 Fedora 提供了 pacman 和 arch-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 不同,这个选项可以保留解压出文件的 UID 和 GID。
然后编辑来 /tmp/root.x86_64/etc/pacman.d/mirrorlist 选择软件仓库服务器。
进入 chroot:
- 若安装了4或更高版本的 bash,并且 unshare 支持
--fork--pid选项 (util-linux 2.24 or later):# /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 # (假设文件系统上存在 /run) # chroot /tmp/root.x86_64 /bin/bash
使用 chroot 环境
初始环境非常基础(没有 nano包 或者 lvm2包),因此,我们得设置好 pacman 来安装必要的软件包。
初始化 pacman 密钥环
开始安装前,需要设置 pacman 密钥。执行以下命令:
# pacman-key --init # pacman-key --populate
更多请参见 pacman/软件包签名#Initializing the keyring。
下载基本工具
刷新软件包列表并安装你需要的软件包:base包、base-devel包组、parted包 等等。
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。
安装提示
请按照Installation guide中的挂载分区和安装必须的软件小节进行安装。
一些宿主系统或配置可能需要额外的步骤,参考下面的章节。
基于 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 USBs 上时,当你用 genfstab 生成你的 fstab 你可能会遇到问题。移除重复的入口和 seclabel 选项(如果有),因为它们是针对 Fedora 的。
重启前要检查的
为得到一个成功的安装,重启前请再次检查一些你的安装的细节。 首先 chroot 到你的新系统然后:
- 创建一个用户并设置密码, 使得你可以通过 ssh 登录。这很重要因为从 OpenSSH-7.1p2 开始登录 root 被默认禁用。
- 设置 root 用户密码 以便之后你可以通过 su 切换至 root。
- 安装一个 ssh 实现并启用服务端实例使得它开机自动启动。
- 设置网络配置使得你在启动后能使用网络。
- 设置 boot loader 并配置它使用你之前所挪用的交换分区做为根分区 。 你可能还想让你的 boot loader 能够启动到你的旧系统;对此可复用已存在的
/boot分区来达成这个目的。
无 LiveCD 替换当前系统
在硬盘上划分出 ~700 MiB 的空闲空间,如分割交换分区。你可以禁用交换分区并用省下的空间建立新系统。
把旧的交换分区设为新的根分区
检查 cfdisk、/proc/swaps 或者 /etc/fstab 来找到你的交换分区。假设你的硬盘位于 sdaX(X 是数字)。
执行下面的操作:
禁用交换分区:
# swapoff /dev/sdaX
在上面建立新的文件系统
# fdisk /dev/sda (设置 /dev/sdaX ID 为 "Linux" - Hex 83) # mke2fs -j /dev/sdaX
创建一个新目录来挂载它
# mkdir /mnt/newsys
最后,挂载新目录并安装过渡系统。
# mount -t ext4 /dev/sdaX /mnt/newsys
安装
安装必要软件包和其它让系统联网和在临时文件系统下运行的必需软件包。注意 ~700 MB 的空间限制。当使用 pacstrap 安装时,考虑加上 -c 选项来避免占满宝贵的空间。
一旦完成安装,修复引导器配置,然后重启进入到新系统并rsync 整个系统至主分区。