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 wlan4.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.com5 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/sda37.4 挂载分区
7.4.1 挂载根分区
7.4.1.1 创建子卷
mount /dev/sda2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
umount /dev/sda27.4.1.2 挂载子卷
mount /dev/sda2 /mnt -o subvol=@,noatime,discard=async
mount --mkdir /dev/sda2 /mnt/home -o subvol=@home,noatime,discard=asyncsubvol 选项:
- 第一个选项用来指定挂载的子卷。
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/windowsboot7.4.3 挂载交换空间分区
swapon /dev/sda38 筛选镜像
使用 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/mirrorlistServer = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch9 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/fstab12 Chroot
chroot 到新安装的系统:
arch-chroot /mnt13 网络配置
13.1 自定义主机名称
vim /etc/hostname13.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-genvim /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=GRUB17.2 生成主配置文件
为防止得到如下报错:
Warning: os-prober will not be executed to detect other bootable partitionsvim /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用户
设置密码:
passwd18.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) ALL19 其他仓库
19.1 启用32位支持库
编辑 /etc/pacman.conf, 取消以下两行的注释:
[multilib]
Include = /etc/pacman.d/mirrorlist19.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) <farseerfc@archlinux.org>" is marginal trust请使用以下命令在本地信任 farseerfc 的 key。此 key 已随 archlinux-keyring 安装在系统中, 只是缺乏信任:
pacman-key --lsign-key "farseerfc@archlinux.org"之后继续安装 archlinuxcn-keyring:
pacman -S archlinuxcn-keyring20 重启
- 输入
exit或按Ctrl+D退出chroot环境。 - 可选用
umount -R /mnt手动卸载被挂载的分区: 这有助于发现任何“繁忙”的分区, 并通过 fuser 查找原因。 - 输入
reboot重启系统, systemd 将自动卸载仍然挂载的任何分区。 - 不要忘记移除安装介质。
- 使用 root 帐户登录到新系统。
21 安装桌面
然后更新系统:
pacman -Syu安装 Xorg、SDDM、KDE Plasma:
pacman -S xorg sddm plasmaxorg 和 plasma 都是包组, 包组里的软件包大部分都有用, 全部安装即可。
安装过程会让用户选择依赖, 参考这则 帖子。由于之后的 音频 设置使用 PipeWire, 所以这里选择带有 PipeWire 字样的依赖包。
设置 sddm 开机自启:
systemctl enable sddm