Una actualización de npm destroza varios sistemas Linux
El gestor de paquetes oficial para Node.js ha hecho de las suyas en las tierras de Tux. Una reciente actualización de npm (5.7.0) ha enredado con los permisos de archivos y directorios críticos, provocando en algunos casos la necesidad de reinstalar el sistema.
Múltiples usuarios en GitHub –varios de ellos ejecutando servidores linux– informan que después de utilizar “sudo npm”, binarios en el directorio /usr/bin dejaron de funcionar, así como otras carpetas y archivos presentes en la raíz del sistema, vieron transferida su propiedad a un usuario común (es decir al usuario actual en vez de a root).
No solo las distribuciones GNU/Linux fueron afectados, también sistemas como FreeBSD, viéndose obligados sus administradores a cambiar a mano y de forma recursiva los citados permisos.
La versión afectada es la 5.7.0 que en teoría es una versión previa, aunque la semántica de la misma y el anuncio del lanzamiento en el blog del proyecto, podría llevar a confusión. El fallo se corrigió unas horas después publicando npm 5.7.1.
This release reverts a patch that could cause some ownership changes on system files when running from some directories when also using `sudo`
Distros rolling releases como Arch Linux no llegaron a incluir npm 5.7.0, así que parece que en la mayoría de los casos, la nueva edición llego actualizando npm desde el propio gestor de paquetes (npm), mediante:
npm update -g
Un modo de actualización global, al que evidentemente le da igual, que sea una edición estable o en desarrollo, la que esté por llegar. El va a lo suyo. Llamadme loco, pero quizás esa conducta debería cambiarse.
Un tema complicado el de la gestión de paquetes en lenguajes de programación. Los pip, yarn, cargo, npm, rubygems… nos permiten acceder a paquetes no existentes en los repositorios oficiales o bien más actualizados, pero en mi experiencia lo ideal es optar por el gestor de paquetes de nuestra distro, en vez del específico de un lenguaje, siempre que ello sea posible.
La creación de entornos virtuales (como virtualenv en Python) para trabajar en modo local, también es una práctica recomendada, para evitarse conflictos. Aunque esto de npm es más grave de lo habitual, va más allá de una simple colisión de paquetes.
En cualquier caso, como pasa con la bebida, mejor no mezclar y siempre tenerle respeto al señor Sudo, sobre todo en sistemas en producción.
Y sobre todo si veis a npm 5.7.0, ¡corred por vuestra vida!.
Via: lamiradadelreplicante.com