Interaction between ROS ESM and ROS upstream

When enabling ROS ESM using pro enable ros as described in this guide, some changes are made to apt configuration and it’s important to be aware of those details.

Changes to PPAs

If you followed the official installation instructions for ROS 1 or ROS 2, you now have some additional files in your /etc/apt/sources.list.d folder.

These files are telling your apt software which server is able to provide specific packages. For the ROS ecosystem the files are usually called:

  • /etc/apt/sources.list.d/ros-latest.list for ROS 1

  • /etc/apt/sources.list.d/ros2.list for ROS 2

For example, when you request apt to install ros-noetic-std-msgs, it will fetch it from the server written inside the ros-latest.list file. When you enable ROS ESM, you will notice that a new configuration file is added inside your sources.list.d folder. The file is called ubuntu-ros.list and tells apt to fetch packages from esm.ubuntu.com. Our ESM packages can be distinguished because their version follows the pattern X.Y.Z+<ubuntu-version>-<counter> where:

  • X.Y.Z is the usual ROS versioning system

  • <ubuntu-version> is an LTS name such as 20.04.1

  • <counter> is a single integer.

After enabling ROS ESM you can inspect a package with apt-cache. For example:

apt-cache policy ros-foxy-std-msgs
ros-foxy-std-msgs:
  Installed: 2.0.5-1focal.20230527.044919
  Candidate: 2.0.5+20.04.1-0
  Version table:
     2.0.5+20.04.1-0 500
        500 https://esm.ubuntu.com/ros/ubuntu focal-security/main amd64 Packages
 *** 2.0.5-1focal.20230527.044919 500
        500 http://packages.ros.org/ros2/ubuntu focal/main amd64 Packages
        500 http://repo.ros2.org/ubuntu/main focal/main amd64 Packages
        100 /var/lib/dpkg/status

This indicates that ros-foxy-std-msgs is available on ros.org at version 2.0.5-1focal, while the ROS ESM repository provides version 2.0.5+20.04.1-0.

Apt automatically decides to upgrade from upstream ros.org to ROS ESM if both are available, you can confirm this by running:

$ apt list --upgradable
ros-foxy-std-msgs/focal-security 2.0.5+20.04.1-0 amd64 [upgradable from: 2.0.5-1focal.20230527.044919]

If you want to be sure you no longer consume any End-of-Life upstream packages, you should remove the ros-latest.list and ros2.list files and update your apt cache.

sudo rm /etc/apt/ros-latest.list /etc/apt/ros2.list
sudo apt update

Changes to rosdep

ROS ESM is its own ROS distribution, and thus provides its own distribution and rosdep files. If you already have upstream ROS installed and initialised (e.g. you previously ran sudo rosdep init), you’ll need to make sure you install rosdep from ESM and re-initialise it as follows:

sudo apt install python3-rosdep
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
sudo rosdep init
rosdep update

Now, the output of running rosdep update will look like the following:

$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://ros.robotics.ubuntu.com/rosdep/osx-homebrew.yaml
Hit https://ros.robotics.ubuntu.com/rosdep/base.yaml
Hit https://ros.robotics.ubuntu.com/rosdep/python.yaml
Hit https://ros.robotics.ubuntu.com/rosdep/ruby.yaml
Hit https://ros.robotics.ubuntu.com/rosdep/fuerte.yaml
Query rosdistro index https://staging.ros.robotics.ubuntu.com/rosdistros/index-v4.yaml
Add distro "foxy"
Add distro "kinetic"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/user/.ros/rosdep/sources.cache