1 votes

xvfb-run se bloque sur trap/wait dans l'AMI Ubuntu 15.04 d'Elastic Bamboo sur AWS

J'essaie d'exécuter des tests robot/Selenium sans tête via Elastic Bamboo en utilisant Xvfb, sur Ubuntu 15.04 dans AWS EC2. Cela fonctionne si je lance Xvfb manuellement et que j'exécute ensuite le test...

export display=:99
Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -ac &
pybot --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<test output appears>

Mais je veux utiliser le script xvfb-run script fourni afin de pouvoir exécuter un certain nombre de tests en parallèle et de leur faire utiliser différents affichages. Cependant, lorsque je l'exécute via xvfb-run, il se bloque, ne produit aucun résultat et ne se termine jamais.

xvfb-run -a -e /dev/stdout --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<hangs>

Dans le script de /usr/bin/xvfb-run, c'est le cœur de la fonctionnalité :

# 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

Rien n'apparaît dans stdout (ou dans un journal si je le configure dans un fichier). J'ai donc modifié xvfb-run pour mettre -x, et ce qui se passe, c'est que le script arrive à l'exec puis se bloque :

...
16-Nov-2015 14:36:52    + xauth source -
16-Nov-2015 14:36:52    + trap : USR1
16-Nov-2015 14:36:52    + XVFBPID=6123
16-Nov-2015 14:36:52    + wait
16-Nov-2015 14:36:52    + trap '' USR1
16-Nov-2015 14:36:52    + exec Xvfb :99 -screen 0 640x480x8 -nolisten tcp -auth /tmp/xvfb-run.js9dgH/Xauthority
<hangs here>

En y regardant de plus près, il arrive à "wait", et s'attend à ce que l'enfant renvoie un SIGUSR1 pour continuer, mais soit il n'est jamais envoyé par Xvfb, soit il n'est pas reçu correctement par le Shell.

Quelqu'un a-t-il une idée de ce que pourrait être le problème ?

Il fonctionne sur le bureau Ubuntu 15.10 dans VirtualBox, sur le serveur Ubuntu 15.10 dans VirtualBox, et sur l'AMI Canonical Ubuntu (ami-3ad5af50) dans EC2. Il doit donc s'agir de quelque chose de spécifique à l'AMI Ubuntu configurée par Atlassian, mais je n'arrive pas à savoir ce que... J'ai manuellement mis à jour une instance de leur AMI vers 15.10 mais cela n'a pas résolu le problème.

0voto

Keith Walton Points 2338

Ah, peu importe, j'ai finalement trouvé le problème - Atlassian avait ajouté un wrapper Xvfb script de leur cru (/usr/local/bin/Xvfb) qui bloquait l'envoi du signal. Pour tous ceux qui auront ce problème à l'avenir, vérifiez si Xvfb est exécuté directement ou via un wrapper, et si c'est un wrapper, cela cassera xvfb-run.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X