如何在 Gentoo 上一次應用多個配置文件?
我在 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 更新時,我都必須重新應用
desktop
和desktop/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 配置文件的文件:(請注意,這需要在沒有文本編輯器的情況下進行一些編寫):
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 標誌/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,第二個配置文件名稱,第三個欄位是stable或experimental: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 [...]