前言
安装 Gentoo 并不复杂,很多人混淆了复杂和耗时。在安装的过程中,大部分的时间都在做别的事情。同时,Gentoo 的安装步骤是清晰的,Handbook 和各路神仙的总结实际上已经很全面了。因此,没有必要再做重复的劳动,一些个性化的关键点记录就足够了。
为了使系统保持 Suckless,尽量避免用不到的功能,我还是继续沿用裸 wm 的方式。简而言之:gentoo + openrc + i3wm + polybar + nvim。我的目标是尽量在一天内完成系统的整体安装,再用一周时间进行小修小补。而在流程化的步骤下,一天内的实际安装时间在 1 小时左右,而其余时间都在做其他事情。
此外,对于小新 Pro 这种散热垃圾的 Laptop,一个带风扇的散热架是必要的。否则,emerge -e @world 是真的会卡死(哭)。
安装步骤
Gentoo 的安装大体上是规范的,但是针对不同用户的需求和理念,也有不一样的方式。或多或少的,存在一些坑
我在安装过程主要参考的几个链接:
-
官方 Handbook,这是最权威的手册,当问题不确定时,以 Handbook 为准
Handbook
-
一篇较为详细的安装笔记,属于经验丰富的老玩家心得了,很有参考价值
Gentoo 安装流程分享(step by step),第一篇之基本系统的安装
-
OriPoin’s blog,详细介绍了 Gentoo 的优化方式,但是没必要采用 O3,会带来很多未知问题
Emerge your world the lean way
Optimize Your system the stupid way
-
bitbili’s blog,非常非常详细的介绍了 Gentoo 的安装和使用
Gentoo Linux 安装及使用指南
-
Yangmame 的博客(比较早期)
Gentoo 安装教程
-
ayamir 的知乎记录(参考了 2 和 5)
2020-Gentoo 双系统安装指北
-
GTrush 的博客
新手 Gentoo 折腾记录 1
-
Jioushan 的博客
不完整的 Gentoo 安装
-
Google,Stack Overflow,gentoo wiki,arch wiki 等
make.conf
make.conf 可以说是 Gentoo 的核心了,针对 PC 的配置、优化以及对系统的预期基本上都是在这个文件中定义的,首先列出我的:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
USE="X elogind mount cjk i3wm mpd network pulseaudio ipc opengl dbus -gnome -kde"
MAKEOPTS="-j6"
LC_MESSAGES=C
EMERGE_DEFAULT_OPTS="--ask --verbose --load-average --newuse --with-bdeps=y --keep-going --deep"
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3"
AUTO_CLEAN="yes"
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/chache/binpkgs"
PORTAGE_TMPDIR="/tmp"
PORTAGE_COMPRESS="zstd"
BINPKG_COMPRESS="zstd"
ACCEPT_LICENSE="*"
ACCEPT_KEYWORDS="~amd64"
GRUB_PLATFORMS="efi-64"
VIDEO_CARDS="nouveau"
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"
MICROCODE_SIGNATURES="-S"
# NOTE: This stage was built with the bindist Use flag enabled
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C.utf8
# ccache
FEATURES="ccache -test"
CCACHE_DIR="/var/cache/ccache"
# aria2
FETCHCOMMAND="/usr/bin/aria2c -d \${DISTDIR} -o \${FILE} --allow-overwrite=true --max-tries=5 --max-file-not-found=2 --max-concurrent-downloads=5 --connect-timeout=5 --timeout=5 --split=5 --min-split-size=2M --lowest-speed-limit=20K --max-connection-per-server=9 --uri-selector=feedback \${URI}"
RESUMECOMMAND="${FETCHCOMMAND}"
|
问题列举
安装 Gentoo 是相对容易的,但是往往会遇上很多奇怪的问题。比如常见的循环依赖,某个程序编译失败…
这种时候首先应该去 Gentoo Package 查找对应包是否有 Bug 记录,以及解决方法
这里主要列举的是我在安装过程中遇到的问题,以及解决方法
复杂密码换简单密码
eudev 还是 systemd-utils?
Gentoo 目前用 systemd-utils 替代了原本的 eudev,所以解决办法有:
- 使用 systemd-utils 管理设备,不要再安装 eudev,这是最简单的。官方的原话是:
in general, you should not worry about installing anything *udev manually by yourself and you should imho not have anything like that in your world file.
- 如果你痛恨和 systemd 有关的一切,可以为 systemd-utils 包-udev USE,然后应该就可以安装 eudev 了。需要注意的是,eudev 不应该被加入到 world file 中。此外还有一些其他的 USE 也会影响,总之这很麻烦。建议还是不要折腾了,systemd-utils 只是从 systemd 中分离出来的组件而已,它包含了 udev
Desktop profiles?
Desktop profiles 预设了很多 USE,并包含了一些 system 依赖。对于 KDE 和 GNOME 用户,Desktop profiles 中提供的增量可以省很多事。但是对于裸 WM 来说,没有必要为使用 Desktop,默认的 profiles 或者 systemd profiles 就可以了。在最小化的基础上,安装软件时检查 USE 并逐步添加自己的全局 USE
/tmp 挂载
有时候 fstab 中会忘记挂载/tmp,这样/tmp 目录在磁盘中,在 portage 运行时主要以/tmp 作为暂存目录,可能会反复读写 SSD 降低寿命。将/tmp 挂载到内存中,毕竟内存更加皮实耐用
1
2
|
# size 的大小一般为内存大小的一半
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=16G,mode=1777 0 0
|
循环依赖问题
是在安装 polybar 的时候遇到了这个问题,其他人反应 vim 也有这个循环依赖。貌似不是个别人遇到的问题
循环依赖问题:循环依赖可以是多个,比如:A 依赖 B,B 依赖 C,而 C 又依赖 A。而在此过程中,A 的 USE 会对 B 造成影响,而 B 又对 C 造成影响,这种影响可以是+或者- USE。但是 C 又依赖了 A,与 A 的新 USE 冲突
如下报错信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
* Error: circular dependencies:
(media-libs/libsndfile-1.2.0:0/0::gentoo, ebuild scheduled for merge) depends on
(media-sound/mpg123-1.31.3:0/0::gentoo, ebuild scheduled for merge) (buildtime_slot_op)
(media-sound/pulseaudio-16.1:0/0::gentoo, ebuild scheduled for merge) (buildtime)
(media-libs/libpulse-16.1-r2:0/0::gentoo, ebuild scheduled for merge) (buildtime)
(media-libs/libsndfile-1.2.0:0/0::gentoo, ebuild scheduled for merge) (buildtime)
It might be possible to break this cycle
by applying any of the following changes:
- media-libs/libsndfile-1.2.0 (Change USE: +minimal)
- media-sound/mpg123-1.31.3 (Change USE: -pulseaudio)
Note that this change can be reverted, once the package has been installed.
Note that the dependency graph contains a lot of cycles.
Several changes might be required to resolve all cycles.
Temporarily changing some use flag for all packages might be the better option.
|
解决方法:
1
2
3
4
5
6
7
8
|
# 首先打破循环依赖,-1(oneshot) 避免把包写入 world 文件
USE="-pulseaudio" emerge -1 media-sound/mpg123
# 安装 polybar,Global USE 定义了 pulseaudio
emerge polybar
# 成功安装后,再恢复以前的状态
USE="pulseaudio" emerge -1 media-sound/mpg123
|
由于日常维护和debug太耗时,目前已放弃 Gentoo,此文章结束