Le problème

Pour une raison mal déterminée, il y a un soucis avec le container trampgeek/jobeinabox lorsque déployé via Docker sur QNAP. Les permissions sont mal attribuées sur les répertoires temporaires de run, et de nombreux tests échouent. Ceci est particulièrement avéré lorsqu’il faut écrire des fichiers temporaires, par exemple lors des exécutions en  python  – création d’un fichier  __pycache__  ou en java pour les fichiers .class – 

Reproduire le problème

Je crée une sandbox jobetest from scratch et lance le test simpletest.py

 docker run  -d --name jobetest  trampgeek/jobeinabox:latest
 docker exec -ti jobetest python3 /var/www/html/jobe/simpletest.py 

J’obtiens les messages d’erreurs suivants – écriture de fichiers qui échoue –

// python...
PermissionError: [Errno 13] Permission denied: '__pycache__'

// C++ ...
/usr/bin/ld: cannot open output file test.cpp.exe: Permission denied

// Java ...
Blah.java:2: error: error while writing Blah: /home/jobe/runs/jobe_ab57y0/Blah.class 
Diagnostic possible

Le problème vient des droits du répertoire de travail  /home/jobs/runs/jobe_xxx.  Ce fichier est créé lors de l’appel prepare_execution_environment($sourceCode) , lignes 107 – 130 du fichier jobe/application/libraries/LanguageTask.php  – jobe est contenu par défaut dans /var/www/html/ -. L’ajout des droits d’écriture à l’utilisateur jobe se fait via une ACL ligne 129.

exec("setfacl -m u:{$this->user}:rwX {$this->workdir}"); 

Cette ACL n’est peut-être pas fonctionnelle, ou mal gérée par Docker sur QNAP ?

Correctif rapide

J’édite le fichier LangageTask.php et je complète l’ACL en changeant les droits d’exécution du fichier. En ligne 130 j’ajoute :

       chmod($this->workdir, 0777); 

Ce sont les droits other qui semblent importants ici. Je relance mon test, tout marche. Je vérifie avec testsubmit.py

python3 /var/www/html/jobe/testsubmit.py 
...
39 tests, 39 passed, 0 failed, 0 exceptions 
 
Une note sur un problème de droit avec jobeserver en docker sur QNAP (trampgeek/jobeinabox), et comment le corriger
Étiqueté avec :            

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *