Arch 安装及初始化配置

作者: Byron 最后更新: 2023-06-24

UEFI system-boot btrfs @ @home kde plasma


arch wiki 安装参考1 | 安装参考2 | 安装参考3 | 安装参考4 | 安装参考5 | 安装参考6 | 安装参考7 |

UEFI systemd-boot

crypt 磁盘加密

btrfs 子卷:@ @home @var @swap

使用交换文件进行休眠

kde plasma + sddm

timeshift 快照备份

调整控制台字体(可选)

终端字体 以大号字体显示

setfont ter-132n

修改 root 密码

passwd

无线连接

iwd: iNet wireless daemon

iwctl

device list

# <name> 为 device list 打印列表你中的名字,如 `station wlan0 scan`
station <name> scan

station <name> get-networks

# <ssid> 为 wifi名称
station <name> connect <ssid>

quit

# 测试网络连接
ping archlinux.org

ssh 安装 (可选)

以远控安装, cv用起来~ 远控安装时建议目标机器一直处于 ping 状态 OpenSSH

# openssh 在安装环境下已经预置了,不需要再安装, 验证 `pacman -Qi openssh`
# pacman -Syy openssh

# 启动服务
systemctl start sshd

# 查看 ip
ip addr

ssh 连接

# 另一台电脑 提示输入密码为前面设置的 root 密码
# <ip> 为上面查到的ip 地址,如: 192.168.1.80
ssh root@<ip>

更新系统时间

timedatectl set-ntp true

# 检查服务状态
timedatectl status

生成镜像源

镜像源 reflector

# 先停用自动更新服务,以防后面安装过程中进行自动更新把手动生成的覆盖掉
systemctl stop reflector.service

# 然后手动按需生成
## 位于中国 近12小时活跃 https协议 按速度排序 文件保存
reflector --country China --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

# 查看生成结果
cat /etc/pacman.d/mirrorlist

# 刷新源
pacman -Syy

磁盘分区

gPT fdisk

# 查看磁盘及分区
lsblk

# <disk> 为 lsblk 中对应的磁盘名,如 `gdisk /dev/nvme0n1`
gdisk /dev/<disk>

# ? 查看帮助 p 打印分区 d 删除分区 n 新建分区 w 应用修改且退出 q 直接退出


# 1 ef00 +512M
n
1
ENTER for default first sector
+512M
ef00

# 2 8300
n
2
ENTER for default first sector
ENTER for default last sector
ENTER for default type linux

# 保存并退出
w

# 确认分区
Y

# 查看磁盘分区情况
gdisk -l /dev/<disk>

格式化

File systems 创建文件系统

lsblk

# <part> 为 lsblk 中 ef00 对应的分区名,如 `mkfs.fat -F 32 /dev/nvme0n1p1`
## 效果同 `mkfs.vfat /dev/<part>
mkfs.fat -F 32 /dev/<part>

# <part> 为 lsblk 中 8300 对应的分区名,如 `cryptsetup luksFormat /dev/nvme0n1p2`
# 下面的 cryptroot 可自定义,但要注意后边安装过程也要保持一致
cryptsetup luksFormat /dev/<part>
YES
cryptsetup luksOpen /dev/<part> cryptroot
mkfs.btrfs /dev/mapper/cryptroot

# 查看格式化结果
lsblk -f

btrfs 子卷

Btrfs 很大原因是为以后如果要使用 timeshift 的 btrfs 类型备份时做预备 In BTRFS mode, snapshots are taken using the in-built features of the BTRFS filesystem. BTRFS snapshots are supported only on BTRFS systems having an Ubuntu-type subvolume layout (with @ and @home subvolumes).

# 先挂载根分区,用以在根分区上创建 btrfs 子卷
mount /dev/mapper/cryptroot /mnt

# 添加子卷 @ @home @var @swap
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var
btrfs subvolume create /mnt/@swap

ls /mnt

umount /mnt

挂载

挂载文件系统

# 挂载 @
mount -o noatime,space_cache=v2,compress=zstd,ssd,discard=async,subvol=@ /dev/mapper/cryptroot /mnt

# 创建@home 及 efi 等挂载位置
mkdir -p /mnt/{boot,home,var,swap}

# 挂载 @home
mount -o noatime,space_cache=v2,compress=zstd,ssd,discard=async,subvol=@home /dev/mapper/cryptroot /mnt/home

# 挂载 @var
mount -o noatime,space_cache=v2,compress=zstd,ssd,discard=async,subvol=@var /dev/mapper/cryptroot /mnt/var

# 挂载 @swap
mount -o noatime,space_cache=v2,ssd,subvol=@swap /dev/mapper/cryptroot /mnt/swap

# 挂载 efi
# <part> 为 lsblk 中 ef00 对应的分区名,如 `mount /dev/nvme0n1p1 /mnt/boot`
mount /dev/<part> /mnt/boot

# 查看结果
lsblk

安装系统基本软件包

安装必需的软件包

# btrfs-progs  btrfs 所需
pacstrap /mnt base base-devel linux linux-firmware linux-headers btrfs-progs

生成 fstab 文件

fstab

# 用 -U 或 -L 选项设置 UUID 或卷标
genfstab -U /mnt >> /mnt/etc/fstab

# 查看生成的文件
cat /mnt/etc/fstab

进入安装的系统

Chroot

arch-chroot /mnt

pacman -Syy

修改 root 密码

passwd

添加普通用户

用户管理

echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel

# liamrad 可自定义,但要注意后边的要和自定义的一致
useradd -m liamrad

# 用户组
usermod -aG wheel liamrad

# 配置密码
passwd liamrad

添加中国仓库源(可选)

archlinuxcn Official repositories

# 编辑 /etc/pacman.conf
echo "\
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/\$arch" >> /etc/pacman.conf

# 查看编辑结果
cat /etc/pacman.conf

# 安装 keyring
pacman -Syy archlinuxcn-keyring

时区

时区 硬件时钟

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

hwclock --systohc

语言环境

Locale

echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
echo 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen

cat /etc/locale.gen

locale-gen

echo 'LANG=en_US.UTF-8' > /etc/locale.conf

cat /etc/locale.conf

网络配置

设置计算机名

# 配置主机名
# archlinux 可自定义,但要注意后边的要和自定义的一致
echo archlinux > /etc/hostname

# archlinux 为上面定义的主机名
echo "\
127.0.0.1	localhost
::1		localhost
127.0.1.1	archlinux.localdomain	archlinux" >> /etc/hosts

# 查看 hosts
cat /etc/hosts

# 安装网络管理器
pacman -S networkmanager
# 自启动
systemctl enable NetworkManager

配置Initramfs

# 先安装一下 vim,一个编辑器
pacman -Sy vim

# 编辑文件
vim /etc/mkinitcpio.conf

# 对应修改,添加 btrfs encrypt, 注意位置顺序
MODULES=(btrfs)
HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard fsck)

# 生成新的参数配置
mkinitcpio -p linux

配置引导程序

systemd-boot Microcode

# amd-ucode / intel-ucode
pacman -S efibootmgr amd-ucode

# 安装 EFI 启动管理器
bootctl --path=/boot install

# 启动选单配置
echo "\
timeout 10
default arch.conf" >> /boot/loader/loader.conf

# 增加启动选项 arch
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
echo -e "\
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options cryptdevice=UUID=`blkid -s UUID -o value /dev/nvme0n1p2`:cryptroot root=/dev/mapper/cryptroot rw rootflags=subvol=@ \c" > /boot/loader/entries/arch.conf

# 增加启动选项 arch-fallback
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
## 其中的 nvme0n1p2 替换为前面 8300 对应的分区
echo -e "\
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux-fallback.img
options cryptdevice=UUID=`blkid -s UUID -o value /dev/nvme0n1p2`:cryptroot root=/dev/mapper/cryptroot rw rootflags=subvol=@ \c" > /boot/loader/entries/arch-fallback.conf

显卡驱动

Xorg: 驱动安装

# amd
## GCN 3(不包含) 之前的需要安装 xf86-video-ati 替换 xf86-video-amdgpu
## 现在新电脑无脑 xf86-video-amdgpu 就可以
pacman -S xf86-video-amdgpu vulkan-radeon mesa

# inter(未自测)
pacman -S xf86-video-inter vulkan-inter mesa

# nvidia(未自测)
pacman -S nvidia nvidia-setings nvidia-utils

字体

Fonts

# 英文
pacman -S ttf-dejavu

# 中文
pacman -S wqy-zenhei wqy-microhei noto-fonts-cjk

# emoji
pacman -S noto-fonts-emoji
# 更多可按需添加,部分罗列
ttf-dejavu ttf-droid ttf-hack ttf-font-awesome otf-font-awesome ttf-lato ttf-liberation ttf-linux-libertine ttf-opensans ttf-roboto ttf-ubuntu-font-family

ttf-hannom noto-fonts noto-fonts-extra noto-fonts-emoji noto-fonts-cjk adobe-source-code-pro-fonts adobe-source-sans-fonts adobe-source-serif-fonts adobe-source-han-sans-cn-fonts adobe-source-han-sans-hk-fonts adobe-source-han-sans-tw-fonts adobe-source-han-serif-cn-fonts wqy-zenhei wqy-microhei

蓝牙

蓝牙 安装在虚拟机可不用安装,直接在虚拟机软件里使用宿主机的设备就可以

pacman -S bluez bluez-utils

# 蓝牙服务自启动
systemctl enable bluetooth

声音

Advanced Linux Sound Architecture,ALSA PulseAudio PipeWire

#pacman -S alsa-utils pulseaudio pulseaudio-bluetooth
pacman -S pipewire pipewire-alsa pipewire-pulse pipewire-jack xdg-desktop-portal xdg-desktop-portal-kde

打印机

CUPS

pacman -S cups

# 打印机服务自启动
systemctl enable cups

输入法

Fcitx5 是继 Fcitx 后的新一代输入法框架。

pacman -S fcitx5-im fcitx5-chinese-addons

# 字库(推荐)
pacman -S fcitx5-pinyin-zhwiki

# 配置环境变量,以在应用程序中正常使用
echo "\
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx" >> /etc/environment

# 检查编辑结果
cat /etc/environment

图形界面

Xorg Desktop environment 桌面环境 Display manager 显示管理器 kde

pacman -S xorg

# 桌面环境 plasma & 显示管理器 sddm
## plasma-wayland-session 可选
pacman -S plasma sddm

# sddm 自启动
systemctl enable sddm

# 一些应用
## kde-applications 全套kde应用安装
pacman -S kde-applications
## 1. 也可以自己挑选单独的子软件包组按需安装
### https://archlinux.org/packages/extra/any/kde-applications-meta/
pacman -S kde-accessibility-meta kde-system-meta ...
## 2. 或单独安装所需的软件:文件管理器 浏览器 文本编辑器 终端
pacman -S dolphin chromium kate konsole

# 一些工具软件(可选)
# vim 终端中的文本编辑器
# git 分布式版本管理工具
# openssh ssh
# bash-completion bash命令补全
# reflector 镜像列表生成
# print-manager kde 上的打印机 GUI 管理
pacman -S vim git openssh bash-completion reflector print-manager

重启进入系统界面

安装完毕,至日常可用状态

# 退出 chroot 环境
exit

# 手动卸载被挂载的分区(可选)
## 这有助于发现任何「繁忙」的分区,并通过 fuser(1) 查找原因
umount -R /mnt

# systemd 将自动卸载仍然挂载的任何分区
reboot

交换文件(推荐)

Btrfs: 交换文件 Swap File swap 分区大小参考

创建交换文件

# root 用户模式
su

# 创建交换文件
## 文件大小建议为内存的1-1.5倍,我的内存是32G, 设置 40960 为40G (40 * 1024)
btrfs filesystem mkswapfile --size=40g /swap/swapfile

# 启用 swap
swapon /swap/swapfile

# 编辑表文件
echo '/swap/swapfile none swap defaults 0 0' >> /etc/fstab

# 检查
cat /proc/swaps
free -h

删除交换文件

# 先关闭 swap
swapoff /swap/swapfile

# 然后删除文件
rm -rf /swap/swapfile

# 编辑 /etc/fstab 移除创建时添加的行
## 如移除:/swap/swapfile none swap defaults 0 0
vim /etc/fstab

休眠(推荐)

休眠到交换文件 休眠

# root 用户模式
su

# 打印 resume_offset
btrfs inspect-internal map-swapfile -r /swap/swapfile

# 打印 resume
blkid -s UUID -o value /dev/mapper/cryptroot

# 存到会话变量里
export myresumeoffset=`btrfs inspect-internal map-swapfile -r /swap/swapfile`
export myresume=`blkid -s UUID -o value /dev/mapper/cryptroot`

# 配置引导程序
## 在起初创建文件时使用了 -e 参数以及 \c 特殊字符,这两个作用就是在最后不添加换行符号
## 以便在这里将新内容直接添加在 options 所在行
echo "resume=UUID=$myresume resume_offset=$myresumeoffset" >> /boot/loader/entries/arch.conf
echo "resume=UUID=$myresume resume_offset=$myresumeoffset" >> /boot/loader/entries/arch-fallback.conf

# 配置Initramfs
vim /etc/mkinitcpio.conf

# 对应修改,添加 resume,注意位置顺序
HOOKS=(base udev autodetect modconf block encrypt filesystems resume keyboard fsck)

# 生成新的参数配置
mkinitcpio -p linux

# 重启以应用
reboot

# 验证
while true ; do date ; sleep 1 ; done

# 重新开一个终端
# 休眠
systemctl hibernate

# 然后开机,查看用于验证的终端是否再继续打印,以及中间有一段时间的空闲,那是电脑休眠的时间

AUR(推荐)

paru——一个 aur助手,集成下载构建安装

# 准备克隆
sudo pacman -S git

git clone https://aur.archlinux.org/paru-bin

cd paru-bin

# (在非root用户下执行)
makepkg -si

# 使用帮助
paru --help

timeshift(推荐)

快照备份

paru -S timeshift-bin

# 自动备份(可选)
## 更新时自动增加更新前的快照
paru -S timeshift-autosnap

更多

软件包存档

archive

启用 root 的 ssh 连接

不推荐,不过可以在安装完后再改回去 #PermitRootLogin prohibit-password

# 需要先安装 ssh 才有这个文件
pacman -S openssh

vim /etc/ssh/sshd_config
# 将 PermitRootLogin 值改为 yes 并取消注释

命令行配置网络

NetworkManager

# 获取网络设备名称(因为新系统不一定与前面获取的一致)
ip addr

# 进入 tui
nmtui

# edit a connection
# Add
# Wi-Fi
# Device: 网络设备名称
# SSID: 无线名称
# Security: WPA & WPA2 Personal
# Password: 无线密码
# Ok
# Back
# Quit

ip addr

# 测试网络连接
ping -c 4 baidu.com

清除缓存

pacman -Scc

freetype2 渲染

# freetype2 渲染
vim /etc/profile.d/freetype2.sh

# 去除注释 export ...

禁用蜂鸣器

su

rmmod pcspkr

echo "blacklist pcspkr" >> /etc/modprobe.d/nobeep.conf

exit

ssd优化

TRIM

pacman -S util-linux

# 定时任务
systemctl enable fstrim.timer

性能

arch wiki

# pacman -S nvme-cli

discover: not application back-ends found

解决方案

pacman -S packagekit-qt5

KDE WALLET

kde Writing login information to the keychain failed with error 'GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files'. github issue pr

# 暂未合并, 目前可以通过 aur 安装
paru -S kwallet-secrets

# 或
pacman -S gnome-keyring

固定DNS以防被污染

vim /etc/resolv.conf

# 填入以下内容
nameserver 8.8.8.8
nameserver 114.114.114.114

# 只读文件保存并退出 :wq!

# 防止程序覆盖
chattr +i /etc/resolv.conf

makepfg

减少编译时间

# 获得可用处理器的个数
nproc

vim /etc/makepkg.conf
# 将 MAKEFLAGS 后面值中的数字部分改为不大于上面个数的数字,并取消注释

linux 关机时间长

通过减少默认停止超时来加快 Linux 中的关机速度

vim /etc/systemd/system.conf

# 修改 DefaultTimeoutStopSec 并取消注释
## 如 5秒
DefaultTimeoutStopSec=5s

pacman 一些偏好设置

vim /etc/pacman.conf

# 并行下载(默认依次下载)
## 修改 ParalleDownloads 为正整数,正整数就是所要并行下载的包的数量

# 升级前对比版本
## 要查看旧版和新版的有效安装包,请取消/etc/pacman.conf中"VerbosePkgLists"的注释

zram

zram

zramd: Automatically setup swap on zram

# 禁用zswap
echo 0 > /sys/module/zswap/parameters/enabled

# 安装(其中某些文件可能需要T)
paru -S zramd

# 配置文件
vim /etc/default/zramd

# 启动
## --now Start or stop unit after enabling or disabling it
systemctl enable --now zramd.service

# 查看是否多出一个swap 设备
lsblk

sddm 开启虚拟键盘

arch wiki

# 安装
pacman -S qt5-virtualkeyboard

# 配置
# /etc/sddm.conf.d/virtualkbd.conf
[General]
InputMethod=qtvirtualkeyboard