From ad96997297f33cecaa4d6220b15a71cacd675f7d Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 16:53:36 -0500 Subject: [PATCH 01/27] Use bash-completions package Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 2887e2139a..b412472f5a 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -136,7 +136,7 @@ RUN \ libssh-devel libffi-devel redhat-rpm-config cargo openssl-devel pkg-config jq \ podman buildah skopeo fuse-overlayfs \ e2fsprogs libatomic_ops git openssl-devel ca-certificates \ - bash tar gzip unzip bzip2 which shadow-utils findutils wget curl sudo git git-lfs procps-ng tree \ + bash bash-completion tar gzip unzip bzip2 which shadow-utils findutils wget curl sudo git git-lfs procps-ng tree \ # For OpenShift Client 4 (oc): rhocp-4.12-for-rhel-8-x86_64-rpms # must hard code a version because otherwise CVP/Brew fails with: Failed component comparison for components: openshift-clients # https://rhsm-pulp.corp.redhat.com/content/dist/layered/rhel8/x86_64/ocp-tools/4.12/os/Packages/o/odo-3.9.0-1.el8.x86_64.rpm From 10077faaf4dc5411795cdc33a8482c62a7fb042a Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 16:55:42 -0500 Subject: [PATCH 02/27] Don't modify ~/.bashrc, use /etc/profile.d/ instead Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index b412472f5a..00be008d86 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -81,6 +81,7 @@ ENV \ XDG_DATA_DIRS="/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" \ M2_HOME="/usr/share/maven" \ PKG_CONFIG_PATH="/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}" \ + PROFILE_EXT=/etc/profile.d/udi_environment.sh \ # Rootless podman install #1: # Set up environment variables to note that this is # not starting with usernamespace and default to @@ -107,7 +108,6 @@ LABEL summary="$SUMMARY" \ ADD etc/storage.conf $HOME/.config/containers/storage.conf ADD etc/entrypoint.sh /entrypoint.sh COPY $REMOTE_SOURCES $REMOTE_SOURCES_DIR -RUN echo 'alias docker=podman' >> /home/user/.bashrc COPY --chown=0:0 etc/podman-wrapper.sh /usr/bin/ # NOTE: uncomment for local build. Must also set full registry path in FROM to registry.redhat.io or registry.access.redhat.com @@ -158,8 +158,11 @@ RUN \ mkdir -p /opt && \ # add user and configure it useradd -u 1000 -G wheel,root -d /home/user --shell /bin/bash -m user && \ + # $PROFILE_EXT contains all additions made to the bash environment + touch ${PROFILE_EXT} && \ # Setup $PS1 for a consistent and reasonable prompt - echo "export PS1='\W \`git branch --show-current 2>/dev/null | sed -r -e \"s@^(.+)@\(\1\) @\"\`$ '" >> "${HOME}"/.bashrc && \ + touch /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 && \ # Change permissions to let any arbitrary user mkdir -p /projects && \ for f in "${HOME}" "/etc/passwd" "/etc/group" "/projects"; do \ @@ -193,6 +196,8 @@ RUN \ ## Rootless podman install #6: rename podman to allow the execution of 'podman run' using ## kubedock but 'podman build' using podman.orig mv /usr/bin/podman /usr/bin/podman.orig && \ + # Docker alias + echo 'alias docker=podman' >> ${PROFILE_EXT} && \ # set up go/bin folder mkdir /home/user/go/bin -p From fde3e68c90e26fa2d62cc4b69f5072d9099366d5 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 16:59:58 -0500 Subject: [PATCH 03/27] Build stow from sources Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 15 ++++++++++++++- devspaces-udi/container.yaml | 7 +++++++ devspaces-udi/content_sets.yml | 3 +++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 00be008d86..ba93b83161 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -44,7 +44,7 @@ RUN \ -X github.com/joyrex2001/kubedock/internal/config.Image=joyrex2001/kubedock:0.11.0" && \ CGO_ENABLED=0 go build -ldflags "${LDFLAGS}" -o kubedock && \ chmod +x ./kubedock && \ - ./kubedock version + ./kubedock version && \ # END Kubedock # CRW-3193 disable until we have a camel-k sample again @@ -55,6 +55,17 @@ RUN \ # ./kamel version && \ # END Kamel + # BEGIN stow + dnf -y -q install perl texinfo texinfo-tex git && \ + cd $REMOTE_SOURCES_DIR/stow/app && \ + mkdir -p $REMOTE_SOURCES_DIR/stow/app/build && \ + autoreconf -iv && \ + ./configure --prefix=$REMOTE_SOURCES_DIR/stow/app/build && \ + make install && \ + cd $REMOTE_SOURCES_DIR/stow/app/build/bin/ && \ + ./stow --version + # END stow + # https://registry.access.redhat.com/ubi8-minimal FROM ubi8-minimal:8.8-1072 @@ -335,6 +346,8 @@ xdebug.log=\${HOME}/xdebug.log" >> /etc/php.ini && \ # see container.yaml COPY --from=go-builder $REMOTE_SOURCES_DIR/gopls/app/gopls/gopls $HOME/go/bin/gopls COPY --from=go-builder $REMOTE_SOURCES_DIR/kubedock/app/kubedock $HOME/go/bin/kubedock +COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/bin/ /usr/bin/ +COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/share/ /usr/share/ ######################################################################## diff --git a/devspaces-udi/container.yaml b/devspaces-udi/container.yaml index 6e6e755d58..ff4805545a 100644 --- a/devspaces-udi/container.yaml +++ b/devspaces-udi/container.yaml @@ -64,3 +64,10 @@ remote_sources: ref: 9d21955b52e4905d916d24e724dcad195aef3515 pkg_managers: - gomod + +- name: stow + remote_source: + repo: https://github.com/aspiers/stow + ref: 4ef5eca4a9d107b24e712bb4c2c91f47e7e0fb85 + pkg_managers: [] + flags: ["include-git-dir"] diff --git a/devspaces-udi/content_sets.yml b/devspaces-udi/content_sets.yml index 504ad0430f..a13a3f8abe 100644 --- a/devspaces-udi/content_sets.yml +++ b/devspaces-udi/content_sets.yml @@ -14,13 +14,16 @@ x86_64: - rhel-8-for-x86_64-appstream-rpms - ocp-tools-4.12-for-rhel-8-x86_64-rpms - rhocp-4.12-for-rhel-8-x86_64-rpms +- codeready-builder-for-rhel-8-x86_64-rpms s390x: - rhel-8-for-s390x-baseos-rpms - rhel-8-for-s390x-appstream-rpms - ocp-tools-4.12-for-rhel-8-s390x-rpms - rhocp-4.12-for-rhel-8-s390x-rpms +- codeready-builder-for-rhel-8-s390x-rpms ppc64le: - rhel-8-for-ppc64le-baseos-rpms - rhel-8-for-ppc64le-appstream-rpms - ocp-tools-4.12-for-rhel-8-ppc64le-rpms - rhocp-4.12-for-rhel-8-ppc64le-rpms +- codeready-builder-for-rhel-8-ppc64le-rpms From 4fdff00bf80d386399c2417906400f0bbbce66c6 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:07:39 -0500 Subject: [PATCH 04/27] Move tools & configs from /home/user/ to /home/tooling/ Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 27 ++++++++++++++-------- devspaces-udi/etc/entrypoint.sh | 41 +++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index ba93b83161..086b6f8627 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -23,7 +23,7 @@ RUN \ ######################################################################## dnf -y -q install golang make gzip which openshift-clients && \ # BEGIN Gopls - mkdir /home/user/go/bin -p && \ + mkdir /home/tooling/go/bin -p && \ cd $REMOTE_SOURCES_DIR/gopls/app/gopls && \ # gopls must refer to tools as local dependency, which is located one dir above in the project echo 'replace golang.org/x/tools => ../' >> go.mod && \ @@ -34,7 +34,7 @@ RUN \ # END Gopls # BEGIN Kubedock - mkdir /home/user/go/bin -p && \ + mkdir /home/tooling/go/bin -p && \ cd $REMOTE_SOURCES_DIR/kubedock/app && \ # build kubedock application with dependencies resolved by Cachito source $REMOTE_SOURCES_DIR/kubedock/cachito.env && \ @@ -72,7 +72,8 @@ FROM ubi8-minimal:8.8-1072 USER root ENV \ - HOME=/home/user \ + # We install everything to /home/tooling/ as /home/user/ may get overriden, see github.com/eclipse/che/issues/22412 + HOME=/home/tooling \ NODEJS_VERSION="18" \ PYTHON_VERSION="3.11" \ PHP_VERSION="7.4" \ @@ -83,15 +84,16 @@ ENV \ JAVA_HOME_17=/usr/lib/jvm/java-17-openjdk \ JAVA_HOME_11=/usr/lib/jvm/java-11-openjdk \ JAVA_HOME_8=/usr/lib/jvm/java-1.8.0-openjdk \ - JAVA_HOME="/home/user/.java/current" \ - GOBIN="/home/user/go/bin/" \ - PATH="/home/user/.local/bin:/home/user/.java/current/bin:/home/user/node_modules/.bin/:/home/user/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/user/go/bin:${PATH:-/bin:/usr/bin}" \ + JAVA_HOME="/home/tooling/.java/current" \ + GOBIN="/home/tooling/go/bin/" \ + PATH="/home/tooling/.local/bin:/home/tooling/.java/current/bin:/home/tooling/node_modules/.bin/:/home/tooling/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/tooling/go/bin:${PATH:-/bin:/usr/bin}" \ MANPATH="/usr/share/man:${MANPATH}" \ JAVACONFDIRS="/etc/java${JAVACONFDIRS:+:}${JAVACONFDIRS:-}" \ XDG_CONFIG_DIRS="/etc/xdg:${XDG_CONFIG_DIRS:-/etc/xdg}" \ XDG_DATA_DIRS="/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" \ M2_HOME="/usr/share/maven" \ PKG_CONFIG_PATH="/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}" \ + KUBECONFIG=/home/user/.kube/config \ PROFILE_EXT=/etc/profile.d/udi_environment.sh \ # Rootless podman install #1: # Set up environment variables to note that this is @@ -116,10 +118,13 @@ LABEL summary="$SUMMARY" \ io.openshift.expose-services="" \ usage="" +RUN mkdir -p /home/tooling/ ADD etc/storage.conf $HOME/.config/containers/storage.conf ADD etc/entrypoint.sh /entrypoint.sh COPY $REMOTE_SOURCES $REMOTE_SOURCES_DIR COPY --chown=0:0 etc/podman-wrapper.sh /usr/bin/ +RUN mkdir -p /home/tooling/ +COPY --chown=0:0 etc/.stow-local-ignore /home/tooling/ # NOTE: uncomment for local build. Must also set full registry path in FROM to registry.redhat.io or registry.access.redhat.com # enable rhel 8 content sets (from Brew) to resolve buildah @@ -210,7 +215,7 @@ RUN \ # Docker alias echo 'alias docker=podman' >> ${PROFILE_EXT} && \ # set up go/bin folder - mkdir /home/user/go/bin -p + mkdir /home/tooling/go/bin -p RUN \ # configure runtimes @@ -265,7 +270,7 @@ RUN \ echo -n "/usr/local/bin/pytest: "; /usr/local/bin/pytest --version && \ echo -n "/usr/local/bin/yq: "; /usr/local/bin/yq --version && \ # set up ~/.venv - mkdir -p /home/user; cd /home/user; /usr/bin/python${PYTHON_VERSION} -m venv .venv && \ + mkdir -p /home/tooling; cd /home/tooling; /usr/bin/python${PYTHON_VERSION} -m venv .venv && \ echo "<== Create python symlinks (or display existing ones)" # TODO: to enable flake8 as default linter, add this to project's .vscode/settings.json file # { @@ -349,6 +354,9 @@ COPY --from=go-builder $REMOTE_SOURCES_DIR/kubedock/app/kubedock $HOME/go/bin/ku COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/bin/ /usr/bin/ COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/share/ /usr/share/ +# Create symbolic links from /home/tooling/ -> /home/user/ +RUN stow . -t /home/user/ -d /home/tooling/ --no-folding + ######################################################################## # Cleanup and Summaries @@ -411,8 +419,9 @@ RUN \ echo "========" # A last pass to make sure that an arbitrary user can write in $HOME -RUN mkdir -p /home/user && chgrp -R 0 /home && chmod -R g=u /home +RUN chgrp -R 0 /home && chmod -R g=u /home +ENV HOME=/home/user ENTRYPOINT [ "/entrypoint.sh" ] WORKDIR /projects CMD tail -f /dev/null diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index a660218a66..b70ecd5fe2 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -83,17 +83,17 @@ if [[ "${KUBEDOCK_ENABLED:-false}" == "true" ]]; then echo "Kubedock is enabled (env variable KUBEDOCK_ENABLED is set to true)." SECONDS=0 - until [ -f /home/user/.kube/config ]; do - if (( SECONDS > 10 )); then - echo "Giving up..." - exit 1 + KUBEDOCK_TIMEOUT=${KUBEDOCK_TIMEOUT:-10} + until [ -f $KUBECONFIG ]; do + if (( SECONDS > KUBEDOCK_TIMEOUT )); then + break fi echo "Kubeconfig doesn't exist yet. Waiting..." sleep 1 done echo "Kubeconfig found." - KUBEDOCK_PARAMS=${KUBEDOCK_PARAMS:-"--reverse-proxy"} + KUBEDOCK_PARAMS=${KUBEDOCK_PARAMS:-"--reverse-proxy --kubeconfig $KUBECONFIG"} echo "Starting kubedock with params \"${KUBEDOCK_PARAMS}\"..." @@ -103,8 +103,8 @@ if [[ "${KUBEDOCK_ENABLED:-false}" == "true" ]]; then echo "Replacing podman with podman-wrapper.sh..." - mkdir -p /home/user/.local/bin/ - ln -f -s /usr/bin/podman-wrapper.sh /home/user/.local/bin/podman + mkdir -p /home/tooling/.local/bin/ + ln -f -s /usr/bin/podman-wrapper.sh /home/tooling/.local/bin/podman export TESTCONTAINERS_RYUK_DISABLED="true" export TESTCONTAINERS_CHECKS_DISABLE="true" @@ -116,8 +116,31 @@ else echo "Kubedock is disabled. It can be enabled with the env variable \"KUBEDOCK_ENABLED=true\"" echo "set in the workspace Devfile or in a Kubernetes ConfigMap in the developer namespace." echo - mkdir -p /home/user/.local/bin/ - ln -f -s /usr/bin/podman.orig /home/user/.local/bin/podman + mkdir -p /home/tooling/.local/bin/ + ln -f -s /usr/bin/podman.orig /home/tooling/.local/bin/podman +fi + +############################################################################# +# Stow: If persistUserHome is enabled, then then the contents of /home/user/ +# will be mounted by a PVC and overwriten. In this case, we use stow to +# create symbolic links from /home/tooling/ -> /home/user/. +# Required for https://github.com/eclipse/che/issues/22412 +############################################################################# + +# /home/user/ will be mounted to by a PVC if persistUserHome is enabled +mountpoint -q /home/user/; HOME_USER_MOUNTED=$? + +# This file will be created after stowing, to guard from executing stow everytime the container is started +STOW_COMPLETE=/home/user/.stow_completed + +if [ $HOME_USER_MOUNTED -eq 0 ] && [ ! -f $STOW_COMPLETE ]; then + # Create symbolic links from /home/tooling/ -> /home/user/ + stow . -t /home/user/ -d /home/tooling/ --no-folding -v 2 > /tmp/stow.log 2>&1 + # We have to restore bash-related files back onto /home/user/ (since they will have been overwritten by the PVC) + # but we don't want them to be symbolic links (so that they persist on the PVC) + cp /home/tooling/.bashrc /home/user/.bashrc + cp /home/tooling/.bash_profile /home/user/.bash_profile + touch $STOW_COMPLETE fi exec "$@" From a0dd10a9349a441980017a2213aa7cde9100147d Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:08:13 -0500 Subject: [PATCH 05/27] Fix for multiple $KUBEDOCK_PARAMS Signed-off-by: Andrew Obuchowicz --- devspaces-udi/etc/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index b70ecd5fe2..aed70b1166 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -97,7 +97,7 @@ if [[ "${KUBEDOCK_ENABLED:-false}" == "true" ]]; then echo "Starting kubedock with params \"${KUBEDOCK_PARAMS}\"..." - kubedock server "${KUBEDOCK_PARAMS}" > /tmp/kubedock.log 2>&1 & + kubedock server ${KUBEDOCK_PARAMS} > /tmp/kubedock.log 2>&1 & echo "Done." From a65c70f045c35779c91113f2c94510bebb69c0a6 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:10:30 -0500 Subject: [PATCH 06/27] Install vim Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 086b6f8627..b9bf62cb3c 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -152,7 +152,7 @@ RUN \ libssh-devel libffi-devel redhat-rpm-config cargo openssl-devel pkg-config jq \ podman buildah skopeo fuse-overlayfs \ e2fsprogs libatomic_ops git openssl-devel ca-certificates \ - bash bash-completion tar gzip unzip bzip2 which shadow-utils findutils wget curl sudo git git-lfs procps-ng tree \ + bash bash-completion tar gzip unzip bzip2 which shadow-utils findutils wget curl sudo git git-lfs procps-ng tree vim \ # For OpenShift Client 4 (oc): rhocp-4.12-for-rhel-8-x86_64-rpms # must hard code a version because otherwise CVP/Brew fails with: Failed component comparison for components: openshift-clients # https://rhsm-pulp.corp.redhat.com/content/dist/layered/rhel8/x86_64/ocp-tools/4.12/os/Packages/o/odo-3.9.0-1.el8.x86_64.rpm From 5b33cb269100819a9205dd6906a29fc55af6dcd1 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:11:55 -0500 Subject: [PATCH 07/27] Don't stow .viminfo Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 4 +++- devspaces-udi/etc/.stow-local-ignore | 2 ++ devspaces-udi/etc/entrypoint.sh | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 devspaces-udi/etc/.stow-local-ignore diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index b9bf62cb3c..e7a0aee62b 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -355,7 +355,9 @@ COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/bin/ /usr/bin/ COPY --from=go-builder $REMOTE_SOURCES_DIR/stow/app/build/share/ /usr/share/ # Create symbolic links from /home/tooling/ -> /home/user/ -RUN stow . -t /home/user/ -d /home/tooling/ --no-folding +RUN stow . -t /home/user/ -d /home/tooling/ --no-folding && \ + # .viminfo cannot be a symbolic link for security reasons, so copy it to /home/user/ + cp /home/tooling/.viminfo /home/user/.viminfo ######################################################################## diff --git a/devspaces-udi/etc/.stow-local-ignore b/devspaces-udi/etc/.stow-local-ignore new file mode 100644 index 0000000000..1cceb80d73 --- /dev/null +++ b/devspaces-udi/etc/.stow-local-ignore @@ -0,0 +1,2 @@ +# .viminfo cannot be a symlink for security reasons +\.viminfo diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index aed70b1166..69a55b2a79 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -136,6 +136,8 @@ STOW_COMPLETE=/home/user/.stow_completed if [ $HOME_USER_MOUNTED -eq 0 ] && [ ! -f $STOW_COMPLETE ]; then # Create symbolic links from /home/tooling/ -> /home/user/ stow . -t /home/user/ -d /home/tooling/ --no-folding -v 2 > /tmp/stow.log 2>&1 + # Vim does not permit .viminfo to be a symbolic link for security reasons, so manually copy it + cp --no-clobber /home/tooling/.viminfo /home/user/.viminfo # We have to restore bash-related files back onto /home/user/ (since they will have been overwritten by the PVC) # but we don't want them to be symbolic links (so that they persist on the PVC) cp /home/tooling/.bashrc /home/user/.bashrc From ff3207cac2f9aebb2ac7d118405b64b3e8f0ae5b Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:15:52 -0500 Subject: [PATCH 08/27] Ensure ~/.bashrc and ~/.bash_profile exist when persistUserHome enabled Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 3 +++ devspaces-udi/etc/.stow-local-ignore | 5 +++++ devspaces-udi/etc/entrypoint.sh | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index e7a0aee62b..8b0801aa3b 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -174,6 +174,9 @@ RUN \ mkdir -p /opt && \ # add user and configure it useradd -u 1000 -G wheel,root -d /home/user --shell /bin/bash -m user && \ + # Bash-related files are backed up to /home/tooling/ incase they are deleted when persistUserHome is enabled. + cp /home/user/.bashrc /home/tooling/.bashrc && \ + cp /home/user/.bash_profile /home/tooling/.bash_profile && \ # $PROFILE_EXT contains all additions made to the bash environment touch ${PROFILE_EXT} && \ # Setup $PS1 for a consistent and reasonable prompt diff --git a/devspaces-udi/etc/.stow-local-ignore b/devspaces-udi/etc/.stow-local-ignore index 1cceb80d73..9a4d5ce28e 100644 --- a/devspaces-udi/etc/.stow-local-ignore +++ b/devspaces-udi/etc/.stow-local-ignore @@ -1,2 +1,7 @@ # .viminfo cannot be a symlink for security reasons \.viminfo + +# We store bash related files in /home/tooling/ so they aren't overriden if persistUserHome is enabled +# but we don't want them to be symbolic links (or to cause stow conflicts). They will be copied to /home/user/ manually. +\.bashrc +\.bash_profile diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index 69a55b2a79..5b2c68b4a9 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -140,8 +140,8 @@ if [ $HOME_USER_MOUNTED -eq 0 ] && [ ! -f $STOW_COMPLETE ]; then cp --no-clobber /home/tooling/.viminfo /home/user/.viminfo # We have to restore bash-related files back onto /home/user/ (since they will have been overwritten by the PVC) # but we don't want them to be symbolic links (so that they persist on the PVC) - cp /home/tooling/.bashrc /home/user/.bashrc - cp /home/tooling/.bash_profile /home/user/.bash_profile + cp --no-clobber /home/tooling/.bashrc /home/user/.bashrc + cp --no-clobber /home/tooling/.bash_profile /home/user/.bash_profile touch $STOW_COMPLETE fi From c5c36920cc715f7e4b0e9a6a1d13a28c05d541b5 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:42:16 -0500 Subject: [PATCH 09/27] Remove obsolete bash prompt creation from UDI entrypoint Signed-off-by: Andrew Obuchowicz --- devspaces-udi/etc/entrypoint.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index 5b2c68b4a9..6698e80799 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -42,13 +42,6 @@ if [ -f "${HOME}"/.venv/bin/activate ]; then source "${HOME}"/.venv/bin/activate fi -############################################################################# -# Setup $PS1 for a consistent and reasonable prompt -############################################################################# -if [ -w "${HOME}" ] && [ ! -f "${HOME}"/.bashrc ]; then - echo "PS1='[\u@\h \W]\$ '" >> "${HOME}"/.bashrc -fi - ############################################################################# # use java 8 if USE_JAVA8 is set to 'true', # use java 17 if USE_JAVA17 is set to 'true', From ab9e41ec77173f74cfff188cec88feff9bfbb57f Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:44:46 -0500 Subject: [PATCH 10/27] Don't fail entrypoint if kubeconfig could not be found Signed-off-by: Andrew Obuchowicz --- devspaces-udi/etc/entrypoint.sh | 34 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index 6698e80799..aac6a42fcb 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -84,26 +84,32 @@ if [[ "${KUBEDOCK_ENABLED:-false}" == "true" ]]; then echo "Kubeconfig doesn't exist yet. Waiting..." sleep 1 done - echo "Kubeconfig found." - KUBEDOCK_PARAMS=${KUBEDOCK_PARAMS:-"--reverse-proxy --kubeconfig $KUBECONFIG"} + if [ -f $KUBECONFIG ]; then + echo "Kubeconfig found." - echo "Starting kubedock with params \"${KUBEDOCK_PARAMS}\"..." - - kubedock server ${KUBEDOCK_PARAMS} > /tmp/kubedock.log 2>&1 & - - echo "Done." + KUBEDOCK_PARAMS=${KUBEDOCK_PARAMS:-"--reverse-proxy --kubeconfig $KUBECONFIG"} - echo "Replacing podman with podman-wrapper.sh..." + echo "Starting kubedock with params \"${KUBEDOCK_PARAMS}\"..." - mkdir -p /home/tooling/.local/bin/ - ln -f -s /usr/bin/podman-wrapper.sh /home/tooling/.local/bin/podman + kubedock server ${KUBEDOCK_PARAMS} > /tmp/kubedock.log 2>&1 & - export TESTCONTAINERS_RYUK_DISABLED="true" - export TESTCONTAINERS_CHECKS_DISABLE="true" + echo "Done." - echo "Done." - echo + echo "Replacing podman with podman-wrapper.sh..." + + mkdir -p /home/tooling/.local/bin/ + ln -f -s /usr/bin/podman-wrapper.sh /home/tooling/.local/bin/podman + + export TESTCONTAINERS_RYUK_DISABLED="true" + export TESTCONTAINERS_CHECKS_DISABLE="true" + + echo "Done." + echo + else + echo "Could not find Kubeconfig at $KUBECONFIG" + echo "Giving up..." + fi else echo echo "Kubedock is disabled. It can be enabled with the env variable \"KUBEDOCK_ENABLED=true\"" From f5394e9be0c224a6f959a9aeb64ded31745f0801 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:50:10 -0500 Subject: [PATCH 11/27] chore: define user directory for binaries Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 6 ++++-- devspaces-udi/etc/entrypoint.sh | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 8b0801aa3b..fd72fae09a 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -86,7 +86,7 @@ ENV \ JAVA_HOME_8=/usr/lib/jvm/java-1.8.0-openjdk \ JAVA_HOME="/home/tooling/.java/current" \ GOBIN="/home/tooling/go/bin/" \ - PATH="/home/tooling/.local/bin:/home/tooling/.java/current/bin:/home/tooling/node_modules/.bin/:/home/tooling/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/tooling/go/bin:${PATH:-/bin:/usr/bin}" \ + PATH="/home/user/.local/bin:/home/tooling/.local/bin:/home/tooling/.java/current/bin:/home/tooling/node_modules/.bin/:/home/tooling/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/tooling/go/bin:${PATH:-/bin:/usr/bin}" \ MANPATH="/usr/share/man:${MANPATH}" \ JAVACONFDIRS="/etc/java${JAVACONFDIRS:+:}${JAVACONFDIRS:-}" \ XDG_CONFIG_DIRS="/etc/xdg:${XDG_CONFIG_DIRS:-/etc/xdg}" \ @@ -194,7 +194,9 @@ RUN \ > ${HOME}/passwd.template && \ cat /etc/group | \ sed s#root:x:0:#root:x:0:0,\${USER_ID}:#g \ - > ${HOME}/group.template + > ${HOME}/group.template && \ + # Define user directory for binaries + mkdir -p /home/tooling/.local/bin RUN \ ## Rootless podman install #2: install podman buildah skopeo e2fsprogs (above) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index aac6a42fcb..d44ecccb91 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -98,7 +98,6 @@ if [[ "${KUBEDOCK_ENABLED:-false}" == "true" ]]; then echo "Replacing podman with podman-wrapper.sh..." - mkdir -p /home/tooling/.local/bin/ ln -f -s /usr/bin/podman-wrapper.sh /home/tooling/.local/bin/podman export TESTCONTAINERS_RYUK_DISABLED="true" @@ -115,7 +114,6 @@ else echo "Kubedock is disabled. It can be enabled with the env variable \"KUBEDOCK_ENABLED=true\"" echo "set in the workspace Devfile or in a Kubernetes ConfigMap in the developer namespace." echo - mkdir -p /home/tooling/.local/bin/ ln -f -s /usr/bin/podman.orig /home/tooling/.local/bin/podman fi From a35d692df1dd34b632c9916b34b6830e96e9ba76 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 13 Nov 2023 17:50:46 -0500 Subject: [PATCH 12/27] Ensure mountpoint test doesn't cause entrypoint to fail Signed-off-by: Andrew Obuchowicz --- devspaces-udi/etc/entrypoint.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index d44ecccb91..d0d7f28108 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -125,7 +125,10 @@ fi ############################################################################# # /home/user/ will be mounted to by a PVC if persistUserHome is enabled -mountpoint -q /home/user/; HOME_USER_MOUNTED=$? +# We need to override the `set -e` from this script by ensuring the mountpoint command returns 0, +# but we also need to capture the exit code of mountpoint +HOME_USER_MOUNTED=0 +mountpoint -q /home/user/ || HOME_USER_MOUNTED=$? # This file will be created after stowing, to guard from executing stow everytime the container is started STOW_COMPLETE=/home/user/.stow_completed From 801f38c6ea51d52b4516b72625fd3c4b81198e3e Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Tue, 14 Nov 2023 11:34:50 -0400 Subject: [PATCH 13/27] Update devspaces-udi/etc/entrypoint.sh Co-authored-by: Valerii Svydenko --- devspaces-udi/etc/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index d0d7f28108..90d98c58e2 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -118,7 +118,7 @@ else fi ############################################################################# -# Stow: If persistUserHome is enabled, then then the contents of /home/user/ +# Stow: If persistUserHome is enabled, then the contents of /home/user/ # will be mounted by a PVC and overwriten. In this case, we use stow to # create symbolic links from /home/tooling/ -> /home/user/. # Required for https://github.com/eclipse/che/issues/22412 From a0a87633a452a69da22406aa286a35b55a28b005 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Tue, 14 Nov 2023 16:28:47 -0500 Subject: [PATCH 14/27] Remove redundant creation of Go bin directory Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index fd72fae09a..b80ac5cb05 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -34,7 +34,6 @@ RUN \ # END Gopls # BEGIN Kubedock - mkdir /home/tooling/go/bin -p && \ cd $REMOTE_SOURCES_DIR/kubedock/app && \ # build kubedock application with dependencies resolved by Cachito source $REMOTE_SOURCES_DIR/kubedock/cachito.env && \ @@ -218,9 +217,7 @@ RUN \ ## kubedock but 'podman build' using podman.orig mv /usr/bin/podman /usr/bin/podman.orig && \ # Docker alias - echo 'alias docker=podman' >> ${PROFILE_EXT} && \ - # set up go/bin folder - mkdir /home/tooling/go/bin -p + echo 'alias docker=podman' >> ${PROFILE_EXT} RUN \ # configure runtimes From 357da0021fec2d7ea31b68e6df0ecb55d52d2bba Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Tue, 14 Nov 2023 16:29:24 -0500 Subject: [PATCH 15/27] Remove redundant /home/tooling/ creation Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index b80ac5cb05..2eb8aa92c2 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -272,7 +272,7 @@ RUN \ echo -n "/usr/local/bin/pytest: "; /usr/local/bin/pytest --version && \ echo -n "/usr/local/bin/yq: "; /usr/local/bin/yq --version && \ # set up ~/.venv - mkdir -p /home/tooling; cd /home/tooling; /usr/bin/python${PYTHON_VERSION} -m venv .venv && \ + cd /home/tooling; /usr/bin/python${PYTHON_VERSION} -m venv .venv && \ echo "<== Create python symlinks (or display existing ones)" # TODO: to enable flake8 as default linter, add this to project's .vscode/settings.json file # { From d2bc061a8fa403e73fea67027a0f6e664b6cf493 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Tue, 14 Nov 2023 16:30:53 -0500 Subject: [PATCH 16/27] Pre-create common tooling config directories Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 2eb8aa92c2..b1e224a178 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -222,6 +222,15 @@ RUN \ RUN \ # configure runtimes ######################################################################## + # Common tooling configuration directories + ######################################################################## + mkdir -p /home/tooling/.m2 && \ + mkdir -p /home/tooling/.config/pip && \ + mkdir -p /home/tooling/.cargo && \ + mkdir -p /home/tooling/certs && \ + mkdir -p /home/tooling/.composer && \ + mkdir -p /home/tooling/.nuget && \ + ######################################################################## # Java ######################################################################## mkdir -p ${HOME}/.java/current && \ From 73661ae923610476c8567e714c72a79e065e40d8 Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Tue, 14 Nov 2023 22:53:10 -0400 Subject: [PATCH 17/27] Update devspaces-udi/etc/entrypoint.sh Co-authored-by: Angel Misevski --- devspaces-udi/etc/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index 90d98c58e2..abbb66e378 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -119,7 +119,7 @@ fi ############################################################################# # Stow: If persistUserHome is enabled, then the contents of /home/user/ -# will be mounted by a PVC and overwriten. In this case, we use stow to +# will be mounted by a PVC and overwritten. In this case, we use stow to # create symbolic links from /home/tooling/ -> /home/user/. # Required for https://github.com/eclipse/che/issues/22412 ############################################################################# From 577dd89a847bbd9eec60f5b5fa2618663d666406 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Thu, 16 Nov 2023 00:09:21 -0500 Subject: [PATCH 18/27] Disable code ready builder repo after building stow We disable the code ready builder repo on each architecture to prevent accidentally pulling in the wrong packages. For example, the maven-resolver package differs between the rhel 8 app stream repo & the code ready builder repo which leads to maven being unable to download artifacts. Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index b1e224a178..cbc08889ed 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -136,6 +136,15 @@ COPY --chown=0:0 etc/.stow-local-ignore /home/tooling/ RUN \ # install all the rpms and modules microdnf install -y dnf && \ + # Disable code ready builder repo's to prevent accidentally installing incorrect packages + dnf -y -q install 'dnf-command(config-manager)' && \ + if [[ "$(uname -m)" == 'x86_64' ]]; then \ + dnf config-manager --set-disabled codeready-builder-for-rhel-8-x86_64-rpms ; \ + elif [[ "$(uname -m)" == 's390x' ]]; then \ + dnf config-manager --set-disabled codeready-builder-for-rhel-8-s390x-rpms ; \ + elif [[ "$(uname -m)" == 'ppc64le' ]]; then \ + dnf config-manager --set-disabled codeready-builder-for-rhel-8-ppc64le-rpms ; \ + fi && \ dnf -y -q module reset container-tools maven nodejs python3.11 php; \ dnf -y -q module install container-tools:rhel8 maven:3.6 nodejs:$NODEJS_VERSION php:$PHP_VERSION && \ dnf -y -q install --setopt=tsflags=nodocs \ From 6600618e548d4df01b51016091d1a274c6450b11 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Fri, 17 Nov 2023 14:05:51 -0500 Subject: [PATCH 19/27] Fix for incorrect python module Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index cbc08889ed..05cc692930 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -145,7 +145,7 @@ RUN \ elif [[ "$(uname -m)" == 'ppc64le' ]]; then \ dnf config-manager --set-disabled codeready-builder-for-rhel-8-ppc64le-rpms ; \ fi && \ - dnf -y -q module reset container-tools maven nodejs python3.11 php; \ + dnf -y -q module reset container-tools maven nodejs php; \ dnf -y -q module install container-tools:rhel8 maven:3.6 nodejs:$NODEJS_VERSION php:$PHP_VERSION && \ dnf -y -q install --setopt=tsflags=nodocs \ golang \ From 1d669ad224129187d43717f3e958484ca9a49477 Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Fri, 17 Nov 2023 20:46:46 -0400 Subject: [PATCH 20/27] Update devspaces-udi/Dockerfile Co-authored-by: Angel Misevski --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 05cc692930..d72dc6f81c 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -71,7 +71,7 @@ FROM ubi8-minimal:8.8-1072 USER root ENV \ - # We install everything to /home/tooling/ as /home/user/ may get overriden, see github.com/eclipse/che/issues/22412 + # We install everything to /home/tooling/ as /home/user/ may get overwritten, see github.com/eclipse/che/issues/22412 HOME=/home/tooling \ NODEJS_VERSION="18" \ PYTHON_VERSION="3.11" \ From 27cc42cc1d5df66aa914e0059537983c72ae164f Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Fri, 17 Nov 2023 20:46:58 -0400 Subject: [PATCH 21/27] Update devspaces-udi/Dockerfile Co-authored-by: Angel Misevski --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index d72dc6f81c..465fa42c94 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -182,7 +182,7 @@ RUN \ mkdir -p /opt && \ # add user and configure it useradd -u 1000 -G wheel,root -d /home/user --shell /bin/bash -m user && \ - # Bash-related files are backed up to /home/tooling/ incase they are deleted when persistUserHome is enabled. + # Bash-related files are backed up to /home/tooling/ in case they are deleted when persistUserHome is enabled. cp /home/user/.bashrc /home/tooling/.bashrc && \ cp /home/user/.bash_profile /home/tooling/.bash_profile && \ # $PROFILE_EXT contains all additions made to the bash environment From c41126da383a94fda933de039e051c2a256f7bdc Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 20 Nov 2023 13:53:23 -0500 Subject: [PATCH 22/27] Ensure PATH contains /home/user/ and /home/tooling/ entries Signed-off-by: Andrew Obuchowicz --- devspaces-udi/Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 917e91ffb0..4da772139e 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -83,9 +83,10 @@ ENV \ JAVA_HOME_17=/usr/lib/jvm/java-17-openjdk \ JAVA_HOME_11=/usr/lib/jvm/java-11-openjdk \ JAVA_HOME_8=/usr/lib/jvm/java-1.8.0-openjdk \ - JAVA_HOME="/home/tooling/.java/current" \ - GOBIN="/home/tooling/go/bin/" \ - PATH="/home/user/.local/bin:/home/tooling/.local/bin:/home/tooling/.java/current/bin:/home/tooling/node_modules/.bin/:/home/tooling/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/tooling/go/bin:${PATH:-/bin:/usr/bin}" \ + JAVA_HOME="/home/user/.java/current" \ + GOBIN="/home/user/go/bin/" \ + # We have $PATH entries in /home/tooling/ (in addition to /home/user/) to ensure binaries can be found in case /home/user/ has been ovewritten and stow has not yet run in the entrypoint + PATH="/home/user/.local/bin:/home/user/.java/current/bin:/home/user/node_modules/.bin/:/home/user/.npm-global/bin/:/opt/app-root/src/.npm-global/bin/:/usr/share/maven/bin:/usr/bin:/home/user/go/bin::/home/tooling/.local/bin:/home/tooling/.java/current/bin:/home/tooling/node_modules/.bin/:/home/tooling/.npm-global/bin/:/home/tooling/go/bin:${PATH:-/bin:/usr/bin}" \ MANPATH="/usr/share/man:${MANPATH}" \ JAVACONFDIRS="/etc/java${JAVACONFDIRS:+:}${JAVACONFDIRS:-}" \ XDG_CONFIG_DIRS="/etc/xdg:${XDG_CONFIG_DIRS:-/etc/xdg}" \ From 82cfdbf20baa32aae578b0675216e01ddc742543 Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 20 Nov 2023 13:54:36 -0500 Subject: [PATCH 23/27] fixup! Disable code ready builder repo after building stow --- devspaces-udi/Dockerfile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 4da772139e..c51699fc10 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -139,12 +139,7 @@ RUN \ microdnf install -y dnf && \ # Disable code ready builder repo's to prevent accidentally installing incorrect packages dnf -y -q install 'dnf-command(config-manager)' && \ - if [[ "$(uname -m)" == 'x86_64' ]]; then \ - dnf config-manager --set-disabled codeready-builder-for-rhel-8-x86_64-rpms ; \ - elif [[ "$(uname -m)" == 's390x' ]]; then \ - dnf config-manager --set-disabled codeready-builder-for-rhel-8-s390x-rpms ; \ - elif [[ "$(uname -m)" == 'ppc64le' ]]; then \ - dnf config-manager --set-disabled codeready-builder-for-rhel-8-ppc64le-rpms ; \ + dnf config-manager --set-disabled codeready-* && \ fi && \ dnf -y -q module reset container-tools maven nodejs php; \ dnf -y -q module install container-tools:rhel8 maven:3.6 nodejs:$NODEJS_VERSION php:$PHP_VERSION && \ From 49b87a91878960a9e8fcc8dce624a5e32fa698fe Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Mon, 20 Nov 2023 18:24:50 -0500 Subject: [PATCH 24/27] Create ~/.java/current/ symbolic links in /home/tooling/ instead of /home/user/ In order for stow in the UDI's entrypoint to complete successfully, any files present in /home/user/ (that are not in the .stow-local-ignore) must not also exist in /home/tooling/, otherwise a conflict would occur. Since the symbolic link creation from JAVA_HOME_8/11/17 occurs before stow is executed, the symbolic link must be created from JAVA_HOME_8/11/17 -> /home/tooling/ to prevent a stow conflict. Stow will then create a symbolic link from /home/tooling/.java/current/ -> /home/user/.java/current/ so that JAVA_HOME remains valid. Signed-off-by: Andrew Obuchowicz --- devspaces-udi/etc/entrypoint.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/devspaces-udi/etc/entrypoint.sh b/devspaces-udi/etc/entrypoint.sh index abbb66e378..bd9806d4f7 100755 --- a/devspaces-udi/etc/entrypoint.sh +++ b/devspaces-udi/etc/entrypoint.sh @@ -47,19 +47,19 @@ fi # use java 17 if USE_JAVA17 is set to 'true', # by default it is java 11 ############################################################################# -rm -rf "${HOME}"/.java/current -mkdir -p "${HOME}"/.java/current +rm -rf /home/tooling/.java/current +mkdir -p /home/tooling/.java/current if [ "${USE_JAVA8}" == "true" ] && [ ! -z "${JAVA_HOME_8}" ]; then - ln -s "${JAVA_HOME_8}"/* "${HOME}"/.java/current + ln -s "${JAVA_HOME_8}"/* /home/tooling/.java/current echo "Java environment set to ${JAVA_HOME_8}" elif [ "${USE_JAVA17}" == "true" ] && [ ! -z "${JAVA_HOME_17}" ]; then - ln -s "${JAVA_HOME_17}"/* "${HOME}"/.java/current + ln -s "${JAVA_HOME_17}"/* /home/tooling/.java/current echo "Java environment set to ${JAVA_HOME_17}" else # End of Support for OpenJDK 11 in October 2024 # https://access.redhat.com/articles/1299013 echo "TODO: it needs to set JDK 17 as default before OpenJDK 11 hits EOL in October 2024" - ln -s "${JAVA_HOME_11}"/* "${HOME}"/.java/current + ln -s "${JAVA_HOME_11}"/* /home/tooling/.java/current echo "Java environment set to ${JAVA_HOME_11}" fi From 4321b734dd14e16bff9b37fe81a1e13e037cc0fa Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Tue, 21 Nov 2023 10:19:42 -0400 Subject: [PATCH 25/27] Update devspaces-udi/Dockerfile --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index c51699fc10..9b3101afd2 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -137,7 +137,7 @@ COPY --chown=0:0 etc/.stow-local-ignore /home/tooling/ RUN \ # install all the rpms and modules microdnf install -y dnf && \ - # Disable code ready builder repo's to prevent accidentally installing incorrect packages + # Disable codeready-builder repos to prevent accidentally installing incorrect packages dnf -y -q install 'dnf-command(config-manager)' && \ dnf config-manager --set-disabled codeready-* && \ fi && \ From d94abfc7a0d2d2542068a7a44e3f6f5bacec0efd Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Tue, 21 Nov 2023 10:20:57 -0400 Subject: [PATCH 26/27] Update devspaces-udi/Dockerfile --- devspaces-udi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 9b3101afd2..8eef237a63 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -141,7 +141,7 @@ RUN \ dnf -y -q install 'dnf-command(config-manager)' && \ dnf config-manager --set-disabled codeready-* && \ fi && \ - dnf -y -q module reset container-tools maven nodejs php; \ + dnf -y -q module reset container-tools maven nodejs php; \ dnf -y -q module install container-tools:rhel8 maven:3.6 nodejs:$NODEJS_VERSION php:$PHP_VERSION && \ dnf -y -q install --setopt=tsflags=nodocs \ golang \ From 9df2e2c212aa881ebe6edea45ae0752d8ba530ff Mon Sep 17 00:00:00 2001 From: Andrew Obuchowicz Date: Tue, 21 Nov 2023 10:40:48 -0500 Subject: [PATCH 27/27] fixup! Disable code ready builder repo after building stow --- devspaces-udi/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/devspaces-udi/Dockerfile b/devspaces-udi/Dockerfile index 8eef237a63..cd11c6e9ac 100644 --- a/devspaces-udi/Dockerfile +++ b/devspaces-udi/Dockerfile @@ -140,7 +140,6 @@ RUN \ # Disable codeready-builder repos to prevent accidentally installing incorrect packages dnf -y -q install 'dnf-command(config-manager)' && \ dnf config-manager --set-disabled codeready-* && \ - fi && \ dnf -y -q module reset container-tools maven nodejs php; \ dnf -y -q module install container-tools:rhel8 maven:3.6 nodejs:$NODEJS_VERSION php:$PHP_VERSION && \ dnf -y -q install --setopt=tsflags=nodocs \