新手向 Arch Linux 安装(基于 Arch Wiki)

为什么想写 Arch 如何安装(为什么要重复造轮子)

Arch Linux 如何优秀不用笔者赘述,可以参考 操作系统推荐:Arch Linux,但 Arch 的默认安装方式为纯命令行手动安装,也因此劝退了大量初学者。作为一款优秀的 Linux 发行版,Arch 拥有非常活跃的社区,也有团队基于 Arch 二次开发得到对新手更友好的拥有图形化安装界面的发行版 Manjaro,这是借助 Manjaro 安装 Arch 的方法 使用 manjaro 安装 archlinux。对了解 Linux 的人来说,参照事无巨细的 Arch Wiki 一步一步敲命令可以很顺利的把 Arch 装起来,但笔者发现 Arch Wiki 的介绍可能过于详尽,部分内容需要引用其他文档,同时提供了多种选项,整体连续性欠佳,容易遗漏步骤,上手难度依然较高,故笔者决定基于 Arch Wiki 进行修改与精简,同时规避了一部分笔者安装系统时遇到的问题,将 Arch 的安装过程用相对连贯的方式记录下来,并从 Arch Wiki 提供的分支中选择最适合新手的选项,从而方便新手上手 Arch Linux。

这是笔者第一次写教程类文章,同时笔者学习 Linux 的时间也不长,本文也是从适合初学者的角度出发。受限于水平,疏漏与错误恐在所难免,敬请门友不吝赐教。

Linux 小知识

  • 一切皆文件,安装过程需要对一些文件进行修改,对新手友好的文件编辑器 nano 已内置在 live 中
  • 如果执行一个命令后没有任何反馈,这是好事,这意味着命令正确执行

安装环境

Hyper-V 第 2 代虚拟机,4C4G,关闭安全启动(非常重要),正常网络连接。

实机安装过程与虚拟机基本相同,建议从虚拟机开始练手。

:warning:警告: 本方法仅适用于单系统。

安装前的准备

启动到 live 环境

加载镜像文件,并将光盘启动设置为第一启动项(若创建虚拟机时就添加镜像文件该步骤自动完成),启动虚拟机,选择 Arch Linux install medium 并按 Enter 进入 live 环境。

当出现如上界面时说明成功启动到 live 环境。

对于中国大陆用户而言控制台键盘布局和字体无需修改,故跳过。

验证引导模式

此处检查 UEFI 位数,输入以下指令(注意,控制台自带#号,只需输入其后内容)。

# cat /sys/firmware/efi/fw_platform_size

一般而言命令结果为 64,即系统是以 UEFI 模式引导且使用 64 位 x64 UEFI。

连接到互联网

一般能正常连接网络,建议用 ping 检查网络连接:

# ping archlinux.org

若能正常收发包并返回时延则说明网络正常,按 Ctrl+C 结束任务

更新系统时间

使用 timedatectl 确保系统时间是准确的:

# timedatectl

创建硬盘分区

系统如果识别到计算机的内置硬盘、U 盘或者移动硬盘等类型磁盘,就会将其分配为一个块设备,使用 fdisk 查看。

# fdisk -l(此处为小写字母 l)

结果中以 romloop 或者 airoot 结尾的设备可以被忽略。结果中以 rpbmboot0 或者 boot1 结尾的 mmcblk* 设备也可以被忽略。

此处以下分区是必须的:

  • 一个根分区,挂载在根目录 /
  • 一个 EFI 系统分区用于引导系统启动,约 512MB

以下分区可选:

  • SWAP 分区,交换空间,相当于虚拟内存,不少于 512MB,根据实际情况确定

使用 cfdisk 修改分区表

# cfdisk

选择要分区的磁盘(sda),随后进入以下界面:

上下方向键选择分区,左右方向键选择功能。

选择 New 并回车,输入 512M 并回车,出现第一个分区,路径为 /dev/sda1,容量为 512MB。选择 Type 并回车,选择EFI System 并回车,此时分区类型修改为 EFI 系统分区。将光标移动到Free space,选择 New 并回车,将剩余容量全部分给根分区,分区类型默认为 Linux 文件系统,此时界面为:

选择 Write 并回车,输入 yes 并回车保存分区表,选择 Quit 并回车退出。

此时 /dev/sda1EFI 系统分区/dev/sda2linux 系统根分区

建议再次使用# fdisk -l 检查分区表是否被正常修改。

格式化分区

此处有 sda1 和 sda2 两个分区需要被格式化。

将 sda1 格式化为 fat32:

# mkfs.fat -F 32 /dev/sda1

将 sda2 格式化为 ext4:

# mkfs.ext4 /dev/sda2

挂载分区

此处提供一种典型的挂载方式。

将根分区挂载到 /mnt

# mount /dev/sda2 /mnt

将 EFI 分区挂载到 /mnt/boot

// 此处添加了 --mkdir 以创建 /mnt/boot 挂载点
# mount --mkdir /dev/sda1 /mnt/boot

开始安装系统

修改镜像站

系统的文件 /etc/pacman.d/mirrorlist 中定义了软件包会从哪个镜像站下载,列表中越靠前的镜像站有越高的优先级。此处笔者选择将清华的镜像站设置为最高优先级。

# nano /etc/pacman.d/mirrorlist

Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch 添加到列表最前方,按 Ctrl+O 然后回车保存,按 Ctrl+X 退出。

输入以下命令更新:

# pacman -Sy

安装必须的软件包

使用 pacstrap 脚本,安装 base 包 软件包和 Linux 内核以及常规硬件的固件:

# pacstrap -K /mnt base linux linux-firmware

配置系统

生成 fstab 文件

通过以下命令生成 fstab 文件:

# genfstab -U /mnt >> /mnt/etc/fstab

强烈建议在执行完以上命令后,检查一下生成的 /mnt/etc/fstab 文件是否正确:

# nano /mnt/etc/fstab

chroot 到新安装的系统

通过以下命令 chroot 到新安装的系统:

# arch-chroot /mnt

安装 nano 和 networkmanager

为新安装的系统安装 nano 和 networkmanager:

# pacman -S nano networkmanager

之后会用到。

设置时区

通过以下命令设置时区(上海):

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

然后运行 hwclock 以生成 /etc/adjtime

# hwclock --systohc

这个命令假定已设置硬件时间为 UTC 时间。

区域和本地化设置

程序和库如果需要本地化文本,都依赖区域设置,后者明确规定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准。

需要设置这两个文件:locale.genlocale.conf

使用 nano 编辑 /etc/locale.gen,然后取消掉en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8 前的注释(#)。

接着执行 locale-gen 以生成 locale 信息:

# locale-gen

然后创建 locale.conf 文件,并编辑设定 LANG 变量:

# nano /etc/locale.conf
// 以下为需要输入文件的内容
LANG=en_US.UTF-8

:bulb:提示:

也可以将系统 locale 设置为 en_GB.UTF-8,具有以下优点:

  • 系统的 log 会用英文显示,这样更容易判断和处理问题;

  • 进入桌面环境后以 24 小时制显示时间;

  • LibreOffice 等办公软件的纸张尺寸会默认为 A4 而非 Letter(US);

  • 可尽量避免不必要且可能造成处理麻烦的英制单位。

如需这样设置,需要在编辑 /etc/locale.gen 时同时取消掉en_GB.UTF-8 UTF-8 前的注释。

:warning:警告: 并不推荐在此时设置任何中文 locale,这可能会导致 tty 上中文显示为方块。

设置 root 密码

使用以下命令设置 root 密码:

# passwd

创建密码并回车,重复密码并回车。

安装引导程序

GRUB(GRand Unified Bootloader,大一统启动加载器),是一个引导加载程序。

:bell:注意: 在本小节内容中,esp 表示 EFI 系统分区(ESP)的挂载点,即上文提到的 /mnt/boot。此时已经 chroot 进 /mnt 中的系统,故本小节中的 esp/boot

首先安装软件包 grub 包 和 efibootmgr 包。其中“GRUB”是启动引导器,“efibootmgr”被 GRUB 脚本用来将启动项写入 NVRAM。

# pacman -S grub efibootmgr

执行下面的命令来将 GRUB EFI 应用 grubx64.efi 安装到 esp/EFI/GRUB/,并将其模块安装到 /boot/grub/x86_64-efi/

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

安装后,需要生成主配置文件 /boot/grub/grub.cfg,使用 grub-mkconfig 工具来生成:

# grub-mkconfig -o /boot/grub/grub.cfg

:warning:警告: 这是安装的最后一步也是至关重要的一步,请按上述指引正确安装好引导加载程序后再重新启动。否则计算机重新启动后将无法正常进入系统。

重新启动计算机

输入 exit 或按 Ctrl+D 退出 chroot 环境。

最后,通过执行 reboot 重启系统,systemd 将自动卸载仍然挂载的任何分区。这时候不要忘记移除安装介质,然后使用 root 账户登录到新系统。

安装后的工作

使用 root 账户登录到新系统后,发现无法上网,此时需要启动 NetworkManager 并设置其开机自启动。

// 启动 NetworkManager(注意大小写)
# systemctl start NetworkManager
// 设置开机自启动
# systemctl enable NetworkManager

创建非特权账户、图形用户界面的安装、声音管理、触摸板支持等系统管理教程和后期工作

后面有时间再补吧,参见 建议阅读 - Arch Linux 中文维基

当然耍帅还是要的。

5 Likes

Post-installation 才是最折磨的,就是因为这个半天搞不好让我放弃了 arch。

然后 arch 安装过程中的坑也挺多的,比如鸟哥书里把 /usr 单独挂了一个分区,但在 arch 里这么做会导致系统无法启动。

还有 EFI System Partition 要挂在 /efi 而不是 /boot/efi 等等

虽然放弃了,但安装 arch 的过程还是让我学到了很多

不影响的

  1. 分区是指硬盘分区表,任意目录都能做挂载点,启动不了肯定另有原因

  2. ESP 只需一次挂载,挂载到那就无所谓,grub-install ....生成完 .efi 文件后平常也无需挂载

1 Like

有点东西,我作为交大门赞助团成员投你一张水疗券

新手除了这样玩,还可以随便用个带图形界面的 live iso 启动,然后参考 https://wiki.archlinux.org/title/Install_Arch_Linux_from_existing_Linux,复制粘贴就行了

N 多年前我初试安装的时候,感觉参考 ArchWiki 什么都做了,却启动不了,根据报的错发现是 /etc/mkinitcpio.conf少配置了 initramfs 里面的crc32 相关模块:
MODULES=(crc32c_intel crc32_generic libcrc32c crc32-pclmul libcrc32c nvidia nvidia_modeset nvidia_uvm nvidia_drm)

当时我将 /usr 单独挂载后确实遇到了问题,经过网上搜索后将其放回与根目录同一个分区下,于是启动成功了

具体原因记不清了

安装时有没有写到/etc/fstab 里啊

写了。

https://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken/

1 Like

那就不用 systemd,用 OpenRC

1 Like