नोड एप चलाते समय अमान्य एल्फ हेडर bcrypt


87

मैं स्कूल के लिए एक नोडज प्रोजेक्ट पर काम कर रहा हूं। मैं npm के साथ bcrypt स्थापित करने में सक्षम नहीं था इसलिए मैंने bcrypt-नोडज स्थापित किया और परियोजना ने कल ठीक काम किया। लेकिन आज, जब मैं "नोड ऐप" करता हूं तो मुझे यह त्रुटि होती है:

/.../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)

मेरा पैकेज.जॉन फ़ाइल इस तरह दिखता है:

{
  "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": "*"
  }
}

मैं लिनक्स ubuntu 10.04 एलटीएस पर हूं मैंने सफलता के बिना Google पर एक समाधान खोजने की कोशिश की है ... क्या कोई मेरी मदद कर सकता है?


क्या आपको एक समाधान मिला?
मृत्युंजय

हां, मैंने ubuntu 12.04 स्थापित किया है और मैं bcrypt को स्थापित और उपयोग करने में सक्षम था। मेरे मुद्दे में आपकी रुचि के लिए धन्यवाद।
user2244469

जवाबों:


163

मैंने पाया है कि OSX पर संकलित bcrypt लिनक्स पर काफी काम नहीं करेगा । दूसरे शब्दों में, यदि आप अपने स्थानीय OSX वर्कस्टेशन पर संकलित bcrypt में जांचते हैं, और अपने लिनक्स सर्वर पर नोड ऐप चलाने की कोशिश करते हैं, तो आपको ऊपर त्रुटि दिखाई देगी।

समाधान: npm install bcryptलिनक्स पर, जांच करें कि हल किया गया है।

संभवत: इससे निपटने का सबसे अच्छा तरीका है आपके ._ododore को .gitignore ... और npm को दूरस्थ रूप से इंस्टॉल करना।


3
ऐसा इसलिए है क्योंकि वे अलग-अलग ऑपरेटिंग सिस्टम हैं, और संभवतः, विभिन्न अंतर्निहित प्रोसेसर आर्किटेक्चर हैं। जब मैं कॉलेज में था तो हमारे पास दो UNIX क्लस्टर थे: एक VAX दूसरे पर एक अल्फा पर चल रहा था। CS ने
VAD

@tkone ज़रूर, लेकिन npm मॉड्यूल क्रॉस-कंपाइल: एक बाइनरी घटक के साथ कुछ स्थापित करने से आपको मच (OS X), ELF (लिनक्स) और PXE (विंडोज़) बाइनरी मिलता है।
मीकेमेकाना

1
केवल समस्या यह है: bcrypt, अन्य नोड मॉड्यूल के विपरीत, केवल एक ही ओएस बाइनरी स्थापित करता है। इसलिए Linux- स्थापित bcrypt करने से आपका Mac डेवलपर सिस्टम टूट जाएगा , क्योंकि नोड_modules / bcrypt / build / Release / bcrypt_lib.node अब एक लिनक्स बाइनरी है। file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.nodeपरीक्षण करने के लिए चलाएँ ।
मिकमेकाना

@mikemaccana वे निश्चित रूप से नहीं करते हैं। हम देव के लिए vmware और ubuntu का उपयोग करते हैं, लेकिन हमारे मैक के साथ साझा किया जाता है। socket.io, leveldb, phantomsj, आदि जो आप स्थापित कर रहे हैं लक्ष्य वास्तुकला के लिए सभी संकलन। अगर मैं अपने मैक पर स्तर स्थापित करता हूं और इसे वीएम से उपयोग करने की कोशिश करता हूं, तो यह पूरी तरह से विफल हो जाता है क्योंकि यह डार्विन के लिए संकलित है और लिनक्स नहीं।
tkone

2
@mikemaccana नोड- sass केवल इसलिए काम करता है क्योंकि (readme.md से) Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps::। यह क्रॉस-संकलन नहीं है, बल्कि आपको पूर्व-संकलित बायनेरिज़ दे रहा है। नोड-जिप डिफ़ॉल्ट रूप से क्रॉस-संकलन नहीं करता है।
tkone

13

यदि आप एक डॉकटर कंटेनर के अंदर चल रहे हैं जैसा कि मैं हूं, तो आपको केवल एक 'dd_erodore' के साथ निर्दिष्ट होना चाहिए।

कुछ पुस्तकालयों को मेजबान मशीन पर संकलित करने की आवश्यकता है और इसलिए आपके मॉड्यूल बासी हो सकते हैं।


1
यह मेरी समस्या थी। bcrypt को MacOS X पर बनाया गया था लेकिन इसे एक लिनक्स कंटेनर में चलाया जा रहा था।
नैट रीड

7

मेरा मुद्दा मेरे docker-compose.yml फ़ाइल के साथ था, मेरे पास पहले से ही अपने।

volumes:
  - ./:/usr/src/app
  - /usr/src/app/node_modules


6

मैं भी bcrypt v.1.0.3 के साथ इसी मुद्दे का सामना कर रहा था। बस नवीनतम संस्करण (3.0.1) और अब इसके ठीक काम करने के लिए अद्यतन किया गया

Daud

npm install bcrypt@latest --save

इस मुद्दे को हल किया, धन्यवाद, (मैं
macOS

1
यह मेरे लिए काम नहीं कर रहा है (मैं
v3.0.4

1

पहले सुनिश्चित करें कि आप नोड मॉड्यूल अपलोड नहीं कर रहे हैं और अपने linux मशीन पर npm स्थापित कर रहे हैं क्योंकि bcrypt स्थापना आपके द्वारा उपयोग किए जाने वाले प्लेटफॉर्म के आधार पर भिन्न हो सकती है। आप नीचे अन्य प्लेटफार्मों के लिए अन्य इंस्टॉलेशन निर्देशों को देख सकते हैं।
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions

यदि आपको आगे समस्या हो रही है तो यह नोड-प्री-जिप से संबंधित हो सकता है। Bcrypt की एक निर्भरता।

AWS इलास्टिक बीनस्टॉक के लिए जब Node 8.x पर चलने वाले इलास्टिक बर्नस्टॉक में तैनाती हो रही है, तो नोड-जिप के पास tmp निर्देशिका में लिखने के लिए पर्याप्त अनुमति नहीं है। bcrypt इंस्टॉल नहीं होगा और एप्लिकेशन परिनियोजन विफल हो जाएगा।

वर्कअराउंड में अपने प्रोजेक्ट के रूट में एक .npmrc फ़ाइल जोड़ना है जो नोड-जिप को रूट के रूप में चलाने के लिए मजबूर करेगा और इंस्टॉलेशन को पूरा करने की अनुमति देगा। .Npmrc के लिए फ़ाइल सामग्री:

# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true

एक और विकल्प (शायद अधिक सही तरीका) कोड के साथ .Extxtensions फ़ाइल बनाना है:

.ebextensions:00_change_npm_permissions.config:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chown -R nodejs:nodejs /tmp/.npm

इससे आपको नोड-जिप चलाने के लिए पर्याप्त सुविधा मिलेगी


1

एक सरल तरीका है जिसने मुझे इस समस्या को हल करने की अनुमति दी है:

1. स्थापना रद्द करें

npm uninstall bcrypt

2.- फिर से bcrypt इंस्टॉल करें

 npm i bcrypt

त्रुटि तब होती है क्योंकि जब आप बर्सेट स्थापित करते हैं, तो npm आपके मशीन और ऑपरेटिंग सिस्टम के लिए अनुशंसित संस्करण स्थापित करता है, लेकिन जब आप किसी अन्य मशीन पर होते हैं, तो यह काम नहीं करता है


यह वास्तव में मेरे लिए काम किया। धन्यवाद
फ्रांसिस

0

AWS लोचदार बीनस्टॉक के लिए एक ऐप की तैनाती करने वाले और सर्वर पर bcrypt स्थापित करने वालों के लिए, एक पोस्ट हुक में शामिल करें .ebextensions/01_build.config:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      cd /var/app/current/
      rm -rf node_modules/bcrypt
      sudo /opt/elasticbeanstalk/node-install/node-v10.13.0-linux-x64/bin/npm install bcrypt@latest

0

मुझे पता है कि यह थोड़ा परेशानी भरा हो सकता है लेकिन यह एक समाधान है। जब मुझे Bcrypt को लागू करने की आवश्यकता थी, तब मैंने क्लाउड 9 का उदाहरण शुरू किया था। आप में से जो लोग नहीं जानते हैं, Cloud9 एक बुनियादी AWS IDE है जो EC2 उदाहरण पर चलता है। Cloud9 से आप एक लंबर फ़ंक्शन के रूप में अपने कोड को आइड पर अपलोड कर सकते हैं। इसलिए मैंने क्लाउड 9 पर फ़ंक्शन लिखा और जब मैंने इसे अपलोड किया, तो कोड ने काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.