Los perfiles permiten cascada , sin necesidad de configurar manualmente las banderas de uso:
All profiles are cascading/stackable profiles composed by several subprofiles...
La misma página también contiene un capítulo específico para responder a la demanda en estas preguntas:
Combining profiles
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.
La página wiki lo lleva a más enlaces sobre cómo configurar un repositorio y finalmente crear el perfil.
Aquí tienes un resumen de cómo lo he hecho yo para una no-multilib/plasma/systemd
combinación (ajustada a tus necesidades):
mkdir -p /usr/portage/local/{metadata,profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd}
Edite /usr/portage/local/profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd/parent
para que contenga algo como:
/usr/portage/profiles/default/linux/amd64/17.0/desktop/plasma/systemd
/usr/portage/profiles/default/linux/amd64/17.0/no-multilib
Tenga en cuenta que la documentación usa rutas relativas, pero encontré el nivel de recurrencias negativas(../../..
)un poco confuso. Las rutas absolutas funcionan igual de bien, a menos que planee moverse /usr/portage
por el sistema.
Encontré que tiene preferencia una línea inferior. Por lo tanto, si se activa o desactiva un indicador o una configuración en el primer perfil y sucede lo contrario en una línea inferior, se aplica la configuración del perfil de la línea inferior. Por ejemplo, el perfil plasma
permite algunas configuraciones multi-lib
. Si configuro la línea multi -lib arriba de plasma , aún se intentará compilar algunos paquetes como multi -lib(dando todo tipo de fallas de compilación divertidas ). Es posible que deba jugar con el orden de estas líneas.
Editar /usr/portage/local/metadata/layout.conf
. La sincronización automática -le dice a emerge --sync
que no sincronice este repositorio.
masters = gentoo
auto-sync = false
Defina el nombre descriptivo. Esto se antepondrá a todas las entradas eselect profile list
para este repositorio./usr/portage/local/profiles/repo_name
:
local
Y /usr/portage/local/profiles/profiles.desc
le dirá eselect
dónde buscar perfiles. El primer campo es arch , el segundo nombre de perfil y el tercer campo estable o experimental:
amd64 default/linux/amd64/17.0/no-multilib/plasma/systemd stable
Crear y editar /etc/portage/repos.conf/local.conf
para que contenga:
[local]
location = /usr/portage/local
~# 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
Aunque, esto es un poco de trabajo para configurar, es muy fácil de mantener. Los indicadores de uso del perfil y la configuración siempre se mantienen sincronizados con el árbol principal. Incluso si de vez en cuando es necesario actualizar la versión del perfil, también puede ser difícil. Por ejemplo, si hay una nueva versión de perfil del árbol de 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 [...]
Выяснилось, что код выхода на самом деле не нужен.Поскольку yad выводит выбранную строку на стандартный вывод, и ничего там, если процесс умер, я попробовал это:
SELPIPE=$(mktemp -u -p "${XDG_RUNTIME_DIR}" "${0##*/}.XXXXXXXXXX")
mkfifo "$SELPIPE"
exec 4<> "$SELPIPE"
yad... 2>/dev/null 1>&4 &
yad_pid=$!
#wait for notification
( read -u 3 line && kill -USR2 $yad_pid ) 2>/dev/null &
pidof_killer=$!
#wait for yad termination and read its stdout on a timeout. If triggers timeout, it's empty
wait $yad_pid
read -u 4 -t 1 SEL
exec 4>&- #close FD4
kill $pidof_killer 2>/dev/null
#etc
Это работает, за исключением того, что убитые процессы любят писать уродливые строки $PID Terminated.