Xvfb não enviando SIGUSR1, interrompendo xvfb-run

2

Eu tenho trabalhado em um problema complicado tentando executar testes sem cabeça usando o script xvfb-run fornecido com Xvfb . Ele funciona em minhas próprias imagens do Ubuntu em execução no VirtualBox, mas no Ubuntu 15.04 AMI que o Atlassian fornece para o Elastic Bamboo não funciona. Eu rastreei o problema até aqui:

xvfb-run:

...
# Start Xvfb.
MCOOKIE=$(mcookie)
tries=10
while [ $tries -gt 0 ]; do
    tries=$(( $tries - 1 ))
    XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1
add :$SERVERNUM $XAUTHPROTO $MCOOKIE
EOF
    # handle SIGUSR1 so Xvfb knows to send a signal when it's ready to accept
    # connections
    trap : USR1
    (trap '' USR1; exec Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP -auth $AUTHFILE >>"$ERRORFILE" 2>&1) &
    XVFBPID=$!
    wait || :
    if kill -0 $XVFBPID 2>/dev/null; then
        break
    elif [ -n "$AUTONUM" ]; then
        # The display is in use so try another one (if '-a' was specified).
        SERVERNUM=$((SERVERNUM + 1))
        SERVERNUM=$(find_free_servernum)
        continue
    fi
    error "Xvfb failed to start" >&2
    XVFBPID=
    exit 1
done
...

O script chega ao "wait" mas nunca recebe o esperado SIGUSR1 do Xvfb. (Se eu enviar um SIGUSR1 manualmente, o script prossegue normalmente). Eu atualizei todos os pacotes para o mais recente melhor, mas ainda sem amor, e é estranho porque eu posso fazê-lo funcionar em outros sistemas Ubuntu. O log de erros xvfb ($ ERRORFILE) é criado, mas não tem nada nele.

Pensamentos sobre a causa raiz, ou pelo menos para aprofundar-se?

    
por Ernest Mueller 20.11.2015 / 21:03

2 respostas

2

Ah, não importa, eu finalmente encontrei o problema - o Atlassian tinha adicionado um script de wrapper do Xvfb (/ usr / local / bin / Xvfb) que estava bloqueando o envio do sinal. Para qualquer um que tenha esse problema no futuro, verifique e verifique se o Xvfb está sendo executado diretamente ou por meio de um wrapper e, se for um wrapper, ele quebrará o xvfb-run.

    
por 20.11.2015 / 21:27
0

Para qualquer outra pessoa que tenha os mesmos sintomas com outras imagens, sem o script wrap da Atlassian:

Usar xvfb-run como processo principal (init) para um contêiner aparentemente quebra seu tratamento de sinal interno, causando também a suspensão do wait . Resolva isso usando um processo de inicialização, como tini , adicionando-o ao contêiner ou usando docker run --init .

    
por 06.11.2017 / 15:14