Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tar EPERM: operation not permitted, futime

I have a node:alpine Docker image. When I run the image as a root user, I have no problems, but when I use another user and I try to do npm install I receive a lot of errors from package extraction:

npm WARN tar EPERM: operation not permitted, futime

After 5000 WARN messages, I see this on the npm install log:

npm timing action:extract Completed in 276816ms
npm timing action:finalize Completed in 172ms

And no more, the npm install process is completely hang.

Anybody knows this error and know how to avoid it?

like image 430
Ildelian Avatar asked Jun 05 '19 09:06

Ildelian


2 Answers

Solution for WSL:

I solved this by mounting C:/ with default permissions bound to my user instead of root. I followed the guide here: https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111

This mounts all files on the C drive as my user instead of root. Therefore sudo is not needed to run npm i

like image 175
Kevin Dolan Avatar answered Nov 14 '22 23:11

Kevin Dolan


I had this in Windows Linux Subsystem too, after moving a project from Windows to Linux. I failed to fix it with

rm -rf node_modules
rm package-lock.json
npm cache clear --force
chown -R username:username *
npm install

None of this worked.


futime errors are caused by the tar utility not having enough rights to perform the necessary actions to expand the .tar files used by npm and the node modules.

In the case of Alpine Linux, you may need to unpack as root and then chown the files, or create a folder owned as the user with the right permissions.

For Windows Subsystem for Linux, it doesn't seem to work with folders under /mnt/c and refuses to change permissions. Setting them in Linux has no effect, and setting them in Windows doesn't seem to make any difference either - adding full control to the 'Everyone' principle doesn't solve this.


(probable) solution for Alpine:

sudo mkdir project_folder
sudo chown username project_folder
cd project_folder
...  

Solution for WSL:

Move the folder into the WSL folder, eg. mv project ~\ so that permissions work correctly.

like image 36
antonyh Avatar answered Nov 14 '22 22:11

antonyh