使用级联

使用级联

我正在 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 更新时,我都必须重新应用desktopdesktop/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 配置文件的文件:(请注意,这需要在没有文本编辑器的情况下进行一些编写):

  1. cd /usr/portage/profiles/targets/desktop/kde
  2. nano -w make.defaults
  3. nano -w parent
  4. 您现在应该看到/usr/portage/profiles/targets/desktop/.
  5. 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可以在每次同步时更新,因此您需要查看每次同步后是否添加了任何标志。一般来说,配置文件不会经常更新。

相关内容