¿Cómo funciona el comando tar para instalar Node js?

10

Al instalar Node en mi máquina, utilicé el siguiente comando que encontré en un sitio web.

tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Sé que tar -xzfse usa para extraer los archivos, pero quiero saber cómo se instala el nodo.

Intenté instalarlo de esta manera. Extraje los archivos de nodo para /usr/localusar el siguiente comando,

tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Pero esto no funciona. ¿Alguien puede explicarme o ayudarme a comprender la diferencia entre estos dos comandos?

¿Qué más hace el comando 1 que el comando 2?

prathapa reddy
fuente
1
Se puede instalar jodejsa través aptde comandos: sudo apt install nodejs nodejs-legacy.
pa4080

Respuestas:

24

La estructura del directorio tarball es así:

$ tar tf node-v6.10.1-linux-x64.tar.xz | head
node-v6.10.1-linux-x64/
node-v6.10.1-linux-x64/bin/
node-v6.10.1-linux-x64/bin/npm
node-v6.10.1-linux-x64/bin/node
node-v6.10.1-linux-x64/share/
node-v6.10.1-linux-x64/share/man/
node-v6.10.1-linux-x64/share/man/man1/
node-v6.10.1-linux-x64/share/man/man1/node.1
node-v6.10.1-linux-x64/share/systemtap/
node-v6.10.1-linux-x64/share/systemtap/tapset/

Cuando extrae este archivo sin ninguna otra opción /usr/local, obtiene esto:

/usr/local/node-v6.10.1-linux-x64/
/usr/local/node-v6.10.1-linux-x64/bin/
/usr/local/node-v6.10.1-linux-x64/bin/npm
/usr/local/node-v6.10.1-linux-x64/bin/node
/usr/local/node-v6.10.1-linux-x64/share/
/usr/local/node-v6.10.1-linux-x64/share/man/
/usr/local/node-v6.10.1-linux-x64/share/man/man1/
/usr/local/node-v6.10.1-linux-x64/share/man/man1/node.1
/usr/local/node-v6.10.1-linux-x64/share/systemtap/
/usr/local/node-v6.10.1-linux-x64/share/systemtap/tapset/

Entonces, se crea un nuevo directorio /usr/localy los archivos se descargan allí.

Sin embargo, con --strip-components=1, se elimina un componente de directorio de la ruta extraída, por lo que node-v6.10.1-linux-x64/bin/se hace bin/y node-v6.10.1-linux-x64/bin/npmse convierte en bin/npm:

/usr/local/
/usr/local/bin/
/usr/local/bin/npm
/usr/local/bin/node
/usr/local/share/
/usr/local/share/man/
/usr/local/share/man/man1/
/usr/local/share/man/man1/node.1
/usr/local/share/systemtap/
/usr/local/share/systemtap/tapset/

Y /usr/local/binya está dentro PATH, por lo que no necesita hacer nada más para ejecutar npmy node.

muru
fuente
14

Esta es una forma genial (pero molesta) de instalar NodeJS.

Si ejecuta tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzel archivo, verá algo como esto:

node-v4.2.1-linux-x64/
node-v4.2.1-linux-x64/bin/
node-v4.2.1-linux-x64/bin/npm
node-v4.2.1-linux-x64/bin/node
node-v4.2.1-linux-x64/share/
node-v4.2.1-linux-x64/share/man/
node-v4.2.1-linux-x64/share/man/man1/

Básicamente, esto significa que cuando extrae este archivo tar, se extraerá a una carpeta llamada node-v4.2.1-linux-x64con todas estas subcarpetas (y la instalación del nodo) dentro de él. De hecho, incluso puedes probar esta extracción para tener una mejor idea:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz

Si corres ls, verás una node-v4.2.1-linux-x64carpeta.

Ahora, --strip-components 1hace algo interesante para el proceso de extracción. De man tar:

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

Básicamente, esto significa que cuando tarva a extraer su archivo, va a fingir que la node-v4.2.1-linux-x64carpeta no está allí. En cambio, se extraerá bin/, share/y todas las demás carpetas directamente.

De hecho, puedes probarlo:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz --strip-components=1

Si ejecuta ls, verá que ya no hay una node-v4.2.1-linux-x64carpeta. Es sólo bin/, include/, lib/, y share/(todas las carpetas en coincidencia /usr/local/).

Su segundo comando no habría funcionado porque simplemente habría extraído la node-v4.2.1-linux-x64carpeta /usr/local(si es que se ejecutó). Si ejecuta ls /usr/local, incluso podría ver esta carpeta dando vueltas. Es inútil, no dudes en eliminarlo rm. En cuanto a por qué es inútil, sigue leyendo ...


Ahora que hemos explicado cómo funciona el comando tar, podemos explicar cómo se instala.

Cada sistema Linux tiene algo llamado $PATHvariable, que determina dónde se almacenan los archivos ejecutables. Entre estos lugares está /usr/local/bin. Cuando extrae ese binario dentro /usr/local(lo que estoy seguro es lo que dicen sus instrucciones de instalación), se está escribiendo el binario NodeJS /usr/local/bin/nodesegún cómo se realizan las extracciones. Del mismo modo, todas las bibliotecas se están agregando a la carpeta de la biblioteca local y casi todo va a donde pertenece.

Ahora, la advertencia (y por qué esto es molesto) es que aptno verá ni comprenderá ni se dará cuenta de lo que está sucediendo. No podrá actualizarlo a través de sudo apt upgradeo similar. Debería ingresar manualmente y limpiar la antigua instalación de NodeJS y luego instalar la nueva en caso de que alguna vez desee actualizar.

Te recomendaría que solo corras en su sudo apt install nodejs-legacylugar. Menos dolor, y se actualiza automáticamente para usted.

Kaz Wolfe
fuente