起因
最近重装了一遍 Archlinux,然后决定顺手记录一下自己在安装前后做的各种事情,以及一些碎碎念般的注意事项。注意本文并不是教程,顶多算是用来记录自己做过那些改动以及防止以后踩坑,使用时还需要搭配具体教程。说起来自己之前写过 Manjaro 的安装记录来着,在这次安装过程中也确实对自己有些帮助。不过由于这次希望愉快的使用 Wayland,所以就趁着重装的机会换到了 Gnome 阵营。
在启动到安装界面之前
- 先对旧的系统进行 snapshot,备份到外部存储,如果懒得弄那么只把
/etc
,/root
,~
备份一下也可以。 pacman -Qqe
可以来一下,但是实际上那么多的包只会让人觉得头皮发麻,而且既然选择重装肯定是希望舍掉那些以前装了却用不到的软件包。- 下载完 Image 后记得验证签名。
- 记下自己目前使用的 pacman mirror 的地址,安装的时候可能用到。
- 记下自己硬盘目前的分区,以供安装新的系统时参考,在需要操作分区或者格式化时不至于晕头转向。
- 开机选启动项的时候选带 UEFI 开头的优盘分区,不然 Boot Mode 可能变成 BIOS/CSM。
进入到启动界面之后
- 选择把系统加载到内存中,速度更快也更有利于隐私。
- 对需要抹除数据的 SSD 进行全盘 TRIM:
blkdiscard /dev/...
。 - 分区或者格式化前先
lsbk
一下,不然命令打一半时肯定会被一堆硬盘/分区搞晕。 LUKS
使用 luks2,然后 使用cryptsetup config /dev/xxx --label LABEL
给分区添加 label.- 格式化完 btrfs 分区后,先去建立好子卷:
@
,@home
以及@snapshot
等同时更改一下默认挂载的子卷。 - 没必要洁癖到把 ESP 分区里的内容全都删干净,不然还得去修复别的系统的 Boot Loader。
- 把 ESP 分区挂在到
/esp
,新建/esp/arch
,然后mount --bind esp/arch /boot
,这样的好处是可以让生成的一堆 initramfs 都工整得保存在一个目录里,同时对于需要安装多个 Archlinux 的情况也更友好。 - 把能挂载的分区都挂载上,这样生成 fstab 的时候可以一并生成相关条目。
安装期间
安装程序会自动使用 reflector 对镜像进行排序,但是仍然建议手动选择一个靠谱的、被普遍使用的 mirror,最重要的是同步要及时、完全,速度倒是其次1。条件允许的话可以直接使用 https://america.mirror.pkgbuild.com。
安装时除了
base
,linux
和linux-firmware
外,顺便安装其它用得到的包,目标是重启后可以进入有网络连接的命令行:linux-lts
(可选)。- 文件系统相关的包,例如
btrfs-progs
,lvm2
等。 sudo
。networkmanager
,虽然systemd-resolved
和systemd-networkd
也不是不能用,不过重启后需要自己来设置,而且networkmanager
和桌面环境集成的比较好反正早晚要装不是。base-devel
,默认没有装,不过反正早晚要用到。- 命令行下可能用到的其他工具,例如自己顺手的 shell(
fish
&zsh
),文本编辑器neovim
,还有man-db
。
genfstab -U /mnt >> /mnt/etc/fstab
后记得编辑一下生成的fstab
,把不重要的分区设置成nofail
,以及对不太可能挂载失败的分区设置一下device-timeout=10
。arch-chroot
后先新建一个用户,加到wheel
用户组里,然后编辑/etc/sudoers
允许wheel
里的用户执行命令(不要直接把自己的用户加进去,到时候会导致桌面环境的 polkit 询问 root 密码而不是当前用户的密码)。切换到刚才新建的用户,改一下 root 的密码,我一般随机生成一个:
echo root:$(openssl rand -base64 128) | chpasswd -c SHA512
不过如果如果是 emergency mode 的常客,还是设置个自己记得住的密码吧。
给其它加密分区添加一个随机生成的 key,保存到 /root 目录,然后编辑
/etc/crypttab
添加相应的条目以实现自动解锁其它分区。编辑
mkinitcpio.conf
,把udev
换成systemd
(纯粹个人习惯), 另外加上自己要用到的 hook,例如encrypt
/sd-encrypt
,最后记得mkinitcpio -P
。Boot Loader:
选 rEFInd。
确认 boot options 里提供了足够系统启动的信息,例如
root=UUID=xxxx-xxxx rw rootflags=subvol=@ rd.luks.name=xxxx-xxxx=cryptroot
然后把 quiet 删掉,有助于启动失败时的排错。记得在修改 boot options 时备份一下原来的内容,这样改失败了比较方便改回去。
安装 microcode,rEFInd 需要手动设置相应的 initrd。
- 再次检查可能第一次启动时失败的常见原因:
- 忘了重新生成 initramfs。
- boot options 里少了选项。
- 挂载分区失败。
- 重启前记得重启前记得
umount -R /mnt
和cryptsetup close
。
安装后
先设置
XDG_CONFIG_HOME
这些环境变量,否则部分软件会直接把相关文件扔到 home 目录,提前设置好就可以避免到时候的转移工作,同时把 HOME 目录权限设置为u=rx,g=,o=
可以根治那些不遵守 XDG 目录规范的软件,不过面对部分钉子户我们不得不妥协,例如:.gnupg/
可以换地方,但是需要手动更新 SOCKET。.mozilla/
一时半会儿指望不了上游修复。.ssh/
没办法,没办法。.vscode/
也许以后有办法。
Fish
和zsh
导入旧的配置,zsh 可能需要额外安装插件和powerlevel10k
。编辑
pacman.conf
: 开启color
和ParallelDownloads
。yay
(AUR)让
sd-encrypt
在输入密码时不显示星号;输入密码、加载 root 不超时,在 boot options(kernel parameter)里添加:rd.luks.options=password-echo=off,timeout=0 rootflags=x-systemd.device-timeout=0
禁用
nmi_watchdog
和watchdog
,在 boot options(kernel parameter)里添加:nmi_watchdog=0 nowatchdog module_blacklist=iTCO_wdt
把 iTCO_wdt 替换成自己的型号所对应的模块,可以通过
sudo wdctl
查看型号,并把空格替换成下划线。LUKS 分区开启
TRIM
- root 分区添加 kernel papameter:
rd.luks.options=discard
。 - 其它分区在
crypttab
options 里面加discard
。 - 最后开启
fstrim.timer
。
- root 分区添加 kernel papameter:
swap
默认应该是没有开启的,可以用free -h
检查一下。makepkg
使用 tmpfs:编辑/etc/makepkg.conf
删掉BUILDDIR=/tmp/makepkg
前的注释。编辑 fstab 挂载一个
tmpfs
供自己日常使用,注意设置权限。tmpfs /home/xxx/.../tmpfs tmpfs noatime,nodev,nosuid,size=32G,uid=1000,gid=1000,mode=1700 0 0
开启
bbr
。DNS 我目前交给自己的路由器,使用的
unbound
来配置的 DOH。风扇控制别做任何设置了,让主板来控制就挺好的。
安装和配置
reflector
:--save /etc/pacman.d/mirrorlist --country XX --protocol https --completion-percent 100.0 --score 5 --fastest 3 --include "mirror1.com|mirror2.com"
注意用
--include
来做一下白名单限制,否则会选到很坑的 mirror2。简单来说仅仅是利用 reflector 给自己常用的 mirror 定时进行一下排序。
记得开启 timer。如果需要储存
虚拟机
或者数据库
之类的数据,需要存到关闭了 cow 的 btrfs 子卷或者挂载独立的 ext4 分区。更换
rEFInd
主题
如果存在分辨率问题,例如只能在“高分辨率但存在黑边”或者“比例合适但是分辨率低”之间选择的情况,那就选分辨率更高的选项,进入 rEFInd 后按 F10 截图,然后根据各个图标的位置自己做一个“中间是小型面板+周围都是黑色”的背景。
snapper 备份
把不值得快照的目录替换成子卷,例如:
~/.cache
,/var/tmp
,/var/cache/pacman/pkg
。建立
@var_log
子卷并挂载到/var/log/
。把自己之前建立的 @snapshot 子卷挂载好,并且设置好权限(
a+rx
)和用户组(:xxx
)。默认的
snapper-boot.timer
只会对根目录生效,可以照着葫芦画瓢,在.config/systemd/user/
里自己弄一个 timer。另外默认的
snapper-timeline.timer
里面设置的是OnCalendar=hourly
,个人比起固定在整点进行快照,更喜欢设置成系统启动后每半小时进行一次快照:[Timer] OnBootSec=30min OnUnitActiveSec=30min RandomizedDelaySec=3min
使用
snap-pac
实现操作 pacman 时自动创立快照。使用
snap-sync
备份到外部存储,记得使用-k
命令保留旧的快照。
桌面环境
- 字体安装
noto-fonts-cjk
。 - 设置
wayland
变量可以通过新建.config/environment.d/*.conf
来完成。 - 挑选一个
Terminal
,要求:- 具备最基本的功能。
- 外观看得过去。
- 在运行程序时推出会有提示。
- 可以设置半透明(主要对于堆叠式窗口管理器而言)。
- 可以隐藏右侧滚动条,并且隐藏后右侧不会多出来一截空白。
- 可以 padding。
- 安装一个能跟得上时代潮流的
Drop-down Terminal
。 - 使用
visual-studio-code-bin
(AUR)。 Chromium
:- 编辑
.config/chromium-flags.conf
添加--disk-cache-dir=.../tmpfs/.chromium
,把 chromium 的缓存放到 tmpfs 里,使用相对路径前面不需要加~/
。 - 试一下开启原生 wayland 支持。
- 别再用 profile-sync-daemon 了,因为会导致加载期间没法打开 chromium,而且如果系统崩溃还得手动恢复数据。
- 别费劲去折腾硬件加速了,设置好了不一定用得到,用得到的时候不一定好用。
--disable-reading-from-canvas
可能导致没法登录 Bilibili。
- 编辑
Firefox
同样把 Cache 放到 tmpfs 里:about:config
->browser.cache.disk.parent_directory
设置成/home/xxx/.../tmpfs/.firefox
。- 不要直接 Turn_off_the_disk_cache,因为这样 Firefox 重启后会清空缓存。
- 找一个可以满足基本需求而又不会 Overengineering 的邮件客户端,目前用的
Geary
,外加用isync
备份邮件。 - 自动清理回收站,Gnome 可以直接在文件管理器里设置。
Gnome 相关
Gnome Software Center
:关闭自动更新以及更新提示直接删了得了。安装
gnome-tweaks
。使用 Breaze 鼠标主题:
yay -S xcursor-breeze
。文件管理器
Natulius
(Files):隐藏挂载的网络目录:fstab 后面加
x-gvfs-hide
。设置自己顺手的
Open in Terminal
,首先安装python-natulius
,然后新建$XDG_CONFIG_HOME/nautilus-python/extensions/open-terminal.py
import subprocess from gi.repository import Nautilus, GObject class ColumnExtension(GObject.GObject, Nautilus.MenuProvider): def __init__(self): pass def menu_background_activate_cb(self, menu, file): subprocess.Popen('alacritty', cwd=file.get_location().get_path()) def get_background_items(self, window, file): item = Nautilus.MenuItem(name='NautilusOpenTerminal', label='Open in Terminal', tip='', icon='') item.connect('activate', self.menu_background_activate_cb, file) return item,
File-Roller
(自带的解压软件):按照p7zip
解压 7z 文件。安装
gnome-shell-extensions
:- "built-in" 里面自带的按需开启。
- Arch Linux Updates Indicator
- No overview at start-up
- Screenshot Locations
定时替换壁纸,由于目前没有符合我需求的方案,于是我自己写了个脚本,具体看这篇文章。
GDM
如果分辨率与桌面环境的设置不同:cp ~/.config/monitors.xml /var/lib/gdm/.config/ chown gdm:gdm /var/lib/gdm/.config/monitors.xml
需要安装的软件(字母排序)
bat
: 进阶版 cat。calibre
: 顺便转移旧的 Library。code
: 试试是否支持原生 wayland。digikam
: 单纯是用来找相似图片的,这玩意儿的依赖跟 KDE 家的许多软件一样自带 KDE 全家桶,可以安装到虚拟机里,或者用Geeqie
替代。fd
: 文件查找工具,同样需要转移旧的配置。fzf
: 对输入进行筛选的工具。krita
: 图片编辑。meld
: 目录比较工具。mpv
:转移旧的配置,测试一下硬件加速。neofetch
:装完系统后无法跳过的无意义行为。pv
: 一个可以监控 pipe 传输数据状况的工具。ripgrep
: 全文搜索工具。trash-cli
: 使用命令行操作回收站。unarchiver
: 其它解压缩软件都有各种问题,例如处理 gbk 编码的密码,解压出现乱码等,这时候可以靠 unar 治疗各种疑难杂症。xeyes
: 可以用来检查程序是否运行在 wayland 下。yubikey-touch-detector
: 在 Yubikey 需要触摸认证时进行提示。
Windows 双系统相关
- 需要关闭
Fast Startup
以及Hibernation
,不然 bootloader 总会被覆盖。 - 使用 grub 记得安装
os-prober
。 - 不小心把 Windows 的 Bootloader 删了,不要用覆盖安装解决,可以进入命令行然后重装 ESP 分区里的相关内容。