ros2_rust
ros2_rust copied to clipboard
Support for building Debian packages
It would be useful if it was possible to make Debian packages from a project using ros2_rust. There's official documentation for doing this, but bloom-generate claims to not support ament_cargo builds, along with rclrs and rosidl_runtime_rs not being in rosdep.
My project at least doesn't seem to have ended up with any dynamic dependencies outside the standard ROS libs, so if that's the common case it might not be that complicated to support (dependencies can mostly be ignored?)
There are other potential distribution methods too:
- Copying source and building on-target - rough for robots with weak CPUs
- Just copying binaries around - as mentioned, seemingly only standard runtime deps, so this is ugly but functional
- Docker - works fine, though I had some weird issues with
--net hostand FastDDS (unrelated to ros2_rust)
Of these, I think debian packages are the best option. What work has to be done for bloom to support cargo; if that's even possible before being in the core distribution?
@ashquarky thanks for your interest in ros2-rust. Adding support for building Debian packages out of ros2-rust is not currently possible, we'd need at least these two before we can do that:
- Add support for Cargo to rosdep. No easy feat, we talked with the maintainers of the ROS buildfarm and they raised several concerns about it,
- Include the Rust toolchain in the ROS Buildfarm. The ROS buildfarm builds packages without access to the internet, as a security measure, we'd need to find a way to "freeze" dependencies so that Cargo does not download them
As a first step, we want to submit rosidl_runtime_rs to the ROS buildfarm, as it's just a regular ROS package written in Python, and eventually enable it as one of the default message generators. Before that we want to add support for actions (see https://github.com/ros2-rust/ros2_rust/pull/295), which would bring it to pretty much feature parity with other message generators. Once we have that included in the standard ROS distribution, all messages will be generated as Rust structs and although rclrs will still be distributed as a crate, the barrier to entry for having ROS 2 applications written in Rust will be much lower.