Arch安装
1 下载ISO
从 Arch Linux Downloads 或 校园网联合镜像站 下载, 推荐 BitTorrent 方式。
2 安装介质
用 Ventoy 制作 U 盘启动盘。
3 启动到Live环境
按 F2
或 F12
或 Del
键进入 UEFI 模式, 关闭安全启动, 将 U 盘设置为首位加载。
现在电脑一般都是以 UEFI 模式引导且使用 x64 UEFI, 所以懒得 验证引导模式。
4 连接网络
使用网线最为方便, 不用额外设置; 不推荐手机 USB 共享网络; 下文介绍使用无线网络的情况。
4.1 确保硬件正常
检查网络接口的打开状态: ip link
, 输出类似:
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
<BROADCAST,MULTICAST,UP,LOWER_UP>
中的 UP
表示接口已经打开, 不要和后面的 state DOWN
混淆。
如果 wlan0
确实未打开, 运行:
ip link set wlan0 up
如果出现错误 RTNETLINK answers: Operation not possible due to RF-kill
, 说明网卡未被 rfkill 禁用了, 使用 rfkill
命令来检查, 正常输出类似:
ID TYPE DEVICE SOFT HARD
0 bluetooth hci0 unblocked unblocked
1 wlan phy0 unblocked unblocked
如果 wlan
处于硬件屏蔽 (hard-blocked) 状态, 使用硬件按钮或开关来开启它; 如果 wlan
并没有被硬件屏蔽但处于软件屏蔽 (soft-blocked) 状态, 运行:
rfkill unblock wlan
4.2 连接无线网络
参考 Iwd#iwctl, 输入 iwctl
命令进入 iwd
模式。
列出所有 Wi-Fi 设备:
device list
如果设备或其相应的适配器已关闭, 将其打开:
device <device> set-property Powered on
adapter <adapter> set-property Powered on
扫描网络 (这个命令不会输出任何内容) :
station <device> scan
列出所有可用的网络:
station <device> get-networks
连接到一个网络:
station <device> connect <SSID>
如果需要网络密码, 将会提示用户输入。
最后输入 exit
或按 Ctrl+D
退出 iwd
模式。
测试网络:
ping www.baidu.com
5 TTY字体
默认的字体实在是没法看, 查看所有适用于 TTY 的字体:
ls /usr/share/kbd/consolefonts
临时设置一个字体:
setfont LatGrkCyr-12x22
或者编辑 /etc/vconsole.conf
, 设置默认字体:
FONT=LatGrkCyr-12x22
这个字体虽然也不好看, 但又不是不能用, 到处都在推荐的 terminus-font
字体也没好看哪里去。
pacman -S terminus-font
然后按照上面的流程选择字体。
关于 terminus-font
字体名称中的 g*
、*n
之类的参数, 参阅 /usr/share/kbd/consolefonts/README.Lat2-Terminus16
。
6 确保系统时间准确
timedatectl status
连接网络后, 时间会自动同步, 更多信息参阅 timedatectl。
7 硬盘分区
7.1 双系统EFI分区问题
双系统的 EFI 分区是个麻烦, 原因:
- Windows 的 EFI 分区太小了, 区区 100M 根本不满足 Windows 和 Arch 两个系统使用, 将直接导致安装 Arch 失败。
- 一块硬盘上只能有一个 EFI 分区。
不能一味地遵循 Arch WiKi 和各路文档的做法, 直接挂载已有的 EFI 分区, 那只适用于只有一块硬盘且已有的 EFI 分区足够大的情况。
7.1.1 一块硬盘
如果只有一块硬盘且已经安装了 Windows, 要么扩容 Windows 的 EFI 分区 (但很容易出问题), 要么干脆重装:
- 提前将 Windows 数据备份。
- 在安装 Arch 的 Live 环境中, 先删除目标硬盘的所有分区, 再使用
cfdisk
命令对目标硬盘进行分区 (比如cfdisk /dev/sda
), 目标是创建一个大的 EFI 分区。 - 使用
mkfs.fat
命令格式化 EFI 分区 (比如mkfs.fat -F 32 /dev/sda1
)。 - 退出 Live 环境。
- 先安装 Windows, Windows 会自动使用已有 EFI 分区。
- 再安装 Arch, 安装 Arch 时手动挂载这个 EFI 分区。
双系统安装在一块硬盘上的缺点:
- EFI 分区不够大。
- 硬盘故障牵连两个系统。
- 重装 Windows 系统会造成 Linux 启动文件丢失。
7.1.2 两块硬盘
如果有两块硬盘, 那么最佳实践是将两个系统分别安装在两块不同的硬盘中, 两个系统各自使用自己的 EFI 分区。
要想双启动, 就将 Windows 的启动文件复制到 Arch 的 EFI 分区中, 在 UEFI 模式中将 GRUB 调整为首位加载, 每次开机就可以选择启动 Arch 还是 Windows 了。
本文就采用这种方式。
7.2 创建分区
使用 lsblk -f
或 fdisk -l
查看所有硬盘分区信息。
使用 cfdisk
命令对目标硬盘进行分区 (比如 cfdisk /dev/sda
)。
cfdisk
的界面足够简洁明了, 先 New
来新建分区, 再 Type
选择分区类型, 之后 Write
将分区信息写入分区表, 最后 Quit
退出。
EFI 分区建议分配 1G, 因为说不定后续有安装多内核的需求、同硬盘安装其他 Linux 的需求, 反正现在的硬盘容量都很大, 不差这点。
fdisk -l
查看分区情况:
设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 2099199 2097152 1G EFI 系统
/dev/sda2 2099200 211814399 209715200 100G Linux 文件系统
/dev/sda3 211814400 245368831 33554432 16G Linux swap
设备 起点 末尾 扇区 大小 类型
/dev/sdb1 2048 206847 204800 100M EFI 系统
/dev/sdb2 206848 239615 32768 16M Microsoft 保留
/dev/sdb3 239616 498708479 498468864 237.7G Microsoft 基本数据
/dev/sdb4 498708480 500115455 1406976 687M Windows 恢复环境
7.3 格式化分区
格式化 EFI 分区:
mkfs.fat -F 32 /dev/sda1
格式化根分区:
mkfs.btrfs /dev/sda2
初始化交换空间分区:
mkswap /dev/sda3
7.4 挂载分区
7.4.1 挂载根分区
7.4.1.1 创建子卷
mount /dev/sda2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
umount /dev/sda2
7.4.1.2 挂载子卷
mount /dev/sda2 /mnt -o subvol=@,noatime,discard=async
mount --mkdir /dev/sda2 /mnt/home -o subvol=@home,noatime,discard=async
subvol
选项:
- 第一个选项用来指定挂载的子卷。
noatime
选项可以降低数据读取和写入的访问时间。discard=async
选项可以在闲时释放磁盘中未使用的区块, 也就是 TRIM。也可以不添加这个选项, 而是在系统安装完成后启用fstrim.timer
服务从而定时执行 TRIM, 参考 固态硬盘TRIM。compress
选项参考 Btrfs#Compression, 这里就不折腾了, 我觉得没必要。
在系统安装完成后也可以编辑 /etc/fstab
文件修改挂载选项。
7.4.2 挂载EFI分区
mount --mkdir /dev/sda1 /mnt/boot
这时可以挂载 Windows 的 EFI 分区, 以便之后使用 os-prober
探测系统:
mount --mkdir /dev/sdb1 /mnt/windowsboot
7.4.3 挂载交换空间分区
swapon /dev/sda3
8 筛选镜像
使用 reflector
筛选镜像源保存到文件中:
reflector --download-timeout 300 --threads 8 --verbose --country China --fastest 5 --latest 5 --protocol https --completion-percent 99 --isos --ipv6 --save /etc/pacman.d/mirrorlist
网络原因可能导致这一工作没有很好的完成, 一定要 cat /etc/pacman.d/mirrorlist
检查镜像源, 确保镜像地址正确地被写入文件中。
或者手动输入镜像地址:
vim /etc/pacman.d/mirrorlist
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
9 Pacman配置
参考 Pacman 和 Pacman/Tips_and_tricks。
vim /etc/pacman.conf
:
- 启用并行下载: 设置
Misc options
选项下的ParallelDownloads = 5
, 将会同时下载 5 个软件包, 如果未设置此选项, 软件包将会被依次下载。 - 启用着色: 将
Misc options
选项下的Color
取消注释。
10 安装必需的软件包
pacstrap -K /mnt base base-devel linux linux-headers linux-firmware os-prober intel-ucode btrfs-progs networkmanager vim
微码: AMD 处理器安装 amd-ucode
, Intel 处理器安装 intel-ucode
。
网络工具: 只安装 networkmanager
即可。如果安装 iwd
, 由于它与 networkmanager
冲突, 最后不免要手动关闭它。
11 Fstab
生成 fstab
文件:
genfstab -U /mnt >> /mnt/etc/fstab
检查生成的 /mnt/etc/fstab
文件是否正确:
cat /mnt/etc/fstab
12 Chroot
chroot 到新安装的系统:
arch-chroot /mnt
13 网络配置
13.1 自定义主机名称
vim /etc/hostname
13.2 连接网络
这一步只有 Wi-Fi才需要配置; 如果插着网线, 那网络是一直连通的。
设置 networkmanager
开机自启并立刻启动:
systemctl enable --now NetworkManager
参考 NetworkManager#nmcli examples 来使用 Wi-Fi。
显示附近的 Wi-Fi 网络:
nmcli device wifi list
连接到 Wi-Fi 网络:
nmcli device wifi connect <SSID_or_BSSID> password <password>
14 设置时间
设置时区:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
硬件时间为 UTC 时间的前提下, 运行以下命令来生成 /etc/adjtime
:
hwclock --systohc
因为我只用 UTC+8
的 Asia/Shanghai
这一个时区, 而且中国也不用夏令时, 所以我选择使用 localtime
而不是 UTC
。
将硬件时间改为 localtime:
timedatectl set-local-rtc 1
更多信息参考 System time#Time standard。
15 本地化
vim /etc/locale.gen
写入以下内容:
en_US.UTF-8 UTF-8
# zh_CN.UTF-8 UTF-8
生成 locale 信息:
locale-gen
vim /etc/locale.conf
写入以下内容:
LANG=en_US.UTF-8
# LANG=zh_CN.UTF-8
使用 locale
命令查看区域信息。
目前先使用 英文 locale, 等重启进入桌面之后再设置为中文 locale。虽然使用中文 locale 会导致 TTY 上中文显示为方块, 但是又不经常使用 TTY; 非要使用 TTY 的时候, 再手动设置英文 locale 就好了。
16 btrfs内核模块
编辑 mkinitcpio 文件:
vim /etc/mkinitcpio.conf
找到 MODULES=()
一行, 在括号中添加 btrfs
。
这是为了在系统启动时提前加载 btrfs 内核模块, 从而正常启动系统。
/etc/mkinitcpio.conf
后都需要运行 mkinitcpio -P
命令重新生成 initramfs。17 GRUB
17.1 安装
pacman -S grub efibootmgr
参考 GRUB 安装:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
17.2 生成主配置文件
为防止得到如下报错:
Warning: os-prober will not be executed to detect other bootable partitions
vim /etc/default/grub
, 取消这一行的注释:
GRUB_DISABLE_OS_PROBER=false
如果没有这一行, 就在文件末尾加上。
运行 os-prober
命令探测其他系统。
生成主配置文件:
grub-mkconfig -o /boot/grub/grub.cfg
每次编辑 /etc/default/grub
后都需要运行 grub-mkconfig -o /boot/grub/grub.cfg
命令重新生成 GRUB 主配置文件。
若要管理多个 GRUB 条目, 比如既使用 linux
又使用 linux-lts
内核, 参考 GRUB/Tips and tricks#Multiple entries。
18 用户设置
18.1 Root用户
设置密码:
passwd
18.2 普通用户
18.2.1 创建
sudo useradd -d /home/<UserName> -m -s /bin/bash <UserName>
18.2.2 设置密码
passwd <UserName>
18.2.3 加入sudoers
vim /etc/sudoers
, 在 root ALL=(ALL:ALL) ALL
下添加一行, 比如:
root ALL=(ALL:ALL) ALL
<UserName> ALL=(ALL:ALL) ALL
19 其他仓库
19.1 启用32位支持库
编辑 /etc/pacman.conf
, 取消以下两行的注释:
[multilib]
Include = /etc/pacman.d/mirrorlist
19.2 添加中文社区库
此处只能添加一个 Server, 参考 archlinuxcn/mirrorlist-repo, 选择一个镜像站, 虽然它列举的镜像站不全, 但大部分 arch 镜像站也同时托管 archlinuxcn, 可以自己检查一下。
编辑 /etc/pacman.conf
, 添加:
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
# Server = https://mirrors.cqu.edu.cn/archlinuxcn/$arch
根据 Arch Linux CN 于 2023-12-18 发布的 公告, 新系统中安装 archlinuxcn-keyring
包前需要手动信任 farseerfc 的 key。
如果你在新系统中尝试安装 archlinuxcn-keyring
包时遇到如下报错:
error: archlinuxcn-keyring: Signature from "Jiachen YANG (Arch Linux Packager Signing Key) <[email protected]>" is marginal trust
请使用以下命令在本地信任 farseerfc 的 key。此 key 已随 archlinux-keyring
安装在系统中, 只是缺乏信任:
pacman-key --lsign-key "[email protected]"
之后继续安装 archlinuxcn-keyring
:
pacman -S archlinuxcn-keyring
20 重启
- 输入
exit
或按Ctrl+D
退出chroot
环境。 - 可选用
umount -R /mnt
手动卸载被挂载的分区: 这有助于发现任何“繁忙”的分区, 并通过 fuser 查找原因。 - 输入
reboot
重启系统, systemd 将自动卸载仍然挂载的任何分区。 - 不要忘记移除安装介质。
- 使用 root 帐户登录到新系统。
21 安装桌面
然后更新系统:
pacman -Syu
安装 Xorg、SDDM、KDE Plasma:
pacman -S xorg sddm plasma
xorg 和 plasma 都是包组, 包组里的软件包大部分都有用, 全部安装即可。
安装过程会让用户选择依赖, 参考这则 帖子。由于之后的 音频 设置使用 PipeWire
, 所以这里选择带有 PipeWire
字样的依赖包。
设置 sddm
开机自启:
systemctl enable sddm