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 : shell
$ virtualenv mybeautifullproject
Using base prefix '/usr/local'
New python executable in $HOME/python/mybeautifullproject.py/mybeautifullproject/bin/python3
Also creating executable in $HOME/python/mybeautifullproject.py/mybeautifullproject/bin/python
ERROR: The executable $HOME/python/mybeautifullproject.py/mybeautifullproject/bin/python3 could not be run: [Errno 13] Permission denied: '$HOME/python/mybeautifullproject.py/mybeautifullproject/bin/python
C’est pareil pour pipenv
:
Code : shell
$ pipenv install requests
Warning: the environment variable LANG is not set!
We recommend setting this in ~/.profile (or equivalent) for proper expected behavior.
Creating a virtualenv for this project…
Pipfile: $HOME/python/mybeautifullproject.py/Pipfile
Using /usr/local/bin/python3 (3.6.8) to create virtualenv…
⠇ Creating virtual environment...Already using interpreter /usr/local/bin/python3
Using base prefix '/usr/local'
New python executable in $HOME/.local/share/virtualenvs/mybeautifullproject.py-oFlnu9vD/bin/python3
Also creating executable in $HOME/.local/share/virtualenvs/mybeautifullproject.py-oFlnu9vD/bin/python
ERROR: The executable $HOME/.local/share/virtualenvs/mybeautifullproject.py-oFlnu9vD/bin/python3 could not be run: [Errno 13] Permission denied: '$HOME/.local/share/virtualenvs/mybeautifullproject.py-oFlnu9vD/bin/python3'
✘ Failed creating virtual environment
[pipenv.exceptions.VirtualenvCreationException]: File "$HOME/.local/lib/python3.6/site-packages/pipenv/cli/command.py", line 254, in install
[pipenv.exceptions.VirtualenvCreationException]: editable_packages=state.installstate.editables,
[pipenv.exceptions.VirtualenvCreationException]: File "$HOME/.local/lib/python3.6/site-packages/pipenv/core.py", line 1741, in do_install
[pipenv.exceptions.VirtualenvCreationException]: pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]: File "$HOME/.local/lib/python3.6/site-packages/pipenv/core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]: pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]: File "$HOME/.local/lib/python3.6/site-packages/pipenv/core.py", line 506, in ensure_virtualenv
[pipenv.exceptions.VirtualenvCreationException]: python=python, site_packages=site_packages, pypi_mirror=pypi_mirror
[pipenv.exceptions.VirtualenvCreationException]: File "$HOME/.local/lib/python3.6/site-packages/pipenv/core.py", line 935, in do_create_virtualenv
[pipenv.exceptions.VirtualenvCreationException]: extra=[crayons.blue("{0}".format(c.err)),]
[pipenv.exceptions.VirtualenvCreationException]:
Failed to create virtual environment.
D’autant que ce n’est vraiment pas un problème de droits utilisateurs :
Code : shell
$ ls -al mybeautifullproject/
total 40
drwxr-xr-x 5 hs hs 512 Jun 3 01:43 ./
drwxr-xr-x 3 hs hs 512 Jun 3 01:44 ../
drwxr-xr-x 2 hs hs 512 Jun 3 01:43 bin/
drwxr-xr-x 2 hs hs 512 Jun 3 01:43 include/
drwxr-xr-x 3 hs hs 512 Jun 3 01:43 lib/
$ ls -al mybeautifullproject/bin/
total 40
drwxr-xr-x 2 hs hs 512 Jun 3 01:43 ./
drwxr-xr-x 5 hs hs 512 Jun 3 01:43 ../
lrwxr-xr-x 1 hs hs 7 Jun 3 01:43 python@ -> python3
-rwxr-xr-x 1 hs hs 10680 Jun 3 01:43 python3*
lrwxr-xr-x 1 hs hs 7 Jun 3 01:43 python3.6@ -> python3
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 TL;DR
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 / FR
- La réponse expliquée sur le forum “obsd4*”
Remerciements
- Ce tutoriel n’existerait pas sans Xavier…
- et, sans cet article anglais, nommé “Using cabal on OpenBSD”