Yad forking and return results

Usar cascada

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.

Cómo

Aquí tienes un resumen de cómo lo he hecho yo para una no-multilib/plasma/systemdcombinación (ajustada a tus necesidades):

1. Crear estructura de directorios para el repositorio

mkdir -p /usr/portage/local/{metadata,profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd}

2. Definir los padres

Edite /usr/portage/local/profiles/default/linux/amd64/17.0/no-multilib/plasma/systemd/parentpara 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/portagepor 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 plasmapermite 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.

3. Establecer metadatos del repositorio

Editar /usr/portage/local/metadata/layout.conf. La sincronización automática -le dice a emerge --syncque no sincronice este repositorio.

masters = gentoo
auto-sync = false

Defina el nombre descriptivo. Esto se antepondrá a todas las entradas eselect profile listpara este repositorio./usr/portage/local/profiles/repo_name:

local

Y /usr/portage/local/profiles/profiles.descle dirá eselectdó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

4.Informe a Portage de este nuevo repositorio

Crear y editar /etc/portage/repos.conf/local.confpara que contenga:

[local]
location = /usr/portage/local

5. Fijar el perfil y cruzar los dedos

~# 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

Fácil mantenimiento

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 [...]
0
01.07.2017, 13:41
1 ответ

Выяснилось, что код выхода на самом деле не нужен.Поскольку 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.

0
28.01.2020, 04:44

Теги

Похожие вопросы