We’ve been receiving a lot of questions about ESM for ROS, including how to enable it effectively in developers’ environments.
Many of the answers have already been compiled in our FAQ blog post, therefore, in this post, we want to focus on a more hands-on approach and dive into how you can get ESM for ROS Noetic and Ubuntu 20.04 up and running on your robots.
Noetic and Focal
As of May 2025, the last standing ROS (1) distribution, Noetic, has officially reached end-of-life, along with the end of standard support for Ubuntu 20.04. For many developers and organizations this brings up serious concerns around migration timelines to ROS 2, engineering capacity, security risks, and readiness for upcoming regulatory changes such as EU’s Cyber Resilience Act (CRA).
What is ESM for ROS
ESM for ROS is a Canonical service, part of the Ubuntu Pro subscription, freely available for personal-use, and with a new pricing model for companies deploying commercial devices. It provides a way to continue receiving security updates and CVE patches for ROS Noetic for up to 5 years after end-of-life to support the migration process. It also includes bug fixes for critical issues and long term support for Ubuntu 20.04 LTS.
Security updates and long-term maintenance mean that companies can have more time to plan and execute a full migration to ROS 2.
More details can be found on the ESM for ROS page.
How to enable ESM for ROS
To use ESM for ROS, the first step is to activate Ubuntu Pro. Once Ubuntu Pro is set up, enabling ESM for ROS is as simple as enabling the relevant services with:
sudo pro enable esm-infra esm-apps ros
That’s it! Once enabled, your system will gain access to Canonical’s ESM archive, which contains patched and maintained versions of core ROS Noetic packages. With this, supported ROS packages will now be pulled from this archive instead of the end-of-life upstream repositories.
By enabling ESM, it is possible to install ROS variants and packages, in the same way as upstream:
sudo apt install ros-noetic-ros-base
More detailed information and guidance can be found at Enable ESM for ROS documentation.
Rosdep setup
ESM provides a full-fledged ROS distro that ships with its own rosdep definitions. To make full use of it and its dependencies, rosdep needs to be set up accordingly.
The process of doing so is equivalent to the upstream one, and it starts with the installation of python3-rosdep (which is included and maintained as part of ESM for ROS) as follows:
sudo apt install -y python3-rosdep
Then we can initialise and update the rosdep database:
sudo rosdep init
rosdep update
After these steps, you can continue using rosdep to install dependencies for your own custom packages and workspaces as usual, but now fully backed by ROS ESM’s trusted archive.
More detailed information on how to set up an ESM for ROS environment can be found in the Setup an ESM for ROS environment documentation.
Deploying in containers
If your robot images are built and deployed using Docker, you can easily integrate ESM for ROS into your Dockerfile as detailed in this tutorial. In this way, you can continue using existing CI pipelines and Docker based workflows with minimal changes.
Below is a simplified snippet of how a Dockerfile with ESM for ROS enabled might look:
# Enable ESM for ROS and install ROS base packages
RUN pro enable esm-infra esm-apps ros && \
apt update && \
apt install -y python3-rosdep ros-noetic-ros-base
# Update rosdep for use with ESM
RUN rosdep init && \
rosdep update
# Use rosdep to resolve and install dependencies from ESM
COPY src/ ./src
RUN rosdep install --from-paths src --ignore-src -r -y
The steps above, including the activation of ESM, configuration of rosdep, and optionally pulling non-ESM components from source, all make it easy to rebuild ROS Noetic ESM robot images.
Whether you’re building for simulation, deploying to edge devices, or running in CI, ESM ensures your container-based workflows remain stable and security maintained.
About non-ESM packages
When building complex robots, it is common to depend on many upstream ROS packages beyond core ones. ESM mostly covers core packages (see full list of supported packages).
The recommended approach in this case is to build the non-ESM packages from source inside the ROS environment. Detailed guidance on this can be found in the official documentation.
Conclusions
We’ve provided an overview of how to enable ESM for ROS on your robots. These simple steps offer a path forward after Noetic’s end-of-life and give companies time to migrate to ROS 2.
If you want to learn more about ESM for ROS, visit our webpage.
Get in touch with us to learn more and feel free to leave your questions in this thread.