| LABEL maintainer="Red Hat, Inc." vendor="Red Hat, Inc." |
| LABEL url="https://www.redhat.com" |
| LABEL com.redhat.component="ubi9-container" name="ubi9" version="9.6" distribution-scope="public" |
| LABEL com.redhat.license_terms="https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI" |
| LABEL summary="Provides the latest release of Red Hat Universal Base Image 9." |
| LABEL description="The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly." |
| LABEL io.k8s.description="The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly." |
| LABEL io.k8s.display-name="Red Hat Universal Base Image 9" |
| LABEL io.openshift.expose-services="" |
| LABEL io.openshift.tags="base rhel9" |
| ENV container oci |
| COPY dir:d030c7d773f0a9a0288768cf73fd68603fb78790fc50998f9cb91d0c08117212 in / |
| COPY file:b37d593713ee21ad52a4cd1424dc019a24f7966f85df0ac4b86d234302695328 in /etc/yum.repos.d/. |
| CMD ["/bin/bash"] |
| COPY file:58cc94f5b3b2d60de2c77a6ed4b1797dcede502ccdb429a72e7a72d994235b3c in /usr/share/buildinfo/content-sets.json |
| LABEL "build-date"="2025-05-14T10:40:37" "architecture"="x86_64" "vcs-type"="git" "vcs-ref"="2f42d95842ada13f4b1358571e36e1ab62406115" "release"="1747219013" |
| ARG TARGETARCH |
| LABEL maintainer=Red Hat, Inc. |
| LABEL com.redhat.component=devfile-base-container |
| LABEL name=devfile/base-developer-image |
| LABEL version=ubi9 |
| LABEL com.redhat.license_terms=https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI |
| LABEL summary=devfile base developer image |
| LABEL description=Image with base developers tools. Languages SDK and runtimes excluded. |
| LABEL io.k8s.display-name=devfile-developer-base |
| LABEL io.openshift.expose-services= |
| USER 0 |
| ENV HOME=/home/tooling |
| RUN |1 TARGETARCH=amd64 /bin/sh -c mkdir -p /home/tooling/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && dnf install -y diffutils git git-lfs iproute jq less lsof man nano procps p7zip p7zip-plugins perl-Digest-SHA net-tools openssh-clients rsync socat sudo time vim wget zip stow && dnf update -y && dnf clean all # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y reinstall shadow-utils && dnf -y install podman buildah skopeo fuse-overlayfs && dnf clean all # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c TEMP_DIR="$(mktemp -d)"; cd "${TEMP_DIR}"; GH_VERSION="2.73.0"; GH_ARCH="linux_$TARGETARCH"; GH_TGZ="gh_${GH_VERSION}_${GH_ARCH}.tar.gz"; GH_TGZ_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/${GH_TGZ}"; GH_CHEKSUMS_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_checksums.txt"; curl -sSLO "${GH_TGZ_URL}"; curl -sSLO "${GH_CHEKSUMS_URL}"; sha256sum --ignore-missing -c "gh_${GH_VERSION}_checksums.txt" 2>&1 | grep OK; tar -zxv --no-same-owner -f "${GH_TGZ}"; mv "gh_${GH_VERSION}_${GH_ARCH}"/bin/gh /usr/local/bin/; mv "gh_${GH_VERSION}_${GH_ARCH}"/share/man/man1/* /usr/local/share/man/man1; cd -; rm -rf "${TEMP_DIR}" # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c TEMP_DIR="$(mktemp -d)"; cd "${TEMP_DIR}"; RG_VERSION="13.0.0"; if [ "$TARGETARCH" = "arm64" ]; then RG_ARCH="arm-unknown-linux-gnueabihf"; else RG_ARCH="x86_64-unknown-linux-musl"; fi; RG_TGZ="ripgrep-${RG_VERSION}-${RG_ARCH}.tar.gz"; RG_TGZ_URL="https://github.com/BurntSushi/ripgrep/releases/download/${RG_VERSION}/${RG_TGZ}"; curl -sSLO "${RG_TGZ_URL}"; tar -zxv --no-same-owner -f "${RG_TGZ}"; mv "ripgrep-${RG_VERSION}-${RG_ARCH}"/rg /usr/local/bin/; mv "ripgrep-${RG_VERSION}-${RG_ARCH}"/doc/rg.1 /usr/local/share/man/man1; cd -; rm -rf "${TEMP_DIR}" # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c TEMP_DIR="$(mktemp -d)"; cd "${TEMP_DIR}"; BAT_VERSION="0.18.3"; if [ "$TARGETARCH" = "arm64" ]; then BAT_ARCH="aarch64-unknown-linux-gnu"; else BAT_ARCH="x86_64-unknown-linux-musl"; fi; BAT_TGZ="bat-v${BAT_VERSION}-${BAT_ARCH}.tar.gz"; BAT_TGZ_URL="https://github.com/sharkdp/bat/releases/download/v${BAT_VERSION}/${BAT_TGZ}"; curl -sSLO "${BAT_TGZ_URL}"; tar -zxv --no-same-owner -f "${BAT_TGZ}"; mv "bat-v${BAT_VERSION}-${BAT_ARCH}"/bat /usr/local/bin/; mv "bat-v${BAT_VERSION}-${BAT_ARCH}"/bat.1 /usr/local/share/man/man1; cd -; rm -rf "${TEMP_DIR}" # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c TEMP_DIR="$(mktemp -d)" && cd "${TEMP_DIR}" && FD_VERSION="8.7.0" && if [ "$TARGETARCH" = "arm64" ]; then FD_ARCH="aarch64-unknown-linux-gnu"; else FD_ARCH="x86_64-unknown-linux-musl"; fi && FD_TGZ="fd-v${FD_VERSION}-${FD_ARCH}.tar.gz" && FD_TGZ_URL="https://github.com/sharkdp/fd/releases/download/v${FD_VERSION}/${FD_TGZ}" && curl -sSLO "${FD_TGZ_URL}" && tar -xv --no-same-owner -f "${FD_TGZ}" && mv "fd-v${FD_VERSION}-${FD_ARCH}"/fd /usr/local/bin && mv "fd-v${FD_VERSION}-${FD_ARCH}"/fd.1 /usr/local/share/man/man1 && cd - && rm -rf "${TEMP_DIR}" # buildkit |
| ENV PATH=/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV _BUILDAH_STARTED_IN_USERNS= BUILDAH_ISOLATION=chroot |
| RUN |1 TARGETARCH=amd64 /bin/sh -c touch /etc/subgid /etc/subuid && chmod g=u /etc/subgid /etc/subuid /etc/passwd && echo user:10000:65536 > /etc/subuid && echo user:10000:65536 > /etc/subgid # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock # buildkit |
| ENV KUBEDOCK_VERSION=0.18.1 |
| ENV KUBECONFIG=/home/user/.kube/config |
| RUN |1 TARGETARCH=amd64 /bin/sh -c KUBEDOCK_ARCH="linux_amd64" && curl -L https://github.com/joyrex2001/kubedock/releases/download/${KUBEDOCK_VERSION}/kubedock_${KUBEDOCK_VERSION}_${KUBEDOCK_ARCH}.tar.gz | tar -C /usr/local/bin -xz --no-same-owner && chmod +x /usr/local/bin/kubedock # buildkit |
| COPY kubedock_setup.sh /usr/local/bin/kubedock_setup # buildkit |
| ENV PODMAN_WRAPPER_PATH=/usr/bin/podman.wrapper |
| ENV ORIGINAL_PODMAN_PATH=/usr/bin/podman.orig |
| COPY podman-wrapper.sh /usr/bin/podman.wrapper # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c mv /usr/bin/podman "${ORIGINAL_PODMAN_PATH}" # buildkit |
| COPY entrypoint.sh / # buildkit |
| COPY .stow-local-ignore /home/tooling/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c useradd -u 10001 -G wheel,root -d /home/user --shell /bin/bash -m user && touch /etc/profile.d/udi_prompt.sh && chown 10001 /etc/profile.d/udi_prompt.sh && echo "export PS1='\W \`git branch --show-current 2>/dev/null | sed -r -e \"s@^(.+)@\(\1\) @\"\`$ '" >> /etc/profile.d/udi_prompt.sh && cp /etc/gitconfig ${HOME}/.gitconfig && chown 10001 ${HOME}/ ${HOME}/.viminfo ${HOME}/.gitconfig ${HOME}/.stow-local-ignore && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home && chmod +x /entrypoint.sh && stow . -t /home/user/ -d /home/tooling/ && cp /home/tooling/.viminfo /home/user/.viminfo && cp /home/user/.bashrc /home/tooling/.bashrc && cp /home/user/.bash_profile /home/tooling/.bash_profile && chown 10001 /home/tooling/.bashrc /home/tooling/.bash_profile # buildkit |
| USER 10001 |
| ENV HOME=/home/user |
| WORKDIR /projects |
| ENTRYPOINT ["/entrypoint.sh"] |
| CMD ["tail" "-f" "/dev/null"] |
| ARG TARGETARCH |
| LABEL maintainer=Red Hat, Inc. |
| LABEL com.redhat.component=devfile-universal-container |
| LABEL name=devfile/universal-developer-image |
| LABEL version=ubi9 |
| LABEL com.redhat.license_terms=https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI |
| LABEL summary=devfile universal developer image |
| LABEL description=Image with developers tools. Languages SDK and runtimes included. |
| LABEL io.k8s.display-name=devfile-developer-universal |
| LABEL io.openshift.expose-services= |
| USER 0 |
| ENV PROFILE_EXT=/etc/profile.d/udi_environment.sh |
| RUN |1 TARGETARCH=amd64 /bin/sh -c touch ${PROFILE_EXT} && chown 10001 ${PROFILE_EXT} # buildkit |
| USER 10001 |
| ENV HOME=/home/tooling |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -fsSL "https://get.sdkman.io/?rcupdate=false" | bash && bash -c ". /home/tooling/.sdkman/bin/sdkman-init.sh && sed -i "s/sdkman_auto_answer=false/sdkman_auto_answer=true/g" /home/tooling/.sdkman/etc/config && sed -i "s/sdkman_auto_env=false/sdkman_auto_env=true/g" /home/tooling/.sdkman/etc/config && sdk install java 8.0.432-tem && sdk install java 11.0.25-tem && sdk install java 17.0.13-tem && sdk install java 21.0.5-tem && sdk install java 23.1.5.r21-mandrel && sdk default java 17.0.13-tem && sdk install gradle && sdk install maven && sdk install jbang && sdk flush archives && sdk flush temp" && chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling # buildkit |
| ENV JAVA_HOME_8=/home/tooling/.sdkman/candidates/java/8.0.432-tem |
| ENV JAVA_HOME_11=/home/tooling/.sdkman/candidates/java/11.0.25-tem |
| ENV JAVA_HOME_17=/home/tooling/.sdkman/candidates/java/17.0.13-tem |
| ENV JAVA_HOME_21=/home/tooling/.sdkman/candidates/java/21.0.5-tem |
| ENV SDKMAN_CANDIDATES_API=https://api.sdkman.io/2 |
| ENV SDKMAN_CANDIDATES_DIR=/home/tooling/.sdkman/candidates |
| ENV SDKMAN_DIR=/home/tooling/.sdkman |
| RUN |1 TARGETARCH=amd64 /bin/sh -c if [ "$TARGETARCH" = "arm64" ]; then export SDKMAN_PLATFORM="linuxarm64"; else export SDKMAN_PLATFORM="linuxx64"; fi # buildkit |
| ENV SDKMAN_PLATFORM= |
| ENV SDKMAN_VERSION=5.18.2 |
| ENV GRADLE_HOME=/home/tooling/.sdkman/candidates/gradle/current |
| ENV JAVA_HOME=/home/tooling/.sdkman/candidates/java/current |
| ENV MAVEN_HOME=/home/tooling/.sdkman/candidates/maven/current |
| ENV GRAALVM_HOME=/home/tooling/.sdkman/candidates/java/23.1.5.r21-mandrel |
| ENV PATH=/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV PATH=/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV PATH=/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV PATH=/home/tooling/.sdkman/candidates/gradle/current/bin:/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV PATH=/home/tooling/.local/share/coursier/bin:/home/tooling/.sdkman/candidates/gradle/current/bin:/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| RUN |1 TARGETARCH=amd64 /bin/sh -c mkdir -p /home/tooling/.nvm/ # buildkit |
| ENV NVM_DIR=/home/tooling/.nvm |
| ENV NODEJS_20_VERSION=20.18.1 |
| ENV NODEJS_18_VERSION=18.20.5 |
| ENV NODEJS_DEFAULT_VERSION=18.20.5 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | PROFILE=/dev/null bash # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c echo 'export NVM_DIR="$HOME/.nvm"' >> ${PROFILE_EXT} && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ${PROFILE_EXT} # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c source /home/user/.bashrc && nvm install v${NODEJS_20_VERSION} && nvm install v${NODEJS_18_VERSION} && nvm alias default v${NODEJS_DEFAULT_VERSION} && nvm use v${NODEJS_DEFAULT_VERSION} && npm install --global yarn@v1.22.22 && chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling # buildkit |
| ENV PATH=/home/tooling/.nvm/versions/node/v18.20.5/bin:/home/tooling/.local/share/coursier/bin:/home/tooling/.sdkman/candidates/gradle/current/bin:/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV NODEJS_HOME_20=/home/tooling/.nvm/versions/node/v20.18.1 |
| ENV NODEJS_HOME_18=/home/tooling/.nvm/versions/node/v18.20.5 |
| ENV KUBECONFIG=/home/user/.kube/config |
| USER 0 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf install -y libXext libXrender libXtst libXi # buildkit |
| ENV LOMBOK_VERSION=1.18.18 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c wget -O /usr/local/lib/lombok.jar https://projectlombok.org/downloads/lombok-${LOMBOK_VERSION}.jar # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -fLo cs https://git.io/coursier-cli && chmod +x cs && mv cs /usr/local/bin/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -fLo sbt https://raw.githubusercontent.com/dwijnand/sbt-extras/master/sbt && chmod +x sbt && mv sbt /usr/local/bin/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -fLo mill https://raw.githubusercontent.com/lefou/millw/main/millw && chmod +x mill && mv mill /usr/local/bin/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y install llvm-toolset gcc gcc-c++ clang clang-libs clang-tools-extra gdb # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf install -y go-toolset && GO111MODULE=on go install -v golang.org/x/tools/gopls@v0.16.2 && chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling # buildkit |
| ENV GOBIN=/home/tooling/go/bin/ |
| ENV PATH=/home/tooling/go/bin/:/home/tooling/.nvm/versions/node/v18.20.5/bin:/home/tooling/.local/share/coursier/bin:/home/tooling/.sdkman/candidates/gradle/current/bin:/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y install python3.11 python3.11-devel python3.11-setuptools python3.11-pip nss_wrapper # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c cd /usr/bin && if [ ! -L python ]; then ln -s python3.11 python; fi && if [ ! -L pydoc ]; then ln -s pydoc3.11 pydoc; fi && if [ ! -L python-config ]; then ln -s python3.11-config python-config; fi && if [ ! -L pip ]; then ln -s pip-3.11 pip; fi # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c pip install pylint yq # buildkit |
| ENV PHP_VERSION=8.2 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y module enable php:$PHP_VERSION && dnf install -y --setopt=tsflags=nodocs php php-mysqlnd php-pgsql php-bcmath php-gd php-intl php-json php-ldap php-mbstring php-pdo php-pear php-zlib php-mysqli php-curl php-xml php-devel php-process php-soap php-opcache php-fpm ca-certificates php-gmp php-pecl-xdebug php-pecl-zip mod_ssl hostname && wget https://getcomposer.org/installer -O /tmp/composer-installer.php && php /tmp/composer-installer.php --filename=composer --install-dir=/usr/local/bin # buildkit |
| ENV PHP_DEFAULT_INCLUDE_PATH=/usr/share/pear PHP_SYSCONF_PATH=/etc PHP_HTTPD_CONF_FILE=php.conf HTTPD_MAIN_CONF_PATH=/etc/httpd/conf HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d HTTPD_MODULES_CONF_D_PATH=/etc/httpd/conf.modules.d HTTPD_VAR_RUN=/var/run/httpd HTTPD_DATA_PATH=/var/www HTTPD_DATA_ORIG_PATH=/var/www HTTPD_VAR_PATH=/var |
| ENV DOTNET_RPM_VERSION=8.0 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf install -y dotnet-hostfxr-${DOTNET_RPM_VERSION} dotnet-runtime-${DOTNET_RPM_VERSION} dotnet-sdk-${DOTNET_RPM_VERSION} # buildkit |
| ENV CARGO_HOME=/home/tooling/.cargo RUSTUP_HOME=/home/tooling/.rustup PATH=/home/tooling/.cargo/bin:/home/tooling/go/bin/:/home/tooling/.nvm/versions/node/v18.20.5/bin:/home/tooling/.local/share/coursier/bin:/home/tooling/.sdkman/candidates/gradle/current/bin:/home/tooling/.sdkman/candidates/java/current/bin:/home/tooling/.sdkman/candidates/maven/current/bin:/home/tooling/.krew/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl --proto '=https' --tlsv1.2 -sSfo rustup https://sh.rustup.rs && chmod +x rustup && mv rustup /usr/bin/ && rustup -y --no-modify-path --profile minimal -c rust-src -c rust-analysis -c rls && chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling # buildkit |
| ENV KAMEL_VERSION=2.2.0 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c 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 && chmod +x /usr/local/bin/kamel # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c mkdir -p /home/tooling/.m2 && mkdir -p /home/tooling/.gradle && mkdir -p /home/tooling/.config/pip && mkdir -p /home/tooling/.sbt/1.0 && mkdir -p /home/tooling/.cargo && mkdir -p /home/tooling/certs && mkdir -p /home/tooling/.composer && mkdir -p /home/tooling/.nuget && chgrp -R 0 /home/tooling && chmod -R g=u /home/tooling # buildkit |
| ENV OC_VERSION=4.15 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c if [ "$TARGETARCH" = "arm64" ]; then curl -L https://mirror.openshift.com/pub/openshift-v4/arm64/clients/ocp/stable-${OC_VERSION}/openshift-client-linux.tar.gz; else curl -L https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable-${OC_VERSION}/openshift-client-linux.tar.gz; fi | tar -C /usr/local/bin -xz --no-same-owner && chmod +x /usr/local/bin/oc # buildkit |
| ENV TKN_VERSION=1.14.0 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c 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 && chmod +x /usr/local/bin/tkn /usr/local/bin/opc /usr/local/bin/tkn-pac # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c echo 'alias docker=podman' >> ${PROFILE_EXT} # buildkit |
| COPY containers.conf /etc/containers/containers.conf # buildkit |
| ENV K8S_VERSION=1.28 |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
cat <<EOF2 > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v${K8S_VERSION}/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v${K8S_VERSION}/rpm/repodata/repomd.xml.key
EOF2
dnf install -y kubectl
curl -sSL -o ~/.kubectl_aliases https://raw.githubusercontent.com/ahmetb/kubectl-alias/master/.kubectl_aliases
echo '[ -f ~/.kubectl_aliases ] && source ~/.kubectl_aliases' >> ${PROFILE_EXT}
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf install -y xz
set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
SHELL_CHECK_VERSION="0.8.0"
if [ "$TARGETARCH" = "arm64" ]; then
SHELL_CHECK_ARCH="aarch64"
else
SHELL_CHECK_ARCH="x86_64"
fi
SHELL_CHECK_TGZ="shellcheck-v${SHELL_CHECK_VERSION}.linux.${SHELL_CHECK_ARCH}.tar.xz"
SHELL_CHECK_TGZ_URL="https://github.com/koalaman/shellcheck/releases/download/v${SHELL_CHECK_VERSION}/${SHELL_CHECK_TGZ}"
curl -sSLO "${SHELL_CHECK_TGZ_URL}"
tar -xv --no-same-owner -f "${SHELL_CHECK_TGZ}"
mv "${TEMP_DIR}"/shellcheck-v${SHELL_CHECK_VERSION}/shellcheck /bin/shellcheck
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
KREW_VERSION="0.4.2"
KREW_ARCH="linux_${TARGETARCH}"
KREW_TGZ="krew-${KREW_ARCH}.tar.gz"
KREW_TGZ_URL="https://github.com/kubernetes-sigs/krew/releases/download/v${KREW_VERSION}/${KREW_TGZ}"
curl -sSLO "${KREW_TGZ_URL}"
curl -sSLO "${KREW_TGZ_URL}.sha256"
# File ${KREW_TGZ_URL}.sha256 has invalid format to be checked with sha256sum.
# It needs to create a valid one.
echo "$(cat ${KREW_TGZ}.sha256) ${KREW_TGZ}" > "${KREW_TGZ}.sha256"
sha256sum -c "${KREW_TGZ}.sha256" 2>&1 | grep OK
tar -zxv --no-same-owner -f "${KREW_TGZ}"
./"krew-${KREW_ARCH}" install krew
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ${PROFILE_EXT}
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# kubens and kubectx
kubectl krew install ns
kubectl krew install ctx
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
HELM_VERSION="3.14.3"
HELM_ARCH="linux-${TARGETARCH}"
HELM_TGZ="helm-v${HELM_VERSION}-${HELM_ARCH}.tar.gz"
HELM_TGZ_URL="https://get.helm.sh/${HELM_TGZ}"
curl -sSLO "${HELM_TGZ_URL}"
curl -sSLO "${HELM_TGZ_URL}.sha256sum"
sha256sum -c "${HELM_TGZ}.sha256sum" 2>&1 | grep OK
tar -zxv --no-same-owner -f "${HELM_TGZ}"
mv "${HELM_ARCH}"/helm /usr/local/bin/helm
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
KUSTOMIZE_VERSION="5.3.0"
KUSTOMIZE_ARCH="linux_${TARGETARCH}"
KUSTOMIZE_TGZ="kustomize_v${KUSTOMIZE_VERSION}_${KUSTOMIZE_ARCH}.tar.gz"
KUSTOMIZE_TGZ_URL="https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/${KUSTOMIZE_TGZ}"
KUSTOMIZE_CHEKSUMS_URL="https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/checksums.txt"
curl -sSLO "${KUSTOMIZE_TGZ_URL}"
curl -sSLO "${KUSTOMIZE_CHEKSUMS_URL}"
sha256sum --ignore-missing -c "checksums.txt" 2>&1 | grep OK
tar -zxv --no-same-owner -f "${KUSTOMIZE_TGZ}"
mv kustomize /usr/local/bin/
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
TKN_VERSION="0.20.0"
if [ "$TARGETARCH" = "arm64" ]; then
TKN_ARCH="Linux_arm64"
else
TKN_ARCH="Linux_x86_64"
fi
TKN_TGZ="tkn_${TKN_VERSION}_${TKN_ARCH}.tar.gz"
TKN_TGZ_URL="https://github.com/tektoncd/cli/releases/download/v${TKN_VERSION}/${TKN_TGZ}"
TKN_CHEKSUMS_URL="https://github.com/tektoncd/cli/releases/download/v${TKN_VERSION}/checksums.txt"
curl -sSLO "${TKN_TGZ_URL}"
curl -sSLO "${TKN_CHEKSUMS_URL}"
sha256sum --ignore-missing -c "checksums.txt" 2>&1 | grep OK
tar -zxv --no-same-owner -f "${TKN_TGZ}"
mv tkn /usr/local/bin/
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
KN_VERSION="1.13.0"
KN_ARCH="linux-${TARGETARCH}"
KN_BIN="kn-${KN_ARCH}"
KN_BIN_URL="https://github.com/knative/client/releases/download/knative-v${KN_VERSION}/${KN_BIN}"
KN_CHEKSUMS_URL="https://github.com/knative/client/releases/download/knative-v${KN_VERSION}/checksums.txt"
curl -sSLO "${KN_BIN_URL}"
curl -sSLO "${KN_CHEKSUMS_URL}"
sha256sum --ignore-missing -c "checksums.txt" 2>&1 | grep OK
mv "${KN_BIN}" kn
chmod +x kn
mv kn /usr/local/bin
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
TF_VERSION="1.7.5"
TF_ARCH="linux_${TARGETARCH}"
TF_ZIP="terraform_${TF_VERSION}_${TF_ARCH}.zip"
TF_ZIP_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/${TF_ZIP}"
TF_CHEKSUMS_URL="https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_SHA256SUMS"
curl -sSLO "${TF_ZIP_URL}"
curl -sSLO "${TF_CHEKSUMS_URL}"
sha256sum --ignore-missing -c "terraform_${TF_VERSION}_SHA256SUMS" 2>&1 | grep OK
unzip ${TF_ZIP}
chmod +x terraform
mv terraform /usr/local/bin
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-${TARGETARCH} && install skaffold /usr/local/bin/ # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c set -euf -o pipefail
TEMP_DIR="$(mktemp -d)"
cd "${TEMP_DIR}"
E2FSPROGS_VERSION="1.46.5"
E2FSPROGS_TGZ="e2fsprogs-${E2FSPROGS_VERSION}.tar.gz"
E2FSPROGS_TGZ_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/${E2FSPROGS_TGZ}"
E2FSPROGS_CHEKSUMS_URL="https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${E2FSPROGS_VERSION}/sha256sums.asc"
curl -sSLO "${E2FSPROGS_TGZ_URL}"
curl -sSLO "${E2FSPROGS_CHEKSUMS_URL}"
sha256sum --ignore-missing -c "sha256sums.asc" 2>&1 | grep OK
tar -zxv --no-same-owner -f "${E2FSPROGS_TGZ}"
cd "e2fsprogs-${E2FSPROGS_VERSION}"
mkdir build
cd build
../configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs --disable-evms
make
make install
make install-libs
cd -
rm -rf "${TEMP_DIR}"
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y install bash-completion && dnf clean all && rm -rf /var/cache/yum # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c oc completion bash > /usr/share/bash-completion/completions/oc
tkn completion bash > /usr/share/bash-completion/completions/tkn
kubectl completion bash > /usr/share/bash-completion/completions/kubectl
cat ${NVM_DIR}/bash_completion > /usr/share/bash-completion/completions/nvm
# buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c echo 'export SDKMAN_DIR="/home/tooling/.sdkman"' >> ${PROFILE_EXT} # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c echo '[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"' >> ${PROFILE_EXT} # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c stow . -t /home/user/ -d /home/tooling/ --no-folding # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home /etc/pki # buildkit |
| RUN |1 TARGETARCH=amd64 /bin/sh -c dnf -y clean all --enablerepo='*' # buildkit |
| USER 10001 |
| ENV HOME=/home/user |