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