terminalizer icon indicating copy to clipboard operation
terminalizer copied to clipboard

Use temporary directories

Open spelunk opened this issue 5 years ago • 11 comments

$ terminalizer render foobar
Error: 
  EACCES: permission denied, mkdir '/usr/local/lib/node_modules/terminalizer/render/frames'

Skimming the code, places hardcode the relative render/frames/ directory. These probably should be stored in a temporary directory using a module like tempfile

spelunk avatar Sep 02 '18 17:09 spelunk

@spelunk I will consider storing the files in the temporary directory

For now you can solve the issue by fixing the npm permissions

chown -R faressoft /usr/local/lib/node_modules
chown -R faressoft /usr/local/bin
chown -R faressoft /usr/local/share

Change faressoft to your username.

faressoft avatar Sep 02 '18 17:09 faressoft

Fix doesn't work for me.

David-OConnor avatar Sep 27 '19 01:09 David-OConnor

If anyone still needs a work around, this worked for me.

sudo chown -R <user> /usr/lib/node_modules/terminalizer/render/
sudo chmod 4775 /usr/lib/node_modules/terminalizer/node_modules/electron/dist/chrome-sandbox

paralllax avatar Feb 14 '20 02:02 paralllax

This is very bad. Using 0.7.2 and still doesn't work.

rsalmei avatar Aug 14 '20 07:08 rsalmei

Using Ubuntu 18.04, I got Terminalizer to work as follows:

# Install npm (requires dependencies)
sudo apt install npm node-gyp nodejs-dev libssl1.0-dev

# Install terminalizer globally
sudo npm install -g terminalizer

# Remove the electron that comes with terminalizer
sudo rm -rf /usr/local/lib/node_modules/terminalizer/node_modules/electron/

# Add electron globally - based on this SO answer https://stackoverflow.com/a/52033822/3508733
sudo npm install -g electron --unsafe-perm=true --allow-root

# By this point, I could record and play sessions, but got the error in this issue when I tried to render them.
# Symlink the hardcoded rendering path to where terminalizer is actually installed on Ubuntu
sudo mkdir -p /usr/lib/node_modules/
sudo ln -s /usr/local/lib/node_modules/terminalizer/ /usr/lib/node_modules/terminalizer

# Do the workaround above
sudo chown -R <user> /usr/lib/node_modules/terminalizer/render
sudo chmod 4775 /usr/local/lib/node_modules/electron/dist/chrome-sandbox 

Thanks @faressoft and @paralllax!

volcan01010 avatar Aug 20 '20 22:08 volcan01010

I've created a Gist with these instructions and also instructions for Ubuntu 20.04.

https://gist.github.com/volcan01010/6fcf7ae1f4975474ba9aac27efe17b84

I gave a thumbs down to the workaround above (chown /usr/local...). These files are owned by root for security. This would be an especially bad idea on a shared system.

volcan01010 avatar Aug 21 '20 15:08 volcan01010

Hey @volcan01010 ,

Using your exact steps in ubuntu 20.04, I got:

Error:
  Error: /usr/local/lib/node_modules/terminalizer/node_modules/electron/dist/electron: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

I obviously tried to sudo apt install libnss3, which even having worked, has led me to:

Error:
  Error: /usr/local/lib/node_modules/terminalizer/node_modules/electron/dist/electron: error while loading shared libraries: libgdk_pixbuf-2.0.so.0: cannot open shared object file: No such file or directory

Which I resolved with sudo apt install librust-gdk-pixbuf-sys-dev, but then led me to:

Error:
  Error: /usr/local/lib/node_modules/terminalizer/node_modules/electron/dist/electron: error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory

And then I've given up. Are you sure you had a clean machine? I've just started this one on aws, and those instructions don't work. Thanks anyway.

rsalmei avatar Aug 22 '20 02:08 rsalmei

Messing with system folder permissions is not a great approach. @faressoft is there a specific reason why you have to write to a potential system folder rather than a temp folder or the current directory?

spelunk avatar Aug 22 '20 02:08 spelunk

I've just found out this also makes it impossible to open two shells and start two render processes simultaneously! I was at a very slow rendering, with more than 3000s still to go when I tried to speed things up and render another one in another shell... Bad mistake, to my astonishment it not only didn't work but also broke the first one!! 😞

rsalmei avatar Aug 22 '20 20:08 rsalmei

+1 to fixing this, it sadly makes it super hard to use terminalizer on a linux system

Licenser avatar Oct 08 '20 10:10 Licenser

@faressoft are you serious? Everyone, never do something like that.

As for this issue tools should not try to write anything to library paths. chmod solutions is something temporary before there is a real temp directory fix.

As another temporary solution we could symlink /usr/lib/node_modules/terminalizer/render/ to /tmp or some user folder (once again, this still is not something npm users should really do).

nick4fake avatar Dec 19 '20 09:12 nick4fake

@faressoft could you please at least handle the issue gracefully with a message like:

Error:
  Missing access to global installation folder ('/usr/local/lib/node_modules/terminalizer/render/frames').
  Please see https://github.com/faressoft/terminalizer/issues/29 for a workaround.

I would like to use terminalizer globally, so local installation where permissions are correct (?) does not work for me.

The GIF rendering is the main reason I want to use terminalizer and this makes it needlessly harder. :disappointed:

xsebek avatar Oct 01 '22 12:10 xsebek

Why I'm still facing this issue it's 2023!

festum avatar Mar 13 '23 10:03 festum

Fixed in #226

faressoft avatar Jul 15 '23 18:07 faressoft