terminalizer
terminalizer copied to clipboard
Use temporary directories
$ 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 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.
Fix doesn't work for me.
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
This is very bad. Using 0.7.2 and still doesn't work.
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!
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.
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.
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?
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!! 😞
+1 to fixing this, it sadly makes it super hard to use terminalizer on a linux system
@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).
@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:
Why I'm still facing this issue it's 2023!
Fixed in #226