¿Por qué yum intenta instalar la versión incorrecta de node.js?

¿Por qué yum intenta instalar la versión incorrecta de node.js?

En un servidor CentOS 7, estoy intentando instalar la versión 5.xde Node.js, pero por alguna razón yumsigo intentando instalar la versión 0.xy devuelve un error cuando no puedo encontrar la versión 0.xen el 5.xsitio de descarga. El error indica que yumse está concatenando un 0.xnombre de archivo de versión con una 5.xURL de versión. Supongo que esto apunta a que hay algo mal en la configuración de yumla máquina CentOS 7. ¿Qué cambios específicos se deben realizar a continuación para instalar la versión 5.x?

El mensaje de error raíz es:

Error downloading packages:
  nodejs-0.10.42-1nodesource.el7.centos.x86_64: [Errno 256] No more mirrors to try.

Se puede ver la página del editor desde la que se originó mi código a continuación.en el siguiente enlace. Además, algunas complicaciones pueden resultar deun intento anterior siguiendo las instrucciones en este otro enlace. Y para explorar los posibles restos del intento anterior, actualmente estoy ejecutando el siguiente comando y esperando los resultados:grep -rnw '/path/to/somewhere/' -e "pattern"

Aquí está la salida del terminal para configurar la ubicación del origen del nodo:

[root@localhost tmp]# curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
## Installing the NodeSource Node.js 5.x repo...
## Inspecting system...
+ rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release
+ uname -m
## Confirming "el7-x86_64" is supported...
+ curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Downloading release setup RPM...
+ mktemp
+ curl -sL -o '/tmp/tmp.sH82u4Gpap' 'https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Installing release setup RPM...
+ rpm -i --nosignature --force '/tmp/tmp.sH82u4Gpap'
## Cleaning up...
+ rm -f '/tmp/tmp.sH82u4Gpap'
## Checking for existing installations...
+ rpm -qa 'node|npm' | grep -v nodesource
## Run `yum install -y nodejs` (as root) to install Node.js 5.x and npm.
## You may also need development tools to build native addons:
##   `yum install -y gcc-c++ make`

Aquí hay una lista del contenido de la /tmpcarpeta después del comando anterior:

[root@localhost tmp]# ls -al
total 8
drwxrwxrwt. 13 root   root    320 Feb 14 06:13 .
dr-xr-xr-x. 19 root   root   4096 Jan 29 20:54 ..
drwx------.  2 user   user     60 Feb 13 20:05 .esd-1000
drwxrwxrwt.  2 root   root     40 Feb 13 20:04 .font-unix
prw-------.  1 root   root      0 Feb 13 20:05 hogsuspend
drwxrwxrwt.  2 root   root     80 Feb 13 20:05 .ICE-unix
srwxrwxrwx.  1 mongod mongod    0 Feb 13 20:04 mongodb-27017.sock
drwx------.  2 user   user     40 Dec 31  1969 orbit-user
drwx------.  2 user   user     60 Feb 13 20:05 ssh-AmQyH8IIEC2m
drwx------.  3 root   root     60 Feb 13 20:05 systemd-private-74534ca9946043cc88dbe52a38b4344d-colord.service-hDR3Cd
drwx------.  3 root   root     60 Feb 13 20:04 systemd-private-74534ca9946043cc88dbe52a38b4344d-rtkit-daemon.service-ZAQmPk
drwxrwxrwt.  2 root   root     40 Feb 13 20:04 .Test-unix
drwx------.  2 user   user     40 Feb 13 20:08 tracker-extract-files.1000
-r--r--r--.  1 root   root     11 Feb 13 20:05 .X0-lock
drwxrwxrwt.  2 root   root     60 Feb 13 20:05 .X11-unix
drwxrwxrwt.  2 root   root     40 Feb 13 20:04 .XIM-unix

Estos son los resultados de intentar instalar nodejsusando yum:

[root@localhost tmp]# yum install -y nodejs
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.lax.hugeserver.com
 * epel: mirror.sfo12.us.leaseweb.net
 * extras: mirror.keystealth.org
 * updates: mirror.supremebytes.com
Resolving Dependencies
--> Running transaction check
---> Package nodejs.x86_64 0:0.10.42-1nodesource.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================================================================================================================
 Package                            Arch                               Version                                                     Repository                              Size
================================================================================================================================================================================
Installing:
 nodejs                             x86_64                             0.10.42-1nodesource.el7.centos                              nodesource                             4.5 M

Transaction Summary
================================================================================================================================================================================
Install  1 Package

Total download size: 4.5 M
Installed size: 16 M
Downloading packages:
No Presto metadata available for nodesource
nodejs-0.10.42-1nodesource.el7 FAILED                                          
https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodejs-0.10.42-1nodesource.el7.centos.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found       ]  0.0 B/s |    0 B  --:--:-- ETA 
Trying other mirror.
To address this issue please refer to the below knowledge base article 

https://access.redhat.com/articles/1320623

If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/

Error downloading packages:
  nodejs-0.10.42-1nodesource.el7.centos.x86_64: [Errno 256] No more mirrors to try.
[root@localhost tmp]# 

Para que conste, gedit /etc/yum.repos.d/nodesource-el.repomuestra lo siguiente:

[nodesource]
name=Node.js Packages for Enterprise Linux 7 - $basearch
baseurl=https://rpm.nodesource.com/pub_5.x/el/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL

[nodesource-source]
name=Node.js for Enterprise Linux 7 - $basearch - Source
baseurl=https://rpm.nodesource.com/pub_5.x/el/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
gpgcheck=1  

Sospecho que el problema podría deberse a haber ejecutado este otro comando anteriormente:

curl --silent --location rpm.nodesource.com/setup | bash -

Supongo que el problema subyacente es cómo Yum persiste los resultados de esoscurl --silent --location ... | bash - commands


CASO DE CONTROL:


En una instalación diferente y completamente nueva de CentOS 7 en una máquina virtual diferente, los siguientes tres comandos simples instalaron con éxito la versión actual correcta 5.x de nodejs:

# cd /tmp
# curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
# yum install -y nodejs  
# node --version
v5.6.0  

Estos resultados del caso de control indican que el problema está en cómo está configurado yum en la máquina que tiene el problema. Entonces, ¿qué cambios específicos se deben realizar en la máquina con el problema para que yum esté configurado para generar la URL de descarga correcta? No es razonable portar todo a una máquina virtual diferente. Seguramente esto es solo una línea o dos en una configuración de yum en algún lugar que se puede cambiar para resolver este problema.

Respuesta1

Esto parece haber sido un problema de caché, aunque no está claro qué salió mal. Después de una conversación con el autor en el chat, ejecutar yum clean allsolucionó el problema.

El cartel señalaba lo siguiente:

[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages 
nodejs-0.10.42-1nodesource.el7.centos.x86_64.rpm 
[root@localhost yum]# yum clean all
[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages 
[root@localhost yum]# yum install -y nodejs
.... much terminal output during successful install
[root@localhost yum]# node --version
v5.6.0

Entonces yum clean alleliminaron el paquete obsoleto que se había almacenado en el caché.

No tengo suficiente conocimiento o experiencia en distribuciones basadas en Red Hat para decir qué salió mal aquí, por lo que me abstendré de hacer más comentarios.

Respuesta2

Esto es lo que tenía que hacer...

Primero, elimine el paquete nodejs instalado desde EPEL:

sudo yum remove nodejs

Enumere sus repositorios de yum:

yum repolist

Así es como se veía la entrada de mi repositorio de nodos:

nodesource/x86_64    Node.js Packages for Enterprise Linux 7 - x86_64

Si tiene curiosidad, enumere los paquetes en el repositorio del nodo:

yum --disablerepo="*" --enablerepo="nodesource" list available

Luego ejecute la instalación de yum usando solo el repositorio del nodo:

yum --disablerepo="*" --enablerepo="nodesource" install nodejs

Mi sospecha es que hay algo en el esquema de numeración utilizado en el repositorio de nodos que no presenta a nodejs como un reemplazo para el paquete en el repositorio de EPEL, pero eso es solo una suposición.

Respuesta3

yumIntentará obtener la versión disponible en los repositorios configurados, no la que desee instalar.

Instalar paquetes que anulan las versiones ofrecidas oficialmente es una forma segura de dañar su sistema, a menudo de manera sutil. Parece que su repositorio de Nodejs está intentando hacer precisamente eso. Observe más detenidamente lo que está disponible, lo que ofrece ese repositorio de terceros y qué medidas de seguridad existen para evitar roturas.

¿Quizás una solución más sensata sea instalar el paquete solo para su cuenta, quizás directamente desde la fuente?

información relacionada