ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Bloom - "Could not resolve rosdep key 'message_runtime'"

asked 2014-03-05 09:24:03 -0600

mkoval gravatar image

updated 2014-03-06 08:08:44 -0600

I am trying to build a package in a private Bloom repository with ROSDISTRO_INDEX_URL pointing to a custom index.yaml file. This works up until Bloom invokes rosdep to resolve my package's dependencies.

I tried following the answer to a similar question from 2012:

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

This did not change anything. I repeated the above with the latest versions of rosdep and Bloom in the Ubuntu APT repository (python-rosdep and python-bloom) and pip (rosdep and bloom) and got the same result.

Interestingly, it looks like the "hydro" line added in 09e4ae3ff3e8e81408127582c4b260718c679f6 was recently removed in 5e4a02a408361241a7158361ea2b228b08c0c671. This comment was added in its place:

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

Unfortunately, this does not seem to be the case. I can't rosdep resolve any of the standard Hydro packages:

$ rosdep resolve message_generation
ERROR: no rosdep rule for 'message_generation'

This happens even if I am in a shell that freshly sourced /opt/ros/hydro/setup.bash; i.e. ROSDISTRO_INDEX_URL is not set.

Any suggestions?

Edit 1: Running rosdep update fixes the issue when running with the default ROSDISTRO_INDEX_URL.

Edit 2: To outline our use-case in a bit more detail:

We use ROS extensively across two robots---one robotic arm and one dual-arm mobile manipulator---and have accumulated a large collection of internal ROS packages. Most of our packages are open-source, but we have some hard constraints that prevent us from open-sourcing everything (e.g. includes on commercial/proprietary software, sponsor has IP restrictions, software associated with papers that are under peer review, etc).

We've been building Debians of our dry Fuerte packages with a custom Jenkins setup and are finally upgrading to Indigo. Our plan is to switch to Bloom to manage releases and a (potentially heavily modified) version of buildbot-ros as our internal build server.

Edit 3: See our discussion on @tfoote's comment below for the solution we arrived at.

edit retag flag offensive close merge delete



What is the current status of this? Have buildfarm changes made this possible through other means (what are they?), or you still need your rosdep-generator script, or that needs to be updated for the latest system?

lucasw gravatar image lucasw  ( 2016-03-02 16:55:06 -0600 )edit
1 indicates rosdep-generator is still part of the process.

lucasw gravatar image lucasw  ( 2016-03-02 17:34:59 -0600 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2014-03-05 15:32:53 -0600

tfoote gravatar image

This is not a use case we've worked on much. The nominal way we've thought about overlaying one rosdistro on another is to act like the upstream distro is in the standard distro. To do that you should just make sure it's in the sources, and add a rosdep rules file which lists all the packages from Hydro that you expect to already be built and present in your repositories.

edit flag offensive delete link more


Thanks! Is this correct?: I should: (1) add the ROS apt repository to my /etc/apt/sources.list.d files, (2) add the Hydro rosdep YAML URL to my /etc/ros/rosdep/sources.list.d files, and (3) run rosdep update. What is the correct URL for the Hydro YAML file as of commit 5e4a02 to rosdistro?

mkoval gravatar image mkoval  ( 2014-03-05 15:58:34 -0600 )edit

Quick clarification...I was asking how to get rosdep to read the "index.yaml" file from the standard ROS distribution. Judging from the comment "...are being fetched from the rosdistro index.yaml", it sounds like this is being handled internally by rosdep.

mkoval gravatar image mkoval  ( 2014-03-05 16:02:57 -0600 )edit

For Hydro and newer ROS distros there is no rosdep yaml url anymore. The content in generated on the fly by rosdistro which uses the data of released wet packages provided by the repo. `rosdep update` already fetches these data via rosdistro so if you provide a custom ROSDISTRO_INDEX_URL rosdep will utilize the distros listed in your index.yaml file.

Dirk Thomas gravatar image Dirk Thomas  ( 2014-03-05 17:47:39 -0600 )edit

That's exactly the problem. I have my ROSDISTRO_INDEX_URL pointing to my custom rosdistro, which is why rosdep can't find the standard packages. Tully suggested I add the ROS rosdistro packages to my rosdep rules to fix that. I can't have two ROSDISTRO_INDEX_URLs, so I'm not sure what to do.

mkoval gravatar image mkoval  ( 2014-03-05 18:19:53 -0600 )edit

That is simply not a supported use case with the current infrastructure.

Dirk Thomas gravatar image Dirk Thomas  ( 2014-03-05 18:39:49 -0600 )edit

That's a shame. I actually tried this path because REP-137 explicitly lists "building binary packages of custom packages on top of the existing ROS distributions for publicly or privately hosted projects" as a supported use-case. Perhaps you could update that page? In any case, thanks for the help.

mkoval gravatar image mkoval  ( 2014-03-05 19:13:16 -0600 )edit

That is a use case that has been designed for. and is a valid part of the REP. however to make this work you just need to write a simple script to expand the distro definition into rosdep rules. And then add them to rosdep like any other set of rosdep rules. We just haven't fully implemented scripts for doing that. A submission of a script like that would be appreciated.

tfoote gravatar image tfoote  ( 2014-03-05 21:16:50 -0600 )edit

That sounds fine; I can work on this and send a patch upstream. I see two options: (1) generate a rosdep YAML file from a rosdistro or (2) extend rosdep to pull from multiple rosdistros. I prefer (2) since the YAML file will inevitably become out of date. Does that make sense?

mkoval gravatar image mkoval  ( 2014-03-06 05:54:39 -0600 )edit

answered 2014-03-05 09:56:07 -0600

William gravatar image

You depend on message_generation, but message_generation is not in your custom rosdistro and therefore bloom cannot figure out how to transform message_generation into a OS specific key like ros-hydro-message-generation.

This happens even if I am in a shell that freshly sourced /opt/ros/hydro/setup.bash; i.e. ROSDISTRO_INDEX is not set.

I don't see how this is possible unless you have changed your ROSDISTRO_INDEX_URL, did you rosdep update after unsetting ROSDISTRO_INDEX_URL?

edit flag offensive delete link more


You're right: I am able to resolve the package if I run rosdep update in my clean shell. Is there any way for me to overlay my custom packages over the public ROS distro? E.g. by manually adding the hydro rosdeps? I would prefer to not rebuild the default ROS packages if possible.

mkoval gravatar image mkoval  ( 2014-03-05 10:29:14 -0600 )edit

I'm not sure what the correct way to do this is, @Dirk Thomas might have an idea.

William gravatar image William  ( 2014-03-05 12:55:47 -0600 )edit

I've edited my original question to include some more detail about our use case. Any help or pointers to the relevant documentation would be greatly appreciated.

mkoval gravatar image mkoval  ( 2014-03-05 15:15:31 -0600 )edit

Question Tools



Asked: 2014-03-05 09:24:03 -0600

Seen: 3,733 times

Last updated: Mar 06 '14