bcrypt invalid elf header when running node app

89,425

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
Share:
89,425

Related videos on Youtube

user2244469
Author by

user2244469

Updated on September 03, 2021

Comments

  • user2244469
    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
      MrYoshiji about 11 years
      Did you find a solution?
    • user2244469
      user2244469 about 11 years
      yes, i installed ubuntu 12.04 and i was able to install and use bcrypt. thanks for you interest in my issue.
  • tkone
    tkone almost 10 years
    That'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
    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
    mikemaccana almost 10 years
    Only 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/b‌​crypt/build/Release/‌​bcrypt_lib.node to test.
  • tkone
    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
    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
    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
    mikemaccana almost 10 years
    Thanks @tkone. I guess I picked a bad module to check !
  • Rakshitha Muranga Rodrigo
    Rakshitha Muranga Rodrigo over 5 years
    This solved the issue, thank you, (I'm programming on MacOS and deploying it on Ubuntu server !)
  • jordins
    jordins about 5 years
    This doesn't work for me (I'm using v3.0.4) in MacOS
  • Nate Reed
    Nate Reed over 4 years
    This was my problem. bcrypt was built on MacOS X but running it in a linux container.
  • therightstuff
    therightstuff over 3 years
    This doesn't work for me and I'm using v5.0.0 in MacOS
  • Jeet
    Jeet about 3 years
    Really thankful to you for this, was breaking my head for long enough.
  • bennyxguo
    bennyxguo almost 3 years
    Not sure why, but only this solution worked for me! Thanks!
  • Marcon Willian
    Marcon Willian almost 3 years
    I use Windows with contianer node:bind, and only this solution work for me.
  • Ben Thielker
    Ben Thielker over 2 years
    The uninstall and re-install worked for me when a force flag wasn't.
  • Argoitz
    Argoitz about 2 years
    Same for me, im using windows with Docker and don´t know why, but this solution worked for me too. Thanks