Skip to content

Commit 827968b

Browse files
authored
feat(templates): add ROS 2 Jazzy robotics ISO installer template (#507)
Add bootable ISO variant of the Ubuntu 24.04 ROS 2 Jazzy robotics template for the Robotics team AMR use case. Flash to USB for bare metal installation.
1 parent ea6ee1f commit 827968b

File tree

1 file changed

+254
-0
lines changed

1 file changed

+254
-0
lines changed
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
# Robotics AI Suite: Full ROS 2 Jazzy ISO Image Template
2+
# Ubuntu 24.04 LTS + ROS 2 Jazzy Desktop + Intel OpenVINO + Gazebo Harmonic +
3+
# Intel RealSense + Robotics SDK + Collab SLAM + Intel GPU/NPU support
4+
#
5+
# Bootable ISO installer image. Flash to USB, boot, and install to internal drive.
6+
# Includes ROS 2 Jazzy Desktop, Intel OpenVINO 2025, Gazebo Harmonic physics simulator,
7+
# Intel RealSense camera libraries, Intel NPU drivers, Mesa GPU stack, and more.
8+
#
9+
# Usage:
10+
# sudo -E ./os-image-composer build image-templates/ubuntu24-x86_64-robotics-jazzy-iso.yml
11+
#
12+
# Flash to USB:
13+
# sudo dd if=builds/robotics-jazzy-ubuntu24-24.04.iso of=/dev/sdX bs=4M status=progress conv=fsync
14+
#
15+
# Boot from USB, then the live-installer writes to the target drive.
16+
#
17+
# ROS 2 is auto-sourced on login. Run demos:
18+
# ros2 run turtlesim turtlesim_node &
19+
# ros2 run demo_nodes_cpp talker &
20+
# ros2 run demo_nodes_cpp listener &
21+
#
22+
# OpenVINO inference example:
23+
# ros2 launch openvino_node openvino_node.launch.py
24+
#
25+
# Gazebo Harmonic simulation:
26+
# gz sim shapes.sdf
27+
28+
# AI-searchable metadata for template discovery
29+
metadata:
30+
description: Bootable ISO installer for ROS 2 Jazzy robotics image with Intel OpenVINO, Gazebo Harmonic, RealSense, and Intel GPU/NPU support
31+
use_cases:
32+
- Full robotics development environment
33+
- ROS 2 Jazzy Desktop with all tools
34+
- Intel OpenVINO AI inference on robots
35+
- Gazebo Harmonic physics simulation
36+
- Intel RealSense depth camera integration
37+
- Collaborative SLAM (collab-slam-lze)
38+
- Intel GPU acceleration (Xe/UHD Graphics)
39+
- Intel NPU inference offload
40+
- Edge robotics deployments
41+
- Bootable USB installation media
42+
- Bare metal provisioning
43+
keywords:
44+
- robotics
45+
- ros2
46+
- jazzy
47+
- openvino
48+
- gazebo
49+
- harmonic
50+
- realsense
51+
- slam
52+
- intel
53+
- gpu
54+
- npu
55+
- level-zero
56+
- mesa
57+
- ubuntu
58+
- iso
59+
- bootable
60+
- installer
61+
62+
image:
63+
name: robotics-jazzy-ubuntu24
64+
version: "24.04"
65+
66+
target:
67+
os: ubuntu
68+
dist: ubuntu24
69+
arch: x86_64
70+
imageType: iso
71+
72+
packageRepositories:
73+
# ROS 2 Jazzy repository
74+
- codename: "noble"
75+
url: "http://packages.ros.org/ros2/ubuntu"
76+
pkey: "https://raw.githubusercontent.com/ros/rosdistro/master/ros.key"
77+
component: "main"
78+
79+
# Intel Edge Controls for Industrial (ECI) repository
80+
# Priority 1000 ensures ECI packages (systemd+ETF/taprio, PCL+oneAPI, FLANN+oneAPI)
81+
# are preferred over Ubuntu defaults when version strings differ.
82+
# No allowPackages filter — ECI packages have deep transitive dependency chains
83+
# that require many ECI-only sub-packages to satisfy.
84+
- codename: "isar"
85+
url: "https://eci.intel.com/repos/noble"
86+
pkey: "https://eci.intel.com/repos/gpg-keys/GPG-PUB-KEY-INTEL-ECI.gpg"
87+
component: "main"
88+
priority: 1000
89+
90+
# Intel AMR (Autonomous Mobile Robots) repository (uses ECI GPG key)
91+
# Priority 1001 (above ECI) — AMR packages override ECI when both provide the same package.
92+
- codename: "amr"
93+
url: "https://amrdocs.intel.com/repos/noble"
94+
pkey: "https://eci.intel.com/repos/gpg-keys/GPG-PUB-KEY-INTEL-ECI.gpg"
95+
component: "main"
96+
priority: 1001
97+
98+
# Intel OneAPI runtime repository
99+
- codename: "all"
100+
url: "https://apt.repos.intel.com/oneapi"
101+
pkey: "https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB"
102+
component: "main"
103+
104+
# Intel OpenVINO 2025 repository
105+
- codename: "ubuntu24"
106+
url: "https://apt.repos.intel.com/openvino/2025"
107+
pkey: "https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB"
108+
component: "main"
109+
110+
# Kisak Mesa PPA (latest Mesa drivers)
111+
- codename: "noble"
112+
url: "https://ppa.launchpadcontent.net/kisak/kisak-mesa/ubuntu"
113+
pkey: "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xEB8B81E14DA65431D7504EA8F63F0F2B90935439"
114+
component: "main"
115+
116+
# Kobuk Team Intel Graphics PPA
117+
- codename: "noble"
118+
url: "https://ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu"
119+
pkey: "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0C0E6AF955CE463C03FC51574D098D70AFBE5E1F"
120+
component: "main"
121+
122+
# Gazebo (OSRF) Harmonic stable repository
123+
- codename: "noble"
124+
url: "https://packages.osrfoundation.org/gazebo/ubuntu-stable"
125+
pkey: "https://packages.osrfoundation.org/gazebo.gpg"
126+
component: "main"
127+
128+
# Intel RealSense repository — NOT needed at build time.
129+
# All RealSense packages are installed on first boot via systemd oneshot service
130+
# (see configurations section). The first-boot script sets up the repo itself.
131+
132+
systemConfig:
133+
name: robotics-jazzy
134+
description: Intel Robotics AI Suite - Full ROS 2 Jazzy with OpenVINO, Gazebo, RealSense, and Intel GPU/NPU
135+
136+
immutability:
137+
enabled: false
138+
139+
packages:
140+
# ── Base system ──────────────────────────────────────────────────
141+
- ubuntu-minimal
142+
- ubuntu-desktop-minimal
143+
- systemd
144+
- systemd-resolved
145+
- systemd-boot
146+
- systemd-timesyncd
147+
- openssh-server
148+
- network-manager
149+
- sudo
150+
- curl
151+
- wget
152+
- vim
153+
- software-properties-common
154+
- gnupg
155+
- lsb-release
156+
- debconf-utils
157+
158+
# Boot / initramfs (required for UKI)
159+
- dracut-core
160+
- cryptsetup-bin
161+
162+
# ── ROS 2 Jazzy Desktop (full) ──────────────────────────────────
163+
- ros-jazzy-desktop
164+
165+
# ── Intel OpenVINO 2025 (pinned to 2025.3.0) ─────────────────────
166+
- openvino_2025.3.0.19807
167+
- ros-jazzy-openvino-wrapper-lib
168+
- ros-jazzy-openvino-node
169+
170+
# ── Intel GPU / Level Zero ──────────────────────────────────────
171+
- libze1
172+
- libze-intel-gpu1
173+
174+
# ── Gazebo Harmonic physics simulator ───────────────────────────
175+
- gz-harmonic
176+
177+
# ── Intel Robotics SDK ───────────────────────────────────────────
178+
- ros-jazzy-robotics-sdk
179+
180+
# ── Collaborative SLAM (Intel Xe / UHD GPU accelerated) ──────────
181+
- ros-jazzy-collab-slam-lze
182+
183+
# ── Intel RealSense camera ──────────────────────────────────────
184+
# Installed on first boot via systemd oneshot service (see configurations).
185+
# librealsense2-dkms requires DKMS which needs a live kernel to build modules;
186+
# cannot be built inside chroot. All RealSense packages are installed together
187+
# on first boot to ensure DKMS + userspace SDK are in sync.
188+
189+
# ── Mesa GPU stack (Intel Xe / UHD) ─────────────────────────────
190+
- libegl-mesa0
191+
- libgl1-mesa-dri
192+
- libgbm1
193+
- libglx-mesa0
194+
- mesa-libgallium
195+
- mesa-va-drivers
196+
- mesa-vdpau-drivers
197+
- mesa-vulkan-drivers
198+
- xwayland
199+
200+
# ── Firmware ────────────────────────────────────────────────────
201+
- linux-firmware
202+
203+
# ── Intel NPU (Neural Processing Unit) drivers ───────────────────
204+
- intel-level-zero-npu
205+
- intel-driver-compiler-npu
206+
207+
kernel:
208+
version: "6.17"
209+
cmdline: "console=ttyS0,115200 console=tty0 loglevel=7"
210+
packages:
211+
- linux-image-generic-hwe-24.04
212+
213+
configurations:
214+
# ── ROS 2 environment setup ────────────────────────────────────
215+
- cmd: "echo 'source /opt/ros/jazzy/setup.bash' >> /etc/bash.bashrc"
216+
- cmd: "echo 'export ROS_DOMAIN_ID=45' >> /etc/bash.bashrc"
217+
218+
# ── Post-deployment APT version pinning (protects against bad upgrades) ──
219+
# Note: Origin-based priority pins (ECI=1000, AMR=1001) are auto-generated
220+
# by the provider from packageRepositories.priority fields.
221+
# Only version-specific pins that the provider cannot generate are listed here.
222+
#
223+
# Block old FLANN 1.19.x from ECI (prefer Ubuntu's FLANN 1.9.2)
224+
- cmd: "printf 'Package: libflann*\\nPin: version 1.19.*\\nPin-Priority: -1\\n\\nPackage: flann*\\nPin: version 1.19.*\\nPin-Priority: -1\\n' > /etc/apt/preferences.d/eci-flann-block"
225+
# Pin OneAPI runtime deps to 2025.3.*
226+
- cmd: "printf 'Package: intel-oneapi-runtime-*\\nPin: version 2025.3.*\\nPin-Priority: 1001\\n' > /etc/apt/preferences.d/oneapi"
227+
# OpenVINO version pins (match init_jazzy.sh exactly)
228+
- cmd: "printf 'Package: openvino-libraries-dev\\nPin: version 2025.3.0*\\nPin-Priority: 1001\\n\\nPackage: openvino\\nPin: version 2025.3.0*\\nPin-Priority: 1001\\n\\nPackage: ros-jazzy-openvino-wrapper-lib\\nPin: version 2025.3.0*\\nPin-Priority: 1002\\n\\nPackage: ros-jazzy-openvino-node\\nPin: version 2025.3.0*\\nPin-Priority: 1002\\n' > /etc/apt/preferences.d/intel-openvino"
229+
# RealSense version pin
230+
- cmd: "printf 'Package: librealsense2*\\nPin: version 2.56.5-0~realsense.17055\\nPin-Priority: 1001\\n' > /etc/apt/preferences.d/librealsense"
231+
232+
# ── debconf pre-selections for OpenVINO node ─────────────────────
233+
- cmd: "echo 'ros-jazzy-openvino-node openvino-node/pip-proxy select true' | debconf-set-selections"
234+
- cmd: "echo 'ros-jazzy-openvino-node openvino-node/models select true' | debconf-set-selections"
235+
236+
# ── Intel NPU udev rules (render group access to /dev/accel/*) ──
237+
- cmd: "printf 'SUBSYSTEM==\"accel\", KERNEL==\"accel*\", GROUP=\"render\", MODE=\"0660\"\\n' > /etc/udev/rules.d/10-intel-vpu.rules"
238+
239+
# ── Intel RealSense first-boot installation ────────────────────
240+
# librealsense2-dkms requires DKMS (needs live kernel for module builds).
241+
# This creates a systemd oneshot that sets up the repo, installs all
242+
# RealSense packages (version-pinned via /etc/apt/preferences.d/librealsense),
243+
# then disables itself.
244+
- cmd: "printf '#!/bin/bash\\nset -euo pipefail\\nexport DEBIAN_FRONTEND=noninteractive\\nmkdir -p /etc/apt/keyrings\\ncurl -sSf https://librealsense.intel.com/Debian/librealsense.pgp -o /etc/apt/keyrings/librealsense.pgp\\necho \"deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo noble main\" > /etc/apt/sources.list.d/librealsense.list\\napt-get update\\napt-get install -y librealsense2-dkms librealsense2\\nsystemctl disable install-librealsense.service\\nrm -f /usr/local/bin/install-librealsense.sh\\n' > /usr/local/bin/install-librealsense.sh"
245+
- cmd: "chmod 755 /usr/local/bin/install-librealsense.sh"
246+
- cmd: "printf '[Unit]\\nDescription=Install Intel RealSense packages (first boot)\\nAfter=network-online.target\\nWants=network-online.target\\nConditionPathExists=/usr/local/bin/install-librealsense.sh\\n\\n[Service]\\nType=oneshot\\nExecStart=/usr/local/bin/install-librealsense.sh\\nEnvironment=DEBIAN_FRONTEND=noninteractive\\nTimeoutStartSec=0\\n\\n[Install]\\nWantedBy=multi-user.target\\n' > /etc/systemd/system/install-librealsense.service"
247+
- cmd: "systemctl enable install-librealsense.service"
248+
249+
# ── Enable required services ────────────────────────────────────
250+
- cmd: "systemctl enable NetworkManager"
251+
- cmd: "systemctl enable ssh"
252+
253+
# ── Set hostname ────────────────────────────────────────────────
254+
- cmd: "echo 'robotics-jazzy' > /etc/hostname"

0 commit comments

Comments
 (0)