Date: 2026-02-19
Branch: mrpollo/deb-package
Platform: Apple Silicon (aarch64 / arm64)
| Field | Value |
|---|---|
| Build container | ubuntu:24.04 + Tools/setup/ubuntu.sh --no-nuttx |
| Host arch | aarch64 (arm64) |
| Git describe | v1.17.0-alpha1-663-gb84a385e48d |
| .deb filename | px4-gazebo_1.17.0~alpha1-noble_arm64.deb |
| .deb size | 30,771,444 bytes (30 MB) |
| Installed size | ~5.2 GB (uncompressed, includes Gazebo models/worlds) |
# Inside ubuntu:24.04 container with /Dronecode mounted at same host path
RUNS_IN_DOCKER=true Tools/setup/ubuntu.sh --no-nuttx # installs Gazebo Harmonic + build tools
make px4_sitl_default
cd build/px4_sitl_default && cpack -G DEBNote (same as SIH): Worktree + submodule relative git paths require mounting the parent
Dronecode/directory at its exact host path inside the container.
Build container difference vs SIH:
px4io/px4-devdoes not include Gazebo. The Gazebo build must useubuntu:24.04and runubuntu.shfirst (matching CI), which pulls ~3 GB of Gazebo Harmonic packages from the OSRF PPA.
new Debian package, version 2.0.
size 30771444 bytes: control archive=11216 bytes.
952 bytes, 10 lines control
33232 bytes, 361 lines md5sums
82 bytes, 4 lines * postinst #!/bin/sh
108 bytes, 6 lines * postrm #!/bin/sh
Architecture: arm64
Depends: libc6, libstdc++6, gz-sim8-cli, libgz-sim8-plugins, libgz-physics7-dartsim,
gz-tools2, libc6 (>= 2.38), libgcc-s1 (>= 3.0), libglib2.0-0t64 (>= 2.12.0),
libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0),
libgz-common5 (>= 5.8.0), libgz-common5-graphics (>= 5.8.0),
libgz-math7 (>= 7.5.1), libgz-msgs10 (>= 10.3.2),
libgz-sensors8 (>= 8.2.2), libgz-sim8 (>= 8.10.0),
libgz-transport13 (>= 13.5.0), libopencv-calib3d406t64 (>= 4.6.0+dfsg),
libopencv-core406t64 (>= 4.6.0+dfsg), libopencv-features2d406t64 (>= 4.6.0+dfsg),
libopencv-imgproc406t64 (>= 4.6.0+dfsg), libopencv-video406t64 (>= 4.6.0+dfsg),
libprotobuf32t64 (>= 3.21.12), libsdformat14 (>= 14.8.0), libstdc++6 (>= 13.1)
Description: PX4 SITL autopilot with Gazebo Harmonic simulation resources
Maintainer: Daniel Agar <daniel@agar.ca>
Package: px4-gazebo
Priority: optional
Section: misc
Version: 1.17.0~alpha1-noble
Installed-Size: 5220162
drwxr-xr-x root/root 0 ./opt/px4-gazebo/
drwxr-xr-x root/root 0 ./opt/px4-gazebo/bin/
-rwxr-xr-x root/root 57599320 ./opt/px4-gazebo/bin/px4 (57 MB binary)
-rwxr-xr-x root/root 1551 ./opt/px4-gazebo/bin/px4-gazebo (wrapper script)
lrwxr-xr-x root/root 0 ./opt/px4-gazebo/bin/px4-alias.sh -> px4
... (90+ module symlinks)
drwxr-xr-x root/root 0 ./opt/px4-gazebo/etc/
drwxr-xr-x root/root 0 ./opt/px4-gazebo/share/gz/
drwxr-xr-x root/root 0 ./opt/px4-gazebo/share/gz/models/ (Gazebo models present)
drwxr-xr-x root/root 0 ./opt/px4-gazebo/share/gz/worlds/ (Gazebo worlds present)
The Gazebo runtime dependencies (gz-sim8-cli, libgz-sim8-plugins, etc.) are in the OSRF
PPA — not in the default Ubuntu repos. The OSRF PPA must be added before apt install.
curl -fsSL https://packages.osrfoundation.org/gazebo.gpg \
-o /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=arm64 signed-by=...] http://packages.osrfoundation.org/gazebo/ubuntu-stable noble main" \
> /etc/apt/sources.list.d/gazebo-stable.list
apt-get install -y /debs/px4-gazebo_*.deb # pulls ~500 MB Gazebo runtime deps| Check | Result |
|---|---|
| Package installs without errors | ✅ PASS |
/opt/px4-gazebo/bin/px4 exists and is executable (57 MB) |
✅ PASS |
/opt/px4-gazebo/bin/px4-gazebo wrapper script exists |
✅ PASS |
/usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo symlink |
✅ PASS |
/opt/px4-gazebo/share/gz/models/ present |
✅ PASS |
/opt/px4-gazebo/share/gz/worlds/ present |
✅ PASS |
/opt/px4-gazebo/etc/ ROMFS present |
✅ PASS |
px4 -h smoke test exits 0 |
✅ PASS |
Raw output:
Setting up px4-gazebo (1.17.0~alpha1-noble) ...
--- binary ---
-rwxr-xr-x 1 root root 57599320 Feb 19 21:55 /opt/px4-gazebo/bin/px4
--- wrapper ---
-rwxr-xr-x 1 root root 1551 Feb 19 04:12 /opt/px4-gazebo/bin/px4-gazebo
--- symlink ---
lrwxrwxrwx 1 root root 30 Feb 19 21:57 /usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo
--- Gazebo models --- PASS
--- Gazebo worlds --- PASS
--- etc (ROMFS) ---
extras init.d init.d-posix
export PATH=/opt/px4-gazebo/bin:$PATH
export PX4_SIM_MODEL=gz_x500
timeout 30 /opt/px4-gazebo/bin/px4 -d 2>&1 || truepx4 starting.
INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 ← startup confirmed
INFO [init] found model autostart file as SYS_AUTOSTART=4001
INFO [param] selected parameter default file parameters.bson
INFO [param] selected parameter backup file parameters_backup.bson
SYS_AUTOCONFIG: curr: 0 -> new: 1
SYS_AUTOSTART: curr: 0 -> new: 4001
...sensor calibration defaults...
INFO [dataman] data manager file './dataman' size is 1208528 bytes
INFO [init] Gazebo simulator 8.10.0 ← Gazebo version detected
INFO [init] Starting gazebo with world: /default.sdf
INFO [init] Starting gz gui
[Err] File [/default.sdf] resolved to path [/default.sdf] but the path does not exist
[Err] Failed to find world [/default.sdf]
INFO [init] Waiting for Gazebo world...
(repeated 9x over ~27 seconds)
PX4 Exiting...
ERROR [px4] Startup script returned with return value: 15 ← SIGTERM from timeout
| Item | Finding |
|---|---|
Startup confirmed (INFO [px4] startup script) |
✅ Yes |
| Gazebo version detected | ✅ Gazebo simulator 8.10.0 |
| Parameters loaded & airframe selected | ✅ SYS_AUTOSTART=4001 (gz_x500) |
| Gazebo world error | GZ_SIM_RESOURCE_PATH is unset |
| Clean exit | ✅ SIGTERM from timeout, ` |
PX4 launches Gazebo as a subprocess (gz sim /default.sdf) and waits for it to come up.
In a bare container with no display server and no GZ_SIM_RESOURCE_PATH configured, Gazebo
cannot locate the SDF world file. This is a Gazebo environment issue, not a PX4 packaging
issue — the px4 binary, ROMFS, models, and worlds are all correctly installed. A full runtime
test requires a display (Xvfb or host X11) and a proper GZ_SIM_RESOURCE_PATH pointing to
/opt/px4-gazebo/share/gz.
| Metric | px4 (SIH) |
px4-gazebo (Gazebo) |
|---|---|---|
| .deb size | 11.6 MB | 30 MB |
| Binary size | 52 MB | 57 MB |
| Install prefix | /opt/px4 |
/opt/px4-gazebo |
| Symlink | /usr/bin/px4 |
/usr/bin/px4-gazebo |
| Gazebo models/worlds | ✗ | ✅ |
| Runtime deps | libc6, libstdc++6 |
+ ~20 Gazebo/OpenCV libs |
| OSRF PPA required for install | No | Yes |
| Headless smoke test | ✅ Full startup |
| Criterion | Result |
|---|---|
| .deb builds without error | ✅ PASS |
Filename matches px4-gazebo_*-noble_arm64.deb |
✅ PASS |
Package: px4-gazebo, Gazebo deps in Depends field |
✅ PASS |
| Install checks (binary, wrapper, symlink, models, worlds, ROMFS) all PASS | ✅ PASS (7/7) |
| px4 starts and detects Gazebo 8.10.0 | ✅ PASS |
| Gazebo world load fails in headless container | |
| Clean exit on SIGTERM | ✅ PASS |
Finding: To fully validate the Gazebo runtime a display server (Xvfb) and
GZ_SIM_RESOURCE_PATH=/opt/px4-gazebo/share/gz are required. Package contents and install
are correct.
Same PATH finding as SIH: /opt/px4-gazebo/bin must be in PATH for rcS to source
px4-alias.sh. A /etc/profile.d/px4-gazebo.sh entry in the postinst would eliminate
this for end users.