diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 69a955ce..3b2e9e6d 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -112,7 +112,7 @@ "description": "name of the image to build", "options": [ "ros2-rolling", - "ros2-rolling-cuda", + "ros2-lyrical", "ros2-kilted", "ros2-jazzy", "ros2-jazzy-cuda", diff --git a/docker-bake.hcl b/docker-bake.hcl index 40a244ae..5d220f44 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -231,88 +231,61 @@ target "ros2-rolling-dev" { ] } -target "ros2-rolling-desktop" { - context = "ros2" - dockerfile = "rolling.Dockerfile" - target = "desktop" - tags = [ - "${REGISTRY}/ros2:rolling-desktop", - ] -} - -target "ros2-rolling-full" { - context = "ros2" - dockerfile = "rolling.Dockerfile" - target = "full" - tags = [ - "${REGISTRY}/ros2:rolling-full", - ] -} - -target "ros2-rolling-gazebo" { - context = "ros2" - dockerfile = "rolling.Dockerfile" - target = "gazebo" - tags = [ - "${REGISTRY}/ros2:rolling-gazebo", - ] -} - # ---- group for all ros2-rolling ---- group "ros2-rolling" { - targets = ["ros2-rolling-base", "ros2-rolling-dev", "ros2-rolling-desktop", "ros2-rolling-full", "ros2-rolling-gazebo"] + targets = ["ros2-rolling-base", "ros2-rolling-dev"] } -# ----------- targets for ros2-rolling-cuda ----------- +# ----------- targets for ros2-lyrical ----------- -target "ros2-rolling-cuda-base" { +target "ros2-lyrical-base" { context = "ros2" - dockerfile = "rolling-cuda.Dockerfile" + dockerfile = "lyrical.Dockerfile" target = "base" tags = [ - "${REGISTRY}/ros2:rolling-cuda-base", + "${REGISTRY}/ros2:lyrical-base", ] } -target "ros2-rolling-cuda-dev" { +target "ros2-lyrical-dev" { context = "ros2" - dockerfile = "rolling-cuda.Dockerfile" + dockerfile = "lyrical.Dockerfile" target = "dev" tags = [ - "${REGISTRY}/ros2:rolling-cuda-dev", + "${REGISTRY}/ros2:lyrical-dev", ] } -target "ros2-rolling-cuda-desktop" { +target "ros2-lyrical-desktop" { context = "ros2" - dockerfile = "rolling-cuda.Dockerfile" + dockerfile = "lyrical.Dockerfile" target = "desktop" tags = [ - "${REGISTRY}/ros2:rolling-cuda-desktop", + "${REGISTRY}/ros2:lyrical-desktop", ] } -target "ros2-rolling-cuda-full" { +target "ros2-lyrical-full" { context = "ros2" - dockerfile = "rolling-cuda.Dockerfile" + dockerfile = "lyrical.Dockerfile" target = "full" tags = [ - "${REGISTRY}/ros2:rolling-cuda-full", + "${REGISTRY}/ros2:lyrical-full", ] } -target "ros2-rolling-cuda-gazebo" { +target "ros2-lyrical-gazebo" { context = "ros2" - dockerfile = "rolling-cuda.Dockerfile" + dockerfile = "lyrical.Dockerfile" target = "gazebo" tags = [ - "${REGISTRY}/ros2:rolling-cuda-gazebo", + "${REGISTRY}/ros2:lyrical-gazebo", ] } -# ---- group for all ros2-rolling-cuda ---- -group "ros2-rolling-cuda" { - targets = ["ros2-rolling-cuda-base", "ros2-rolling-cuda-dev", "ros2-rolling-cuda-desktop", "ros2-rolling-cuda-full", "ros2-rolling-cuda-gazebo"] +# ---- group for all ros2-lyrical ---- +group "ros2-lyrical" { + targets = ["ros2-lyrical-base", "ros2-lyrical-dev", "ros2-lyrical-desktop", "ros2-lyrical-full", "ros2-lyrical-gazebo"] } # ----------- targets for ros2-kilted ----------- @@ -1385,11 +1358,12 @@ group "ros-kinetic-linux-amd64" { targets = [ "ros-kinetic-base", "ros-kinetic-d group "ros-kinetic-linux-arm64" { targets = [ "ros-kinetic-base", "ros-kinetic-dev", "ros-kinetic-desktop", "ros-kinetic-full" ] } -group "ros2-rolling-linux-amd64" { targets = [ "ros2-rolling-base", "ros2-rolling-dev", "ros2-rolling-desktop", "ros2-rolling-full", "ros2-rolling-gazebo" ] } +group "ros2-rolling-linux-amd64" { targets = [ "ros2-rolling-base", "ros2-rolling-dev" ] } group "ros2-rolling-linux-arm64" { targets = [ "ros2-rolling-base" ] } -group "ros2-rolling-cuda-linux-amd64" { targets = [ "ros2-rolling-cuda-base", "ros2-rolling-cuda-dev", "ros2-rolling-cuda-desktop", "ros2-rolling-cuda-full", "ros2-rolling-cuda-gazebo" ] } +group "ros2-lyrical-linux-amd64" { targets = [ "ros2-lyrical-base", "ros2-lyrical-dev", "ros2-lyrical-desktop", "ros2-lyrical-full", "ros2-lyrical-gazebo" ] } +group "ros2-lyrical-linux-arm64" { targets = [ "ros2-lyrical-base" ] } group "ros2-kilted-linux-amd64" { targets = [ "ros2-kilted-base", "ros2-kilted-dev", "ros2-kilted-desktop", "ros2-kilted-full", "ros2-kilted-gazebo" ] } @@ -1487,7 +1461,7 @@ group "gz-garden-cuda-linux-amd64" { targets = [ "gz-garden-cuda-base", "gz-gard # ---------- Family-level groups (e.g., ros2, gz, ignition) ---------- group "ros" { targets = [ "ros-noetic-base", "ros-noetic-dev", "ros-noetic-desktop", "ros-noetic-full", "ros-noetic-gazebo", "ros-melodic-base", "ros-melodic-dev", "ros-melodic-desktop", "ros-melodic-full", "ros-melodic-gazebo", "ros-lunar-base", "ros-lunar-dev", "ros-lunar-desktop", "ros-lunar-full", "ros-lunar-gazebo", "ros-kinetic-base", "ros-kinetic-dev", "ros-kinetic-desktop", "ros-kinetic-full", "ros-kinetic-gazebo" ] } -group "ros2" { targets = [ "ros2-rolling-base", "ros2-rolling-dev", "ros2-rolling-desktop", "ros2-rolling-full", "ros2-rolling-gazebo", "ros2-rolling-cuda-base", "ros2-rolling-cuda-dev", "ros2-rolling-cuda-desktop", "ros2-rolling-cuda-full", "ros2-rolling-cuda-gazebo", "ros2-kilted-base", "ros2-kilted-dev", "ros2-kilted-desktop", "ros2-kilted-full", "ros2-kilted-gazebo", "ros2-jazzy-base", "ros2-jazzy-dev", "ros2-jazzy-desktop", "ros2-jazzy-full", "ros2-jazzy-gazebo", "ros2-jazzy-cuda-base", "ros2-jazzy-cuda-dev", "ros2-jazzy-cuda-desktop", "ros2-jazzy-cuda-full", "ros2-jazzy-cuda-gazebo", "ros2-iron-base", "ros2-iron-dev", "ros2-iron-desktop", "ros2-iron-full", "ros2-iron-gazebo", "ros2-iron-cuda-base", "ros2-iron-cuda-dev", "ros2-iron-cuda-desktop", "ros2-iron-cuda-full", "ros2-iron-cuda-gazebo", "ros2-humble-base", "ros2-humble-dev", "ros2-humble-desktop", "ros2-humble-full", "ros2-humble-gazebo", "ros2-humble-cuda-base", "ros2-humble-cuda-dev", "ros2-humble-cuda-desktop", "ros2-humble-cuda-full", "ros2-humble-cuda-gazebo", "ros2-galactic-base", "ros2-galactic-dev", "ros2-galactic-desktop", "ros2-galactic-full", "ros2-galactic-gazebo", "ros2-galactic-cuda-base", "ros2-galactic-cuda-dev", "ros2-galactic-cuda-desktop", "ros2-galactic-cuda-full", "ros2-galactic-cuda-gazebo", "ros2-foxy-base", "ros2-foxy-dev", "ros2-foxy-desktop", "ros2-foxy-full", "ros2-foxy-gazebo", "ros2-foxy-cuda-base", "ros2-foxy-cuda-dev", "ros2-foxy-cuda-desktop", "ros2-foxy-cuda-full", "ros2-foxy-cuda-gazebo", "ros2-eloquent-base", "ros2-eloquent-dev", "ros2-eloquent-desktop", "ros2-eloquent-full", "ros2-eloquent-gazebo", "ros2-dashing-base", "ros2-dashing-dev", "ros2-dashing-desktop", "ros2-dashing-full", "ros2-dashing-gazebo" ] } +group "ros2" { targets = [ "ros2-rolling-base", "ros2-rolling-dev", "ros2-lyrical-base", "ros2-lyrical-dev", "ros2-lyrical-desktop", "ros2-lyrical-full", "ros2-lyrical-gazebo", "ros2-kilted-base", "ros2-kilted-dev", "ros2-kilted-desktop", "ros2-kilted-full", "ros2-kilted-gazebo", "ros2-jazzy-base", "ros2-jazzy-dev", "ros2-jazzy-desktop", "ros2-jazzy-full", "ros2-jazzy-gazebo", "ros2-jazzy-cuda-base", "ros2-jazzy-cuda-dev", "ros2-jazzy-cuda-desktop", "ros2-jazzy-cuda-full", "ros2-jazzy-cuda-gazebo", "ros2-iron-base", "ros2-iron-dev", "ros2-iron-desktop", "ros2-iron-full", "ros2-iron-gazebo", "ros2-iron-cuda-base", "ros2-iron-cuda-dev", "ros2-iron-cuda-desktop", "ros2-iron-cuda-full", "ros2-iron-cuda-gazebo", "ros2-humble-base", "ros2-humble-dev", "ros2-humble-desktop", "ros2-humble-full", "ros2-humble-gazebo", "ros2-humble-cuda-base", "ros2-humble-cuda-dev", "ros2-humble-cuda-desktop", "ros2-humble-cuda-full", "ros2-humble-cuda-gazebo", "ros2-galactic-base", "ros2-galactic-dev", "ros2-galactic-desktop", "ros2-galactic-full", "ros2-galactic-gazebo", "ros2-galactic-cuda-base", "ros2-galactic-cuda-dev", "ros2-galactic-cuda-desktop", "ros2-galactic-cuda-full", "ros2-galactic-cuda-gazebo", "ros2-foxy-base", "ros2-foxy-dev", "ros2-foxy-desktop", "ros2-foxy-full", "ros2-foxy-gazebo", "ros2-foxy-cuda-base", "ros2-foxy-cuda-dev", "ros2-foxy-cuda-desktop", "ros2-foxy-cuda-full", "ros2-foxy-cuda-gazebo", "ros2-eloquent-base", "ros2-eloquent-dev", "ros2-eloquent-desktop", "ros2-eloquent-full", "ros2-eloquent-gazebo", "ros2-dashing-base", "ros2-dashing-dev", "ros2-dashing-desktop", "ros2-dashing-full", "ros2-dashing-gazebo" ] } group "gazebo" { targets = [ "gazebo-gazebo11-base", "gazebo-gazebo11-dev", "gazebo-gazebo10-base", "gazebo-gazebo10-dev", "gazebo-gazebo9-base", "gazebo-gazebo9-dev" ] } group "ignition" { targets = [ "ignition-fortress-base", "ignition-fortress-dev", "ignition-edifice-base", "ignition-edifice-dev", "ignition-dome-base", "ignition-dome-dev", "ignition-citadel-base", "ignition-citadel-dev" ] } group "gz" { targets = [ "gz-jetty-base", "gz-jetty-dev", "gz-jetty-cuda-base", "gz-jetty-cuda-dev", "gz-ionic-base", "gz-ionic-dev", "gz-ionic-cuda-base", "gz-ionic-cuda-dev", "gz-harmonic-base", "gz-harmonic-dev", "gz-harmonic-cuda-base", "gz-harmonic-cuda-dev", "gz-garden-base", "gz-garden-dev", "gz-garden-cuda-base", "gz-garden-cuda-dev" ] } @@ -1495,6 +1469,6 @@ group "gz" { targets = [ "gz-jetty-base", "gz-jetty-dev", "gz-jetty-cuda-base", # ---- all non-EOL targets ---- group "default" { targets = [ - "ros2-rolling-base", "ros2-rolling-dev", "ros2-rolling-desktop", "ros2-rolling-full", "ros2-rolling-gazebo", "ros2-rolling-cuda-base", "ros2-rolling-cuda-dev", "ros2-rolling-cuda-desktop", "ros2-rolling-cuda-full", "ros2-rolling-cuda-gazebo", "ros2-kilted-base", "ros2-kilted-dev", "ros2-kilted-desktop", "ros2-kilted-full", "ros2-kilted-gazebo", "ros2-jazzy-base", "ros2-jazzy-dev", "ros2-jazzy-desktop", "ros2-jazzy-full", "ros2-jazzy-gazebo", "ros2-jazzy-cuda-base", "ros2-jazzy-cuda-dev", "ros2-jazzy-cuda-desktop", "ros2-jazzy-cuda-full", "ros2-jazzy-cuda-gazebo", "ros2-humble-base", "ros2-humble-dev", "ros2-humble-desktop", "ros2-humble-full", "ros2-humble-gazebo", "ros2-humble-cuda-base", "ros2-humble-cuda-dev", "ros2-humble-cuda-desktop", "ros2-humble-cuda-full", "ros2-humble-cuda-gazebo", "ignition-fortress-base", "ignition-fortress-dev", "gz-jetty-base", "gz-jetty-dev", "gz-jetty-cuda-base", "gz-jetty-cuda-dev", "gz-ionic-base", "gz-ionic-dev", "gz-ionic-cuda-base", "gz-ionic-cuda-dev", "gz-harmonic-base", "gz-harmonic-dev", "gz-harmonic-cuda-base", "gz-harmonic-cuda-dev" + "ros2-rolling-base", "ros2-rolling-dev", "ros2-lyrical-base", "ros2-lyrical-dev", "ros2-lyrical-desktop", "ros2-lyrical-full", "ros2-lyrical-gazebo", "ros2-kilted-base", "ros2-kilted-dev", "ros2-kilted-desktop", "ros2-kilted-full", "ros2-kilted-gazebo", "ros2-jazzy-base", "ros2-jazzy-dev", "ros2-jazzy-desktop", "ros2-jazzy-full", "ros2-jazzy-gazebo", "ros2-jazzy-cuda-base", "ros2-jazzy-cuda-dev", "ros2-jazzy-cuda-desktop", "ros2-jazzy-cuda-full", "ros2-jazzy-cuda-gazebo", "ros2-humble-base", "ros2-humble-dev", "ros2-humble-desktop", "ros2-humble-full", "ros2-humble-gazebo", "ros2-humble-cuda-base", "ros2-humble-cuda-dev", "ros2-humble-cuda-desktop", "ros2-humble-cuda-full", "ros2-humble-cuda-gazebo", "ignition-fortress-base", "ignition-fortress-dev", "gz-jetty-base", "gz-jetty-dev", "gz-jetty-cuda-base", "gz-jetty-cuda-dev", "gz-ionic-base", "gz-ionic-dev", "gz-ionic-cuda-base", "gz-ionic-cuda-dev", "gz-harmonic-base", "gz-harmonic-dev", "gz-harmonic-cuda-base", "gz-harmonic-cuda-dev" ] } \ No newline at end of file diff --git a/docker-compose/rviz/lyrical-docker-compose.yml b/docker-compose/rviz/lyrical-docker-compose.yml new file mode 100644 index 00000000..db2c01e6 --- /dev/null +++ b/docker-compose/rviz/lyrical-docker-compose.yml @@ -0,0 +1,17 @@ + # Note: Run `xhost +local:docker` on the host before starting this container + +services: + rviz-lyrical: + image: althack/ros2:lyrical-full + environment: + - DISPLAY=${DISPLAY} + - XAUTHORITY=${XAUTHORITY} + - LIBGL_ALWAYS_SOFTWARE=1 # Force software rendering + - MESA_GL_VERSION_OVERRIDE=3.3 + volumes: + - /tmp/.X11-unix:/tmp/.X11-unix + network_mode: host # Use host networking + stdin_open: true + tty: true + command: ros2 run rviz2 rviz2 + \ No newline at end of file diff --git a/ros2/README.md b/ros2/README.md index 6328e769..756cc464 100644 --- a/ros2/README.md +++ b/ros2/README.md @@ -18,17 +18,14 @@ rolling * [rolling-base](https://github.com/althack/dockerfiles/blob/main/ros2/rolling.Dockerfile) * [rolling-dev](https://github.com/althack/dockerfiles/blob/main/ros2/rolling.Dockerfile) -* [rolling-desktop](https://github.com/althack/dockerfiles/blob/main/ros2/rolling.Dockerfile) -* [rolling-full](https://github.com/althack/dockerfiles/blob/main/ros2/rolling.Dockerfile) -* [rolling-gazebo](https://github.com/althack/dockerfiles/blob/main/ros2/rolling.Dockerfile) -rolling-cuda +lyrical -* [rolling-cuda-base](https://github.com/althack/dockerfiles/blob/main/ros2/rolling-cuda.Dockerfile) -* [rolling-cuda-dev](https://github.com/althack/dockerfiles/blob/main/ros2/rolling-cuda.Dockerfile) -* [rolling-cuda-desktop](https://github.com/althack/dockerfiles/blob/main/ros2/rolling-cuda.Dockerfile) -* [rolling-cuda-full](https://github.com/althack/dockerfiles/blob/main/ros2/rolling-cuda.Dockerfile) -* [rolling-cuda-gazebo](https://github.com/althack/dockerfiles/blob/main/ros2/rolling-cuda.Dockerfile) +* [lyrical-base](https://github.com/althack/dockerfiles/blob/main/ros2/lyrical.Dockerfile) +* [lyrical-dev](https://github.com/althack/dockerfiles/blob/main/ros2/lyrical.Dockerfile) +* [lyrical-desktop](https://github.com/althack/dockerfiles/blob/main/ros2/lyrical.Dockerfile) +* [lyrical-full](https://github.com/althack/dockerfiles/blob/main/ros2/lyrical.Dockerfile) +* [lyrical-gazebo](https://github.com/althack/dockerfiles/blob/main/ros2/lyrical.Dockerfile) kilted diff --git a/ros2/humble-cuda.Dockerfile b/ros2/humble-cuda.Dockerfile index cbba90cf..a4589b70 100644 --- a/ros2/humble-cuda.Dockerfile +++ b/ros2/humble-cuda.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=humble diff --git a/ros2/humble.Dockerfile b/ros2/humble.Dockerfile index df3af391..ff17efa4 100644 --- a/ros2/humble.Dockerfile +++ b/ros2/humble.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=humble diff --git a/ros2/jazzy-cuda.Dockerfile b/ros2/jazzy-cuda.Dockerfile index 4490b065..1cb675a1 100644 --- a/ros2/jazzy-cuda.Dockerfile +++ b/ros2/jazzy-cuda.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=jazzy diff --git a/ros2/jazzy.Dockerfile b/ros2/jazzy.Dockerfile index 1820a4e3..a5970baa 100644 --- a/ros2/jazzy.Dockerfile +++ b/ros2/jazzy.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=jazzy diff --git a/ros2/kilted.Dockerfile b/ros2/kilted.Dockerfile index 43c951c2..4e9f5306 100644 --- a/ros2/kilted.Dockerfile +++ b/ros2/kilted.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=kilted diff --git a/ros2/lyrical.Dockerfile b/ros2/lyrical.Dockerfile new file mode 100644 index 00000000..968e41bf --- /dev/null +++ b/ros2/lyrical.Dockerfile @@ -0,0 +1,177 @@ +############################################## +# Created from template ros2.dockerfile.jinja +############################################## + +########################################### +# Base image +########################################### +FROM ubuntu:26.04 AS base + +ENV DEBIAN_FRONTEND=noninteractive + +# Install language +RUN apt-get update && apt-get install -y --no-install-recommends \ + locales \ + && locale-gen en_US.UTF-8 \ + && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 \ + && rm -rf /var/lib/apt/lists/* +ENV LANG=en_US.UTF-8 + +# Install timezone +RUN ln -fs /usr/share/zoneinfo/UTC /etc/localtime \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install -y --no-install-recommends tzdata \ + && dpkg-reconfigure --frontend noninteractive tzdata \ + && rm -rf /var/lib/apt/lists/* + +RUN apt-get update && apt-get -y upgrade \ + && rm -rf /var/lib/apt/lists/* + +# Install common programs +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + gettext-base \ + gnupg2 \ + lsb-release \ + sudo \ + software-properties-common \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# Setup ROS Apt sources +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* + +ENV ROS_DISTRO=lyrical + +# Install ROS2 +RUN apt-get update && apt-get install -y --no-install-recommends \ + ros-lyrical-ros-base \ + python3-argcomplete \ + python3-rosdep \ + && rm -rf /var/lib/apt/lists/* + +ARG USERNAME=ros +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +# Check if "ubuntu" user exists, delete it if it does, then create the desired user +RUN if getent passwd ubuntu > /dev/null 2>&1; then \ + userdel -r ubuntu && \ + echo "Deleted existing ubuntu user"; \ + fi && \ + groupadd --gid $USER_GID $USERNAME && \ + useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME && \ + echo "Created new user $USERNAME" + +# Add sudo support for the non-root user +RUN apt-get update && apt-get install -y sudo \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\ + && chmod 0440 /etc/sudoers.d/$USERNAME \ + && rm -rf /var/lib/apt/lists/* + +# Set up autocompletion for user +RUN apt-get update && apt-get install -y --no-install-recommends git-core bash-completion \ + && echo "if [ -f /opt/ros/${ROS_DISTRO}/setup.bash ]; then source /opt/ros/${ROS_DISTRO}/setup.bash; fi" >> /home/$USERNAME/.bashrc \ + && echo "if [ -f /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash ]; then source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash; fi" >> /home/$USERNAME/.bashrc \ + && rm -rf /var/lib/apt/lists/* +ENV DEBIAN_FRONTEND= + +# setup entrypoint +COPY ./ros_entrypoint.sh / + +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD ["bash"] +########################################### +# Develop image +########################################### +FROM base AS dev + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y --no-install-recommends \ + bash-completion \ + build-essential \ + cmake \ + gdb \ + git \ + openssh-client \ + python3-argcomplete \ + python3-pip \ + ros-dev-tools \ + ros-lyrical-ament-* \ + vim \ + && rm -rf /var/lib/apt/lists/* + +RUN rosdep init || echo "rosdep already initialized" + +ENV DEBIAN_FRONTEND= +ENV AMENT_CPPCHECK_ALLOW_SLOW_VERSIONS=1 + +########################################### +# Desktop image +########################################### +FROM dev AS desktop + +ENV DEBIAN_FRONTEND=noninteractive +# Install the desktop release +RUN apt-get update && apt-get install -y --no-install-recommends \ + ros-lyrical-desktop \ + && rm -rf /var/lib/apt/lists/* +ENV DEBIAN_FRONTEND= + +########################################### +# Full image +########################################### +FROM desktop AS full + +ENV DEBIAN_FRONTEND=noninteractive +# Install the desktop release +RUN apt-get update && apt-get install -y --no-install-recommends \ + ros-lyrical-desktop-full \ + && rm -rf /var/lib/apt/lists/* +ENV DEBIAN_FRONTEND= + + +########################################### +# Full+Gazebo image +########################################### +FROM full AS gazebo + +ENV DEBIAN_FRONTEND=noninteractive +# Install gazebo +RUN wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null \ + && apt-get update && apt-get install -q -y --no-install-recommends \ + ros-lyrical-ros-gz \ + && rm -rf /var/lib/apt/lists/* +ENV DEBIAN_FRONTEND= + +########################################### +# Full+Gazebo+Nvidia image +########################################### + +FROM gazebo AS nvidia + +################ +# Expose the nvidia driver to allow opengl +# Dependencies for glvnd and X11. +################ +RUN apt-get update \ + && apt-get install -y -qq --no-install-recommends \ + libglvnd0 \ + libgl1 \ + libglx0 \ + libegl1 \ + libxext6 \ + libx11-6 + +# Env vars for the nvidia-container-runtime. +ENV NVIDIA_VISIBLE_DEVICES=all +ENV NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute +ENV QT_X11_NO_MITSHM=1 \ No newline at end of file diff --git a/ros2/rolling-cuda.Dockerfile b/ros2/rolling-cuda.Dockerfile index b1f7f4a5..4ed10734 100644 --- a/ros2/rolling-cuda.Dockerfile +++ b/ros2/rolling-cuda.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=rolling diff --git a/ros2/rolling.Dockerfile b/ros2/rolling.Dockerfile index 55c9ce42..a80d6a95 100644 --- a/ros2/rolling.Dockerfile +++ b/ros2/rolling.Dockerfile @@ -37,14 +37,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO=rolling diff --git a/template/ros2.dockerfile.jinja b/template/ros2.dockerfile.jinja index 8dc8892f..2ace2bd8 100644 --- a/template/ros2.dockerfile.jinja +++ b/template/ros2.dockerfile.jinja @@ -25,14 +25,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ software-properties-common \ wget \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* # Setup ROS Apt sources -RUN curl -L -s -o /tmp/ros2-apt-source.deb https://github.com/ros-infrastructure/ros-apt-source/releases/download/1.1.0/ros2-apt-source_1.1.0.$(lsb_release -cs)_all.deb \ - && apt-get update \ - && apt-get install /tmp/ros2-apt-source.deb \ - && rm -f /tmp/ros2-apt-source.deb \ - && rm -rf /var/lib/apt/lists/* +RUN add-apt-repository universe \ + && export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}') \ + && curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" \ + && apt-get update \ + && apt-get install /tmp/ros2-apt-source.deb \ + && rm -f /tmp/ros2-apt-source.deb \ + && rm -rf /var/lib/apt/lists/* ENV ROS_DISTRO={{ distro }} diff --git a/templates.yml b/templates.yml index 7d0ff641..e944943f 100644 --- a/templates.yml +++ b/templates.yml @@ -71,19 +71,13 @@ dockerfiles: platforms: ["linux/amd64", "linux/arm64"] - target: dev platforms: ["linux/amd64"] - - target: desktop - platforms: ["linux/amd64"] - - target: full - platforms: ["linux/amd64"] - - target: gazebo - platforms: ["linux/amd64"] base_image: "ubuntu:24.04" - family: "ros2" - name: rolling-cuda - distro: rolling + name: lyrical + distro: lyrical targets: - target: base - platforms: ["linux/amd64"] + platforms: ["linux/amd64", "linux/arm64"] - target: dev platforms: ["linux/amd64"] - target: desktop @@ -92,7 +86,8 @@ dockerfiles: platforms: ["linux/amd64"] - target: gazebo platforms: ["linux/amd64"] - base_image: "nvidia/cuda:13.0.1-cudnn-runtime-ubuntu24.04" + base_image: "ubuntu:26.04" + eol: "2031-05-31" - family: "ros2" name: kilted distro: kilted