Date: 2026-02-19
Branch: mrpollo/deb-package
Platform: Apple Silicon (aarch64 / arm64)
| 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) |
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
.gitfile contains a relative path that references the mainPX4-Autopilotrepo. The parentDronecode/directory must be mounted at the same absolute path inside the container so all relative git references resolve correctly.
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
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.
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
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:
rcSsourcespx4-alias.shvia. px4-alias.sh(no absolute path)./opt/px4/binmust be inPATHfor 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.
______ __ __ ___
| ___ \ \ \ / / / |
| |_/ / \ 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.
| 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.
| 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.