Zj_W1nd's BLOG

Arch安装备忘手册

2025/02/24

首先的首先,最重要的参考来自于archlinux简明指南

写在前面

这篇文章的目的是整齐,简明地归纳笔者自己日常linux所接触到的一些经验,免得在搜索引擎屎里淘金。但是作者本人的记性很不好,所以可能有所缺疏。特别地,本文尤其针对的是ArchLinux这一发行版。

你是否需要从0开始安装一个基本系统?

直接参考archlinux简明指南,正如指南中强调的,不要试图更改一些指南中提供的设置,除非你真的真的完全知道自己在做什么。这部分的经验对于所有操作系统应当都是类似的。

简单来说就是:

  • 同步时间,联网,换源

  • 分区和格式化,efi,交换分区和主分区(btrfs)

  • 挂载并安装系统,设置基本信息如时区,用户名密码

  • 安装引导程序和其他必须组件

由于pacman的强大,过程并不困难

btrfs

同样,可以阅读archlinux简明指南上的介绍不要安装传统的ext4 linux文件系统,使用更好的btrfs。我们不关心具体怎么实现的,只知道这是一个提供了很多很好特性的文件系统即可。

尤其是对于:

  • SSD的大幅优化,包括写时复制和透明压缩特性

  • 子卷和克隆特性让其支持非常方便的快照(甚至是快照的快照)

其中,后者特性对于archlinux是非常重要的,因为arch不停地在滚动更新,我们折腾的时候会非常有帮助。采用神奇的btrfs后,我们的系统就能用极其小的空间进行增量快照备份。(而相对的,使用ext4符合我们的直觉——快照需要拷贝整个磁盘)

这一部分的快速命令指南:

LiveCD使用windows下的rufus制作。下面我会列出archlinux简明指南上所有相关的命令和作用。这一部分假设不会遇到任何的问题和报错。

LiveCD环境下:

同步时间,联网,换源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#-- 禁用镜像内的自动更新源服务,人在国外的就无所谓了
systemctl stop reflector.service
# 检查状态
systemctl status reflector.service

#-- 无线连接网络,有线应当自动连接
iwctl # 进入交互式命令行
device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出所有 wifi 网络
station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可
exit # 连接成功后退出

#-- 更新时钟
timedatectl set-ntp true
# 检查
timedatectl status

#--换源
vim /etc/pacman.d/mirrorlist
# 添加国内源,如果自己的学校有优先用自己的,放在最上面
# 不要在这一步添加archlinuxcn
Server = https://mirrors.hust.edu.cn/archlinux/$repo/os/$arch # 华科的
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch # 清华大学开源软件镜像站
Server = https://repo.huaweicloud.com/archlinux/$repo/os/$arch # 华为开源镜像站
Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch # 兰州大学开源镜像站

分区和格式化

遇到的问题或想使用ext4分区请参考ArchLinux简明指南

1
2
lsblk # 查看设备
cfdisk /dev/sd_

注意⚠️,cfdisk对于大小的设置是M和G而不是Mb和Gb,输入Mb和Gb也能识别但大小会有误,务必检查

cfdisk的界面完全是可读的。参考简明指南即可。

1
2
# 检查
fdisk -l

格式化操作如下,如果和windows共存则不要格式化efi分区,以下操作都是对空间操作的。

1
2
3
4
5
6
7
#efi
mkfs.fat -F32 /dev/sdxn #sata
mkfs.fat -F32 /dev/nvmexn1pn # nvme

mkswap /dev/sdxn #swap

mkfs.btrfs -L MyArch /dev/sdxn #btrfs,-L是名字-label,无特殊字符和空格

设置btrfs

1
2
3
4
5
6
7
8
9
10
11
12
13
mount -t btrfs -o compress=zstd /dev/sdxn /mnt #挂载
# 这是为了使用timeshift做准备,请尽可能严格按照这个分区命名和设置
btrfs subvolume create /mnt/@ # 创建 / 目录子卷
btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
btrfs subvolume list -p /mnt #检查
umount /mnt
# 挂载系统
mount -t btrfs -o subvol=/@,compress=zstd /dev/sdxn /mnt # 挂载 / 目录
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdxn /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot 目录
mount /dev/sdxn /mnt/boot # 挂载 /boot 目录
swapon /dev/sdxn # 挂载交换分区

安装系统

1
2
3
4
5
6
7
8
pacstrap /mnt base base-devel linux linux-firmware btrfs-progs
# 如果使用btrfs文件系统,额外安装一个btrfs-progs包
pacstrap /mnt networkmanager vim sudo zsh zsh-completions # 其实bash也行

genfstab -U /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab # 检查

arch-chroot /mnt # 切换

💡Tips: 注意,在我们的系统无法启动什么也做不了的时候,同样可以用livecd的这个命令检查修复

从这一步后,我们就进入了真正的系统

1
2
vim /etc/hostname # 输入主机名即可
vim /etc/hosts #配置本地hosts如下
1
2
3
127.0.0.1   localhost
::1 localhost
127.0.1.1 myarch.localdomain myarch
1
2
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 时区
hwclock --systohc # 硬件同步时间
1
2
3
4
5
vim /etc/locale.gen # 去掉enUS和zhCN 两个utf8的注释
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

passwd root
1
2
pacman -S intel-ucode # Intel 微码
pacman -S amd-ucode # AMD

grub引导

建议配置,grub引导比没有强,作者之前不用,u盘直插启动,内核参数相关的配置稍微繁琐一点。

1
2
3
pacman -S grub efibootmgr os-prober
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
vim /etc/default/grub

配置grub参数需要:

  • GRUB_CMDLINE_LINUX_DEFAULT内核参数去掉quiet,loglevel=5方便观察

  • 加入nowatchdog(参考这里

  • 如果要配置n卡驱动怕等下遇到问题,可以提前加入ibt=off等

  • 取消最后一行的GRUB_DISABLE_OS_PROBER=false注释,如果要引导win的话

1
2
3
4
5
grub-mkconfig -o /boot/grub/grub.cfg

exit # 退回安装环境
umount -R /mnt # 卸载新分区
reboot # 重启

重启后

1
2
3
4
systemctl enable --now NetworkManager
# 无线:
nmcli dev wifi list # 显示附近的 Wi-Fi 网络
nmcli dev wifi connect "Wi-Fi名(SSID)" password "网络密码" # 连接指定的无线网络
1
2
3
4
5
6
vim ~/.bash_profile #添加 export EDITOR='vim'
useradd -m -G wheel -s /bin/bash myusername
passwd myusername
EDITOR=vim visudo # 这里需要显式的指定编辑器,因为上面的环境变量还未生效
# 取消注释这一行:
#%wheel ALL=(ALL:ALL) ALL

开启pacman32位和archlinuxcn:

1
2
3
4
5
6
7
8
9
vim /etc/pacman.conf
# 去掉multilib注释
# 添加(选一个也行):
[archlinuxcn]
Server = https://mirrors.hust.edu.cn/archlinuxcn/$arch
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch # 清华大学开源软件镜像站
Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch # 哈尔滨工业大学开源镜像站
Server = https://repo.huaweicloud.com/archlinuxcn/$arch # 华为开源镜像站
1
pacman -Syyu

更细节的设置命令

安装桌面和必备其他组件

1
2
3
4
5
6
7
8
pacman -S plasma-meta konsole dolphin # plasma-meta 元软件包、konsole 终端模拟器和 dolphin 文件管理器
pacman -S plasma-workspace xdg-desktop-portal egl-wayland
# N卡用户需要额外安装egl-wayland,xdg-desktop-portal包是为了如obs此类工具录制屏幕使用
# xdg-desktop-portal包组提供了不同环境下使用的软件包
# 例如kde用户可选择xdg-desktop-portal-kde包
systemctl enable sddm
systemctl start sddm # 或者重启reboot
# n卡推荐x11启动
1
2
3
4
5
6
7
8
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf # 声音固件
sudo pacman -S ntfs-3g # 使系统可以识别 NTFS 格式的硬盘,双系统必装,win是ntfs
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei # 安装几个开源中文字体。一般装上文泉驿就能解决大多 wine 应用中文方块的问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra # 安装谷歌开源字体及表情
sudo pacman -S ark # 压缩软件。在 dolphin 中可用右键解压压缩包
sudo pacman -S gwenview # 图片查看器
sudo pacman -S archlinuxcn-keyring # cn 源中的签名(archlinuxcn-keyring 在 archlinuxcn)
sudo pacman -S yay # yay 命令可以让用户安装 AUR 中的软件(yay 在 archlinuxcn)

输入法

1
2
3
4
5
sudo pacman -S fcitx5-im # 输入法基础包组
sudo pacman -S fcitx5-chinese-addons # 官方中文输入引擎
sudo pacman -S fcitx5-anthy # 日文输入引擎
sudo pacman -S fcitx5-pinyin-moegirl # 萌娘百科词库。二刺猿必备(archlinuxcn)
sudo pacman -S fcitx5-material-color # 输入法主题

编辑~/.config/environment.d/im.conf

1
2
3
4
5
6
# fix fcitx problem
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

更进一步的配置/更好用的输入法参见可选配置

timeshift

pacman就行,参考应用安装

blackArch

官网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Run https://blackarch.org/strap.sh as root and follow the instructions.

$ curl -O https://blackarch.org/strap.sh
# Verify the SHA1 sum

$ echo bbf0a0b838aed0ec05fff2d375dd17591cbdf8aa strap.sh | sha1sum -c
# Set execute bit

$ chmod +x strap.sh
# Run strap.sh

$ sudo ./strap.sh
# Enable multilib following https://wiki.archlinux.org/index.php/Official_repositories#Enabling_multilib and run:

$ sudo pacman -Syu

显卡驱动

这里的所有内容只适用于iu+n卡,其他请参考archwiki或archlinux简明教程对应的部分。如果你也是同样配置并且需要笔记本双显卡,下面的内容可能会很管用。个人笔记本是y9000x 2022版本。

这不一定适用于你的笔记本和显卡!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                  -`                    zjw1nd@MATRIX-02-B 
.o+` ------------------
`ooo/ OS: Arch Linux x86_64
`+oooo: Host: 82TF Legion Y9000X IAH7
`+oooooo: Kernel: 6.13.4-arch1-1
-+oooooo+: Uptime: 3 hours, 2 mins
`/:-:++oooo+: Packages: 1033 (pacman)
`/++++/+++++++: Shell: zsh 5.9
`/++++++++++++++: Resolution: 2560x1440
`/+++ooooooooooooo/` DE: Plasma 6.3.1
./ooosssso++osssssso+` WM: KWin
.oossssso-````/ossssss+` Theme: Breeze-Dark [GTK2], Breeze [GTK3]
-osssssso. :ssssssso. Icons: breeze-dark [GTK2/3]
:osssssss/ osssso+++. Terminal: konsole
/ossssssss/ +ssssooo/- Terminal Font: FiraCode Nerd Font 10
`/ossssso+/:- -:/+osssso+- CPU: 12th Gen Intel i7-12700H (20) @ 4.600GHz
`+sso+:-` `.-/+oso: GPU: Intel Alder Lake-P GT2 [Iris Xe Graphics]
`++:. `-/+/ GPU: NVIDIA GeForce RTX 3060 Mobile / Max-Q
.` `/ Memory: 6705MiB / 39850MiB

首先,安装核显和n卡的驱动

1
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel

⚠️再次强调,英伟达的闭源驱动是和内核版本强绑定的,请一定在安装n卡驱动前执行pacman Syu操作!否则会出现很多意想不到的问题

如果你不确定,则先不要执行下面的命令,先向后看

1
2
3
sudo pacman -S nvidia-open nvidia-settings lib32-nvidia-utils # 必须安装
nvidia-smi #检查,输出在gpu上工作的进程
lspci | grep -i vga #检查,看你的显卡驱动,这个可以执行

安装后,先将kms从/etc/mkinitcpio.conf里的HOOKS移除并重新生成initramfs,即mkinitcpio -P。这样可以避免initramfs包含nouveau。我个人的环境重装后执行到这里就可以了。

3060 mobile是一个很尬的版本。我个人在更新内核后直接安装了nvidia-open包就没问题了,但是过程中踩了一万个坑,现在,下面是一些备选的解决方法,我不确定哪些有用但提供在这里。同时建议n卡使用xorg显示服务器,n卡对wayland的支持并不算好,wayland主要是流畅动画和hdr,如果需要wayland则继续向后看。

  • 无论怎么装nvidia-smi都显示连接不到驱动——很可能是上面说的内核版本的问题

  • 添加内核参数ibt=off,如果你使用了grub,则编辑/etc/default/grub中的内核参数CMDLINE_DEFAULT.如果没有,则参考archlinux wiki上的内核参数页面进行配置,有很多办法。这是intel的一个间接跳转控制流保护机制,简单来说就是只允许jmp rax这样的指令在核态跳到标记过的位置。

  • 安装后发现n卡驱动还是开源驱动nouveau——arch自带了开源驱动nouveau,才能点亮桌面的。n卡应该默认会屏蔽nouveau,如果没有可以卸载nouveau,并在内核参数中添加黑名单禁止nouveau的加载。内核启动参数添加module_blacklist=nouveau然后更新grub。或在/etc/modprobe.d中创建一个blacklist.conf,添加

1
2
blacklist nouveau
options nouveau modeset=0

同理,类似的思想可以用于很多地方,也可以反向让nouveau开启。

  • 如果你不是用的“linux”内核,而是linux-zen或者linux-lts,则安装对应驱动,将nvidia-open替换为nvidia-open-lts,nvida-open-zen或nvidia-open-dkms。需要注意的是,dkms包是一个不和内核绑定的驱动,在其他驱动遇到问题之后也可以再来尝试这个驱动。dkms需要内核对应的linuxheader,一般会作为依赖一起安装。

  • 如果你需要Wayland,还需要启用两个nvidia_drm的两个内核参数:modeset和fbdev,二者在新的nvidia驱动包中被默认启用,但还是建议自己在内核参数添加一下。

1
2
cat /sys/module/nvidia_drm/parameters/fbdev # 检查,失败返回缺少文件
cat /sys/module/nvidia_drm/parameters/modeset # 正确返回Y

以上都没能解决的话,更多的内容,可以参考archlinuxwiki上的NVIDIANVIDIA/故障排错

双显卡配置

我个人使用了optimus-manager,所以推荐这个。envycontrol把我电脑整崩溃了所以个人不推荐,当然你也可以试试。

1
2
yay -S optimus-manager optimus-manager-qt
sudo systemctl enable optimus-manager.service

这时重启应该就能使用optimus-manager了。
⚠️注意,如果你对你的环境没有自信(比如我),一定要在每次切换显卡完后手动注销一次观察是否正常再关机,不要切换后直接关机,否则可能会莫名其妙的黑屏更多的与游戏运行,双显卡动态工作切换相关的可以参考简明指南

然后是电源策略,对于双显卡,如果不做手动电源策略配置,一般来说就算切换到集显模式,没有bios禁用独显的话,它也会一直工作耗电,很sb。因此需要我们配置optimus的电源策略。我个人尝试过的有两种,bbswitch策略在切换集显关机后再开tty2就黑屏了,我也不知道怎么修,tty3能用,反正刚装好没多久就重装了。

重装是解决arch很多问题最快的方案()

对于电源策略,请参考optimus-manager的官方文档,并且一定要看完。我采用的策略就是第一条,首先将optimus-manager的电源策略设置为custom,然后找到它的配置文件/etc/optimus-manager/optimus-manager.conf,将nvidia下的参数设置这一条dynamic_power_management=fine即可。这时,n卡自带的电源策略会根据其参数设置(fine: 短时间没有进程向gpu提交作业后进入低功耗;coarse: 没有应用使用n卡驱动后进入低功耗,参考默认配置的注释)降低自己的功耗,这时可以一直开hybrid模式。注意,这一功能需要n卡支持,请通过:

1
2
cat /proc/driver/nvidia/gpus/0000:01:00.0/power
# Runtime D3 status: xxx会显示是否支持

来查看是否支持。

这一方案自己的实测,nvidia-smi会显示显卡off,功率大概会降低到20w左右,没有完全关闭。不过配合TLP,基本上上课一个半小时跑linux基本不掉电,很无敌,薄纱windows。

⚠️注意,电源策略是非常“个性化”的,需要尝试,请确保更改前做备份,或是保留了重装的livecd,我就是在bbswitch黑屏了重装的

安全启动

可以结合这篇一起看

如果由于某些原因(指瓦洛兰特国际服反作弊vanguard)你需要平常开启安全启动,则可以参考这里。上面的blog中提供了自己手动签名内核并写入uefi的办法,

对于arch,有一个很好用的软件:

1
sudo pacman -S sbctl

⚠️注意,这一软件未必对所有的硬件环境都有效,可能仍然需要手动签名

1
2
3
4
5
sbctl create-keys
sbctl enroll-keys -m # 密钥和微软的一起登入uefi
sbctl verify
sbctl sign -s /boot/vmlinuz-linux
sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI # 签署相关内容

使用sbctl的好处是,其自带一个能够在内核更新后签署的pacmanhook,省事。

更多内容以及自己手动签名的细节操作,请参考ArchWiki的安全启动部分。

一些关键的配置:

grub

/etc/default/grub
更改后使用grub-mkconfig重新生成引导

sddm

默认在/etc/sddm.conf.d目录下

pacman

镜像 /etc/pacman.d/mirrorlist
配置 /etc/pacman.conf

zsh/bash

~/.bashrc或.zshrc

其他

第三方应用:/opt
自定义相关:/usr/share
systemctl 命令
mount命令用-o指定挂载参数,-t指定分区,用df -h查看挂载情况,fdisk -l查看磁盘情况

通用排错

journalctl

journalctl命令可以输出systemd的日志,参考帮助参数,其可以输出很多东西,包括启动过程中的日志。

Arch LiveCD

用你的安装盘,其自带一个mini的arch系统,和我们安装时候做的一样,将主系统挂载到/mnt之后,可以在你的主系统翻车之后用其修复。我在尝试替换运行库的时候将一个低版本的libm.so.6放入了系统lib库(改名)结果全烂了,命令用不了加系统关机无法启动,直接插上liveCD改名后挂载改回来就行了。

CATALOG
  1. 1. 写在前面
  2. 2. 你是否需要从0开始安装一个基本系统?
    1. 2.1. btrfs
    2. 2.2. 这一部分的快速命令指南:
      1. 2.2.1. 同步时间,联网,换源
      2. 2.2.2. 分区和格式化
      3. 2.2.3. 安装系统
      4. 2.2.4. grub引导
      5. 2.2.5. 重启后
  3. 3. 更细节的设置命令
    1. 3.1. 安装桌面和必备其他组件
    2. 3.2. 输入法
    3. 3.3. timeshift
    4. 3.4. blackArch
  4. 4. 显卡驱动
    1. 4.1. 首先,安装核显和n卡的驱动
    2. 4.2. 双显卡配置
  5. 5. 安全启动
  6. 6. 一些关键的配置:
    1. 6.1. grub
    2. 6.2. sddm
    3. 6.3. pacman
    4. 6.4. zsh/bash
    5. 6.5. 其他
  7. 7. 通用排错
    1. 7.1. journalctl
    2. 7.2. Arch LiveCD