2013-03-19 23 views
16

Ricezione di questo errore durante il tentativo di installazione di NPM. Qualsiasi aiuto su questo errore è molto apprezzato.Impossibile installare NPM utilizzando arricciatura

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

Modificato il comando da http: // ... -> https: // e ancora senza fortuna.


Altre info:

OS: Mac OSX 10.8.2

CURL: ricciolo 7.24.0 (x86_64-apple-darwin12.0)


Così ho tentato l'installazione come superutente e sono stato prontamente incontrato con questa montagna di testo. Sono completamente perso qui.

$ 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

Tutto qui? Nessun SO, nessuna versione di arricciatura, nessun nome/versione della shell? –

+0

@sputnick, aggiornato con la versione di OS e Curl. Non sei sicuro di cosa intendi per nome/versione della shell. Sto usando iTerm se questo ti aiuta. Ho anche aggiunto cosa succede quando eseguo il comando in su. – ryanSrich

risposta

46

Hai trovato lo script install.sh, devi solo per eseguirlo. Fate questo

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

Aggiornamento

Se si ottiene un 301 Moved Permanently file invece, prova ad aggiungere l'opzione -L di seguire il reindirizzamento in questo modo:

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

non funziona scarica un file nginx con ' 301 Moved Permanently' – ThomasReggi

+0

@ThomasReggi Il tuo problema sembra completamente diverso da quello richiesto nella domanda. Anche questo ha funzionato per me. Dovresti fare una nuova domanda fornendo i dettagli del tuo problema. – user568109

+0

@ThomasReggi Guarda la risposta aggiornata se funziona per te. – user568109

2

L'originale il comando funzionerebbe se si utilizza la posizione corrente (e non quella precedente) (almeno sul mio sistema, le stesse impostazioni). Significato, utilizzare:

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

invece di:

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

Nella domanda, l'OP ha già provato ** https ** – Raptor

+0

ho visto che ha fatto. Tuttavia, ha funzionato bene per me. –

+0

Questo non funziona - colpendo http:/location restituisce istruzioni esplicite per utilizzare https:/ – mmmeff

1

Questo è ancora rotto in qualche modo? Cercando seguente:

$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>' 

e con (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>' 

Utilizzando 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 

Dovrebbe lavorare con env simili; qualcuno ha provato ??? Mi manca qualcosa. Ricordando che è scoraggiato per correre con sudo? Non ancora provato download separato e 'sh'-command.


Edit: sì, download separato curl -O https://www.npmjs.org/install.sh e sh install.sh funziona bene, dopo aver cambiato proprietario per /usr/local/lib/node_modules/npm perché in precedenza installato con sudo. Ma non ha nulla a che fare con il messaggio di errore, o no?

1

Ho provato molte volte con varie opzioni di arricciatura. Ma il problema principale è la verifica del certificato https del sito npm. Finalmente questo ha funzionato per me:

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

Spero che possa aiutare qualcun altro.

0

L'aggiunta di -L mi ha aiutato. Ad esempio:

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