Gentoo! 大名鼎鼎的基于源码的发行版。在过去的几年里我常常听到这个名字,江湖上也流传着关于它的许多传说,“超长的编译时间”、“电费杀手”、“非常折腾”这些骇人听闻的传言让人不敢轻易尝试这个发行版,但是越神秘反而越能激发探索它的兴趣,最终我还是决定一试。

这篇文章是在我刚刚配置完了wm的时候开始写的。截止目前算是基本能用(看个b站没问题),但是输入法和很多图形化配置工具还没有装,为了防止过几天忘记当初是怎么配置的,还是先记录下来。

其实现在我有点后悔安装gentoo了,因为做出安装gentoo这个决定后我两天的国庆假期就没了…而且踩了一堆坑,看wiki上google爬资料很辛苦TAT但不管怎么说还是坚持下来了。有这么一次折腾的过程总是会有收获的。

了解一下…Gentoo?

Larry the cow was a bit frustrated
at the current state of Linux distributions…

…until he tried Gentoo Linux.

上面这段话来自 Gentoo 官网的About页,看起来很有意思。Gentoo 的优势在于可以从源码配置所有软件包从而真正满足不同使用者的需求。当然,从源码编译也是最大的劣势(费时间费电)。简单来说 gentoo 通过 USE 变量来决定软件包的功能/可选依赖等等,USE 变量又可以从全局细分到单独的软件包。
这样的设计给使用者提供了其它发行版难以提供的定制性。比如我只想用 pulseaudio 管理系统声音,那么我就可以把 pulseaudio 加到全局 USE 变量,这样所有支持的程序都会编译 pulseaudio 支持。又或者我使用基于 gtk 的桌面环境,那么可以在全局 USE 变量中声明去掉 qt 支持,让图形程序只编译 gtk 支持,再对那些只有 qt 界面的程序单独设置 USE 变量。像这样的例子在 gentoo 中有很多。(这种控制方式对那些不想软件安装有无用功能的强迫症挺友好的)。

Gentoo 的另一大好处(或者说坏处)是手工配置内核。虽然其它发行版也能使用自配置的内核,但那通常是为了一些特殊需求准备的。gentoo 鼓励用户彻底地定制内核,在 gentoo wiki 中你可以找到让某些功能/软件正常运作所需要的内核配置选项,你可以自由地裁剪内核,去掉不必要的驱动和功能,编译出小而美,完全适合硬件和软件的内核。(gentoo 也有工具自动生成像其它发行版那样的内核,但是我觉得不手工配置内核,使用 gentoo 的意义就少了一大半)

(随意的)介绍就到这吧。毕竟刚刚开始玩 gentoo 我也说不出什么专业且准确的介绍。(什么时候我才能变强呢,算了还是不要想这个问题= ̄ω ̄=)

安装过程

首先还是老套路,rufus 写入镜像,livecd 环境安装。这里我为了快点装完没有用别的 profile(因为是晚上开始装的,怕断电的时候装不完),基础系统安装还挺快的(比archlinux还快一点)。

配置内核是个比较恐怖的过程,我的笔记本是锐龙小新 Pro13 (2020),R7 4800u zen2移动平台,没有独显,换了 ax200 网卡。在配置过程中这篇wiki:Lenovo ideapad Slim7提供了很大的帮助,因为 slim7 是 R7-4700U 并且用的 ax200 无线网卡,和我的小新配置几乎一模一样。
然后。。。第一个坑就来了。wiki 的内核参考配置里有在Device Drivers ---> Generic Driver Options ---> Firmware loader ---> Build named firmware blobs into the kernel binary中自定义载入 firmware 文件:

amdgpu/renoir_asd.bin
amdgpu/renoir_me.bin
amdgpu/renoir_rlc.bin
amdgpu/renoir_ce.bin
amdgpu/renoir_mec.bin
amdgpu/renoir_sdma.bin
amdgpu/renoir_dmcub.bin
amdgpu/renoir_mec2.bin
amdgpu/renoir_vcn.bin
amdgpu/renoir_gpu_info.bin
amdgpu/renoir_pfp.bin
amd-ucode/microcode_amd_fam17h.bin
iwlwifi-cc-a0-46.ucode

但是这些 firmware 是包含在 linux-firmware 包里的,在 gentoo安装wiki 中,安装 linux-firmware 的章节是在编译内核后面的,于是我第一次没有注意到,编译内核通不过(因为没安装 linux-firmware)。于是去掉了自定义固件编译,走到安装 linux-firmware 的时候又提示All Ebuilds That Could Satisfy "sys-kernel/linux-firmware" Have Been Masked,上google搜索得知这是因为 gentoo 默认不接受非自由协议的软件包(这你不在安装wiki中写出来我怎么知道啊!),按照 gentoo wiki 上的/etc/portage/package.license 页面为 linux-firmware 单独配置了接受许可,安装成功。

但是那时我没有回过头去内核配置里加上自定义固件,一路走完安装过程重启进系统,结果启动输出走到fb0: switching to amdgpudrmfb from EFI VGA时画面就卡住了,试着盲输入账户密码进系统后 reboot,能重启,说明系统应该没别的问题,只是显示输出有问题。
再次上 google 摸索一番,找到临时解决方案是在内核启动参数加上nomodeset,这回正常了,不过又发现 wifi 不能用,况且用nomodeset参数也不是长久之计,又仔细去看了相关帖子,得知问题根源可能是驱动固件没有载入内核,这才意识到那个又臭又长的驱动固件列表必须要一个不漏地写上去。于是加上配置重新编译内核,不用 nomodest 进系统一切正常。

后来我又 dmesg 看了一下,发现内核在尝试载入iwlwifi-cc-a0-59.ucode,找不到又去尝试载入iwlwifi-cc-a0-58.ucode,然后57,56…最后才载入的46。于是我在内核配置那里改为59重新编译了一下内核,dmesg 里的相关信息就消失了(虽然46那个好像也能用,这应该是更新的固件)

基本配置

踩完了一个大坑,这下算是安装完成了。于是开始配置系统,这里有几个要注意的地方

无线网络配置

这里又有一个坑。安装时的 wiki 在配置网络部分告诉你要创建对应网络接口的/etc/conf.d/net.xxx,实际上如果用 wpa_supplicant 来连接无线网络是不能做这一步的,会导致网络接口被netifrc占用,wpa 还用不了。应该按照wpa_supplicant 的 wiki 页面来配置,在/etc/conf.d/net加上modules_wlan0="wpa_supplicant"(wlan0 需要换成实际接口名称),剩下的交给 wpa。

rfkill 总是在启动时禁用 wifi

可以进系统后执行rfkill unblock wifi,想要一劳永逸,需要修改 rfkill 的 modprober 配置。

config files in ‘/etc/portage’ need updating

如果emerge执行过--autounmask-write,再运行emerge会出现上面的提示,需要执行dispatch-conf后按u来自动更新配置,也可以执行etc-update来对每个更改的配置手动控制(这两个效果一样)。

控制台字体设置

默认的控制台字体在高分屏上显示太小了(一开始忙处理其它问题时没配置字体,看得眼睛都要瞎了),安装terminus-font这个包,然后根据Font 的 wiki 页面/etc/conf.d/consolefont中写入consolefont="ter-132n"(这个在我的 13寸 2k 屏上显示效果不错,还可以换成粗体版本 ter-132b)。可以用setfont临时改变字体。

装X

基础环境配置完了,下一步当然是装Xorg啊!个人电脑上使用总不能连个桌面都没有吧?
什么?你看到这一小节标题的第一反应不是Xorg?说明你的Linux素养不够开玩笑的(~ ̄▽ ̄)~

但我正要 emerge xorg-server 时它却阻止了我:

The following REQUIRED_USE flag constraints are unsatisfied:
exactly-one-of ( elogind systemd )

嗯…看wiki好像没提到这个错误啊,Gentoo 手册中的Xorg指南也只说了内核配置、显卡和输入设备的 USE 变量,没有漏掉什么准备步骤啊
google了解到的结果是如果启用了 desktop 的 profile,这个 USE flag 应该是自动设置好的。按理来说我用的默认配置加上对应的 USE flag 也行,不过我为了稳点还是换成了 desktop 的 profile,毕竟刚刚接触 gentoo,还不太熟悉 USE flag。

切换 profile 后更新系统用了一个多小时,这时间比安装那会要长多了。重新安装 xorg,OK! 没有错误发生
于是兴冲冲 emerge 了 i3,写好.xinitrc,运行 startx 准备测试,结果:

...
Fatal server error:
(EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)
...

没有权限是什么鬼?wiki的示例用的就是普通用户啊,而且以前用 archlinux 的时候装完直接 startx 就行了呀
再次上 google 搜索,了解到应该是 elogind 的问题,但是之前切换了 desktop 的 profile,并且成功安装了 xorg,elogind 应该没问题啊
后来翻到这篇wiki,提到了检查 elogind 状态的方法:loginctl user-status,我执行后没有任何结果,想到可能是压根没运行。
于是去看elogind 的 wiki 页面,发现要将 elogind 的服务开机自启:rc-update add elogind boot
使用 desktop 的 profile,elogind 应该是自动启动的,但我是安装后换的 profile,这个设置可能没有被应用,于是出现这个问题。

进一步配置

踩了这么多坑,桌面终于运行起来了。按照我以前在 archlinux 上使用 i3wm 的配置,速速装好必备软件,然后继续踩坑

picom 没有任何特效

这让人匪夷所思,因为之前在 archlinux 上 picom 的默认配置就能用了,而且我还是直接用的原来的 i3 配置文件,启动参数是一样的
我首先怀疑的是 gentoo 内核的显卡相关配置不正确(毕竟自己编译内核没经验,不自信),不过桌面环境用起来并没有什么异样,视频也能看,先认为它是正常工作的
然后怀疑是不是 gentoo 的 picom 的默认 USE flag 没有设置好,没有启用必要的 USE flag,但是我给它自定义了 opengl 的 USE flag,emerge居然说不需要更新,那看来是启用了,可我也不知道有什么 USE flag 可能会导致这个问题了。
然后研究 picom 的配置文件,picom有一堆参数控制特效,难道默认都给关了?以前用 archlinux 的时候默认就有特效,难道是 picom 更新了,默认不开启了吗?
查 wiki,picom有两配置文件,一个etc里的全局配置,一个用户目录下的自定义配置
我没有弄过自定义配置,打算看一眼默认配置,结果居然没有???好家伙,看来是安装的 picom 没有包含默认配置文件!(不知道这是 gentoo 的源码包问题还是有什么 USE flag)
从 picom 的 github 仓库里找到一份picom.sample.conf,直接拿来用,特效就有了,和之前 archlinux 的一模一样~

手动安装鼠标指针主题

由于 lxappearance 有 bug,只能手动安装指针主题。复制到~/.icons/default目录下即可

手动安装字体

gentoo 仓库只有 fontawesome v5的版本,而我用的 bumblebee 状态栏需要 v4 的版本,所以需要自己安装。复制字体到~/.local/share/fonts目录下然后运行fc-cache -fv(不需要 root 权限)

参考archlinux wiki

到此为止

按照之前用 archlinux 的配置,装上 networkmanager 和蓝牙的托盘图标,调一调状态栏,基本和之前一样了

但是…

今天,我正按照 wiki 去配置蓝牙,发现内核的蓝牙相关配置没有设置好,重新编译之后又发现没有蓝牙设备,看来驱动没搞好。
接下来本应该去找 ax200 的在 linux-firmware 里对应的蓝牙驱动,然后把它编译进内核里,但是我脑海里突然闪过了一个念头:这一切有意义吗?

看着 wiki 页面上那蓝牙命令行工具的一堆参数用法示例,我把手从键盘上移开了,因为我发现没有动力继续下去了。
“N个发行版——〉Arch——〉Gentoo——〉LFS——〉…——〉BSD——〉…”这条路线被(我)戏称为“入土之路”,实际上我已经走过 LFS 那里了,回过头来发现自己已经陷得比较深了,现在我感到方向错了,该停下来好好想想用 linux 的意义了。
接触 linux 的时间也不短了,从最初作为 windows 之外系统的新鲜感到习惯于命令行操作和一些 unix 思想,我的确从中收获了不少。而且更重要的是,我对我的系统有比 windows 更大的控制权,linux 给了我更多自由。
但是现在这种自由好像有点过头了。我只想有一个能正常在我的硬件上工作的系统,再满足一下定制自己的 wm 和使用命令行的愿望就够了。我不喜欢与内核和硬件打交道,只要能它们能正常工作就行,我对那些底层的实现没有兴趣。
当然,这并不是说 gentoo 这个定制性极强的发行版有什么不好。我很欣赏它给使用者所带来的自由,只是这种自由不适合我(因为菜,hold 不住)。我很羡慕那些能完全掌控它的人,但是我不想花大量时间去研究怎么正确配置内核和软件包让诸如蓝牙和声音等硬件正常运作,滚动更新对我也不是必须的,所以那些开箱即用的发行版更适合我,现实中有更多事情值得我去注意。

所以,用这个发行版的过程就到此为止吧。(虽然这个过程很短)