getnikola / nikola

A static website and blog generator
https://getnikola.com/
MIT License
2.62k stars 449 forks source link

nikola init --demo fails with a permission error #3606

Open nbraud opened 2 years ago

nbraud commented 2 years ago

Environment

Python Version: 3.9.10

Nikola Version: 8.2.0

Operating System: NixOS “unstable” 22.05pre-git

Description:

nikola init --demo fails, even when run in a clean environment and empty directory:

$ cd $(mktemp -d)  # Make a fresh, temporary directory, switch to it
$ nikola init --demo -q demo/
[2022-03-20 11:49:04] INFO: init: A new site with example data has been created at demo/.
[2022-03-20 11:49:04] INFO: init: See README.txt in that folder for more information.
Traceback (most recent call last):
  File "/nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/doit/doit_cmd.py", line 295, in run
    return command.parse_execute(args)
  File "/nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/doit/cmd_base.py", line 151, in parse_execute
    return self.execute(params, args)
  File "/nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/nikola/plugin_categories.py", line 148, in execute
    return self._execute(options, args)
  File "/nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/nikola/plugins/command/init.py", line 525, in _execute
    self.create_configuration(target)
  File "/nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/nikola/plugins/command/init.py", line 285, in create_configuration
    with io.open(conf_path, 'w+', encoding='utf8') as fd:
PermissionError: [Errno 13] Permission denied: 'demo/conf.py'

Diagnosis:

I believe this is due to the newly-created folder (here ./demo) not being writeable by the user, as nikola init preserves the file mode from the data/samplesite resource, which is stored as read-only (even for its owner, root) by NixOS (like all other packages) :

$ ls -ld demo/
dr-xr-xr-x 9 nicoo users 200 janv.  1  1970 demo/

$ ls -ld /nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/nikola/data/samplesite
dr-xr-xr-x 9 root root 10 janv.  1  1970 /nix/store/nbnxhr8lmw862z51xwm1kbbbkwyv77hp-python3-3.9.10-env/lib/python3.9/site-packages/nikola/data/samplesite
nbraud commented 2 years ago

This looks like a quick fix, I am now writing a patch.

Kwpolska commented 2 years ago

@nbraud Hi, what’s the status on your proposed patch? I can see you committed it to your repo, could you make a pull request with it?

nbraud commented 2 years ago

@Kwpolska Apologies for the lack of answer, I was quite ill and not working further on redoing my website (which is what I was trying nikola for)

I'll check out later today whether my patchset is ready to be submitted as a PR.

davidak commented 1 year ago

This is still an issue. It is similar to https://github.com/getnikola/nikola/issues/2962.

The created demo files can also not be removed. Sudo is needed!

[nix-shell:~/code/webseite]$ rm -rf demo/
rm: cannot remove 'demo/posts/1.rst': Permission denied
rm: cannot remove 'demo/listings/__pycache__/hello.cpython-37.pyc': Permission denied
rm: cannot remove 'demo/listings/hello.py': Permission denied
rm: cannot remove 'demo/README.txt': Permission denied
rm: cannot remove 'demo/images/frontispiece.jpg': Permission denied
rm: cannot remove 'demo/images/illus_001.jpg': Permission denied
rm: cannot remove 'demo/templates/book.tmpl': Permission denied
rm: cannot remove 'demo/pages/1.rst': Permission denied
rm: cannot remove 'demo/pages/path_handlers.rst': Permission denied
rm: cannot remove 'demo/pages/charts.rst': Permission denied
rm: cannot remove 'demo/pages/dr-nikolas-vendetta.rst': Permission denied
rm: cannot remove 'demo/pages/theming.rst': Permission denied
rm: cannot remove 'demo/pages/creating-a-theme.rst': Permission denied
rm: cannot remove 'demo/pages/social_buttons.rst': Permission denied
rm: cannot remove 'demo/pages/internals.rst': Permission denied
rm: cannot remove 'demo/pages/manual.rst': Permission denied
rm: cannot remove 'demo/pages/listings-demo.rst': Permission denied
rm: cannot remove 'demo/pages/bootstrap-demo.rst': Permission denied
rm: cannot remove 'demo/pages/quickref.rst': Permission denied
rm: cannot remove 'demo/pages/quickstart.rst': Permission denied
rm: cannot remove 'demo/pages/extending.rst': Permission denied
rm: cannot remove 'demo/files/favicon.ico': Permission denied
rm: cannot remove 'demo/files/images/nikola.png': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla_tower1_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla2_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/index.txt': Permission denied
rm: cannot remove 'demo/galleries/demo/exclude.meta': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla_conducts_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla_lightning2_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla4_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/tesla_lightning1_lg.jpg': Permission denied
rm: cannot remove 'demo/galleries/demo/metadata.sample.yml': Permission denied
Kwpolska commented 1 year ago

We don't have the resources to figure out Nix. If anyone wants this fixed, patches are welcome.