Skip to content

Commit 03f00ca

Browse files
committed
Added a support of ppc64le for developer image
Signed-off-by: Prabhu K <[email protected]>
1 parent 8f6bce0 commit 03f00ca

File tree

1 file changed

+138
-75
lines changed

1 file changed

+138
-75
lines changed

universal/ubi9/Dockerfile

Lines changed: 138 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,13 @@ USER 10001
3131
ENV HOME=/home/tooling
3232

3333
# Java
34-
RUN curl -fsSL "https://get.sdkman.io/?rcupdate=false" | bash \
35-
&& bash -c ". /home/tooling/.sdkman/bin/sdkman-init.sh \
36-
&& sed -i "s/sdkman_auto_answer=false/sdkman_auto_answer=true/g" /home/tooling/.sdkman/etc/config \
37-
&& sed -i "s/sdkman_auto_env=false/sdkman_auto_env=true/g" /home/tooling/.sdkman/etc/config \
34+
RUN if [ "$TARGETARCH" = "ppc64le" ]; then \
35+
echo "Skipping Java installation: tem Java not available for ppc64le"; \
36+
else \
37+
curl -fsSL "https://get.sdkman.io/?rcupdate=false" | bash \
38+
&& bash -c ". /home/tooling/.sdkman/bin/sdkman-init.sh \
39+
&& sed -i 's/sdkman_auto_answer=false/sdkman_auto_answer=true/g' /home/tooling/.sdkman/etc/config \
40+
&& sed -i 's/sdkman_auto_env=false/sdkman_auto_env=true/g' /home/tooling/.sdkman/etc/config \
3841
&& sdk install java 8.0.432-tem \
3942
&& sdk install java 11.0.25-tem \
4043
&& sdk install java 17.0.13-tem \
@@ -45,9 +48,9 @@ RUN curl -fsSL "https://get.sdkman.io/?rcupdate=false" | bash \
4548
&& sdk install maven \
4649
&& sdk install jbang \
4750
&& sdk flush archives \
48-
&& sdk flush temp" \
49-
&& chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling
50-
51+
&& sdk flush temp"; \
52+
chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling; \
53+
fi
5154
# sdk home java <version>
5255
ENV JAVA_HOME_8=/home/tooling/.sdkman/candidates/java/8.0.432-tem
5356
ENV JAVA_HOME_11=/home/tooling/.sdkman/candidates/java/11.0.25-tem
@@ -84,7 +87,7 @@ RUN mkdir -p /home/tooling/.nvm/
8487
ENV NVM_DIR="/home/tooling/.nvm"
8588
ENV NODEJS_20_VERSION=20.18.1
8689
ENV NODEJS_18_VERSION=18.20.5
87-
ENV NODEJS_DEFAULT_VERSION=${NODEJS_20_VERSION}
90+
ENV NODEJS_DEFAULT_VERSION=${NODEJS_18_VERSION}
8891
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | PROFILE=/dev/null bash
8992
RUN echo 'export NVM_DIR="$HOME/.nvm"' >> ${PROFILE_EXT} \
9093
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ${PROFILE_EXT}
@@ -125,12 +128,29 @@ RUN curl -fLo mill https://raw.githubusercontent.com/lefou/millw/main/millw && \
125128
RUN dnf -y install llvm-toolset gcc gcc-c++ clang clang-libs clang-tools-extra gdb
126129

127130
# Go 1.22+ - installed to /usr/bin/go
128-
# gopls 0.21.0+ - installed to /home/tooling/go/bin/gopls and /home/tooling/go/pkg/mod/
129-
RUN dnf install -y go-toolset && \
130-
GO111MODULE=on go install -v golang.org/x/tools/[email protected] && \
131-
chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling
132-
ENV GOBIN="/home/tooling/go/bin/"
133-
ENV PATH="$GOBIN:$PATH"
131+
# gopls 0.16.2+ - installed to /home/tooling/go/bin/gopls and /home/tooling/go/pkg/mod/
132+
USER 0
133+
134+
ENV GOBIN=/home/tooling/go/bin
135+
ENV PATH=$GOBIN:/usr/local/go/bin:$PATH
136+
137+
ARG TARGETARCH
138+
139+
RUN mkdir -p $GOBIN \
140+
&& case "$TARGETARCH" in \
141+
amd64) GO_ARCH="amd64" ;; \
142+
arm64) GO_ARCH="arm64" ;; \
143+
ppc64le) GO_ARCH="ppc64le" ;; \
144+
*) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
145+
esac \
146+
&& GO_VERSION="1.22.5" \
147+
&& curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${GO_ARCH}.tar.gz" -o /tmp/go.tar.gz \
148+
&& tar -C /usr/local -xzf /tmp/go.tar.gz \
149+
&& rm -rf /tmp/go.tar.gz \
150+
&& go version \
151+
&& GO111MODULE=on go install golang.org/x/tools/[email protected] \
152+
&& chgrp -R 0 /home/tooling \
153+
&& chmod -R g=u /home/tooling
134154

135155
# Python
136156
RUN dnf -y install python3.11 python3.11-devel python3.11-setuptools python3.11-pip nss_wrapper
@@ -179,11 +199,16 @@ RUN curl --proto '=https' --tlsv1.2 -sSfo rustup https://sh.rustup.rs && \
179199
rustup -y --no-modify-path --profile minimal -c rust-src -c rust-analysis -c rls && \
180200
chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling
181201

182-
# camel-k
202+
# camel-k
203+
ARG TARGETARCH
183204
ENV KAMEL_VERSION 2.2.0
184-
RUN curl -L https://github.com/apache/camel-k/releases/download/v${KAMEL_VERSION}/camel-k-client-${KAMEL_VERSION}-linux-${TARGETARCH}.tar.gz | tar -C /usr/local/bin -xz --no-same-owner \
185-
&& chmod +x /usr/local/bin/kamel
186-
205+
RUN if [ "$TARGETARCH" != "ppc64le" ]; then \
206+
curl -sSLf https://github.com/apache/camel-k/releases/download/v${KAMEL_VERSION}/camel-k-client-${KAMEL_VERSION}-linux-${TARGETARCH}.tar.gz \
207+
| tar -C /usr/local/bin -xz --no-same-owner \
208+
&& chmod +x /usr/local/bin/kamel; \
209+
else \
210+
echo "Skipping Camel K install for ppc64le — not supported"; \
211+
fi
187212
# Config directories
188213
RUN mkdir -p /home/tooling/.m2 && \
189214
mkdir -p /home/tooling/.gradle && \
@@ -199,59 +224,62 @@ RUN mkdir -p /home/tooling/.m2 && \
199224

200225
# oc client
201226
ENV OC_VERSION=4.15
202-
RUN if [ "$TARGETARCH" = "arm64" ]; then \
203-
curl -L https://mirror.openshift.com/pub/openshift-v4/arm64/clients/ocp/stable-${OC_VERSION}/openshift-client-linux.tar.gz; \
204-
else \
205-
curl -L https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-${OC_VERSION}/openshift-client-linux.tar.gz; \
206-
fi | tar -C /usr/local/bin -xz --no-same-owner && \
227+
228+
RUN case "$TARGETARCH" in \
229+
arm64) ARCH_PATH="arm64" ;; \
230+
amd64) ARCH_PATH="x86_64" ;; \
231+
ppc64le) ARCH_PATH="ppc64le" ;; \
232+
*) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
233+
esac && \
234+
curl -L "https://mirror.openshift.com/pub/openshift-v4/${ARCH_PATH}/clients/ocp/stable-${OC_VERSION}/openshift-client-linux.tar.gz" \
235+
| tar -C /usr/local/bin -xz --no-same-owner && \
207236
chmod +x /usr/local/bin/oc
208237

209238
# OS Pipelines CLI (tkn)
210239
ENV TKN_VERSION=1.14.0
211240
RUN curl -L https://mirror.openshift.com/pub/openshift-v4/clients/pipelines/${TKN_VERSION}/tkn-linux-${TARGETARCH}.tar.gz | tar -C /usr/local/bin -xz --no-same-owner \
212241
&& chmod +x /usr/local/bin/tkn /usr/local/bin/opc /usr/local/bin/tkn-pac
213-
242+
214243
RUN echo 'alias docker=podman' >> ${PROFILE_EXT}
215244

216245
# Configure container engine
217246
COPY --chown=0:0 containers.conf /etc/containers/containers.conf
218247

219-
ENV K8S_VERSION=1.28
220-
## kubectl
221-
RUN <<EOF
222-
set -euf -o pipefail
223-
224-
cat <<EOF2 > /etc/yum.repos.d/kubernetes.repo
225-
[kubernetes]
226-
name=Kubernetes
227-
baseurl=https://pkgs.k8s.io/core:/stable:/v${K8S_VERSION}/rpm/
228-
enabled=1
229-
gpgcheck=1
230-
gpgkey=https://pkgs.k8s.io/core:/stable:/v${K8S_VERSION}/rpm/repodata/repomd.xml.key
231-
EOF2
232-
233-
dnf install -y kubectl
234-
curl -sSL -o ~/.kubectl_aliases https://raw.githubusercontent.com/ahmetb/kubectl-alias/master/.kubectl_aliases
235-
echo '[ -f ~/.kubectl_aliases ] && source ~/.kubectl_aliases' >> ${PROFILE_EXT}
236-
EOF
248+
##kubectl
249+
ARG TARGETARCH
250+
ENV KUBECTL_VERSION=1.30.1
251+
RUN curl -LO "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" \
252+
&& chmod +x kubectl \
253+
&& mv kubectl /usr/local/bin/kubectl
237254

238255
## shellcheck
239256
RUN <<EOF
240257
dnf install -y xz
241258
set -euf -o pipefail
259+
260+
if [ "$TARGETARCH" = "ppc64le" ]; then
261+
echo "ShellCheck installation is skipped for ppc64le: unsupported architecture"
262+
exit 0
263+
fi
264+
242265
TEMP_DIR="$(mktemp -d)"
243266
cd "${TEMP_DIR}"
267+
244268
SHELL_CHECK_VERSION="0.8.0"
269+
245270
if [ "$TARGETARCH" = "arm64" ]; then
246271
SHELL_CHECK_ARCH="aarch64"
247272
else
248273
SHELL_CHECK_ARCH="x86_64"
249274
fi
275+
250276
SHELL_CHECK_TGZ="shellcheck-v${SHELL_CHECK_VERSION}.linux.${SHELL_CHECK_ARCH}.tar.xz"
251277
SHELL_CHECK_TGZ_URL="https://github.com/koalaman/shellcheck/releases/download/v${SHELL_CHECK_VERSION}/${SHELL_CHECK_TGZ}"
278+
252279
curl -sSLO "${SHELL_CHECK_TGZ_URL}"
253280
tar -xv --no-same-owner -f "${SHELL_CHECK_TGZ}"
254281
mv "${TEMP_DIR}"/shellcheck-v${SHELL_CHECK_VERSION}/shellcheck /bin/shellcheck
282+
255283
cd -
256284
rm -rf "${TEMP_DIR}"
257285
EOF
@@ -261,7 +289,7 @@ RUN <<EOF
261289
set -euf -o pipefail
262290
TEMP_DIR="$(mktemp -d)"
263291
cd "${TEMP_DIR}"
264-
KREW_VERSION="0.4.2"
292+
KREW_VERSION="0.4.5"
265293
KREW_ARCH="linux_${TARGETARCH}"
266294
KREW_TGZ="krew-${KREW_ARCH}.tar.gz"
267295
KREW_TGZ_URL="https://github.com/kubernetes-sigs/krew/releases/download/v${KREW_VERSION}/${KREW_TGZ}"
@@ -277,7 +305,10 @@ sha256sum -c "${KREW_TGZ}.sha256" 2>&1 | grep OK
277305
tar -zxv --no-same-owner -f "${KREW_TGZ}"
278306
./"krew-${KREW_ARCH}" install krew
279307
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ${PROFILE_EXT}
280-
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
308+
#export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
309+
export KREW_ROOT="/home/tooling/.krew"
310+
export PATH="$KREW_ROOT/bin:$PATH"
311+
281312
# kubens and kubectx
282313
kubectl krew install ns
283314
kubectl krew install ctx
@@ -323,25 +354,42 @@ rm -rf "${TEMP_DIR}"
323354
EOF
324355

325356
## tektoncd-cli
326-
RUN <<EOF
357+
RUN <<'EOF'
327358
set -euf -o pipefail
359+
328360
TEMP_DIR="$(mktemp -d)"
329361
cd "${TEMP_DIR}"
362+
330363
TKN_VERSION="0.20.0"
331-
if [ "$TARGETARCH" = "arm64" ]; then
332-
TKN_ARCH="Linux_arm64"
333-
else
334-
TKN_ARCH="Linux_x86_64"
335-
fi
364+
365+
case "$TARGETARCH" in
366+
amd64)
367+
TKN_ARCH="Linux_x86_64"
368+
;;
369+
arm64)
370+
TKN_ARCH="Linux_arm64"
371+
;;
372+
ppc64le)
373+
TKN_ARCH="Linux_ppc64le"
374+
;;
375+
*)
376+
echo "Unsupported architecture: $TARGETARCH"
377+
exit 1
378+
;;
379+
esac
380+
336381
TKN_TGZ="tkn_${TKN_VERSION}_${TKN_ARCH}.tar.gz"
337382
TKN_TGZ_URL="https://github.com/tektoncd/cli/releases/download/v${TKN_VERSION}/${TKN_TGZ}"
338-
TKN_CHEKSUMS_URL="https://github.com/tektoncd/cli/releases/download/v${TKN_VERSION}/checksums.txt"
383+
TKN_CHECKSUMS_URL="https://github.com/tektoncd/cli/releases/download/v${TKN_VERSION}/checksums.txt"
384+
339385
curl -sSLO "${TKN_TGZ_URL}"
340-
curl -sSLO "${TKN_CHEKSUMS_URL}"
341-
sha256sum --ignore-missing -c "checksums.txt" 2>&1 | grep OK
342-
tar -zxv --no-same-owner -f "${TKN_TGZ}"
343-
mv tkn /usr/local/bin/
344-
cd -
386+
curl -sSLO "${TKN_CHECKSUMS_URL}"
387+
sha256sum --ignore-missing -c checksums.txt | grep OK
388+
389+
tar -zx --no-same-owner -f "${TKN_TGZ}"
390+
mv tkn /usr/local/bin/tkn
391+
392+
cd /
345393
rm -rf "${TEMP_DIR}"
346394
EOF
347395

@@ -366,24 +414,27 @@ rm -rf "${TEMP_DIR}"
366414
EOF
367415

368416
## terraform-cli
369-
RUN <<EOF
370-
set -euf -o pipefail
371-
TEMP_DIR="$(mktemp -d)"
372-
cd "${TEMP_DIR}"
373-
TF_VERSION="1.7.5"
374-
TF_ARCH="linux_${TARGETARCH}"
375-
TF_ZIP="terraform_${TF_VERSION}_${TF_ARCH}.zip"
376-
TF_ZIP_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/${TF_ZIP}"
377-
TF_CHEKSUMS_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_SHA256SUMS"
378-
curl -sSLO "${TF_ZIP_URL}"
379-
curl -sSLO "${TF_CHEKSUMS_URL}"
380-
sha256sum --ignore-missing -c "terraform_${TF_VERSION}_SHA256SUMS" 2>&1 | grep OK
381-
unzip ${TF_ZIP}
382-
chmod +x terraform
383-
mv terraform /usr/local/bin
384-
cd -
385-
rm -rf "${TEMP_DIR}"
386-
EOF
417+
ARG TARGETARCH
418+
RUN if [ "$TARGETARCH" != "ppc64le" ]; then \
419+
set -euf -o pipefail; \
420+
TEMP_DIR="$(mktemp -d)"; \
421+
cd "${TEMP_DIR}"; \
422+
TF_VERSION="1.7.5"; \
423+
TF_ARCH="linux_${TARGETARCH}"; \
424+
TF_ZIP="terraform_${TF_VERSION}_${TF_ARCH}.zip"; \
425+
TF_ZIP_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/${TF_ZIP}"; \
426+
TF_CHECKSUMS_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_SHA256SUMS"; \
427+
curl -sSLO "${TF_ZIP_URL}"; \
428+
curl -sSLO "${TF_CHECKSUMS_URL}"; \
429+
sha256sum --ignore-missing -c "terraform_${TF_VERSION}_SHA256SUMS" 2>&1 | grep OK; \
430+
unzip ${TF_ZIP}; \
431+
chmod +x terraform; \
432+
mv terraform /usr/local/bin; \
433+
cd -; \
434+
rm -rf "${TEMP_DIR}"; \
435+
else \
436+
echo "Skipping Terraform install for architecture: ${TARGETARCH}"; \
437+
fi
387438

388439
## skaffold
389440
RUN curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-${TARGETARCH} && \
@@ -394,23 +445,35 @@ RUN curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/sk
394445
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/considerations_in_adopting_rhel_8/index#removed-packages_changes-to-packages
395446
RUN <<EOF
396447
set -euf -o pipefail
448+
449+
if [ "$TARGETARCH" = "ppc64le" ]; then
450+
echo "Skipping e2fsprogs build for ppc64le"
451+
exit 0
452+
fi
453+
397454
TEMP_DIR="$(mktemp -d)"
398455
cd "${TEMP_DIR}"
456+
399457
E2FSPROGS_VERSION="1.46.5"
400458
E2FSPROGS_TGZ="e2fsprogs-${E2FSPROGS_VERSION}.tar.gz"
401459
E2FSPROGS_TGZ_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/${E2FSPROGS_TGZ}"
402460
E2FSPROGS_CHEKSUMS_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/sha256sums.asc"
461+
403462
curl -sSLO "${E2FSPROGS_TGZ_URL}"
404463
curl -sSLO "${E2FSPROGS_CHEKSUMS_URL}"
405464
sha256sum --ignore-missing -c "sha256sums.asc" 2>&1 | grep OK
465+
406466
tar -zxv --no-same-owner -f "${E2FSPROGS_TGZ}"
407467
cd "e2fsprogs-${E2FSPROGS_VERSION}"
468+
408469
mkdir build
409470
cd build
471+
410472
../configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs --disable-evms
411473
make
412474
make install
413475
make install-libs
476+
414477
cd -
415478
rm -rf "${TEMP_DIR}"
416479
EOF
@@ -422,7 +485,7 @@ RUN dnf -y install bash-completion \
422485

423486
RUN <<EOF
424487
oc completion bash > /usr/share/bash-completion/completions/oc
425-
tkn completion bash > /usr/share/bash-completion/completions/tkn
488+
tkn completion bash > /usr/share/bash-completion/completions/tkn
426489
kubectl completion bash > /usr/share/bash-completion/completions/kubectl
427490
cat ${NVM_DIR}/bash_completion > /usr/share/bash-completion/completions/nvm
428491
EOF

0 commit comments

Comments
 (0)