- Remove debian/compat file (conflicts with Build-Depends) - Fix debian/install to use correct readme.md filename - Update verify-deb.sh to mark debian/compat as optional - Add -Zgzip flag to dpkg-buildpackage for compatibility (uses gzip instead of zstd for better compatibility) - Update verify-deb.sh to check optional vs required files Package now builds and installs successfully on systems without zstd support.
185 lines
4.6 KiB
Bash
Executable File
185 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Automated verification script for Debian package
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo "======================================================================"
|
|
echo " Sensorpajen Debian Package Verification"
|
|
echo "======================================================================"
|
|
echo ""
|
|
|
|
# Check dependencies
|
|
echo -n "Checking for dpkg-deb... "
|
|
if command -v dpkg-deb >/dev/null 2>&1; then
|
|
echo -e "${GREEN}OK${NC}"
|
|
else
|
|
echo -e "${RED}MISSING${NC}"
|
|
echo "Install with: sudo apt install dpkg-dev"
|
|
exit 1
|
|
fi
|
|
|
|
echo -n "Checking for lintian... "
|
|
if command -v lintian >/dev/null 2>&1; then
|
|
echo -e "${GREEN}OK${NC}"
|
|
else
|
|
echo -e "${YELLOW}MISSING${NC}"
|
|
echo "Install with: sudo apt install lintian"
|
|
echo "Continuing without lintian checks..."
|
|
SKIP_LINTIAN=1
|
|
fi
|
|
|
|
echo -n "Checking for debhelper... "
|
|
if dpkg -l debhelper >/dev/null 2>&1; then
|
|
echo -e "${GREEN}OK${NC}"
|
|
else
|
|
echo -e "${YELLOW}MISSING${NC}"
|
|
echo "Install with: sudo apt install debhelper"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Get project root
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Check required files exist
|
|
echo "Checking required files..."
|
|
REQUIRED_FILES=(
|
|
"debian/control"
|
|
"debian/rules"
|
|
"debian/install"
|
|
"debian/changelog"
|
|
"debian/postinst"
|
|
"debian/prerm"
|
|
"debian/postrm"
|
|
"debian/sensorpajen.service"
|
|
"src/sensorpajen/main.py"
|
|
"pyproject.toml"
|
|
)
|
|
|
|
# Optional files (debian/compat is now optional - use Build-Depends instead)
|
|
OPTIONAL_FILES=(
|
|
"debian/compat"
|
|
)
|
|
|
|
ALL_FILES_OK=1
|
|
for file in "${REQUIRED_FILES[@]}"; do
|
|
echo -n " $file... "
|
|
if [ -f "$file" ]; then
|
|
echo -e "${GREEN}OK${NC}"
|
|
else
|
|
echo -e "${RED}MISSING${NC}"
|
|
ALL_FILES_OK=0
|
|
fi
|
|
done
|
|
|
|
# Check optional files
|
|
for file in "${OPTIONAL_FILES[@]}"; do
|
|
echo -n " $file... "
|
|
if [ -f "$file" ]; then
|
|
echo -e "${GREEN}OK${NC}"
|
|
else
|
|
echo -e "${YELLOW}OPTIONAL${NC}"
|
|
fi
|
|
done
|
|
|
|
if [ $ALL_FILES_OK -eq 0 ]; then
|
|
echo -e "${RED}Some required files are missing!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Extract version from pyproject.toml
|
|
VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
|
|
echo "Package version: $VERSION"
|
|
echo ""
|
|
|
|
# Clean previous builds
|
|
echo "Cleaning previous builds..."
|
|
rm -f ../*.deb ../*.build ../*.buildinfo ../*.changes
|
|
rm -rf debian/.debhelper debian/sensorpajen debian/files
|
|
|
|
# Build the package with gzip compression (for compatibility)
|
|
echo "Building Debian package..."
|
|
echo "======================================================================"
|
|
dpkg-buildpackage -us -uc -b -Zgzip
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}Build failed!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}Build successful!${NC}"
|
|
echo ""
|
|
|
|
# Find the built package
|
|
DEB_FILE=$(ls -t ../*.deb 2>/dev/null | head -1)
|
|
|
|
if [ -z "$DEB_FILE" ]; then
|
|
echo -e "${RED}No .deb file found!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Package: $DEB_FILE"
|
|
echo ""
|
|
|
|
# Show package contents
|
|
echo "Package contents:"
|
|
echo "======================================================================"
|
|
dpkg-deb -c "$DEB_FILE" | head -20
|
|
TOTAL_FILES=$(dpkg-deb -c "$DEB_FILE" | wc -l)
|
|
if [ $TOTAL_FILES -gt 20 ]; then
|
|
echo "... and $(($TOTAL_FILES - 20)) more files"
|
|
fi
|
|
echo ""
|
|
|
|
# Show package info
|
|
echo "Package information:"
|
|
echo "======================================================================"
|
|
dpkg-deb -I "$DEB_FILE"
|
|
echo ""
|
|
|
|
# Run lintian if available
|
|
if [ -z "$SKIP_LINTIAN" ]; then
|
|
echo "Running lintian checks..."
|
|
echo "======================================================================"
|
|
|
|
# Run lintian - allow warnings but fail on errors
|
|
if lintian "$DEB_FILE"; then
|
|
echo -e "${GREEN}Lintian passed!${NC}"
|
|
else
|
|
LINTIAN_EXIT=$?
|
|
echo -e "${YELLOW}Lintian found issues (exit code: $LINTIAN_EXIT)${NC}"
|
|
echo "Review the output above. Warnings are acceptable, errors should be fixed."
|
|
fi
|
|
echo ""
|
|
fi
|
|
|
|
# Final summary
|
|
echo "======================================================================"
|
|
echo -e "${GREEN}Package verification complete!${NC}"
|
|
echo "======================================================================"
|
|
echo ""
|
|
echo "Package location: $DEB_FILE"
|
|
echo ""
|
|
echo "To install on a Raspberry Pi:"
|
|
echo " scp $DEB_FILE pi@raspberrypi:~/"
|
|
echo " ssh pi@raspberrypi"
|
|
echo " sudo apt install ./$(basename $DEB_FILE)"
|
|
echo ""
|
|
echo "To test locally (not recommended, will modify /opt and /etc):"
|
|
echo " sudo apt install $DEB_FILE"
|
|
echo ""
|
|
|
|
exit 0
|