create-deb.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/usr/bin/env bash
  2. # Assemble the smartbotic-automation .deb tree and run dpkg-deb.
  3. # Runs INSIDE the Docker build container after `cmake --build`.
  4. set -euo pipefail
  5. PROJECT_DIR="${PROJECT_DIR:-/build}"
  6. OUTPUT_DIR="${OUTPUT_DIR:-/packages}"
  7. VERSION="${BUILD_VERSION:-$(cat "$PROJECT_DIR/VERSION")}"
  8. REVISION="${BUILD_DEB_REVISION:-1}"
  9. ARCH="amd64"
  10. NAME="smartbotic-automation"
  11. PKG_VERSION="${VERSION}-${REVISION}"
  12. PKG_ROOT="$(mktemp -d)"
  13. trap "rm -rf $PKG_ROOT" EXIT
  14. # Directory layout inside the .deb
  15. install -d "$PKG_ROOT/DEBIAN"
  16. install -d "$PKG_ROOT/usr/bin"
  17. install -d "$PKG_ROOT/usr/share/$NAME/webui"
  18. install -d "$PKG_ROOT/usr/share/$NAME/nodes"
  19. install -d "$PKG_ROOT/usr/share/doc/$NAME"
  20. install -d "$PKG_ROOT/etc/$NAME"
  21. install -d "$PKG_ROOT/usr/lib/systemd/system"
  22. install -d "$PKG_ROOT/var/lib/$NAME"
  23. install -d "$PKG_ROOT/var/log/$NAME"
  24. # Binaries (stripped)
  25. install -m 0755 "$PROJECT_DIR/build/smartbotic-webserver" "$PKG_ROOT/usr/bin/"
  26. install -m 0755 "$PROJECT_DIR/build/smartbotic-runner" "$PKG_ROOT/usr/bin/"
  27. install -m 0755 "$PROJECT_DIR/build/smartbotic-migrate-nodes" "$PKG_ROOT/usr/bin/"
  28. strip --strip-all "$PKG_ROOT/usr/bin/smartbotic-webserver" \
  29. "$PKG_ROOT/usr/bin/smartbotic-runner" \
  30. "$PKG_ROOT/usr/bin/smartbotic-migrate-nodes" || true
  31. # WebUI bundle (normalize permissions: dirs 0755, files 0644)
  32. cp -r "$PROJECT_DIR/webui/dist/." "$PKG_ROOT/usr/share/$NAME/webui/"
  33. find "$PKG_ROOT/usr/share/$NAME/webui" -type d -exec chmod 0755 {} +
  34. find "$PKG_ROOT/usr/share/$NAME/webui" -type f -exec chmod 0644 {} +
  35. # Default workflow nodes (normalize permissions: dirs 0755, files 0644)
  36. cp -r "$PROJECT_DIR/nodes/." "$PKG_ROOT/usr/share/$NAME/nodes/"
  37. find "$PKG_ROOT/usr/share/$NAME/nodes" -type d -exec chmod 0755 {} +
  38. find "$PKG_ROOT/usr/share/$NAME/nodes" -type f -exec chmod 0644 {} +
  39. # Default configs (will become conffiles via DEBIAN/conffiles)
  40. install -m 0644 "$PROJECT_DIR/packaging/deb/config/webserver.json" "$PKG_ROOT/etc/$NAME/webserver.json"
  41. install -m 0644 "$PROJECT_DIR/packaging/deb/config/runner.json" "$PKG_ROOT/etc/$NAME/runner.json"
  42. install -m 0644 "$PROJECT_DIR/packaging/deb/config/env" "$PKG_ROOT/etc/$NAME/env"
  43. # Systemd units (modern path: usr/lib, not lib)
  44. install -m 0644 "$PROJECT_DIR/packaging/deb/systemd/$NAME-webserver.service" \
  45. "$PKG_ROOT/usr/lib/systemd/system/"
  46. install -m 0644 "$PROJECT_DIR/packaging/deb/systemd/$NAME-runner.service" \
  47. "$PKG_ROOT/usr/lib/systemd/system/"
  48. # Minimal copyright file (required by lintian)
  49. cat > "$PKG_ROOT/usr/share/doc/$NAME/copyright" <<EOF
  50. Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
  51. Upstream-Name: SmartBotic Automation
  52. Upstream-Contact: Ferenc Szontagh <ferenc.szontagh@smartbotics.ai>
  53. Source: https://smartbotics.ai
  54. Files: *
  55. Copyright: $(date +%Y) SmartBotics Kft.
  56. License: proprietary
  57. Proprietary software. All rights reserved.
  58. Unauthorized copying, distribution or modification is prohibited.
  59. EOF
  60. # Minimal changelog (required by lintian for non-native packages)
  61. printf "smartbotic-automation (%s) trixie; urgency=medium\n\n * Release %s\n\n -- Ferenc Szontagh <ferenc.szontagh@smartbotics.ai> %s\n" \
  62. "${PKG_VERSION}" "${VERSION}" "$(date -R)" \
  63. | gzip -9 -n > "$PKG_ROOT/usr/share/doc/$NAME/changelog.Debian.gz"
  64. # Maintainer scripts
  65. for script in preinst postinst prerm postrm; do
  66. install -m 0755 "$PROJECT_DIR/packaging/deb/scripts/$script" "$PKG_ROOT/DEBIAN/$script"
  67. done
  68. # Conffiles
  69. cat > "$PKG_ROOT/DEBIAN/conffiles" <<EOF
  70. /etc/$NAME/webserver.json
  71. /etc/$NAME/runner.json
  72. /etc/$NAME/env
  73. EOF
  74. # Render control file from template
  75. INSTALLED_SIZE=$(du -sk "$PKG_ROOT" --exclude=DEBIAN | cut -f1)
  76. sed -e "s/{{VERSION}}/${PKG_VERSION}/g" \
  77. -e "s/{{INSTALLED_SIZE}}/${INSTALLED_SIZE}/g" \
  78. "$PROJECT_DIR/packaging/deb/templates/control.smartbotic-automation" \
  79. > "$PKG_ROOT/DEBIAN/control"
  80. # Build the .deb
  81. mkdir -p "$OUTPUT_DIR"
  82. DEB_FILE="$OUTPUT_DIR/${NAME}_${PKG_VERSION}_${ARCH}.deb"
  83. dpkg-deb --build --root-owner-group "$PKG_ROOT" "$DEB_FILE"
  84. echo "Built: $DEB_FILE"
  85. ls -lh "$DEB_FILE"