Notebook: Permission denied: '/root/.local'

Created on 27 Aug 2016  路  3Comments  路  Source: jupyter/notebook

I am starting jupyter notebook with supervisor.
This is my configuration file:

[program:jupyter-notebook] directory=/opt/sailogy_dataanalysis command=/opt/sailogy_dataanalysis/venv/bin/jupyter notebook user=jupyter group=jupyter autostart=True autorestart=True stdout_logfile=/opt/sailogy_dataanalysis/logs/notebook_access.log stderr_logfile=/opt/sailogy_dataanalysis/logs/notebook_error.log redirect_stderr=True environment = PATH="/opt/sailogy_dataanalysis/venv/bin",JUPYTER_CONFIG_DIR="/home/jupyter/.jupyter",JUPYTER_RUNTIME_DIR="/etc/jupyter",XDG_RUNTIME_DIR="/run/user/1002" startsecs=10 stopwaitsecs=600 priority=998

It starts, but I see this warning inside the log file:

UserWarning: IPython parent '/root' is not a writable location, using a temp directory.

As soon as I try to create a new notebook or open an existing one I get the following stack trace error:

[E 14:59:36.440 NotebookApp] Unhandled error in API request
Traceback (most recent call last):
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/base/handlers.py", line 436, in wrapper
result = yield gen.maybe_future(method(self, _args, _kwargs))
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/gen.py", line 1015, in run
value = future.result()
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/concurrent.py", line 237, in result
raise_exc_info(self._exc_info)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/tornado/gen.py", line 285, in wrapper
yielded = next(result)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/handlers.py", line 126, in get
path=path, type=type, format=format, content=content,
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/filemanager.py", line 350, in get
model = self._notebook_model(path, content=content)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/filemanager.py", line 310, in _notebook_model
self.mark_trusted_cells(nb, path)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/notebook/services/contents/manager.py", line 447, in mark_trusted_cells
trusted = self.notary.check_signature(nb)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 220, in check_signature
if self.db is None:
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 126, in _db_default
db = sqlite3.connect(self.db_file, kwargs)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 109, in _db_file_default
if not self.data_dir:
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/nbformat/sign.py", line 101, in _data_dir_default
return app.data_dir
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 529, in __get__
return self.get(obj, cls)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/traitlets/traitlets.py", line 508, in get
value = self._validate(obj, dynamic_default())
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/jupyter_core/application.py", line 93, in _data_dir_default
ensure_dir_exists(d, mode=0o700)
File "/opt/sailogy_dataanalysis/venv/local/lib/python2.7/site-packages/ipython_genutils/path.py", line 167, in ensure_dir_exists
os.makedirs(path, mode=mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 150, in makedirs
makedirs(head, mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 150, in makedirs
makedirs(head, mode)
File "/opt/sailogy_dataanalysis/venv/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
*
OSError: [Errno 13] Permission denied: '/root/.local'

It works fine when in my supervisor config file I use

``
.....
user=root

group=root

``

but I wouldn't start my service as root.

Does anyone know how to fix it?

Thanks
Walter

Most helpful comment

Thanks a lot @minrk !!!

I've just set the environment variable HOME in my supervisor config file and now everything works fine.

Cheers,
Walter

All 3 comments

You might want to make sure HOME is set correctly. It's also possible that you will have a better experience launching via a small shell script, to ensure a full shell environment is established, rather than launching jupyter directly

Thanks a lot @minrk !!!

I've just set the environment variable HOME in my supervisor config file and now everything works fine.

Cheers,
Walter

I encountered the same _issue_ and finally found that documentation of supervisord configuration mentions:
The user will be changed using setuid only. This does not start a login shell and does not change environment variables like USER or HOME
So environment variables has to be _fixed_ manually, for example:

[program:foo]
user=bar
environment=HOME=/home/bar
Was this page helpful?
0 / 5 - 0 ratings