跳转到内容

从现有 Linux 发行版安装 Arch Linux

来自 Arch Linux 中文维基

本指南给出了从当前 Linux 发行版安装 Arch Linux 所需的准备步骤。 准备完成后的安装参考 Installation guide

从当前 Linux 发行版安装 Arch Linux 对以下情形有所帮助:

这些准备步骤的目的在于为搭建一个 arch-install-scripts(如 pacstrap(8)arch-chroot(8))可运行的环境。

如果当前系统是 Arch Linux,这个目的可通过在当前系统安装 arch-install-scripts 达成。如果当前系统不是 Arch Linux,可以构建基于 Arch Linux 的 chroot 环境。

注意:本指南要求当前系统能够运行目标 Arch Linux 构架的程序。这意味着当前系统必须是 x86_64 架构。
警告:在进行每一步前,确保你理解你在干什么。这些操作很容易毁坏你的系统或造成数据丢失!

备份和准备

备份你的所有数据,包括邮件、网页服务器等,把所有数据都放在手边。记录下你的服务器配置、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=),这也会影响到新安装的系统。

提示:

创建已有的 Arch 的备份

复制宿主系统的文件系统到新分区,再做一些必要的调整,就可以备份已有的 Arch Linux。

第一步是拷贝宿主文件到新的分区里,可以考虑使用 Rsync#全盘系统备份里展示的方法。

然后,参考 Installation guide#配置系统里的步骤,注意以下几点:

如果镜像 Arch 必须要使用与宿主系统不同的配置,或者要安装到不同的硬件上,考虑进行以下操作:

从一个运行另一个 Linux 发行版的主机

下列是多个可以自动处理大量步骤的工具。具体方法可以参考他们各自主页的相关说明。

以下是介绍手动处理的办法,具体思路要么是直接在宿主系统上运行 pacman,要么是在宿主系统里运行一个 Arch 系统,这个嵌套系统位于 chroot 中。

在宿主系统上运行 pacman

Pacman 可以在大部分 Linux 发行版上编译运行,可以直接用来在宿主系统上创建 Arch Linux。最近的发行版上 arch-install-scripts 应该可以顺利运行。

一些发行版官方提供 pacman 和 / 或者 arch-install-scripts 的软件包。截止 2020 六月,Void Linux 提供了 pacman 软件包,Apline 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 不同,这个选项可以保留解压出文件的 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

下载基本工具

刷新软件包列表安装你需要的软件包:basebase-devel包组parted 等等。

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:This error is explained within arch-chroot(8) § DESCRIPTION, it should be linked there.(在Talk:从现有 Linux 发行版安装 Arch 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

安装提示

请按照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 来找到你的交换分区。假设你的硬盘位于 sdaXX 是数字)。

执行下面的操作:

禁用交换分区:

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