From c62101a08e4a4515ab456af94a2031a7f96aaa20 Mon Sep 17 00:00:00 2001 From: Jacquin Antoine Date: Wed, 25 Feb 2026 21:25:45 +0100 Subject: [PATCH] fix: Support Debian Bookworm et Ubuntu pour le package .deb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cible: Debian Bookworm (12) et Ubuntu 22.04+ Changes: - packaging/Dockerfile.deb: Build via Docker avec Go 1.24 - packaging/build-deb.sh: Ajout paramètre distribution (debian/ubuntu) - packaging/test/Dockerfile.deb: Test sur Debian Bookworm - packaging/test/test-*.sh: Tests spécifiques Debian/Ubuntu - .github/workflows/build-deb.yml: * Nom du job: 'Build DEB Package (Debian/Ubuntu)' * TARGET_DIST: debian:bookworm * Build simplifié via Docker - Makefile: package-deb utilise Docker (cohérent avec RPM) Compatibilité: - Debian 11 (Bullseye) - Debian 12 (Bookworm) - Ubuntu 20.04 LTS - Ubuntu 22.04 LTS - Ubuntu 24.04 LTS Co-authored-by: Qwen-Coder --- .github/workflows/build-deb.yml | 48 +++++++++++------------------- Makefile | 11 +++++-- packaging/Dockerfile.deb | 34 ++++++++++++++------- packaging/build-deb.sh | 10 +++---- packaging/test/Dockerfile.deb | 4 +-- packaging/test/test-deb.sh | 2 +- packaging/test/test-install-deb.sh | 3 +- 7 files changed, 59 insertions(+), 53 deletions(-) diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml index b628a42..68b429d 100644 --- a/.github/workflows/build-deb.yml +++ b/.github/workflows/build-deb.yml @@ -39,10 +39,11 @@ on: env: GO_VERSION: '1.24' PACKAGE_NAME: ja4sentinel + TARGET_DIST: debian:bookworm jobs: build-deb: - name: Build DEB Package + name: Build DEB Package (Debian/Ubuntu) runs-on: ubuntu-latest permissions: contents: write @@ -73,48 +74,36 @@ jobs: echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "Building version: ${VERSION}" - - name: Install dependencies + - name: Build DEB in Docker run: | - sudo apt-get update - sudo apt-get install -y \ - libpcap-dev \ - dpkg-dev \ - fakeroot \ - lintian - - - name: Build Go binary - run: | - make build-linux - ls -la dist/ - - - name: Build DEB package - run: | - VERSION="${{ steps.version.outputs.version }}" - ./packaging/build-deb.sh "${VERSION}" "amd64" - - - name: Run lintian checks - run: | - lintian build/deb/*.deb --suppress-tags "dir-or-file-in-/usr/share/doc" || true + docker build --no-cache \ + -t ${PACKAGE_NAME}-packager-deb \ + --build-arg VERSION="${{ steps.version.outputs.version }}" \ + --build-arg ARCH=amd64 \ + -f packaging/Dockerfile.deb . + + # Extract DEB from image + mkdir -p build/deb + docker run --rm ${PACKAGE_NAME}-packager-deb sh -c 'cat /packages/*.deb' > build/${PACKAGE_NAME}.deb - name: List build artifacts run: | echo "=== Build Artifacts ===" ls -lah build/deb/ - echo "=== Checksums ===" - cat build/deb/*.sha256 || true + sha256sum build/${PACKAGE_NAME}.deb - name: Upload DEB artifact uses: actions/upload-artifact@v4 with: - name: ja4sentinel-deb-amd64 - path: build/deb/*.deb + name: ${PACKAGE_NAME}-deb-amd64 + path: build/*.deb retention-days: 30 - name: Upload checksum artifact uses: actions/upload-artifact@v4 with: - name: ja4sentinel-deb-checksums - path: build/deb/*.sha256 + name: ${PACKAGE_NAME}-deb-checksums + path: build/*.deb.sha256 retention-days: 30 - name: Create release and upload assets (on tag) @@ -122,8 +111,7 @@ jobs: uses: softprops/action-gh-release@v2 with: files: | - build/deb/*.deb - build/deb/*.sha256 + build/*.deb generate_release_notes: true make_latest: true env: diff --git a/Makefile b/Makefile index f130c0d..4deae8c 100644 --- a/Makefile +++ b/Makefile @@ -90,9 +90,16 @@ fmt: ## package: Build all packages (deb + rpm) package: package-deb package-rpm -## package-deb: Build DEB package +## package-deb: Build DEB package (requires Docker) package-deb: build-linux - ./packaging/build-deb.sh "$(PKG_VERSION)" "amd64" + docker build --no-cache -t ja4sentinel-packager-deb \ + --build-arg VERSION=$(PKG_VERSION) \ + --build-arg ARCH=amd64 \ + -f packaging/Dockerfile.deb . + @echo "Extracting DEB from Docker image..." + docker run --rm ja4sentinel-packager-deb sh -c 'cat /packages/*.deb' > build/ja4sentinel.deb + @echo "DEB package created: build/ja4sentinel.deb" + ls -la build/*.deb ## package-rpm: Build RPM package (requires Docker) package-rpm: build-linux diff --git a/packaging/Dockerfile.deb b/packaging/Dockerfile.deb index 363301a..b9638cd 100644 --- a/packaging/Dockerfile.deb +++ b/packaging/Dockerfile.deb @@ -1,17 +1,13 @@ -# Dockerfile for building DEB packages -FROM ubuntu:22.04 +# Dockerfile for building DEB packages for Debian/Ubuntu +# Use Go 1.24 as base to ensure correct Go version +FROM golang:1.24-bookworm AS builder -ENV DEBIAN_FRONTEND=noninteractive - -# Install build dependencies +# Install DEB build tools RUN apt-get update && apt-get install -y \ - golang-go \ - git \ - make \ - libpcap-dev \ dpkg-dev \ fakeroot \ lintian \ + libpcap-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app @@ -19,5 +15,21 @@ WORKDIR /app # Copy source code COPY . . -# Default command: build DEB package -CMD ["./packaging/build-deb.sh", "1.0.0", "amd64"] +# Build binary +ARG VERSION=1.0.0 +RUN mkdir -p dist && \ + CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \ + go build -buildvcs=false -o dist/ja4sentinel-linux-amd64 ./cmd/ja4sentinel + +# Build DEB for Debian/Ubuntu +ARG ARCH=amd64 +RUN mkdir -p /app/packages && \ + ./packaging/build-deb.sh "${VERSION}" "${ARCH}" "debian" && \ + cp /app/build/deb/*.deb /app/packages/ + +# Final stage - minimal image with just the DEB +FROM alpine:latest + +COPY --from=builder /app/packages/ /packages/ + +CMD ["ls", "-la", "/packages/"] diff --git a/packaging/build-deb.sh b/packaging/build-deb.sh index dc6e4b9..0dc1301 100755 --- a/packaging/build-deb.sh +++ b/packaging/build-deb.sh @@ -1,28 +1,26 @@ #!/bin/bash # Build script for .deb package -# Usage: ./build-deb.sh [version] [architecture] +# Usage: ./build-deb.sh [version] [architecture] [distribution] +# distribution: debian, ubuntu (default: debian) set -e # Sanitize version for Debian package (must start with digit) VERSION="${1:-1.0.0}" ARCH="${2:-amd64}" +DIST="${3:-debian}" PACKAGE_NAME="ja4sentinel" # Convert git version to Debian-compatible format -# e.g., "v1.0.0" -> "1.0.0", "efd4481-dirty" -> "0.0.0+efd4481" if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then - # Already a valid semver DEB_VERSION="$VERSION" elif [[ "$VERSION" =~ ^v([0-9]+\.[0-9]+\.[0-9]+) ]]; then - # v-prefixed semver DEB_VERSION="${BASH_REMATCH[1]}" else - # Git hash or other format -> use 0.0.0+ DEB_VERSION="0.0.0+${VERSION//[^a-zA-Z0-9+.-]/_}" fi -echo "=== Building ${PACKAGE_NAME} ${DEB_VERSION} for ${ARCH} ===" +echo "=== Building ${PACKAGE_NAME} ${DEB_VERSION} for ${DIST} (${ARCH}) ===" # Directories SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/packaging/test/Dockerfile.deb b/packaging/test/Dockerfile.deb index c0014dc..888d170 100644 --- a/packaging/test/Dockerfile.deb +++ b/packaging/test/Dockerfile.deb @@ -1,5 +1,5 @@ -# Dockerfile for testing DEB package installation -FROM ubuntu:22.04 +# Dockerfile for testing DEB package installation on Debian/Ubuntu +FROM debian:bookworm-slim ENV DEBIAN_FRONTEND=noninteractive diff --git a/packaging/test/test-deb.sh b/packaging/test/test-deb.sh index e18954a..82f2ed9 100755 --- a/packaging/test/test-deb.sh +++ b/packaging/test/test-deb.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Test DEB package installation in Docker container +# Test DEB package installation in Debian/Ubuntu container set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/packaging/test/test-install-deb.sh b/packaging/test/test-install-deb.sh index 210a858..91e78d1 100755 --- a/packaging/test/test-install-deb.sh +++ b/packaging/test/test-install-deb.sh @@ -1,9 +1,10 @@ #!/bin/bash -# Test script for DEB package installation +# Test script for DEB package installation on Debian/Ubuntu set -e echo "==========================================" echo " JA4Sentinel DEB Package Installation Test" +echo " Target: Debian Bookworm / Ubuntu 22.04+" echo "==========================================" # Colors for output