引子
听说不少人一放假就喜欢装黑苹果,然而手上并没有Hackintosh-friendly的机器的我,只能用重装Gentoo的方式来祭奠一下逝去的青春啦(悲)。
这里随便记录一些安装和配置过程中的琐事,便于日后查询。
持续更新中。
Major Changes (since 2019?)
Portage
- 由portage管理的源(?)的默认位置统一移到了
/var/db/repos
,官方源(原/usr/portage
)现在在/var/db/repos/gentoo
。 emerge
现在不会再默认帮你选择一个作为依赖安装的不稳定包的版本了,如果需要的话要加上参数--autounmask=y
。- 这实际上是https://bugs.gentoo.org/658648.
Non-Portage
- 本来安装流程里
/etc/timezone
是个符号链接,现在它变成了一个文本文件,里面直接写时区,比如Asia/Tokyo
。
配置
全盘加密(LUKS)
这里有一个Handbook里没有明确指出的地方:如果你使用systemd,需要启用cryptsetup
这个USE。
否则你是没有systemd-cryptsetup-generator
来帮你生成[email protected]
的,这样你的分区就没有办法在启动时被解密。
Overlay
-
以前overlay一般交给
layman
管理,缺点是layman -S
需要在eix-sync
之前单独执行。(还是我的用法不对?)
这次读wiki的时候发现了eselect repository
(app-eselect/eselect-repository
)这个新玩意,用法很简单:eselect repository list
列出所有repo;eselect repository enable/disable
启用或禁用某个repo。注意这并不会把该repo的内容同步下来,所以你还要运行一次eix-sync
。
这样启用的repo的配置可以在
/etc/portage/repos.conf/eselect-repo.conf
里找到。- FYI:在repos.gentoo.org可以看到一个现存repo的列表,并且区分了官方和非官方源。
-
一个overlay里常常有一大堆的包,而你一般只需要其中的少数几个。为了防止这种“命名空间污染”和可能带来的依赖问题,可以每添加一个overlay就在
package.mask
里加上:1
*/*::name-of-the-overlay
然后只把需要的包unmask掉即可。
- 注:实际上这种做法可能不小心unmask掉该overlay在profiles里面mask掉的包。当然你也可以只unmask掉你需要的版本,但这样比较麻烦,而且包不会被自动更新。
- 为了同样的目的有时还需要设置不同源的优先级。注意overlay默认优先级是比
gentoo
要高的。
蓝牙
按照wiki上操作即可,但要记得启用bluetooth.service
(systemd)。
NVIDIA Optimus
已经有有热心人士为Gentoo打包了Optimus Manager(见gpo.zugaina.org),直接用上面的方法添加jorgicio
这个源并安装optimus-manager
及optimus-manager-qt
即可。
安装完以后做以下两件事:
/usr/bin/prime-switch-boot
这个脚本需要Python ≥ 3.7,如果执行python3
启动的是较低的版本,需要在eselect python
里切换到3.7以上。- 创建
/etc/X11/xorg.conf.d
目录,optimus-manager
需要在那里生成配置文件。
然后让optimus-manager.service
和optimus-manager-qt
自动启动即可。如果显示Hybrid模式并能启动nvidia-settings
说明成功了。
软件
Haskell
建议添加haskell
这个overlay(同样由官方维护),里面有最新的GHC。
想省下编译GHC的时间,启用binary
这个USE即可。
另外,建议全部相关的包都使用haskell
源里的版本而非gentoo
里的版本,否则可能产生循环依赖等问题。
npm
直接安装net-libs/nodejs
即可。但官方不推荐越过portage安装全局包,作为workaround可以在~/.npmrc
里加上这么一行:
1 | prefix=/home/<USER>/.node |
然后把相应路径添加到$PATH
里。
Wine
官方源里现在有四个版本的Wine本体:virtual/wine
和app-emulation/wine-{vanilla,staging,any}
。官方推荐直接安装virtual/wine
即可,它会按照你的USE flag自动选择合适的wine版本(有staging
时优先选择wine-staging
,否则优先选择wine-vanilla
)。
但我明明在package.use
里加了staging
啊,为什么还是自动选择了wine-vanilla
?
emerge
表示staging
并没有启用并且画了个括号((-staging)
)。百度了一下发现大概是这个USE flag被禁用的意思。原来在我的profile(/var/db/repos/gentoo/profiles/arch/amd64/package.use.stable.mask
)里面有这么一行:
1 | virtual/wine staging |
解决方案也很简单,在package.accept_keywords
里加上virtual/wine ~amd64
就行了。
Firefox
字体fallback不正确
如果Firefox会在某些时候选择错误的字体——比如,用sans-serif
显示一段中文,当font-weight
是400
、500
、600
的时候用的字体各不相同(!),试着在about:config
里把gfx.font_rendering.fontconfig.max_generic_substitutions
调成一个较大的值。
杂项
fsck.f2fs
装完系统以后发现启动异常地快(本来fsck.f2fs
在内核版本变更的时候会花很长时间来进行检查),看日志(journalctl -u systemd-fsck-root.service
)发现根文件系统的检查直接被跳过了:
fsck.f2fs doesn't exist, not checking file system.
原来其他的fsck
们都在/sbin
里,而fsck.f2fs
在/usr/sbin
下面(为啥呢……),所以没有被默认包含在initramfs里面。所以我们只需要在dracut.conf
里加上(详见dracut.conf (5)
)
1 | fscks="umount mount /usr/sbin/fsck* /sbin/fsck* xfs_db xfs_check xfs_repair e2fsck jfs_fsck reiserfsck btrfsck" |
然后dracut --force
重新构建initramfs即可。
保存编译进度
FEATURES="keepwork"
,用完以后记得关上,不然编译产生的临时文件会一直积累。
这个功能好像存在很久很久了,为什么我之前都不知道(悲)。
KDE Application Menu Button Does Not Work for Electron Apps
解决方案在这里:安装dev-libs/libdbusmenu
即可(我启用了gtk和gtk3两个USE flag)。
注 这是KDE的一个小功能,可以把窗口的菜单栏变成titlebar上的一个按钮。你可以在System Settings的Application Style->Window Decorations->Titlebar Buttons里找到它。
一些有趣的包
cppman (app-doc/cppman
)
C++文档from cpluscplus.com & cppreference.com,详见https://github.com/aitjcize/cppman。
碎碎念
- 虽然很多官方源里缺少的包在overlay里可以找到,但比较分散,而且找overlay还要借助gpo.zugaina.org,总体确实不如AUR方便。
编译耗时太长了都用Gentoo了还在意编译时长- 拿到静态库比Arch容易太多了(虽然主要是交作业需要),启用
static-libs
即可。- 题外话:由于Arch坚持只ship动态库的做法,官方源里一个叫
haskell-yesod-default
的包在本文写作时间点的版本号达到了惊人的1.2.0-**732**
,真是活久见。
- 题外话:由于Arch坚持只ship动态库的做法,官方源里一个叫
eix
打起来比pacman -Ss
快多了——这一点当然很重要,要知道有个函数叫creat
……media-fonts
下面那一堆~amd64
的keyword有点让人疑惑(尤其是{un,}stable共存的):一个unstable的字体是啥样的啊……
后续计划
LFS(逃)