2013-03-19 4 views
16

Empfang dieses Fehlers beim Versuch, NPM zu installieren. Jede Hilfe zu diesem Fehler wird sehr geschätzt.Kann NPM nicht mit curl installieren

Geändert den Befehl von http: // ... -> https: // und immer noch kein Glück.


Weitere Informationen:

Betriebssystem: Mac OS X 10.8.2

Curl: Curl 7.24.0 (x86_64-Apfel-darwin12.0)


Also versuchte ich die Installation als Superuser und wurde prompt mit diesem Berg Text konfrontiert. Ich bin hier völlig verloren.

$ sudo curl https://npmjs.org/install.sh | sh 
Password: 
#!/bin/sh 

# A word about this shell script: 
# 
# It must work everywhere, including on systems that lack 
# a /bin/bash, map 'sh' to ksh, ksh97, bash, ash, or zsh, 
# and potentially have either a posix shell or bourne 
# shell living at /bin/sh. 
# 
# See this helpful document on writing portable shell scripts: 
# http://www.gnu.org/s/hello/manual/autoconf/Portable-Shell.html 
# 
# The only shell it won't ever work on is cmd.exe. 

if [ "x$0" = "xsh" ]; then 
    # run as curl | sh 
    # on some systems, you can just do cat>npm-install.sh 
     # which is a bit cuter. But on others, &1 is already closed, 
    # so catting to another script file won't do anything. 
    curl -s https://npmjs.org/install.sh > npm-install-$$.sh 
    sh npm-install-$$.sh 
    ret=$? 
    rm npm-install-$$.sh 
    exit $ret 
fi 

# See what "npm_config_*" things there are in the env, 
# and make them permanent. 
# If this fails, it's not such a big deal. 
configures="`env | grep 'npm_config_' | sed -e 's|^npm_config_||g'`" 

npm_config_loglevel="error" 
if [ "x$npm_debug" = "x" ]; then 
    (exit 0) 
else 
    echo "Running in debug mode." 
    echo "Note that this requires bash or zsh." 
    set -o xtrace 
    set -o pipefail 
    npm_config_loglevel="verbose" 
fi 
export npm_config_loglevel 

# make sure that node exists 
node=`which node 2>&1` 
ret=$? 
    if [ $ret -eq 0 ] && [ -x "$node" ]; then 
    (exit 0) 
    else 
    echo "npm cannot be installed without nodejs." >&2 
    echo "Install node first, and then try again." >&2 
    echo "" >&2 
    echo "Maybe node is installed, but not in the PATH?" >&2 
    echo "Note that running as sudo can change envs." >&2 
    echo "" 
    echo "PATH=$PATH" >&2 
    exit $ret 
fi 

# set the temp dir 
TMP="${TMPDIR}" 
if [ "x$TMP" = "x" ]; then 
    TMP="/tmp" 
fi 
TMP="${TMP}/npm.$$" 
rm -rf "$TMP" || true 
mkdir "$TMP" 
if [ $? -ne 0 ]; then 
    echo "failed to mkdir $TMP" >&2 
    exit 1 
fi 

BACK="$PWD" 

ret=0 
tar="${TAR}" 
if [ -z "$tar" ]; then 
    tar="${npm_config_tar}" 
fi 
if [ -z "$tar" ]; then 
    tar=`which tar 2>&1` 
    ret=$? 
fi 

if [ $ret -eq 0 ] && [ -x "$tar" ]; then 
    echo "tar=$tar" 
    echo "version:" 
     $tar --version 
    ret=$? 
fi 

if [ $ret -eq 0 ]; then 
    (exit 0) 
else 
    echo "No suitable tar program found." 
     exit 1 
    fi 



# Try to find a suitable make 
# If the MAKE environment var is set, use that. 
# otherwise, try to find gmake, and then make. 
# If no make is found, then just execute the necessary commands. 

# XXX For some reason, make is building all the docs every time. This 
    # is an annoying source of bugs. Figure out why this happens. 
MAKE=NOMAKE 

if [ "x$MAKE" = "x" ]; then 
    make=`which gmake 2>&1` 
    if [ $? -eq 0 ] && [ -x $make ]; then 
(exit 0) 
    else 
make=`which make 2>&1` 
if [ $? -eq 0 ] && [ -x $make ]; then 
    (exit 0) 
else 
    make=NOMAKE 
fi 
    fi 
else 
    make="$MAKE" 
fi 

if [ -x "$make" ]; then 
    (exit 0) 
else 
    # echo "Installing without make. This may fail." >&2 
     make=NOMAKE 
fi 

# If there's no bash, then don't even try to clean 
if [ -x "/bin/bash" ]; then 
    (exit 0) 
else 
    clean="no" 
fi 

node_version=`"$node" --version 2>&1` 
ret=$? 
if [ $ret -ne 0 ]; then 
    echo "You need node to run this program." >&2 
    echo "node --version reports: $node_version" >&2 
    echo "with exit code = $ret" >&2 
    echo "Please install node before continuing." >&2 
    exit $ret 
fi 

t="${npm_install}" 
    if [ -z "$t" ]; then 
    # switch based on node version. 
    # note that we can only use strict sh-compatible patterns here. 
    case $node_version in 
    0.[0123].* | v0.[0123].*) 
    echo "You are using an outdated and unsupported version of" >&2 
    echo "node ($node_version). Please update node and try again." >&2 
    exit 99 
    ;; 
v0.[45].* | 0.[45].*) 
    echo "install [email protected]" 
    t=1.0 
    ;; 
v0.[678].* | 0.[678].*) 
    echo "install [email protected]" 
    t=1.1 
    ;; 
*) 
    echo "install [email protected]" 
    t="latest" 
    ;; 
    esac 
fi 

# the npmca cert 
cacert=' 
-----BEGIN CERTIFICATE----- 
MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC 
VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x 
IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w 
bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y 
MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV 
BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj 
YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA 
aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE 
OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz 
Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl 
y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC 
l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv 
yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl 
ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op 
-----END CERTIFICATE----- 
' 

echo "$cacert" > "$TMP/cafile.crt" 
cacert="$TMP/cafile.crt" 

# need to echo "" after, because Posix sed doesn't treat EOF 
# as an implied end of line. 
url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \ 
| sed -e 's/^.*tarball":"//' \ 
| sed -e 's/".*$//'` 

ret=$? 
if [ "x$url" = "x" ]; then 
    ret=125 
    # try without the -e arg to sed. 
    url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \ 
    | sed 's/^.*tarball":"//' \ 
    | sed 's/".*$//'` 
    ret=$? 
    if [ "x$url" = "x" ]; then 
ret=125 
    fi 
fi 
if [ $ret -ne 0 ]; then 
    echo "Failed to get tarball url for npm/$t" >&2 
    exit $ret 
fi 


echo "fetching: $url" >&2 

cd "$TMP" \ 
    && curl -SsL --cacert "$cacert" "$url" \ 
| $tar -xzf - \ 
    && rm "$cacert" \ 
    && cd "$TMP"/* \ 
    && (req=`"$node" bin/read-package-json.js package.json engines.node` 
    if [ -d node_modules ]; then 
    "$node" node_modules/semver/bin/semver -v "$node_version" -r "$req" 
    ret=$? 
    else 
    "$node" bin/semver.js -v "$node_version" -r "$req" 
    ret=$? 
    fi 
    if [ $ret -ne 0 ]; then 
    echo "You need node $req to run this program." >&2 
    echo "node --version reports: $node_version" >&2 
    echo "Please upgrade node before continuing." >&2 
    exit $ret 
    fi) \ 
    && (ver=`"$node" bin/read-package-json.js package.json version` 
    isnpm10=0 
    if [ $ret -eq 0 ]; then 
    req=`"$node" bin/read-package-json.js package.json engines.node` 
    if [ -d node_modules ]; then 
     if "$node" node_modules/semver/bin/semver -v "$ver" -r "1" 
     then 
     isnpm10=1 
     fi 
    else 
     if "$node" bin/semver -v "$ver" -r ">=1.0"; then 
     isnpm10=1 
     fi 
    fi 
    fi 

    ret=0 
    if [ $isnpm10 -eq 1 ] && [ -f "scripts/clean-old.sh" ]; then 
    if [ "x$skipclean" = "x" ]; then 
     (exit 0) 
    else 
     clean=no 
    fi 
    if [ "x$clean" = "xno" ] \ 
     || [ "x$clean" = "xn" ]; then 
     echo "Skipping 0.x cruft clean" >&2 
     ret=0 
    elif [ "x$clean" = "xy" ] || [ "x$clean" = "xyes" ]; then 
     NODE="$node" /bin/bash "scripts/clean-old.sh" "-y" 
     ret=$? 
    else 
     NODE="$node" /bin/bash "scripts/clean-old.sh" </dev/tty 
     ret=$? 
    fi 
    fi 

    if [ $ret -ne 0 ]; then 
    echo "Aborted 0.x cleanup. Exiting." >&2 
    exit $ret 
    fi) \ 
    && (if [ "x$configures" = "x" ]; then 
    (exit 0) 
    else 
    echo "./configure "$configures 
    echo "$configures" > npmrc 
    fi) \ 
    && (if [ "$make" = "NOMAKE" ]; then 
    (exit 0) 
    elif "$make" uninstall install; then 
    (exit 0) 
    else 
    make="NOMAKE" 
    fi 
    if [ "$make" = "NOMAKE" ]; then 
    "$node" cli.js rm npm -gf 
    "$node" cli.js install -gf 
    fi) \ 
    && cd "$BACK" \ 
    && rm -rf "$TMP" \ 
    && echo "It worked" 

ret=$? 
if [ $ret -ne 0 ]; then 
    echo "It failed" >&2 
fi 
exit $ret 
+1

Das ist alles? Kein Betriebssystem, keine Curl-Version, kein Shell-Name/Version? –

+0

@sputnick, mit OS und Curl-Version aktualisiert. Ich bin mir nicht sicher, was du unter shell name/version meinst. Ich benutze iTerm, wenn das hilft. Ich habe auch hinzugefügt, was passiert, wenn ich den Befehl in su ausführen. – ryanSrich

Antwort

46

Sie erhalten das Skript install.sh, Sie müssen es nur ausführen. Tun Sie dies

curl -O https://npmjs.org/install.sh 
sudo sh install.sh 

aktualisieren

Wenn Sie ein 301 erhalten dauerhaft verschoben stattdessen Datei, versuchen -L Option Hinzufügen der Umleitung wie folgt zu folgen:

curl -O -L https://npmjs.org/install.sh 
+1

funktioniert nicht Downloads eine Nginx-Datei mit ' 301 Permanent verschoben' – ThomasReggi

+0

@ThomasReggi Ihr Problem scheint völlig anders als die in der Frage gefragt. Auch das hat für mich funktioniert. Sie sollten eine neue Frage mit den Details Ihres Problems stellen. – user568109

+0

@ThomasReggi Sehen Sie die aktualisierte Antwort, wenn es für Sie funktioniert. – user568109

2

Das Original Befehl würde funktionieren, wenn Sie den aktuellen Standort (und nicht den alten) verwenden (zumindest auf meinem System, gleiche Einstellungen). Bedeutung, verwenden:

curl https://npmjs.org/install.sh | sh 

statt:

curl http://npmjs.org/install.sh | sh 
+1

In der Frage hat OP bereits versucht ** https ** – Raptor

+0

Ich sah, dass er es tat. Es hat aber gut für mich funktioniert. –

+0

Dies funktioniert nicht - die http:/location gibt explizite Anweisungen zurück, um https zu verwenden:/ – mmmeff

1

Diese noch irgendwie gebrochen ist? Der Versuch, folgende:

$curl https://npmjs.org/install.sh | sh 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 93 0 93 0  0  78  0 --:--:-- 0:00:01 --:--:-- 79 
sh: line 1: syntax error near unexpected token `newline' 
sh: line 1: `<html>Moved: <a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>' 

und mit (https) www.npmjs.org:

$curl https://www.npmjs.org/install.sh | sh 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
          Dload Upload Total Spent Left Speed 
100 6707 100 6707 0  0 6446  0 0:00:01 0:00:01 --:--:-- 6442 
npm-install-606.sh: line 1: syntax error near unexpected token `newline' 
npm-install-606.sh: line 1: `<html>Moved: <a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>' 

Mit OS X Maverics 10.9.1

$uname -a 
Darwin Esan-iMac.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64 

$curl --version 
curl 7.30.0 (x86_64-apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5 

Sollte es mit ähnlichen env arbeiten; jemand getestet ??? Fehle ich etwas. Erinnern Sie sich daran, dass es nicht ratsam ist, mit Sudo zu laufen? Noch nicht ausprobiert separater Download und 'sh'-Befehl.


Edit: ja, separater Download curl -O https://www.npmjs.org/install.sh und sh install.sh funktionieren gut, nachdem Besitzer für /usr/local/lib/node_modules/npm ändern, weil zuvor mit sudo installiert. Aber es hat nichts mit einer Fehlermeldung zu tun, oder?

1

Ich habe viele Male mit verschiedenen Curl-Optionen versucht. Das Hauptproblem ist jedoch die https-Zertifikatüberprüfung von npm site. Schließlich dies hat für mich gearbeitet:

curl -k -O -L https://npmjs.org/install.sh 

Hoffe, dass es jemand anders helfen.

0

Hinzufügen -L hat mir geholfen. Zum Beispiel:

curl -L http://www.npmjs.org/install.sh | sh