From 7d3740f79f7bdf4a1e5d55704eb4165f630c2659 Mon Sep 17 00:00:00 2001 From: Eric Katzfey Date: Wed, 23 Oct 2024 00:40:04 -0700 Subject: [PATCH] AP_HAL_QURT: Add Debian packaging script and support files --- libraries/AP_HAL_QURT/packaging/.gitignore | 5 + .../AP_HAL_QURT/packaging/make_package.sh | 100 ++++++++++++++++++ .../packaging/pkg/control/control.in | 8 ++ .../packaging/pkg/control/postinst | 39 +++++++ 4 files changed, 152 insertions(+) create mode 100644 libraries/AP_HAL_QURT/packaging/.gitignore create mode 100755 libraries/AP_HAL_QURT/packaging/make_package.sh create mode 100644 libraries/AP_HAL_QURT/packaging/pkg/control/control.in create mode 100755 libraries/AP_HAL_QURT/packaging/pkg/control/postinst diff --git a/libraries/AP_HAL_QURT/packaging/.gitignore b/libraries/AP_HAL_QURT/packaging/.gitignore new file mode 100644 index 0000000000000..eaa90ca25d79c --- /dev/null +++ b/libraries/AP_HAL_QURT/packaging/.gitignore @@ -0,0 +1,5 @@ +*.deb +pkg/DEB +pkg/data +pkg/control/control + diff --git a/libraries/AP_HAL_QURT/packaging/make_package.sh b/libraries/AP_HAL_QURT/packaging/make_package.sh new file mode 100755 index 0000000000000..839450217ce26 --- /dev/null +++ b/libraries/AP_HAL_QURT/packaging/make_package.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +set -e # exit on error to prevent bad ipk from being generated + +[ $# -eq 2 ] || { + echo "Usage: make_package.sh VEHICLETYPE VEHICLE_BINARY" + exit 1 +} + +VEHICLETYPE="$1" +VEHICLE_BINARY="$2" + +[ -d $VEHICLETYPE ] || { + echo "Vehicle directory $VEHICLETYPE not found" + exit 1 +} + +# get version numbers +FW_MAJOR=$(grep FW_MAJOR $VEHICLETYPE/version.h | cut -d' ' -f3) +FW_MINOR=$(grep FW_MINOR $VEHICLETYPE/version.h | cut -d' ' -f3) +FW_PATCH=$(grep FW_PATCH $VEHICLETYPE/version.h | cut -d' ' -f3) +GIT_VERSION=$(git rev-parse HEAD | cut -c1-8) + +VERSION="${FW_MAJOR}.${FW_MINOR}.${FW_PATCH}-${GIT_VERSION}" + +echo "Package Name: " $PACKAGE +echo "version Number: " $VERSION + +cd libraries/AP_HAL_QURT/packaging + +cat pkg/control/control.in | sed "s/FW_VERSION/$VERSION/g" > pkg/control/control + +################################################################################ +# variables +################################################################################ +PACKAGE=$(cat pkg/control/control | grep "Package" | cut -d' ' -f 2) + +DATA_DIR=pkg/data +CONTROL_DIR=pkg/control +DEB_DIR=pkg/DEB + +################################################################################ +# start with a little cleanup to remove old files +################################################################################ +# remove data directory where 'make install' installed to +sudo rm -rf $DATA_DIR +mkdir $DATA_DIR + +# remove deb packaging folders +rm -rf $DEB_DIR + +################################################################################ +## install compiled stuff into data directory +################################################################################ + +if [ -f ../../../build/QURT/ardupilot ] && \ + [ -f ../../../build/QURT/bin/$VEHICLE_BINARY ]; then + + # Copy the SLPI DSP AP library + sudo mkdir -p $DATA_DIR/usr/lib/rfsa/adsp + sudo cp ../../../build/QURT/bin/$VEHICLE_BINARY $DATA_DIR/usr/lib/rfsa/adsp/ArduPilot.so + + # Install executables + sudo mkdir -p $DATA_DIR/usr/bin + sudo cp ../../../build/QURT/ardupilot $DATA_DIR/usr/bin + sudo cp ../ap_host/service/voxl-ardupilot $DATA_DIR/usr/bin + sudo chmod a+x $DATA_DIR/usr/bin/ardupilot + sudo chmod a+x $DATA_DIR/usr/bin/voxl-ardupilot + + # Create necessary directories for ArduPilot operation + sudo mkdir -p $DATA_DIR/data/APM + + # Install default parameter files + sudo cp ../../../Tools/Frame_params/ModalAI/*.parm $DATA_DIR/data/APM + + sudo mkdir -p $DATA_DIR/etc/systemd/system/ + sudo cp ../ap_host/service/voxl-ardupilot.service $DATA_DIR/etc/systemd/system/ + +else + echo "Error: Build artifacts not found" + exit 1 +fi + +################################################################################ +# make a DEB package +################################################################################ + +echo "starting building Debian Package" + +## make a folder dedicated to Deb building and copy the requires debian-binary file in +mkdir $DEB_DIR + +## copy the control stuff in +cp -rf $CONTROL_DIR/ $DEB_DIR/DEBIAN +cp -rf $DATA_DIR/* $DEB_DIR + +DEB_NAME="${PACKAGE}_${VEHICLETYPE}_${VERSION}_arm64.deb" +dpkg-deb --build "${DEB_DIR}" "${DEB_NAME}" + +echo "DONE" diff --git a/libraries/AP_HAL_QURT/packaging/pkg/control/control.in b/libraries/AP_HAL_QURT/packaging/pkg/control/control.in new file mode 100644 index 0000000000000..1ad0196bdf57b --- /dev/null +++ b/libraries/AP_HAL_QURT/packaging/pkg/control/control.in @@ -0,0 +1,8 @@ +Package: voxl-ardupilot +Version: FW_VERSION +Section: devel +Priority: optional +Architecture: arm64 +Depends: modalai-slpi(>=1.1.19), libslpi-link +Maintainer: Eric Katzfey +Description: ModalAI ArduPilot flight controller diff --git a/libraries/AP_HAL_QURT/packaging/pkg/control/postinst b/libraries/AP_HAL_QURT/packaging/pkg/control/postinst new file mode 100755 index 0000000000000..04f668085e805 --- /dev/null +++ b/libraries/AP_HAL_QURT/packaging/pkg/control/postinst @@ -0,0 +1,39 @@ +#!/bin/bash + +# Create directory for APM use +cd /data +mkdir -p APM +chown system:system APM + +# Make sure the run scripts are executable +cd /usr/bin +chmod a+x voxl-ardupilot + +# Check to see if a DSP test signature exists +if /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then + /bin/echo "Found DSP signature file" +else + /bin/echo "Could not find DSP signature file" + # Look for the DSP signature generation script + if [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then + /bin/echo "Attempting to generate the DSP signature file" + # Automatically generate the test signature so that px4 can run on SLPI DSP + /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh + else + /bin/echo "Could not find the DSP signature file generation script" + fi +fi + +# Always flush all changes to disk +/bin/sync + +cd - + +# try to reload services, but don't fail if it can't +set +e +if [ -f /bin/systemctl ]; then + systemctl daemon-reload +fi + +# exit 0 even if systemctl failed +exit 0