Lors de l'installation de Node sur ma machine, j'ai utilisé la commande ci-dessous trouvée sur un site Web.
tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz
Je sais que tar -xzf
est utilisé pour extraire les archives, mais je veux savoir comment le noeud est-il installé?
J'ai essayé de l'installer de cette façon. J'ai extrait les fichiers de noeud vers /usr/local
à l'aide de la commande ci-dessous,
tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz
Mais ça ne marche pas. Quelqu'un peut-il expliquer ou m'aider à comprendre la différence entre ces deux commandes?
Que fait le commandement 1 de plus que le commandement 2?
La structure du répertoire tarball est la suivante:
$ 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/
Lorsque vous extrayez cette archive sans aucune autre option dans /usr/local
, vous obtenez ceci:
/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/
Ainsi, un nouveau répertoire est créé dans /usr/local
et les fichiers y sont vidés.
Cependant, avec --strip-components=1
, un composant de répertoire du chemin extrait est supprimé, donc node-v6.10.1-linux-x64/bin/
devient bin/
et node-v6.10.1-linux-x64/bin/npm
devient 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/
Et /usr/local/bin
est déjà dans PATH
, vous n'avez donc rien à faire pour exécuter npm
et node
.
C’est en quelque sorte une façon sympa (mais agaçante) d’installer NodeJS.
Si vous exécutez tar tf /usr/save/node-v4.2.1-linux-x64.tar.gz
sur le fichier, vous verrez à peu près ceci:
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/
En gros, cela signifie que lorsque vous extrayez cette archive tar, elle sera extraite dans un dossier appelé node-v4.2.1-linux-x64
avec tous ces sous-dossiers (et l'installation du nœud) à l'intérieur. En fait, vous pouvez même essayer cette extraction pour avoir une meilleure idée:
mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz
Si vous exécutez ls
, vous verrez un dossier node-v4.2.1-linux-x64
.
--strip-components 1
fait quelque chose d'intéressant pour le processus d'extraction. De man tar
:
--strip-components=NUMBER
strip NUMBER leading components from file names on extraction
En gros, cela signifie que lorsque tar
va extraire votre archive, il va prétendre que le dossier node-v4.2.1-linux-x64
n’est pas là. Au lieu de cela, il va extraire directement bin/
, share/
et tous les autres dossiers.
En fait, vous pouvez l'essayer:
mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz --strip-components=1
Si vous exécutez ls
, vous constaterez qu'il n'y a plus de dossier node-v4.2.1-linux-x64
. Il ne s'agit que de bin/
, include/
, lib/
et share/
(tous les dossiers coïncident dans /usr/local/
).
Votre deuxième commande n'aurait pas fonctionné car elle aurait simplement extrait le dossier node-v4.2.1-linux-x64
dans /usr/local
(si elle a même été exécutée). Si vous exécutez ls /usr/local
, vous pouvez même voir ce dossier traîner. C'est inutile, n'hésitez pas à supprimer avec rm
. Quant à savoir pourquoi c'est inutile, continuez à lire ...
Maintenant que nous avons expliqué le fonctionnement de la commande tar, nous pouvons expliquer comment elle est installée.
Chaque système Linux a quelque chose appelé la variable $PATH
, qui détermine où les fichiers exécutables sont stockés. /usr/local/bin
est l'un de ces endroits. Lorsque vous extrayez ce binaire à l'intérieur de /usr/local
(ce que disent vos instructions d'installation, j'en suis convaincu), le binaire de NodeJS est en cours d'écriture dans /usr/local/bin/node
en fonction de la façon dont les extractions sont effectuées. De la même façon, toutes les bibliothèques sont ajoutées au dossier de la bibliothèque locale et tout se passe comme il se doit.
Maintenant, la mise en garde (et pourquoi ceci est agaçant) est que apt
ne verra pas, ne comprendra pas et ne réalisera pas ce qui se passe. Vous ne pourrez pas le mettre à jour avec Sudo apt upgrade
ou similaire. Vous devrez manuellement nettoyer l’ancienne installation de NodeJS, puis installer la nouvelle au cas où vous souhaiteriez effectuer une mise à niveau.
Je vous recommanderais simplement d'exécuter Sudo apt install nodejs-legacy
à la place. Moins de douleur, et il met automatiquement à jour pour vous.