Skip to content

Instantly share code, notes, and snippets.

@mrpollo
Created February 19, 2026 18:13
Show Gist options
  • Select an option

  • Save mrpollo/4d552839c2ddc4fb24e5b93c8077e064 to your computer and use it in GitHub Desktop.

Select an option

Save mrpollo/4d552839c2ddc4fb24e5b93c8077e064 to your computer and use it in GitHub Desktop.

PX4 SIH .deb Package — Local Validation Report

Date: 2026-02-19 Branch: mrpollo/deb-package Platform: Apple Silicon (aarch64 / arm64)


1. Build Summary

Field Value
Build container px4io/px4-dev:v1.17.0-beta1
Host arch aarch64 (arm64)
Git describe v1.17.0-alpha1-663-gb84a385e48d
.deb filename px4_1.17.0~alpha1-noble_arm64.deb
.deb size 11,651,428 bytes (11.6 MB)
Installed size ~4.6 GB (uncompressed)

Build command

docker run --rm \
  -v /Users/rroche/Work/Dronecode:/Users/rroche/Work/Dronecode \
  -w /Users/rroche/Work/Dronecode/PX4-Autopilot-deb \
  px4io/px4-dev:v1.17.0-beta1 \
  bash -c "
    git config --global --add safe.directory /Users/rroche/Work/Dronecode/PX4-Autopilot-deb &&
    git config --global --add safe.directory /Users/rroche/Work/Dronecode/PX4-Autopilot &&
    make px4_sitl_sih &&
    cd build/px4_sitl_sih &&
    cpack -G DEB
  "

Note: The worktree's .git file contains a relative path that references the main PX4-Autopilot repo. The parent Dronecode/ directory must be mounted at the same absolute path inside the container so all relative git references resolve correctly.

dpkg-deb -I output

 new Debian package, version 2.0.
 size 11651428 bytes: control archive=5831 bytes.
     308 bytes,    10 lines      control
   14816 bytes,   174 lines      md5sums
      61 bytes,     4 lines   *  postinst             #!/bin/sh
     101 bytes,     6 lines   *  postrm               #!/bin/sh
 Architecture: arm64
 Depends: libc6, libstdc++6, libc6 (>= 2.38), libgcc-s1 (>= 3.0), libstdc++6 (>= 13.1)
 Description: PX4 SITL autopilot with SIH physics (no Gazebo)
 Maintainer: Daniel Agar <daniel@agar.ca>
 Package: px4
 Priority: optional
 Section: misc
 Version: 1.17.0~alpha1-noble
 Installed-Size: 4631974

dpkg-deb -c highlights (abbreviated)

drwxr-xr-x root/root         0 ./opt/px4/
drwxr-xr-x root/root         0 ./opt/px4/bin/
-rwxr-xr-x root/root  52697512 ./opt/px4/bin/px4
lrwxr-xr-x root/root         0 ./opt/px4/bin/px4-alias.sh -> px4          (and 80+ module symlinks)
drwxr-xr-x root/root         0 ./opt/px4/etc/
drwxr-xr-x root/root         0 ./opt/px4/etc/init.d/
drwxr-xr-x root/root         0 ./opt/px4/etc/init.d-posix/
drwxr-xr-x root/root         0 ./opt/px4/etc/extras/

No ./opt/px4/share/gz/ entries — Gazebo resources correctly absent.


2. Install Verification (ubuntu:24.04)

docker run --rm \
  -v .../build/px4_sitl_sih:/debs \
  ubuntu:24.04 \
  bash -c "apt-get install -y /debs/px4_*.deb && <checks>"
Check Result
Package installs without errors ✅ PASS
/opt/px4/bin/px4 exists and is executable (52 MB) ✅ PASS
/usr/bin/px4 -> /opt/px4/bin/px4 symlink created by postinst ✅ PASS
/opt/px4/share/gz/ does NOT exist (no Gazebo) ✅ PASS
/opt/px4/etc/ contains ROMFS (extras, init.d, init.d-posix) ✅ PASS

Raw output:

Setting up px4 (1.17.0~alpha1-noble) ...
--- binary ---
-rwxr-xr-x 1 root root 52697512 Feb 19 18:09 /opt/px4/bin/px4
--- symlink ---
lrwxrwxrwx 1 root root 16 Feb 19 18:10 /usr/bin/px4 -> /opt/px4/bin/px4
--- no Gazebo ---
PASS
--- etc (ROMFS) ---
extras
init.d
init.d-posix

3. Runtime Output (60-second smoke test)

docker run --rm \
  -v .../build/px4_sitl_sih:/debs \
  ubuntu:24.04 \
  bash -c "
    apt-get install -y /debs/px4_*.deb &&
    export PX4_SIM_MODEL=sihsim_quadx &&
    export PATH=/opt/px4/bin:$PATH &&   # px4-alias.sh must be in PATH for rcS
    mkdir -p /root/.local/share/px4/rootfs &&
    timeout 60 /usr/bin/px4 -d 2>&1 || true
  "

PATH note: rcS sources px4-alias.sh via . px4-alias.sh (no absolute path). /opt/px4/bin must be in PATH for this to resolve. This is a post-install step that a system-level shell profile (e.g. /etc/profile.d/px4.sh) would handle in production.

Full output

______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0    ← startup confirmed
INFO  [init] found model autostart file as SYS_AUTOSTART=10040
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: 10040
  CAL_ACC0_ID: curr: 0 -> new: 1310988
  CAL_GYRO0_ID: curr: 0 -> new: 1310988
  CAL_ACC1_ID: curr: 0 -> new: 1310996
  CAL_GYRO1_ID: curr: 0 -> new: 1310996
  CAL_ACC2_ID: curr: 0 -> new: 1311004
  CAL_GYRO2_ID: curr: 0 -> new: 1311004
  CAL_MAG0_ID: curr: 0 -> new: 197388
  CAL_MAG0_PRIO: curr: -1 -> new: 50
  CAL_MAG1_ID: curr: 0 -> new: 197644
  CAL_MAG1_PRIO: curr: -1 -> new: 50
  SENS_BOARD_X_OFF: curr: 0.0000 -> new: 0.0000
  SENS_DPRES_OFF: curr: 0.0000 -> new: 0.0010
INFO  [dataman] data manager file './dataman' size is 1208528 bytes
INFO  [init] SIH simulator
INFO  [simulator_sih] Simulation loop with 250 Hz (4000 us sim time interval)
INFO  [simulator_sih] Simulation with 1.0x speedup. Loop with (4000 us wall time interval)
INFO  [lockstep_scheduler] setting initial absolute time to 4000 us
INFO  [commander] LED: open /dev/led0 failed (22)                ← expected in container (no LED dev)
INFO  [uxrce_dds_client] init UDP agent IP:127.0.0.1, port:8888
INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 18570 remote port 14550
INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540
INFO  [mavlink] mode: Onboard, data rate: 4000 B/s on udp port 14280 remote port 14030
INFO  [mavlink] mode: Gimbal, data rate: 400000 B/s on udp port 13030 remote port 13280
INFO  [tone_alarm] home set
INFO  [mavlink] mode: Custom, data rate: 400000 B/s on udp port 19450 remote port 19410
INFO  [logger] logger started (mode=all)
INFO  [logger] Start file log (type: full)
INFO  [logger] [logger] ./log/2026-02-19/18_11_03.ulg
INFO  [logger] Opened full log file: ./log/2026-02-19/18_11_03.ulg
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [mavlink] MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)
INFO  [px4] Startup script returned successfully
INFO  [commander] Ready for takeoff!                             ← clean startup reached

PX4 Exiting...
Exiting NOW.

Log analysis

Item Finding
Startup confirmed (INFO [px4] startup script) ✅ Yes
ERROR lines ⚠️ commander: LED: open /dev/led0 failed (22) — expected, no /dev/led0 in container
WARN lines None
SIH simulator started INFO [simulator_sih] Simulation loop with 250 Hz
Reached "Ready for takeoff!" ✅ Yes
Clean shutdown PX4 Exiting... / Exiting NOW.

Runtime note: With -d flag (daemon/no-shell mode), px4 runs the startup script and then exits once stdin closes. For a persistent 60-second run, px4 would need to be started without -d or with a persistent sim client attached. The startup sequence is fully validated.


4. Verdict

✅ OVERALL PASS

Criterion Result
.deb builds without error ✅ PASS
Filename matches px4_*-noble_arm64.deb ✅ PASS — px4_1.17.0~alpha1-noble_arm64.deb
dpkg-deb -I shows Package: px4, Depends: libc6, libstdc++6 ✅ PASS
Install checks (binary, symlink, no Gazebo, ROMFS) all PASS ✅ PASS (5/5)
px4 starts with INFO [px4] lines ✅ PASS
Reaches "Ready for takeoff!" ✅ PASS
Clean exit ✅ PASS
No unexpected ERROR lines ✅ PASS (LED error is expected in containerized environment)

One finding for follow-up: /opt/px4/bin must be in PATH for rcS to source px4-alias.sh. A /etc/profile.d/px4.sh snippet in the postinst would eliminate the manual PATH export for end users.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment