Skip to content

安装 Arch

背景

大环境往信创发展,Windows/MacOS 摆烂,都在指引我们走向 Linux。

为什么

针对大环境的情况,我们可以选择 debian 系的 Linux,往往有更快的国产软件包支持。

针对普适性的情况,可以选择 Arch,有更新的软件包支持,缩短 bug 留存时间。同时很快移植 debian 系中的国产软件包。

Windows 的问题

  1. 莫名其妙卡顿,但系统资源占用率低
  2. 终端默认使用 GBK 编码,导致程序执行容易乱码,如 go、zig 执行

Linux 的问题

  1. 缺少专有软件(寻找替代品含网页版,创造替代品)
  2. 遇到问题难以解决,往往需要对系统有一定的熟悉度(问 GPT)

如何安装

○ 准备

  1. 预留空闲分区
  2. 下载 arch iso 镜像,存放至 ventoy 移动盘中
  3. 重启,按 f12 进入 安装

适用性

注意适用情况

难点

  1. 区分安装环境与结果环境
  2. 区分终端脚本与交互脚本(iwctl、wim 等)
  3. 区分硬盘、分区、卷、子卷

○ 连接 wifi

sh
# 连接 wifi
# 忽略下方 [iwd],进表示在 iwctl 中执行
iwctl
[iwd] device list
[iwd] exit
rfkill list
ip link set wlan0 up
# 如果看到 Operation not possible due to RF-kill,执行
rfkill unblock wifi
# 扫描
iwctl
[iwd] station wlan0 scan
[iwd] station wlan0 get-networks
[iwd] station wlan0 connect ${wifi_name}
[iwd] exit
ping www.bilibili.com

○ 更新系统时钟

sh
# 更新系统时钟
timedatectl set-ntp true
timedatectl status

○ 更新镜像源

sh
# 更新镜像源
reflector -c China --sort score --save /etc/pacman.d/mirrorlist
# 去掉一些经验中比较慢的
vim /etc/pacman.d/mirrorlist

# 禁用 reflector 自动更新,避免后续镜像被替换
systemctl stop reflector.service
systemctl status reflector.service

#(可选)pacman 并行下载 + 颜色
vim /etc/pacman.conf
# 删除 Misc options 下的 Color 和 ParallelDownloads 前面的注释

○ 分区

sh
# 检查 UEFI
ls /sys/firmware/efi/efivars

# 查看分区
# 查看硬盘及分区,概览
lsblk
# 查看硬盘及分区,详情
fdisk -l
# 查看当前挂载情况
df -h

# cfdisk 分区
cfdisk /dev/nvme0n1
# /dev/nvme0n1p1,EFI System,1G。已有则无需创建
# /dev/nvme0n1p2,free space -> new -> type swap -> 8G,用于休眠
# /dev/nvme0n1p3,free space -> new -> type Linux FileSystem
# write -> quit

# 格式化 EFI 分区,如双系统则不用
mkfs.fat -F32 /dev/nvme0n1p1
# 格式化 swap 分区
mkswap /dev/nvme0n1p2
# 在上一步新建的默认分区中,创建 btrfs 分区(注意硬盘分区正确)
# 格式化 btrfs 分区
mkfs.btrfs -L ${分区名称 myArch} /dev/nvme0n1p3

# 挂载 btrfs 分区并创建子卷
mount -t btrfs -o compress=zstd /dev/nvme0n1p3 /mnt
# 检查挂载情况
df -h

# 创建子卷
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@cache
# 检查子卷
btrfs subvolume list -p /mnt

# 卸载 btrfs 分区
umount /mnt

# 重新挂载 btrfs 文件系统,有序,先根目录再子卷
mount -t btrfs -o subvol=/@,compress=zstd /nvme0n1p3 /mnt
mkdir -p /mnt/home
mount -t btrfs -o subvol=/@home,compress=zstd /nvme0n1p3 /mnt/home
mkdir -p /mnt/.snapshots
mount -t btrfs -o subvol=/@snapshots,compress=zstd /nvme0n1p3 /mnt/.snapshots
mkdir -p /mnt/var/log
mount -t btrfs -o subvol=/@log,compress=zstd /nvme0n1p3 /mnt/var/log
mkdir -p /mnt/var/cache
mount -t btrfs -o subvol=/@cache,compress=zstd /nvme0n1p3 /mnt/var/cache
# 同时挂载 EFI 分区
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
# 同时挂载 swap 分区
swapon /dev/nvme0n1p2

# 检查
df -h
free -h

# 基于当前挂载生成系统自动挂载信息
genfstab -U /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab

○ 预装 arch

预备

必须先完成上一步“重新挂载 btrfs 文件系统”的操作

sh
# 往挂载位置安装基础包,\ 表示可忽略的换行(提升可读性)
pacstrap /mnt \
base base-devel linux linux-firmware btrfs-progs \
networkmanager vim sudo git \
noto-fonts-cjk noto-fonts-emoji 

# 安装微码,或 intel-ucode
pacstrap /mnt amd-ucode

○ 设置 arch

预备

必须先完成上一步“预装 arch”的操作

sh
# 切换到结果环境(最终系统环境 arch)
arch-chroot /mnt

# 添加 hostname
echo '${hostname}' -> /etc/hostname

# 添加 hosts,host 中间用 tab 而不是空格
vim /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 myarch.localdomain myarch

# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置硬件时间
hwclock --systohc

# 设置语言
vim /etc/locale.gen
# 放开 en_US.UTF-8.UTF-8, zh_CN.UTF-8.UTF-8
locale-gen
# 不推荐系统中文,避免 tty 乱码
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

# root 密码
passwd root

# 添加新用户
useradd -m -G wheel -s /bin/bash ${user}
passwd ${user}

# wheel 用户组使用 sudo 无需密码
visudo
%wheel ALL=(ALL:ALL) NOPASSWD: ALL

# 安装引导程序
pacman -S grub efibootmgr os-prober
# 安装 grub 到 EFI 分区
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
# 编辑 grub
vim /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX_DEFAULT="loglevel=5 nowatchdog"
# 新增 GRUB_DISABLE_OS_PROBER=false
# 生成 grub 配置
grub-mkconfig -o /boot/grub/grub.cfg

# 退出结果环境,拔出 U 盘,重启
exit
umount -R /mnt
reboot

○ 安装后

sh
# 非 root 登录

# 启动+开机自启网络管理
systemctl enable --now NetworkManager
ping www.bilibili.com

# 连接网络
nmtui

# 查看系统信息,非必须
pacman -S fastfetch
fastfetch

# 安装桌面 kde plasma,精简安装
# 参考包合集中的子包合集: https://archlinux.org/packages/extra/any/kde-applications-meta/
# 参考 KDE 推荐包:https://community.kde.org/Distributions/Packaging_Recommendations
sudo pacman -S plasma sddm kde-utilities-meta kde-system-meta
sudo pacman -S gwenview kdegraphics-thumbnailers koko spectacle
systemctl enable sddm
# 重启

# 设置 -> 区域和语言 -> 简体中文

# 重启不保留会话
# 设置 -> 桌面会话 -> 以空会话启动

# 更改 SDDM 样式:设置 -> 登录屏幕

# 如果没有识别 windows boot manager
sudo grub-mkconfig -o /boot/grub/grub.cfg

# 安装 nerd fonts
mkdir -p ~/.local/share/fonts
mv ~/Downloads/JetBrainsMono/* ~/.local/share/fonts/
fc-cache -fv
fc-list | grep ${font_name}
# 通用字体修改,配合 fonts.conf 使用
sudo pacman -S noto-fonts inter-font noto-fonts-cjk noto-fonts-emoji ttf-sarasa-gothic
# 使用字体配置,下载:https://github.com/szclsya/dotfiles/blob/master/fontconfig/fonts.conf
# 修改 monospace 的 family 为 JetBrainsMonoNL NF
mkdir -p ~/.config/fontconfig
cp ./fonts.conf ~/.config/fontconfig/

# 更换 shell,可选
sudo pacman -S zsh
chsh -s /bin/zsh
# Konsole 配置 -> 新建 -> 命令 zsh
# 重启 Konsole
#(可选)安装 oh-my-zsh

# 添加源,彩色、并行下载
kate /etc/pacman.conf
# 去除 multilib 分组的注释,并添加
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
# 生效
sudo pacman-key --lsign-key "farseerfc@archlinux.org"
sudo pacman -Sy archlinuxcn-keyring

# 安装 paru(yay 增强版)
# 需提前安装 cargo,如果通过 archlinuxcn 源安装则不需要
sudo pacman -S paru
kate /etc/paru.conf
# 去除 BottomUp 前面的注释

# 安装浏览器
sudo pacman -S firefox falkon

# 安装输入法,二选一(方案2完美)
sudo pacman -S fcitx5-im fcitx5-rime
paru fcitx5-input-support
# 设置 -> 虚拟键盘 -> fcitx5 wayland
# 设置 -> 输入法 -> 添加 rime
# 集成薄荷输入法 -> 修改配置中的输入法方案和自定义短语 -> 重新部署

# 修改应用启动参数,支持输入
# 按 win -> 右击应用 -> 编辑应用程序 -> 参数
--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime

# 查询已安装的软件,并卸载
paru -Ss ${keyword}
paru -Rs ${name}

参考

访问量 PV:Blocked用户数 UV:Blocked