起因
最近重装了一遍 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。 - 其它分区在
crypttaboptions 里面加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.pyimport 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 分区里的相关内容。