我正在 Gentoo Linux Hardened 系统上安装 KDE。 Gentoo 官方 wiki 表示推荐的方法是应用 KDE 桌面配置文件,发出emerge -NDu --with-bdeps=y @world
,然后安装kdebase-meta
软件包。然而,我使用的是 Hardened 配置文件,显然我一次只能拥有一个选定的配置文件。
到目前为止,我已经成功地在我的 Portage 配置文件(/etc/portage/make.conf、/etc/portage/package.use 等)上手动应用 KDE 配置文件的全局和每个包的 USE 标志,但我担心从长远来看,这个 hack 可能很难维护,因为 Gentoo 开发团队修改了配置文件。每次我获得 Portage 更新时,我都必须重新应用desktop
和desktop/kde
配置文件的 USE 标志和配置,以防万一它们被更改。
有没有其他方法可以在 Gentoo Linux 上同时拥有多个活动的 Portage 配置文件?
答案1
使用级联
配置文件允许级联,无需手动设置useflags:
所有配置文件都是由多个子配置文件组成的级联/可堆叠配置文件...
同一页还专门有一章专门回答这个问题的需求:
组合配置文件
如果 Gentoo 存储库中没有满足您确切要求的配置文件,您可以尝试将多个配置文件组合成一个自定义配置文件。例如,将强化配置文件与桌面 systemd 配置文件相结合,例如 default/linux/amd64/17.0/desktop/plasma/systemd 和 default/linux/amd64/17.0/hardened。预计您已经设置了自定义存储库。
维基页面会引导您找到更多链接,了解如何设置存储库并最终创建配置文件。
如何
以下是我如何进行no-multilib/plasma/systemd
组合的总结(根据您的需求进行调整):
1.创建存储库的目录结构
mkdir -p /usr/portage/local/{metadata,profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd}
2. 定义父母
编辑/usr/portage/local/profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd/parent
以包含类似以下内容:
/usr/portage/profiles/default/linux/amd64/17.0/desktop/plasma/systemd
/usr/portage/profiles/default/linux/amd64/17.0/no-multilib
请注意,文档使用相对路径,但我发现负递归 ( ../../..
) 的级别有点令人困惑。绝对路径同样有效,除非您打算/usr/portage
在系统上移动。
我发现较低的线优先。因此,如果在第一个配置文件中设置/取消设置标志或设置,并且在下一行中发生相反的情况,则应用下一行的配置文件设置。例如,plasma
配置文件允许进行一些multi-lib
设置。如果我在哪里设置多库上面的线等离子体一,某些软件包仍将尝试构建为多库(给出各种有趣的构建失败)。您可能需要调整这些行的顺序。
3. 设置存储库元数据
编辑/usr/portage/local/metadata/layout.conf
。自动同步告诉emerge --sync
您不要同步此存储库。
masters = gentoo
auto-sync = false
定义友好名称。这将作为此存储库的所有条目的前缀eselect profile list
。/usr/portage/local/profiles/repo_name
:
local
并/usr/portage/local/profiles/profiles.desc
会告诉eselect
您在哪里寻找个人资料。第一个字段是拱、第二个配置文件名称和第三个字段稳定的或者实验性的:
amd64 default/linux/amd64/17.0/no-multilib/plasma/systemd stable
4. 让 portage 知道这个新的存储库
创建并编辑/etc/portage/repos.conf/local.conf
以包含:
[local]
location = /usr/portage/local
5. 设置轮廓并交叉手指
~# eselect profile list
[...]
[55] local:default/linux/amd64/17.0/no-multilib/plasma/systemd (stable)
~# eselect profile set 55
~# emerge --update --newuse --deep --ask --verbose @world
维护方便
虽然设置起来有点麻烦,但维护起来很容易。配置文件的使用标志和设置始终与主树保持同步。即使偶尔需要更新配置文件版本,也没有太大困难。例如,如果 Gentoo 树中有一个新的配置文件版本:
~# cd /usr/portage/local/profiles/default/linux/amd64
~# cp -av 17.0 18.0
~# vi 18.0/no-multilib/plasma/systemd/parent
/usr/portage/profiles/default/linux/amd64/18.0/desktop/plasma/systemd
/usr/portage/profiles/default/linux/amd64/18.0/no-multilib
~# vi /usr/portage/local/profiles/profiles.desc
amd64 default/linux/amd64/18.0/no-multilib/plasma/systemd stable
~# eselect [...]
答案2
问题
正如您所发现的,Gentoo 一次只允许一个配置文件设置。正如你可以从我的看到eselect profile list
:
[1] default/linux/amd64/13.0
[2] default/linux/amd64/13.0/selinux
[3] default/linux/amd64/13.0/desktop
[4] default/linux/amd64/13.0/desktop/gnome
[5] default/linux/amd64/13.0/desktop/gnome/systemd
[6] default/linux/amd64/13.0/desktop/kde *
[7] default/linux/amd64/13.0/desktop/kde/systemd
[8] default/linux/amd64/13.0/desktop/plasma
[9] default/linux/amd64/13.0/desktop/plasma/systemd
[10] default/linux/amd64/13.0/developer
[11] default/linux/amd64/13.0/no-multilib
[12] default/linux/amd64/13.0/systemd
[13] default/linux/amd64/13.0/x32
[14] hardened/linux/amd64
[15] hardened/linux/amd64/selinux
[16] hardened/linux/amd64/no-multilib
[17] hardened/linux/amd64/no-multilib/selinux
[18] hardened/linux/amd64/x32
[19] hardened/linux/musl/amd64
[20] hardened/linux/musl/amd64/x32
[21] default/linux/uclibc/amd64
[22] hardened/linux/uclibc/amd64
解决方案
将您的配置文件设置为强化(我的列表中的 14 个)后,我们现在需要检查 KDE 配置文件的文件:(请注意,这需要在没有文本编辑器的情况下进行一些编写):
cd /usr/portage/profiles/targets/desktop/kde
nano -w make.defaults
nano -w parent
- 您现在应该看到
/usr/portage/profiles/targets/desktop/
. nano -w make.defaults
使用草稿纸,复制步骤 2 中的 USE Flags,然后parent
在步骤 3 中打开显示..
,这意味着我们向上移动一个目录。复制步骤 5 中的 USE 标志。作为最后一步,发出emerge -v app-portage/ufed && ufed
。您现在可以设置在 中复制的 USE Flags /etc/portage/make.conf
。您可能需要重复此过程:
/usr/portage/profiles/desktop/kde/package.use
/usr/portage/profiles/desktop/package.use
通过将这两个文件中列出的包放入/etc/portage/package.use
.
在同步期间,中的文件/etc/portage
不会被覆盖,并且中的 USE 标志/etc/portage/make.conf
将模仿您尝试实现的行为。请参阅手册中的 Portage 文件部分了解更多信息。本质上,您的 Portage 覆盖/etc/portage
将添加到您的强化配置文件中,因为 Portage 在读取您选择的配置文件之前使用您的配置。我知道这很痛苦,因为配置文件中的 USE 标志package.use
可以在每次同步时更新,因此您需要查看每次同步后是否添加了任何标志。一般来说,配置文件不会经常更新。