安装 Archlinux
安装 Arch Linux
一些废话
实不相瞒,本人在六年前就误入了 Arch 邪教。只是一直以来,我都在用 不够小众 比较常见的 KDE Plasma + EXT4 组合。但时间久了,KDE 开销大的问题愈发明显,对流畅性的影响很大,于是乎就升起了放弃 DE 尝试 WM 的念头。纠结许久后选择了 Hyprland 作为 WM 顺便把文件系统也换成传说中的 Btrfs,品尝一下快照的神力。
这一期的目标就是初步安装完成一个最简单的 Arch Linux 环境。
正文
以下部分可以结合 Installation Guide 食用。
制作安装介质
首先准备一个可靠的 U 盘,因为 Arch Linux 的镜像文件仅有 1GB 左右,应该是个 U 盘就塞得下,对 U 盘的容量没有特别要求。
访问 Arch Linux 官网 选择合适的镜像源下载 archiso 镜像文件,可以通过检查 sha256 校验值或者 PGP 签名来确认文件没有损坏或者被篡改,然后将镜像文件烧录至 U 盘。
启动到 archiso
需要注意的是,官方提供的镜像并不支持安全启动 (Secure Boot),所以需要进入 BIOS 将安全启动功能关闭才能顺利进入安装环境。
由于本次安装要使用 UEFI 引导模式来安装 grub,所以在这里先验证系统目前的引导模式
1 | cat /sys/firmware/efi/fw_platform_size |
- 如果返回 64,表示使用 UEFI 引导且使用 x86_64
- 如果返回 32,表示使用 UEFI 引导且使用 IA32
- 如果返回 No such file or directory ,表示非 UEFI 引导
确认网络连接
如果使用有线网络,正常情况下无需额外操作;如果需要连接到 Wi-Fi,则需要使用 iwctl 工具
1 | # 进入 iwctl |
可以使用 ping 指令来确认能够正常连接互联网
1 | ping ping.archlinux.org |
确认系统时间准确
系统时间的准确性关系到 TLS 握手的成功与否,使用 timedatectl 查看当前系统时间
1 | timedatectl status |
如果系统时间准确,可以将系统时间同步到硬件时间
1 | hwclock --systohc |
硬盘分区、格式化
使用 fdisk 查看所有的硬盘,本文将以 /dev/nvme0n1 为例
1 | fdisk -l |
然后可以使用 cfdisk 来为硬盘分区,这里给出我的分区方案以供参考
1 | cfdisk /dev/nvme0n1 |
| 路径 | 块设备 | 空间 | 分区类型 |
|---|---|---|---|
| /boot | /dev/nvme0n1p1 | 1GB | EFI System |
| [swap] | /dev/nvme0n1p2 | 32GB | Linux swap |
| / | /dev/nvme0n1p3 | 920.9GB | Linux filesystem |
ps:由于使用了 btrfs 作为文件系统,所以使用 swapfile 就不合适了,这里使用独立的 swap 分区,大小是物理内存的两倍
分区完成后可以使用 mkfs 工具对分区进行格式化
1 | mkfs.fat -F 32 /dev/nvme0n1p1 |
使用 mkswap 工具对 swap 分区进行格式化
1 | mkswap /dev/nvme0n1p2 |
设置子卷并挂载分区
这里需要先临时挂载到一个目录
1 | mount /dev/nvme0n1p3 /mnt |
接下来按照如下的设置创建子卷
| 子卷 | 路径 | 压缩级别 | 快照 |
|---|---|---|---|
| @ | / | zstd:3 | 是 |
| @home | /home | zstd:1 | 否 |
| @log | /var/log | zstd:3 | 否 |
| @cache | /var/cache | zstd:3 | 否 |
1 | btrfs subvolume create /mnt/@ |
创建完成后重新挂载
1 | # 卸载临时挂载 |
配置 pacman 镜像源
先下载所有中国的 https 镜像源
1 | curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' -o /etc/pacman.d/mirrorlist |
然后可以根据自己的情况进行排序,我个人习惯将 ustc 镜像源排至第一位
安装系统基础软件包
这里个人习惯将尽量多的基础包用 pacstrap 安装完毕
1 | pacstrap -K /mnt base base-devel linux linux-firmware linux-headers intel-ucode btrfs-progs dhcpcd networkmanager bluez bluez-utils neovim grub efibootmgr sudo wget bash-completion |
安装完毕之后生成 fstab 文件
1 | genfstab -U /mnt >> /mnt/etc/fstab |
配置新系统
chroot 到新系统
1 | arch-chroot -S /mnt |
设置时区和本地化
设置时区为 UTC+8
1 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
随后设置区域和本地化,这里需要编辑 /etc/locale.gen
1 | nvim /etc/locale.gen |
将 en_US.UTF-8 UTF-8 和 zh_CN.UTF-8 UTF-8 前的 # 注释删除并保存,随后运行
1 | locale-gen |
然后配置 /etc/locale.conf
1 | echo 'LANG=en_US.UTF-8' >> /etc/locale.conf |
配置用户
设置 root 密码
1 | passwd |
创建普通用户
1 | useradd -m -G wheel <username> |
设置密码
1 | passwd <username> |
授予 wheel 组 sudo 的使用权
1 | nvim /etc/sudoers |
将 %wheel ALL=(ALL:ALL) ALL 前的 # 注释删除并保存
配置 pacman
开启 multilib 库并添加 archlinuxcn 仓库
1 | nvim /etc/pacman.conf |
取消 [multilib] 两行的 # 注释并在文件末尾添加
1 | [archlinuxcn] |
更多 archlinuxcn 镜像见 github
保存并退出,然后更新一下本地数据库,并安装 archlinuxcn 仓库的密钥
1 | pacman -Sy |
配置启动项
因为默认的 initramfs 中有 fsck 钩子,这是 btrfs 不需要的,所以这里需要重新修改
1 | nvim /etc/mkinitcpio.conf |
将 HOOKS=(…) 中的 fsck 删除并保存,然后重新生成 initramfs
1 | mkinitcpio -P |
安装 grub
1 | grub-install --target=x86_64-efi --bootloader-id=grub --efi-directory=/boot/efi |
退出并重启
1 | exit |
卸载所有分区
1 | umount -R /mnt |
重启
1 | reboot |