Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions l/logstash/Dockerfiles/9.4.5_ubi_9.8/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# syntax=docker/dockerfile:1
# Stage 1: build the Logstash OSS tarball for ppc64le
FROM registry.access.redhat.com/ubi9/ubi:latest AS build

ARG PACKAGE_VERSION=v9.4.5
ARG PATCH=https://raw.githubusercontent.com/ppc64le/build-scripts/master/l/logstash/logstash_v9.4.5.patch
ENV PACKAGE_NAME=logstash

# Install build dependencies
RUN yum -y update && yum install -y \
git procps yum-utils wget ncurses make gcc-c++ libffi-devel \
java-21-openjdk java-21-openjdk-devel java-21-openjdk-headless

# Add CentOS Stream 9 repos for bison and readline-devel (not in UBI9)
RUN rpm --import https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official && \
printf '[cs9-appstream]\nname=CentOS Stream 9 - AppStream\nbaseurl=https://mirror.stream.centos.org/9-stream/AppStream/ppc64le/os/\ngpgcheck=1\ngpgkey=https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official\nenabled=1\n' \
> /etc/yum.repos.d/cs9-appstream.repo && \
printf '[cs9-baseos]\nname=CentOS Stream 9 - BaseOS\nbaseurl=https://mirror.stream.centos.org/9-stream/BaseOS/ppc64le/os/\ngpgcheck=1\ngpgkey=https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official\nenabled=1\n' \
> /etc/yum.repos.d/cs9-baseos.repo && \
printf '[cs9-crb]\nname=CentOS Stream 9 - CRB\nbaseurl=https://mirror.stream.centos.org/9-stream/CRB/ppc64le/os/\ngpgcheck=1\ngpgkey=https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official\nenabled=1\n' \
> /etc/yum.repos.d/cs9-crb.repo && \
yum install -y bison readline-devel

WORKDIR /tmp

RUN wget ${PATCH} && \
git clone https://github.com/elastic/logstash ${PACKAGE_NAME} && \
cd ${PACKAGE_NAME} && \
git checkout ${PACKAGE_VERSION} && \
git apply --check ../${PATCH##*/} && \
git apply --ignore-whitespace ../${PATCH##*/} && \
rm -f /tmp/${PATCH##*/}

# Install RVM and the Ruby version required by Logstash
RUN curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - && \
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import - && \
curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "\
source /etc/profile.d/rvm.sh && \
rvm install \$(cat /tmp/${PACKAGE_NAME}/.ruby-version) && \
rvm use \$(cat /tmp/${PACKAGE_NAME}/.ruby-version) --default"

ENV OSS=true
ENV LOGSTASH_SOURCE=1
ENV LOGSTASH_PATH=/tmp/logstash

# Download and unpack the ppc64le JDK; writes JDK_VERSION file expected by the rake task
RUN /bin/bash -l -c "\
source /usr/local/rvm/scripts/rvm && \
cd /tmp/${PACKAGE_NAME} && \
ARCH=ppc64le ./gradlew copyAllJdks --rerun-tasks --no-build-cache"

# Ensure JDK_VERSION file exists (written by copyAllJdks doLast from jdk-linux-ppc64le/release)
RUN cd /tmp/${PACKAGE_NAME} && \
if [ ! -f JDK_VERSION ]; then \
JDK_REL=jdk-linux-ppc64le/release; \
if [ ! -f "$JDK_REL" ]; then \
echo "ERROR: JDK_VERSION missing and $JDK_REL not found - copyAllJdks did not complete" >&2; exit 1; \
fi; \
grep IMPLEMENTOR_VERSION "$JDK_REL" | sed 's/IMPLEMENTOR_VERSION="//;s/"//' > JDK_VERSION; \
fi

# Install gems into the vendored JRuby (avoids Bundler double-load conflict with system Ruby)
RUN /bin/bash -l -c "\
source /usr/local/rvm/scripts/rvm && \
cd /tmp/${PACKAGE_NAME} && \
cp Gemfile.jruby-3.4.lock.release Gemfile.lock && \
vendor/jruby/bin/jruby -S gem install bundler --no-document && \
vendor/jruby/bin/jruby -S bundle install --without development test"

# Build the OSS tarball
RUN /bin/bash -l -c "\
source /usr/local/rvm/scripts/rvm && \
cd /tmp/${PACKAGE_NAME} && \
ARCH=ppc64le \
BUNDLE_WITHOUT='development:test' \
RELEASE=1 \
vendor/jruby/bin/jruby -S bundle exec rake artifact:archives_oss"

# ─────────────────────────────────────────────────────────────
# Stage 2: install the tarball on a clean UBI9-minimal base
# ─────────────────────────────────────────────────────────────
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest

ENV ELASTIC_CONTAINER=true
ENV PATH=/usr/share/logstash/bin:$PATH
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

WORKDIR /usr/share

# ------------------------------------------------------------
# Install required packages
# ------------------------------------------------------------
RUN microdnf install -y \
procps \
findutils \
tar \
gzip \
openssl \
which \
shadow-utils \
&& microdnf clean all

# Provide a non-root user to run the process.
# Add Logstash itself and set permissions.
RUN --mount=type=bind,from=build,source=/tmp/logstash/build/logstash-oss-9.4.5-linux-ppc64le.tar.gz,target=/tmp/logstash.tar.gz \
groupadd --gid 1000 logstash && \
adduser --uid 1000 --gid 1000 \
--home "/usr/share/logstash" \
--no-create-home \
logstash && \
tar -zxf /tmp/logstash.tar.gz -C /usr/share && \
mv /usr/share/logstash-9.4.5 /usr/share/logstash && \
chown -R logstash:root /usr/share/logstash && \
chmod -R g=u /usr/share/logstash && \
mkdir /licenses && \
mv /usr/share/logstash/NOTICE.TXT /licenses/NOTICE.TXT && \
mv /usr/share/logstash/LICENSE.txt /licenses/LICENSE.txt && \
find /usr/share/logstash -type d -exec chmod g+s {} \; && \
ln -s /usr/share/logstash /opt/logstash

COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/env2yaml/classes /usr/share/logstash/env2yaml/classes/
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/env2yaml/lib /usr/share/logstash/env2yaml/lib/
COPY --from=build --chmod=0755 /tmp/logstash/docker/data/logstash/env2yaml/env2yaml /usr/local/bin/env2yaml
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/config/pipelines.yml /usr/share/logstash/config/pipelines.yml
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/config/log4j2.properties /usr/share/logstash/config/log4j2.properties
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/config/log4j2.file.properties /usr/share/logstash/config/log4j2.file.properties
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/config/logstash-oss.yml /usr/share/logstash/config/logstash.yml
COPY --from=build --chown=logstash:root /tmp/logstash/docker/data/logstash/pipeline/default.conf /usr/share/logstash/pipeline/logstash.conf
COPY --from=build --chmod=0755 /tmp/logstash/docker/data/logstash/bin/docker-entrypoint /usr/local/bin/docker-entrypoint

WORKDIR /usr/share/logstash

USER 1000

EXPOSE 9600 5044

LABEL org.label-schema.build-date="" \
org.label-schema.license="Apache 2.0" \
org.label-schema.name="logstash" \
org.label-schema.schema-version="1.0" \
org.label-schema.url="https://www.elastic.co/products/logstash" \
org.label-schema.vcs-url="https://github.com/elastic/logstash" \
org.label-schema.vendor="Elastic" \
org.label-schema.version="9.4.5" \
org.opencontainers.image.created="" \
org.opencontainers.image.description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \
org.opencontainers.image.licenses="Apache 2.0" \
org.opencontainers.image.title="logstash" \
org.opencontainers.image.vendor="Elastic" \
org.opencontainers.image.version="9.4.5" \
description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \
license="Apache 2.0" \
maintainer="info@elastic.co" \
name="logstash" \
summary="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \
vendor="Elastic"

ENTRYPOINT ["/usr/local/bin/docker-entrypoint"]

55 changes: 55 additions & 0 deletions l/logstash/assemble-tar-oss-withoutjdk.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
diff --git a/build.gradle b/build.gradle
index a41412bce..1e0812575 100644
--- a/build.gradle
+++ b/build.gradle
@@ -466,6 +466,22 @@ tasks.register("artifactDockerObservabilitySRE") {
}
}

+tasks.register("assembleTarDistributionOssWithoutJdk") {
+ dependsOn bootstrap
+ inputs.files fileTree("${projectDir}/rakelib")
+ inputs.files fileTree("${projectDir}/bin")
+ inputs.files fileTree("${projectDir}/config")
+ inputs.files fileTree("${projectDir}/lib")
+ inputs.files fileTree("${projectDir}/modules")
+ inputs.files fileTree("${projectDir}/logstash-core-plugin-api")
+ inputs.files fileTree("${projectDir}/logstash-core/lib")
+ inputs.files fileTree("${projectDir}/logstash-core/src")
+ outputs.files file("${buildDir}/logstash-oss-${project.version}-SNAPSHOT.tar.gz")
+ doLast {
+ rake(projectDir, buildDir, 'artifact:oss_no_bundle_jdk_tar')
+ }
+}
+
tasks.register("assembleTarDistribution") {
dependsOn bootstrap
dependsOn "copyAllJdks"
diff --git a/rakelib/artifacts.rake b/rakelib/artifacts.rake
index 75dea5878..290d5a59d 100644
--- a/rakelib/artifacts.rake
+++ b/rakelib/artifacts.rake
@@ -223,9 +223,9 @@ namespace "artifact" do
end

# Create an archive pack using settings appropriate for the running machine
- def create_local_archive_pack(bundle_jdk)
+ def create_local_archive_pack(bundle_jdk, license = 'ELASTIC-LICENSE', tar_suffix = nil, exclude_paths = default_exclude_paths)
@bundles_jdk = bundle_jdk
- build_tar('ELASTIC-LICENSE')
+ build_tar(license, tar_suffix, exclude_paths)
end

desc "Build a not JDK bundled tar.gz of default logstash plugins with all dependencies"
@@ -233,6 +233,11 @@ namespace "artifact" do
create_local_archive_pack(false)
end

+ desc "Build a not JDK bundled OSS tar.gz of default logstash plugins with all dependencies"
+ task "oss_no_bundle_jdk_tar" => ["prepare-oss", "generate_build_metadata"] do
+ create_local_archive_pack(false, 'APACHE-LICENSE-2.0', "-oss", oss_exclude_paths)
+ end
+
desc "Build a JDK bundled tar.gz of default logstash plugins with all dependencies"
task "bundle_jdk_tar" => ["prepare", "generate_build_metadata"] do
create_local_archive_pack(true)
33 changes: 28 additions & 5 deletions l/logstash/build_info.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,43 @@
{
"maintainer": "Sapana-Khemkar",
"maintainer": "prachi.gaonkar@ibm.com",
"package_name": "logstash",
"github_url": "https://github.com/elastic/logstash.git",
"version": "v8.11.3",
"version": "v9.4.5",
"default_branch": "main",
"build_script": "logstash_8.11.3_ubi_8.9.sh",
"build_script": "logstash_oss_9.4.5_ubi9.8.sh",
"package_dir": "l/logstash/",
"validate_build_script": true,
"use_non_root_user": false,
"docker_build": true,
"docker_cmd": "docker build -t ${package_name}:$PACKAGE_VERSION ${dir}",
"v*.*.*": {
"v9.4.5": {
"dir": "9.4.5_ubi_9.8",
"patches": {
"PATCH": "https://raw.githubusercontent.com/ppc64le/build-scripts/master/l/logstash/logstash_v9.4.5.patch"
},
"build_script": "logstash_oss_9.4.5_ubi9.8.sh"
},
"v8.11.3": {
"dir": "8.11.3_ubi_8",
"patches": {
"PATCH": "https://raw.githubusercontent.com/ppc64le/build-scripts/master/l/logstash/assemble-tar-withoutjdk.patch"
},
"build_script": "logstash_8.11.3_ubi_8.9.sh"
},
"v7.6.0": {
"dir": "7.6.0_centos_7",
"patches": {
"PATCH": "https://raw.githubusercontent.com/ppc64le/build-scripts/master/l/logstash/assemble-tar-withoutjdk.patch"
},
"build_script": "logstash_7.6.0_rhel_7.6"
},
"v7.11.2": {
"build_script": "logstash_7.11.2_centos_7.sh"
},
"v7.11.0": {
"build_script": "logstash_7.11.0_rhel_7.9.sh"
},
"v6.7.2": {
"build_script": "logstash_6.5.4_ubuntu_18.04.sh"
}
}
}
Loading
Loading