# syntax=docker/dockerfile:1 # ============================================================================= # logcorrelator - Dockerfile de packaging unifié (DEB + RPM multi-distros) # ============================================================================= # ============================================================================= # Stage 1: Builder - Compilation du binaire Go # ============================================================================= FROM golang:1.21 AS builder WORKDIR /build # Install dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ git \ && rm -rf /var/lib/apt/lists/* # Copy go mod files COPY go.mod go.sum ./ RUN go mod download # Copy source code COPY . . # Build binary for Linux ARG VERSION=1.0.0 RUN mkdir -p dist && \ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-w -s" \ -o dist/logcorrelator \ ./cmd/logcorrelator # ============================================================================= # Stage 2: DEB Package builder # ============================================================================= FROM ruby:3.2-bookworm AS deb-package-builder WORKDIR /package # Install fpm and dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ rpm \ dpkg-dev \ fakeroot \ && rm -rf /var/lib/apt/lists/* \ && gem install fpm -v 1.16.0 # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service # Create directories and set permissions RUN mkdir -p /tmp/pkgroot/var/log/logcorrelator && \ mkdir -p /tmp/pkgroot/var/run/logcorrelator && \ mkdir -p /tmp/pkgroot/var/lib/logcorrelator && \ chmod 755 /tmp/pkgroot/usr/bin/logcorrelator && \ chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml && \ chmod 640 /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example && \ chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service && \ chmod 755 /tmp/pkgroot/var/log/logcorrelator && \ chmod 755 /tmp/pkgroot/var/run/logcorrelator # Copy maintainer scripts COPY packaging/deb/postinst /tmp/scripts/postinst COPY packaging/deb/prerm /tmp/scripts/prerm COPY packaging/deb/postrm /tmp/scripts/postrm RUN chmod 755 /tmp/scripts/* # Build DEB package ARG VERSION=1.0.0 ARG ARCH=amd64 RUN mkdir -p /packages/deb && \ fpm -s dir -t deb \ -n logcorrelator \ -v "${VERSION}" \ -C /tmp/pkgroot \ --architecture "${ARCH}" \ --description "Log correlation service for HTTP and network events" \ --url "https://github.com/logcorrelator/logcorrelator" \ --license "MIT" \ --vendor "logcorrelator " \ --maintainer "logcorrelator " \ --depends "systemd" \ --after-install /tmp/scripts/postinst \ --before-remove /tmp/scripts/prerm \ --after-remove /tmp/scripts/postrm \ -p /packages/deb/logcorrelator_${VERSION}_${ARCH}.deb \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ usr/share/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ etc/systemd/system/logcorrelator.service # ============================================================================= # Stage 3: RPM Package builder for CentOS 7 # ============================================================================= FROM centos:7 AS rpm-centos7-builder WORKDIR /package # Install RPM build tools and fpm RUN yum install -y epel-release && \ yum install -y ruby rubygems ruby-devel rpm-build gcc make && \ gem install fpm -v 1.16.0 --no-document && \ yum clean all # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service COPY packaging/rpm/post /tmp/scripts/post COPY packaging/rpm/preun /tmp/scripts/preun COPY packaging/rpm/postun /tmp/scripts/postun # Create directories and set permissions RUN mkdir -p /tmp/pkgroot/var/log/logcorrelator && \ mkdir -p /tmp/pkgroot/var/run/logcorrelator && \ mkdir -p /tmp/pkgroot/var/lib/logcorrelator && \ chmod 755 /tmp/pkgroot/usr/bin/logcorrelator && \ chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml && \ chmod 640 /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example && \ chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service && \ chmod 755 /tmp/scripts/* && \ chmod 755 /tmp/pkgroot/var/log/logcorrelator && \ chmod 755 /tmp/pkgroot/var/run/logcorrelator # Build RPM for CentOS 7 ARG VERSION=1.0.0 RUN mkdir -p /packages/rpm/centos7 && \ fpm -s dir -t rpm \ -n logcorrelator \ -v "${VERSION}" \ -C /tmp/pkgroot \ --architecture "x86_64" \ --rpm-os linux \ --description "Log correlation service for HTTP and network events" \ --url "https://github.com/logcorrelator/logcorrelator" \ --license "MIT" \ --vendor "logcorrelator " \ --rpm-dist el7 \ --depends "systemd" \ --after-install /tmp/scripts/post \ --before-remove /tmp/scripts/preun \ --after-remove /tmp/scripts/postun \ -p /packages/rpm/centos7/logcorrelator-${VERSION}-1.el7.x86_64.rpm \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ usr/share/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ etc/systemd/system/logcorrelator.service # ============================================================================= # Stage 4: RPM Package builder for Rocky Linux 8 # ============================================================================= FROM rockylinux:8 AS rpm-rocky8-builder WORKDIR /package # Install RPM build tools and fpm RUN dnf install -y epel-release && \ dnf install -y ruby rubygems ruby-devel rpm-build gcc make && \ gem install fpm -v 1.16.0 --no-document && \ dnf clean all # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service COPY packaging/rpm/post /tmp/scripts/post COPY packaging/rpm/preun /tmp/scripts/preun COPY packaging/rpm/postun /tmp/scripts/postun # Create directories and set permissions RUN mkdir -p /tmp/pkgroot/var/log/logcorrelator && \ mkdir -p /tmp/pkgroot/var/run/logcorrelator && \ mkdir -p /tmp/pkgroot/var/lib/logcorrelator && \ chmod 755 /tmp/pkgroot/usr/bin/logcorrelator && \ chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml && \ chmod 640 /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example && \ chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service && \ chmod 755 /tmp/scripts/* && \ chmod 755 /tmp/pkgroot/var/log/logcorrelator && \ chmod 755 /tmp/pkgroot/var/run/logcorrelator # Build RPM for Rocky Linux 8 ARG VERSION=1.0.0 RUN mkdir -p /packages/rpm/rocky8 && \ fpm -s dir -t rpm \ -n logcorrelator \ -v "${VERSION}" \ -C /tmp/pkgroot \ --architecture "x86_64" \ --rpm-os linux \ --description "Log correlation service for HTTP and network events" \ --url "https://github.com/logcorrelator/logcorrelator" \ --license "MIT" \ --vendor "logcorrelator " \ --rpm-dist el8 \ --depends "systemd" \ --after-install /tmp/scripts/post \ --before-remove /tmp/scripts/preun \ --after-remove /tmp/scripts/postun \ -p /packages/rpm/rocky8/logcorrelator-${VERSION}-1.el8.x86_64.rpm \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ usr/share/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ etc/systemd/system/logcorrelator.service # ============================================================================= # Stage 5: RPM Package builder for Rocky Linux 9 # ============================================================================= FROM rockylinux:9 AS rpm-rocky9-builder WORKDIR /package # Install RPM build tools and fpm RUN dnf install -y epel-release && \ dnf install -y ruby rubygems ruby-devel rpm-build gcc make && \ gem install fpm -v 1.16.0 --no-document && \ dnf clean all # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service COPY packaging/rpm/post /tmp/scripts/post COPY packaging/rpm/preun /tmp/scripts/preun COPY packaging/rpm/postun /tmp/scripts/postun # Create directories and set permissions RUN mkdir -p /tmp/pkgroot/var/log/logcorrelator && \ mkdir -p /tmp/pkgroot/var/run/logcorrelator && \ mkdir -p /tmp/pkgroot/var/lib/logcorrelator && \ chmod 755 /tmp/pkgroot/usr/bin/logcorrelator && \ chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml && \ chmod 640 /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example && \ chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service && \ chmod 755 /tmp/scripts/* && \ chmod 755 /tmp/pkgroot/var/log/logcorrelator && \ chmod 755 /tmp/pkgroot/var/run/logcorrelator # Build RPM for Rocky Linux 9 ARG VERSION=1.0.0 RUN mkdir -p /packages/rpm/rocky9 && \ fpm -s dir -t rpm \ -n logcorrelator \ -v "${VERSION}" \ -C /tmp/pkgroot \ --architecture "x86_64" \ --rpm-os linux \ --description "Log correlation service for HTTP and network events" \ --url "https://github.com/logcorrelator/logcorrelator" \ --license "MIT" \ --vendor "logcorrelator " \ --rpm-dist el9 \ --depends "systemd" \ --after-install /tmp/scripts/post \ --before-remove /tmp/scripts/preun \ --after-remove /tmp/scripts/postun \ -p /packages/rpm/rocky9/logcorrelator-${VERSION}-1.el9.x86_64.rpm \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ usr/share/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ etc/systemd/system/logcorrelator.service # ============================================================================= # Stage 6: RPM Package builder for Rocky Linux 10 # ============================================================================= FROM rockylinux:10 AS rpm-rocky10-builder WORKDIR /package # Install RPM build tools and fpm RUN dnf install -y epel-release && \ dnf install -y ruby rubygems ruby-devel rpm-build gcc make && \ gem install fpm -v 1.16.0 --no-document && \ dnf clean all # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service COPY packaging/rpm/post /tmp/scripts/post COPY packaging/rpm/preun /tmp/scripts/preun COPY packaging/rpm/postun /tmp/scripts/postun # Create directories and set permissions RUN mkdir -p /tmp/pkgroot/var/log/logcorrelator && \ mkdir -p /tmp/pkgroot/var/run/logcorrelator && \ mkdir -p /tmp/pkgroot/var/lib/logcorrelator && \ chmod 755 /tmp/pkgroot/usr/bin/logcorrelator && \ chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml && \ chmod 640 /tmp/pkgroot/usr/share/logcorrelator/logcorrelator.yml.example && \ chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service && \ chmod 755 /tmp/scripts/* && \ chmod 755 /tmp/pkgroot/var/log/logcorrelator && \ chmod 755 /tmp/pkgroot/var/run/logcorrelator # Build RPM for Rocky Linux 10 ARG VERSION=1.0.0 RUN mkdir -p /packages/rpm/rocky10 && \ fpm -s dir -t rpm \ -n logcorrelator \ -v "${VERSION}" \ -C /tmp/pkgroot \ --architecture "x86_64" \ --rpm-os linux \ --description "Log correlation service for HTTP and network events" \ --url "https://github.com/logcorrelator/logcorrelator" \ --license "MIT" \ --vendor "logcorrelator " \ --rpm-dist el10 \ --depends "systemd" \ --after-install /tmp/scripts/post \ --before-remove /tmp/scripts/preun \ --after-remove /tmp/scripts/postun \ -p /packages/rpm/rocky10/logcorrelator-${VERSION}-1.el10.x86_64.rpm \ usr/bin/logcorrelator \ etc/logcorrelator/logcorrelator.yml \ usr/share/logcorrelator/logcorrelator.yml.example \ var/log/logcorrelator \ var/run/logcorrelator \ etc/systemd/system/logcorrelator.service # ============================================================================= # Stage 7: Output - Image finale avec tous les packages # ============================================================================= FROM alpine:latest AS output WORKDIR /packages COPY --from=deb-package-builder /packages/deb/*.deb /packages/deb/ COPY --from=rpm-centos7-builder /packages/rpm/centos7/*.rpm /packages/rpm/centos7/ COPY --from=rpm-rocky8-builder /packages/rpm/rocky8/*.rpm /packages/rpm/rocky8/ COPY --from=rpm-rocky9-builder /packages/rpm/rocky9/*.rpm /packages/rpm/rocky9/ COPY --from=rpm-rocky10-builder /packages/rpm/rocky10/*.rpm /packages/rpm/rocky10/ CMD ["sh", "-c", "echo '=== DEB Packages ===' && ls -la /packages/deb/ && echo '' && echo '=== RPM CentOS 7 ===' && ls -la /packages/rpm/centos7/ && echo '' && echo '=== RPM Rocky Linux 8 ===' && ls -la /packages/rpm/rocky8/ && echo '' && echo '=== RPM Rocky Linux 9 ===' && ls -la /packages/rpm/rocky9/ && echo '' && echo '=== RPM Rocky Linux 10 ===' && ls -la /packages/rpm/rocky10/"]