Gentoo

如何在 Gentoo 上一次應用多個配置文件?

  • June 5, 2018

我在 Gentoo Linux Hardened 系統上安裝 KDE。官方的 Gentoo wiki 說推薦的方法是應用 KDE 桌面配置文件,發布emerge -NDu --with-bdeps=y @world,然後安裝kdebase-meta包。但是,我在強化配置文件上,顯然我一次只能選擇一個配置文件。

到目前為止,我已經成功地在我的 Portage 配置文件(/etc/portage/make.conf、/etc/portage/package.use 等)上手動應用 KDE 配置文件的全域和每個包的 USE 標誌,但我擔心隨著 Gentoo 開發團隊修改配置文件,從長遠來看,這種 hack 可能很難維護。每次我得到一個 Portage 更新時,我都必須重新應用desktopdesktop/kde配置文件的 USE 標誌和配置,以防萬一它們被更改。

有沒有其他方法可以在 Gentoo Linux 上同時擁有多個活動的 Portage 配置文件?

問題

正如您所發現的,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 標誌/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 在讀取您選擇的配置文件之前使用您的配置。我知道這很痛苦,因為配置package.use文件中的 USE 標誌可以在每次同步時更新,因此您需要查看每次同步後是否添加了任何標誌。通常,配置文件不會經常更新。

使用級聯

配置文件允許級聯,無需手動設置 useflags:

所有配置文件都是由多個子配置文件組成的級聯/可堆疊配置文件…

同一頁面還包含專門用於回答此問題需求的章節:

組合配置文件

如果 Gentoo 儲存庫中沒有滿足您確切要求的配置文件,您可以嘗試將多個配置文件組合成一個自定義配置文件。例如,將強化配置文件與桌面 systemd 配置文件結合使用,例如 default/linux/amd64/17.0/desktop/plasma/systemd 和 default/linux/amd64/17.0/hardened。預計您已經設置了自定義儲存庫。

wikipage 將引導您獲得更多連結,以了解如何設置儲存庫並最終創建配置文件。

如何

這是我如何為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設置。如果我將multi-lib行設置在Plasma之上的位置,仍然會嘗試將某些包建構為multi-lib(給出各種有趣的建構失敗)。您可能需要使用這些行的順序。

3.設置儲存庫元數據

編輯/usr/portage/local/metadata/layout.conf. 自動同步告訴emerge --sync不要同步這個儲存庫。

masters = gentoo
auto-sync = false

定義友好名稱。這將作為eselect profile list此 repo 的所有條目的前綴。/usr/portage/local/profiles/repo_name

local

/usr/portage/local/profiles/profiles.desc會告訴eselect在哪裡尋找個人資料。第一個欄位是arch,第二個配置文件名稱,第三個欄位是stableexperimental

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 [...]

引用自:https://unix.stackexchange.com/questions/252428