To resolve Node.js repository errors on Ubuntu, you must ensure the package signature is valid by importing the correct GPG key and verifying the repository URL in your sources list. Common failures stem from outdated keys or incorrect apt configuration, which can be fixed by cleaning the cache, re-importing the key via curl, and updating the package index without disabling security checks.
Identifying the Specific Error
When runningsudo apt update, a repository error typically manifests as an "NO_PUBKEY" warning or a "GPG error" stating that the public key is not available. This indicates that APT cannot verify the authenticity of the packages coming from the NodeSource repository. Unlike other system packages, Node.js is often installed from a third-party source, making the integrity of the GPG key critical for security.
If you see messages like "The following signatures couldn't be verified because the public key is not available," it means your local keyring lacks the signing key for the Node.js repository. Ignoring this by using insecure flags compromises your system's security model. The solution involves restoring trust rather than bypassing verification.
Step-by-Step Fix for Missing GPG Key
The most reliable method to fix this on modern Ubuntu versions (18.04 and later) is to use the NodeSource setup script or manually import the key. Here is the manual approach, which gives you full control over the process. First, remove any existing broken configurations. Open your terminal and run:sudo rm /etc/apt/sources.list.d/nodesource.list
sudo rm /usr/share/keyrings/nodesource.gpg
Next, download the current NodeSource GPG key. It is crucial to store this key in the /usr/share/keyrings/ directory, which is the standard location for signed repositories in modern Debian-based systems. Use curl to fetch the key and pipe it into gpg to convert it to the binary format APT expects:
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg
Now, create the repository file. You need to specify the architecture and the keyring path. Replace <NODE_MAJOR> with the version you want (e.g., 18, 20, or 22). For example, to install Node.js 20:
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Finally, update your package list to verify the fix:
sudo apt update
If the command completes without errors, the repository issue is resolved. You can now proceed with installing Node.js using sudo apt install nodejs.
Verifying the Installation
After fixing the repository, it is important to confirm that the installation is clean and functional. Run the following commands to check the versions:node -v
npm -v
You should see version numbers corresponding to the major release you selected. If node is not found, ensure that your PATH includes the Node.js binaries. On most Ubuntu installations, this happens automatically, but in rare cases, you may need to add /usr/local/bin to your $PATH environment variable if you used a different installation method previously.
Common Pitfalls and Alternatives
Some users attempt to fix this by adding--allow-insecure-repositories to their apt.conf. This is dangerous advice that disables GPG verification for all repositories, exposing your system to potential supply-chain attacks. Always prefer fixing the key management rather than lowering security standards.
Another common mistake is using an outdated version of the NodeSource setup script. The script changes frequently, and hardcoding old URLs leads to signature mismatches. Using the direct curl method described above ensures you are always pulling the latest valid key.
For developers working with multiple Node.js versions, consider using nvm (Node Version Manager). While nvm does not rely on APT repositories, it is an excellent alternative for managing environments. However, if you require system-wide integration with Ubuntu's package manager, the APT method is superior.
Related articles on the same site might help if you encounter broader system issues. For instance, if you face signature verification failures across all repositories, check our guide on Ubuntu Repository Signature Verification Errors. This covers general keyring corruption that might affect more than just Node.js.
Frequently Asked Questions
Why does my apt update still fail after importing the key?
This usually happens if the repository file references a different keyring path than where you saved the key. Ensure the [signed-by=...] tag in your .list file exactly matches the path to your .gpg file. Also, check that the file permissions allow root to read the keyring.
Can I use the NodeSource setup script instead of manual commands?
Yes, running curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash - automates the key import and repository creation. However, manual steps are safer if you want to audit what is being added to your system before execution.
How do I switch to a different Node.js version?
You must edit the /etc/apt/sources.list.d/nodesource.list file and change the URL from node_20.x to the desired version, such as node_18.x. After saving the file, run sudo apt update again to fetch the new package metadata.
What if I get a "Hash Sum Mismatch" error?
This indicates a corrupted download cache. Clear the APT cache by running sudo apt clean and then try sudo apt update again. Network interruptions during the previous update often cause this specific error.
Is it safe to remove the nodesource.list file?
Yes, deleting /etc/apt/sources.list.d/nodesource.list removes the repository entirely. This is useful if you want to uninstall Node.js managed by APT or switch to a different installation method like nvm. Remember to also remove the GPG key file if you no longer need it.