--- date: 2019-06-19T12:03:33+02:00 description: "Utiliser les environnements Python virtuels sous OpenBSD (W^X)" draft: false tags: ['Python','Environnement','OpenBSD'] title: "Python : environnement virtuel sous OpenBSD" translationKey: "python-env-openbsd" --- ## Description * OS : OpenBSD 6.x Depuis OpenBSD 6.0, l'option de montage `wxallowed` est configuré par défaut sur `/usr/local`. Pour ceux qui ne le savent pas, c'est une protection système. Si la partition a cette option, les logiciels sont autorisés à fonctionner depuis cette partition, sinon ils ne pourront fonctionner et émettront un message de violation `W^X`, tel que : `$ dmesg | grep wxallowed`
`/home/hs/.local/share/virtualenvs/mybeautifullproject-q1koN8ay/bin/python3(26392): W^X binary outside wxallowed mountpoint` De fait, puisque seul `/usr/local` a cette option activée, si vous tentez d'exécuter un programme depuis, par exemple, votre `$HOME`, cela ne fonctionnera pas. Et, c'est tout le problème avec les environnements Python qui doivent fonctionner dans votre répertoire personnel. Dans les faits, voici ce qui se passe pour `virtualenv` : {{< code "dev-python-env-openbsd-virtualenv-error-permission-denied" shell >}} C'est pareil pour `pipenv` : {{< code "dev-python-env-openbsd-pipenv-failed-create" shell >}} D'autant que ce n'est vraiment pas un problème de droits utilisateurs : {{< code "dev-python-env-openbsd-ls-mybeautifull-project" shell >}} ## Configuration Une petite modification système va faciliter notre vie - puisque `/usr/local` est la seule partition autorisée à l'exécution des programmes qui nécessitent la violation `W^X` : - Création d'un répertoire utilisateur dedans :
`# mkdir -p /usr/local/${my_user}/python` - Attribution des droits utilisateur et groupe correcte :
`# chown -R ${my_user}:wheel /usr/local/${my_user}` - Création d'un lien symbolique :
`# ln -s /usr/local/${my_user}/python $home/python` Remplacez `${my_user}` par votre identifiant de session ;) Si vous avez la bonne idée d'utiliser l'outil `pipenv`, il faudra créer un nouveau répertoire et le lier symboliquement ; lisez la section {{< anchor "TL;DR" tldr >}} ci-dessous… ## TL;DR Remplacez ''${my_user}'' par votre identifiant de session ! => Pour **virtualenv** :
`# mkdir -p /usr/local/${my_user}/python`
`# chown -R ${my_user}:wheel /usr/local/${my_user}`
`# ln -s /usr/local/${my_user}/python $home/python` => Pour **pipenv**, il faut rajouter à ce qui suit au-dessus :
`$ mkdir /usr/local/$USER/python/virtualenvs`
`$ ln -s /usr/local/$USER/python/virtualenvs $HOME/.local/share/virtualenvs` ## Documentations * La documentation de **pipenv** - *en anglais* : https://pipenv.readthedocs.io/en/latest/ * À-propos de l'option de montage **wxallowed** : le Guide de Migration OpenBSD 5.9 vers 6.0 - [EN][1] / [FR][2] * La [réponse][3] expliquée sur le forum "obsd4*" ## Remerciements * Ce tutoriel n'existerait pas sans [Xavier][4]… * et, sans cet [article][5] anglais, nommé "***Using cabal on OpenBSD***" --- [1]: https://www.openbsd.org/faq/upgrade60.html [2]: https://wiki.openbsd.fr.eu.org/doku.php/openbsd.org/faq/upgrade60#changement-de-configuration-et-de-syntaxe [3]: https://forum.openbsd.fr.eu.org/showthread.php?tid=2352&pid=18773#pid18773 [4]: https://ybad.name/sdj.html [5]: https://deftly.net/posts/2017-10-12-using-cabal-on-openbsd.html ---