Use cascading
Profiles allow for cascading, no need to manually set useflags:
All profiles are cascading/stackable profiles composed by several
subprofiles...
The same page also contains a chapter specifically for answering for the demand in this questions:
If there isn't a profile in the Gentoo repository that meets your
exact requirements, you can try combining multiple profiles into a
single custom profile. An example of this would be combining a
hardened profile with a desktop systemd profile, such as
default/linux/amd64/17.0/desktop/plasma/systemd and
default/linux/amd64/17.0/hardened. It is expected that you already
have a custom repository set up.
The wikipage leads you to more links how to set up a repository and finally create the profile.
HowTo
Here is a summary on how I've done it for a no-multilib/plasma/systemd
combination (adjust to your needs):
1. Create directory structure for repository
mkdir -p /usr/portage/local/{metadata,profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd}
2. Define the parents
Edit /usr/portage/local/profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd/parent
to contain something like:
/usr/portage/profiles/default/linux/amd64/17.0/desktop/plasma/systemd
/usr/portage/profiles/default/linux/amd64/17.0/no-multilib
Note that the documentation uses relative paths, but I found the level of negative recursions (../../..
) a wee bit confusing. Absolute paths work just as fine, unless you plan on moving /usr/portage
around on the system.
I found that a lower line takes preference. So if a flag or setting is set / unset in the first profile, and the opposite happens in a lower line, the lower line's profile setting applies. For instance, plasma
profile allows for some multi-lib
settings. If I where to set the multi-lib line above the plasma one, some packages will still be attempted to be build as multi-lib (giving all sorts of funny build failures). You may need to play around with the order of this lines.
3. Set repository metadata
Edit /usr/portage/local/metadata/layout.conf
. Auto-sync tells emerge --sync
not to sync this repository.
masters = gentoo
auto-sync = false
Define the friendly name. This will be prefixed to all the eselect profile list
entries for this repo. /usr/portage/local/profiles/repo_name
:
local
And /usr/portage/local/profiles/profiles.desc
will tell eselect
where to look for profiles. First field is arch, second profile name, and third field stable or experimental:
amd64 default/linux/amd64/17.0/no-multilib/plasma/systemd stable
4. Make portage aware of this new repository
Create and edit /etc/portage/repos.conf/local.conf
to contain:
[local]
location = /usr/portage/local
5. Set the profile and fingers crossed
~# 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
Maintenance friendly
Although, this is a bit of work to set up, it is very easy to maintain. Profile useflags and setting always keep in sync with the main tree. Even if once in a while it is necessary to update the profile version, it goes without too may difficulty. For instance, if there is a new profile version from the Gentoo tree:
~# 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 [...]