# syntax=docker/dockerfile:1 # ============================================================================= # logcorrelator - Dockerfile de build et packaging RPM multi-distros # Build avec rpmbuild natif (plus FPM) # ============================================================================= # ============================================================================= # Stage 0: Common RPM tools - Shared across all distributions # ============================================================================= FROM rockylinux:8 AS rpm-common-tools WORKDIR /package # Install RPM build tools (rpm-build only, no FPM) RUN --mount=type=cache,target=/var/cache/dnf \ dnf install -y rpm-build rpmdevtools findutils -y && \ dnf clean all # Common script to build RPM with rpmbuild COPY <<'EOF' /build-rpm.sh #!/bin/bash set -e DIST_NAME=$1 VERSION=$2 echo "Building RPM for ${DIST_NAME}..." # Setup rpmbuild directory structure mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} # Copy spec file cp /build/packaging/rpm/logcorrelator.spec /root/rpmbuild/SPECS/ # Copy files directly to BUILD directory (no archive needed) # This is simpler than creating/extracting a source archive cp -r /tmp/pkgroot/* /root/rpmbuild/BUILD/ # Build RPM using rpmbuild # Use --noclean to keep BUILD directory contents # Use --rpmdir to output RPMs directly to /packages/rpm/${DIST_NAME}/ rpmbuild -bb /root/rpmbuild/SPECS/logcorrelator.spec \ --define "version ${VERSION}" \ --define "dist .${DIST_NAME}" \ --define "_topdir /root/rpmbuild" \ --define "_rpmdir /packages/rpm/${DIST_NAME}" \ --noclean # RPMs are already in /packages/rpm/${DIST_NAME}/ echo "RPM built for ${DIST_NAME}:" ls -la /packages/rpm/${DIST_NAME}/ EOF RUN chmod +x /build-rpm.sh # ============================================================================= # Stage 1: Builder - Compilation du binaire Go # ============================================================================= FROM golang:1.21 AS builder WORKDIR /build # Install minimal dependencies for Go build RUN --mount=type=cache,target=/var/cache/apt \ 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 ./ # Download dependencies (cached) RUN --mount=type=cache,target=/go/pkg/mod \ go mod download # Copy source code COPY . . # Build binary for Linux ARG VERSION=1.0.0 RUN --mount=type=cache,target=/go/pkg/mod \ mkdir -p dist && \ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-w -s -X main.Version=${VERSION}" \ -o dist/logcorrelator \ ./cmd/logcorrelator # ============================================================================= # Stage 2: RPM Package builder for Enterprise Linux 8 (el8) # ============================================================================= FROM rpm-common-tools AS rpm-el8-builder WORKDIR /package # Copy builder stage for binary and packaging files COPY --from=builder /build /build # Create package root directory structure RUN mkdir -p /tmp/pkgroot/usr/bin \ && mkdir -p /tmp/pkgroot/etc/logcorrelator \ && mkdir -p /tmp/pkgroot/var/log/logcorrelator \ && mkdir -p /tmp/pkgroot/var/run/logcorrelator \ && mkdir -p /tmp/pkgroot/var/lib/logcorrelator \ && mkdir -p /tmp/pkgroot/etc/systemd/system \ && mkdir -p /tmp/pkgroot/etc/logrotate.d # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator RUN chmod 755 /tmp/pkgroot/usr/bin/logcorrelator # Copy config files COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example RUN chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml \ && chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example # Copy systemd service COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service RUN chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service # Copy logrotate config COPY --from=builder /build/packaging/rpm/logrotate /tmp/pkgroot/etc/logrotate.d/logcorrelator RUN chmod 644 /tmp/pkgroot/etc/logrotate.d/logcorrelator # Set directory permissions RUN chmod 755 /tmp/pkgroot/var/log/logcorrelator \ && chmod 755 /tmp/pkgroot/var/run/logcorrelator \ && chmod 755 /tmp/pkgroot/var/lib/logcorrelator # Build RPM for el8 ARG VERSION=1.0.0 RUN /build-rpm.sh el8 ${VERSION} # ============================================================================= # Stage 3: RPM Package builder for Enterprise Linux 9 (el9) # ============================================================================= FROM rpm-common-tools AS rpm-el9-builder WORKDIR /package # Copy builder stage for binary and packaging files COPY --from=builder /build /build # Create package root directory structure RUN mkdir -p /tmp/pkgroot/usr/bin \ && mkdir -p /tmp/pkgroot/etc/logcorrelator \ && mkdir -p /tmp/pkgroot/var/log/logcorrelator \ && mkdir -p /tmp/pkgroot/var/run/logcorrelator \ && mkdir -p /tmp/pkgroot/var/lib/logcorrelator \ && mkdir -p /tmp/pkgroot/etc/systemd/system \ && mkdir -p /tmp/pkgroot/etc/logrotate.d # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator RUN chmod 755 /tmp/pkgroot/usr/bin/logcorrelator # Copy config files COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example RUN chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml \ && chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example # Copy systemd service COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service RUN chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service # Copy logrotate config COPY --from=builder /build/packaging/rpm/logrotate /tmp/pkgroot/etc/logrotate.d/logcorrelator RUN chmod 644 /tmp/pkgroot/etc/logrotate.d/logcorrelator # Set directory permissions RUN chmod 755 /tmp/pkgroot/var/log/logcorrelator \ && chmod 755 /tmp/pkgroot/var/run/logcorrelator \ && chmod 755 /tmp/pkgroot/var/lib/logcorrelator # Build RPM for el9 ARG VERSION=1.0.0 RUN /build-rpm.sh el9 ${VERSION} # ============================================================================= # Stage 4: RPM Package builder for Enterprise Linux 10 (el10) # ============================================================================= FROM rpm-common-tools AS rpm-el10-builder WORKDIR /package # Copy builder stage for binary and packaging files COPY --from=builder /build /build # Create package root directory structure RUN mkdir -p /tmp/pkgroot/usr/bin \ && mkdir -p /tmp/pkgroot/etc/logcorrelator \ && mkdir -p /tmp/pkgroot/var/log/logcorrelator \ && mkdir -p /tmp/pkgroot/var/run/logcorrelator \ && mkdir -p /tmp/pkgroot/var/lib/logcorrelator \ && mkdir -p /tmp/pkgroot/etc/systemd/system \ && mkdir -p /tmp/pkgroot/etc/logrotate.d # Copy binary from builder COPY --from=builder /build/dist/logcorrelator /tmp/pkgroot/usr/bin/logcorrelator RUN chmod 755 /tmp/pkgroot/usr/bin/logcorrelator # Copy config files COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml COPY --from=builder /build/config.example.yml /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example RUN chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml \ && chmod 640 /tmp/pkgroot/etc/logcorrelator/logcorrelator.yml.example # Copy systemd service COPY --from=builder /build/logcorrelator.service /tmp/pkgroot/etc/systemd/system/logcorrelator.service RUN chmod 644 /tmp/pkgroot/etc/systemd/system/logcorrelator.service # Copy logrotate config COPY --from=builder /build/packaging/rpm/logrotate /tmp/pkgroot/etc/logrotate.d/logcorrelator RUN chmod 644 /tmp/pkgroot/etc/logrotate.d/logcorrelator # Set directory permissions RUN chmod 755 /tmp/pkgroot/var/log/logcorrelator \ && chmod 755 /tmp/pkgroot/var/run/logcorrelator \ && chmod 755 /tmp/pkgroot/var/lib/logcorrelator # Build RPM for el10 ARG VERSION=1.0.0 RUN /build-rpm.sh el10 ${VERSION} # ============================================================================= # Stage 5: Output - Image finale avec les packages RPM # ============================================================================= FROM alpine:latest AS output WORKDIR /packages COPY --from=rpm-el8-builder /packages/rpm/el8/*.rpm /packages/rpm/el8/ COPY --from=rpm-el9-builder /packages/rpm/el9/*.rpm /packages/rpm/el9/ COPY --from=rpm-el10-builder /packages/rpm/el10/*.rpm /packages/rpm/el10/ CMD ["sh", "-c", "echo '=== RPM Enterprise Linux 8 ===' && ls -la /packages/rpm/el8/ && echo '' && echo '=== RPM Enterprise Linux 9 ===' && ls -la /packages/rpm/el9/ && echo '' && echo '=== RPM Enterprise Linux 10 ===' && ls -la /packages/rpm/el10/'"]