@@ -31,10 +31,13 @@ USER 10001
3131ENV 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>
5255ENV JAVA_HOME_8=/home/tooling/.sdkman/candidates/java/8.0.432-tem
5356ENV JAVA_HOME_11=/home/tooling/.sdkman/candidates/java/11.0.25-tem
@@ -84,7 +87,7 @@ RUN mkdir -p /home/tooling/.nvm/
8487ENV NVM_DIR="/home/tooling/.nvm"
8588ENV NODEJS_20_VERSION=20.18.1
8689ENV NODEJS_18_VERSION=18.20.5
87- ENV NODEJS_DEFAULT_VERSION=${NODEJS_20_VERSION }
90+ ENV NODEJS_DEFAULT_VERSION=${NODEJS_18_VERSION }
8891RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | PROFILE=/dev/null bash
8992RUN 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 && \
125128RUN 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
136156RUN 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
183204ENV 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
188213RUN 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
201226ENV 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)
210239ENV TKN_VERSION=1.14.0
211240RUN 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+
214243RUN echo 'alias docker=podman' >> ${PROFILE_EXT}
215244
216245# Configure container engine
217246COPY --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
239256RUN <<EOF
240257dnf install -y xz
241258set -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+
242265TEMP_DIR="$(mktemp -d)"
243266cd "${TEMP_DIR}"
267+
244268SHELL_CHECK_VERSION="0.8.0"
269+
245270if [ "$TARGETARCH" = "arm64" ]; then
246271 SHELL_CHECK_ARCH="aarch64"
247272else
248273 SHELL_CHECK_ARCH="x86_64"
249274fi
275+
250276SHELL_CHECK_TGZ="shellcheck-v${SHELL_CHECK_VERSION}.linux.${SHELL_CHECK_ARCH}.tar.xz"
251277SHELL_CHECK_TGZ_URL="https://github.com/koalaman/shellcheck/releases/download/v${SHELL_CHECK_VERSION}/${SHELL_CHECK_TGZ}"
278+
252279curl -sSLO "${SHELL_CHECK_TGZ_URL}"
253280tar -xv --no-same-owner -f "${SHELL_CHECK_TGZ}"
254281mv "${TEMP_DIR}" /shellcheck-v${SHELL_CHECK_VERSION}/shellcheck /bin/shellcheck
282+
255283cd -
256284rm -rf "${TEMP_DIR}"
257285EOF
@@ -261,7 +289,7 @@ RUN <<EOF
261289set -euf -o pipefail
262290TEMP_DIR="$(mktemp -d)"
263291cd "${TEMP_DIR}"
264- KREW_VERSION="0.4.2 "
292+ KREW_VERSION="0.4.5 "
265293KREW_ARCH="linux_${TARGETARCH}"
266294KREW_TGZ="krew-${KREW_ARCH}.tar.gz"
267295KREW_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
277305tar -zxv --no-same-owner -f "${KREW_TGZ}"
278306./"krew-${KREW_ARCH}" install krew
279307echo '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
282313kubectl krew install ns
283314kubectl krew install ctx
@@ -323,25 +354,42 @@ rm -rf "${TEMP_DIR}"
323354EOF
324355
325356# # tektoncd-cli
326- RUN <<EOF
357+ RUN <<' EOF'
327358set -euf -o pipefail
359+
328360TEMP_DIR="$(mktemp -d)"
329361cd "${TEMP_DIR}"
362+
330363TKN_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+
336381TKN_TGZ="tkn_${TKN_VERSION}_${TKN_ARCH}.tar.gz"
337382TKN_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+
339385curl -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 /
345393rm -rf "${TEMP_DIR}"
346394EOF
347395
@@ -366,24 +414,27 @@ rm -rf "${TEMP_DIR}"
366414EOF
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
389440RUN 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
395446RUN <<EOF
396447set -euf -o pipefail
448+
449+ if [ "$TARGETARCH" = "ppc64le" ]; then
450+ echo "Skipping e2fsprogs build for ppc64le"
451+ exit 0
452+ fi
453+
397454TEMP_DIR="$(mktemp -d)"
398455cd "${TEMP_DIR}"
456+
399457E2FSPROGS_VERSION="1.46.5"
400458E2FSPROGS_TGZ="e2fsprogs-${E2FSPROGS_VERSION}.tar.gz"
401459E2FSPROGS_TGZ_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/${E2FSPROGS_TGZ}"
402460E2FSPROGS_CHEKSUMS_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/sha256sums.asc"
461+
403462curl -sSLO "${E2FSPROGS_TGZ_URL}"
404463curl -sSLO "${E2FSPROGS_CHEKSUMS_URL}"
405464sha256sum --ignore-missing -c "sha256sums.asc" 2>&1 | grep OK
465+
406466tar -zxv --no-same-owner -f "${E2FSPROGS_TGZ}"
407467cd "e2fsprogs-${E2FSPROGS_VERSION}"
468+
408469mkdir build
409470cd build
471+
410472../configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs --disable-evms
411473make
412474make install
413475make install-libs
476+
414477cd -
415478rm -rf "${TEMP_DIR}"
416479EOF
@@ -422,7 +485,7 @@ RUN dnf -y install bash-completion \
422485
423486RUN <<EOF
424487oc 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
426489kubectl completion bash > /usr/share/bash-completion/completions/kubectl
427490cat ${NVM_DIR}/bash_completion > /usr/share/bash-completion/completions/nvm
428491EOF
0 commit comments