Como posso relaxar as restrições de segurança X para o daemon jenkins?

0

Funciona bem na linha de comando, quando eu faço

xhost +  
su - jenkins  
emulator -avd myAVD.avd  

mas

emulator -avd myAVD.avd

executado pelo jenkins daemon falha com

"SDL init failure: No available video device"  

Como posso relaxar as restrições de segurança X para o daemon jenkins,
para que ele possa fazer emulator -avd myAVD.avd sem falhar?

    
por user19496 11.08.2011 / 17:37

1 resposta

1

O motivo mais provável de você receber o erro é que emulator não sabe onde está sua exibição. Os programas X11 usam a variável de ambiente $DISPLAY para descobrir o local do servidor X11 e, como a maioria dos daemons são iniciados, eles não recebem a variável environ. (A maioria dos daemons não precisa [e não deveria] executar o X11.)

Você precisará encontrar uma maneira de passar o valor atual de $DISPLAY para o daemon - note que pode mudar entre logins.

Quanto à segurança, não nunca usa xhost + - dá acesso total a todos 1 . Em vez disso, conceda à outra conta acesso aos seus dados do Xauthority .

$ xauth extract /dev/stdout $DISPLAY | su -c "xauth merge /dev/stdin" jenkins

Uma maneira possível de automatizar tudo isso é colocar alguns comandos em ~/.xprofile ... você precisará do suporte à ACL ativado para o seguinte:

# your .xprofile
if [ "$DISPLAY" ]; then
    touch /tmp/jenkins-display
    setfacl -m u::rw,u:jenkins:r,g::-,o::- /tmp/jenkins-display
    { echo $DISPLAY; xauth nextract /dev/stdout $DISPLAY; } > /tmp/jenkins-display
fi

e crie um script emulator-wrapper para executar a ferramenta emulator :

#!/bin/sh
# a wrapper script for 'emulator'
{ read -r DISPLAY; export DISPLAY; xauth nmerge /dev/stdin; } < /tmp/jenkins-display
exec emulator "$@"

Um pouco feio.

1 "Todos" geralmente significa qualquer usuário que possa rodar programas no computador - mas se o seu servidor X11 estiver procurando por conexões TCP, isso significaria "toda a Internet", embora isso seja incomum nas distros modernas.

    
por 11.08.2011 / 20:42