NodeJS v0.10 presently ships on CentOS/Red Hat 7.x. If you Google around, there are some hacky ways to upgrade NodeJS on your system, but all of them (at least all of the ones I found) don’t manage these upgrades properly through RPMs.
Now the good folks over at nodesource.com attempted to package this all into one RPM but by doing this, they unfortunately violate a number of standards that Red Hat tries to follow. It also causes some conflicts with any existing (NodeJS) packages you may have been using vs simply gracefully upgrading them. This blog merely offers an alternative (more elegant) solution to the same problem nodesource.com already solved.
What is NodeJS?
The tool is constantly evolving and becoming more widely used which is exactly why you need to upgrade your copy to take advantage of the new features it has to offer! 🙂
NodeJS Dependency Nightmare
I’ll be honest up front, NodeJS does suffer from a bit of a dependency nightmare. One component you’ll install will require some other components to work, they in turn will also require components (and so on and so forth). This is no different then other languages, however with NodeJS the problem is that some dependencies don’t connect up with others all the time and some dependencies conflict with another. This prevents you from being able to fully experiment with some of the on-going development and newer features easily. More importantly NodeJS struggles from the lack of Semantic Versioning which is the root cause of the dependency hell we have to work with.
The dependency issues that confront NodeJS are probably the biggest reason it’s not so easily integrated into Linux environments like the other scripting languages are.
The Extra Packages for Enterprise Linux (EPEL) team did do a good job of working out a ton of dependencies for us in the past. But no one seems to be keeping up with this. The packages they provided are old… I mean really old. Even the bleeding edge Linux distributions (Fedora 23 and Ubuntu 15.10 at the time) still ship with NodeJS 0.10 and haven’t updated their NodeJS packages in years either.
The good news is, I’ve worked out ton of these dependencies using many of the current packages available today and also share them on my repository. So although I can’t satisfy the needs of everyone… I can certainly start with my own and share my work in case others are interested! 🙂
The Run Down
This blog focuses on properly providing installable RPMs that follow Red Hat standards. In addition to this, these packages will remain compatible with previous installations of NodeJS:
- NodeJS v0.12 (from v0.10)
- npm v3.8.x (from v1.3.x)
- libuv v.1.9 (from v0.10.x)
Not only that, but I ported over 360+ NodeJS packages into install-able RPMs! They’re certainly not all tested, but it’s a heck of a lot farther then we were before as far as what was available to us.
Make sure you’ve connected to my repository which is documented here. After that, it’s as simple as the following:
The bread and butter of this entire blog entry. This will haul in the latest libuv packaging as well:
# Run as root (or a user with sudoers permission) yum install --enablerepo=nuxref nodejs
If you want to stray away from the 360+ packages I put together, you can use the latest version of npm to haul in your own.
# Run as root (or a user with sudoers permission) yum install --enablerepo=nuxref npm
I may not blog often; but I want to re-assure the stability and testing I put into everything I intend share.
If you like what you see and wish to copy and paste this HOWTO, please reference back to this blog post at the very least; it’s really all that I ask of you.
None of this would have been possible if I hadn’t referenced the following:
- Fedora/CentOS/Red Hat NodeJS Package Guidelines
- NodeJS Package Management Official Website – Nascent Prototype Metaverse (npm)
- Nodesource.com. To further this; here is the issue from Github that goes into the CentOS packaging that they prepared.