[ros-users] [Discourse.ros.org] [Next Generation ROS] --isolated in Docker image

Mikael Arguedas ros.discourse at gmail.com
Tue Dec 26 14:36:49 UTC 2017



I used `--isolated` (as well as other flags) in the Docker images mostly because that's the ament invocation I use for development.

All the `--isolated` flag does is tell `ament_tools` to create an "isolated" install folder rather than a merged one, this means that each package will have it's own subfolder in the install directory.

Without `--isolated`:
```
install
 bin
 include
 lib
 local_setup.bash
 local_setup.sh
 local_setup.zsh
 opt
 _order_packages.py
 setup.bash
 setup.sh
 setup.zsh
 share
 src
```

With `--isolated`:
```
install
 actionlib_msgs
    include
    lib
    local_setup.bash
    local_setup.sh
    local_setup.zsh
    _order_packages.py
    setup.bash
    setup.sh
    setup.zsh
    share
...
 visualization_msgs
     include
     lib
     local_setup.bash
     local_setup.sh
     local_setup.zsh
     _order_packages.py
     setup.bash
     setup.sh
     setup.zsh
     share
```

The main advantage of this approach is that each package will have a different path for its includes, libraries etc (`X_INCLUDE_DIRS`, `X_LIBRARIES`...). This allows to make sure the dependencies are properly declared in CMake without relying on the fact that some files from projects that haven't been `find_package`'d are present in the install directory.

The drawback is that setting up the environment (`source (local_)setup.bash`) takes longer as a multitude of directories need to be added to environment variables (PATH, PYTHONPATH, LD_LIBRARY_PATH...).
On Windows with the `cmd` command line interpreter, environment variables are limited to 2048 characters making this approach unusable.

Other flags used in the docker images that differ from the ros2 installation instructions:
- `--parallel`: allows to build concurrently packages whose dependencies are satisfied. We don't advertise it as we faced some race conditions at install time when not using it in cmbination with `--isolated`
- `--symlink-install`: create symlinks in the install folder instead of copying the files. That allows faster install step as well as removing the need to rerun ament when modifying files that dont require compilation (e.g python scripts) in the source space.  This is also not an option on windows as symlinking files requires administrator permissions.
- `--cmake-args -DSECURITY=ON --`: compiles Fast-RTPS with DDS-Security enabled

Hope this helps





---
[Visit Topic](https://discourse.ros.org/t/isolated-in-docker-image/3504/2) or reply to this email to respond.




More information about the ros-users mailing list