bcrypt invalid elf header when running node app
Solution 1
I've found that bcrypt compiled on OSX will not quite work on Linux. In other words, if you check in the bcrypt compiled on your local OSX workstation, and try to run the node app on your linux servers, you will see the error above.
Solution: npm install bcrypt
on Linux, check that in, solved.
Probably the best way to deal with this is exclude your node_modules in .gitignore... and npm install remotely.
Solution 2
If you are running inside a docker container as I am, all you need is a .dockerignore with 'node_modules' specified in it.
Some libraries need to be compiled on the host machine and therefore your modules can be stale.
Solution 3
My issue was with my docker-compose.yml file, I already had node_modules in my .dockerignore but I also needed to add the node_modules directory as a volume:
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
Solution 4
There is a simple way that allowed me to solve this problem:
1. Uninstall bcrypt
npm uninstall bcrypt
2.- Install bcrypt again
npm i bcrypt
The error occurs because when you install bcypt, npm installs the recommended version for your machine and operating system, but when you are on another machine, this doesn't work.
-------- UPDATE ----------------------------------------
It also seems to me that another solution which is to grant root permissions to bcrypt installation, it happens because bcryp uses its own user but it has no permissions, so:
1. You must grant root permission to your project folder. go outside of your project folder and then
sudo su
Then enter your root password to get root user permissions
2. Grant permission to your project folder
chmod -R 777 <project_folder>
3. Go to your project folder and install bcrypt
cd <project_folder>
AND
npm i bcrypt --unsafe-perm=true --allow-root --save
Ready, if everything was OK, your bcrypt module will install without problems.
Solution 5
I was also facing the same issue with bcrypt v.1.0.3. Just updated to the latest version (3.0.1) and its working fine now
Run
npm install bcrypt@latest --save
Related videos on Youtube
user2244469
Updated on September 03, 2021Comments
-
user2244469 almost 3 years
I'm working on a nodejs project for school. I wasn't able to install bcrypt with npm so i installed bcrypt-nodejs and the project worked fine yesterday. But today, when I do a "node app" i have this error :
/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79 throw e ^ Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15) at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17)
my package.json file looks like this:
{ "name": "Supinfarm", "version": "0.0.0", "env": { "PYTHON": "/usr/bin/python2.6" }, "dependencies": { "express": "3.1.0", "connect-flash": "*", "jade": "*", "stylus": "*", "passport": "*", "passport-local": "*", "mongoose": "*", "bcrypt": "*" } }
I'm on Linux ubuntu 10.04 LTS I've tried to find a solution on google without success... Can somebody help me?
-
MrYoshiji about 11 yearsDid you find a solution?
-
user2244469 about 11 yearsyes, i installed ubuntu 12.04 and i was able to install and use bcrypt. thanks for you interest in my issue.
-
-
tkone almost 10 yearsThat's because they're different operating systems, and quite possibly, different underlying processor architectures. When I was in college we had two UNIX clusters: one running on a VAX the other on an Alpha. CS projects HAD to be compiled on the VAX since that's what the professor used...
-
mikemaccana almost 10 years@tkone Sure, but npm modules cross-compile: installing somthing with a binary component gives you a Mach (OS X), ELF (Linux) and PXE (Windows) binary.
-
mikemaccana almost 10 yearsOnly problem is: bcrypt, unlike other node modules, only installs a single OS binary. So committing a Linux-installed bcrypt will break your Mac developer systems, since node_modules/bcrypt/build/Release/bcrypt_lib.node is now a Linux binary. Run
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
to test. -
tkone almost 10 years@mikemaccana they certainly do not. we use vmware & ubuntu for dev, but shared with our macs. socket.io, leveldb, phantomsj, etc all compile for the target architecture to which you're installing. If I install level on my mac and try to use it from the VM, it completely fails since it's compiled for darwin and not linux.
-
mikemaccana almost 10 years@tkone leveldb may not, but many modules do. See evidence in stackoverflow.com/questions/24159232/… for an example and try it yourself.
-
tkone almost 10 years@mikemaccana node-sass only works because (from the readme.md):
Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. It is not cross-compiling, rather giving you pre-compiled binaries. Node-gyp does NOT cross-compile by default. -
mikemaccana almost 10 yearsThanks @tkone. I guess I picked a bad module to check !
-
Rakshitha Muranga Rodrigo over 5 yearsThis solved the issue, thank you, (I'm programming on MacOS and deploying it on Ubuntu server !)
-
jordins about 5 yearsThis doesn't work for me (I'm using v3.0.4) in MacOS
-
Nate Reed over 4 yearsThis was my problem. bcrypt was built on MacOS X but running it in a linux container.
-
therightstuff over 3 yearsThis doesn't work for me and I'm using v5.0.0 in MacOS
-
Jeet about 3 yearsReally thankful to you for this, was breaking my head for long enough.
-
bennyxguo almost 3 yearsNot sure why, but only this solution worked for me! Thanks!
-
Marcon Willian almost 3 yearsI use Windows with contianer node:bind, and only this solution work for me.
-
Ben Thielker over 2 yearsThe uninstall and re-install worked for me when a force flag wasn't.
-
Argoitz about 2 yearsSame for me, im using windows with Docker and don´t know why, but this solution worked for me too. Thanks