che icon indicating copy to clipboard operation
che copied to clipboard

Add support for devfiles with popular images e.g. ubuntu, debian

Open olexii4 opened this issue 1 year ago • 19 comments

Describe the bug

We cannot start a workspace with the che-code editor and a ubuntu or debian container.

Che version

7.82@latest

Steps to reproduce

  1. Create a gist with one of the standard images as a dev-container:
schemaVersion: 2.2.0
metadata:
  generateName: empty-ubuntu-
components:
  - name: runtime
    container:
      image: docker.io/ubuntu:20.04
      args:
        - tail
        - '-f'
        - /dev/null

or use the created one. 2. Create a new workspace from the gist:

{che-server}#https://gist.githubusercontent.com/olexii4/aafcb34e0a396a03f3e1bc644f10f624/raw/9386bac1621e7320c14c8b09163fd40cc68e1d16/devfile.yaml
  1. You will see an infinity loop after the workspace starts:

Empty ubuntu with Eclipse CHE

Nodejs starter with Eclipse CHE

Expected behavior

A new workspace should be started without any issues.

Runtime

OpenShift

Screenshots

Знімок екрана 2024-03-04 о 16 09 27 Знімок екрана 2024-03-04 о 16 11 05

Installation method

chectl/latest, chectl/next

Environment

Linux, macOS

Eclipse Che Logs

No response

Additional context

Empty ubuntu with Eclipse CHE

Nodejs starter with Eclipse CHE

olexii4 avatar Mar 04 '24 14:03 olexii4

сс: @RomanNikitenko

ibuziuk avatar Mar 04 '24 14:03 ibuziuk

@ibuziuk I provided support for ubi9-based containers, but no one worked on ubuntu support.

So, I would say:

  • at the current step it's expected that starting IDE doesn't work for ubuntu
  • I'm not sure bug label is suitable for this issue as AFAIK we didn't have it working previously

RomanNikitenko avatar Mar 04 '24 19:03 RomanNikitenko

How about images provided by us PizzaFactory project ? We bake Debian, Ubuntu, and Alpine based images almost everyday.

https://github.com/pizzafactory-contorno

They are not UBI-like but only specific tools are contained (similar to ancient versions of che-images).

Even though I suppose you can make your swiss-army-knife from our base images. https://hub.docker.com/r/pizzafactory0contorno/piatto

monaka avatar Mar 05 '24 11:03 monaka

@monaka Hello!

We bake Debian, Ubuntu, and Alpine based images almost everyday. They are not UBI-like but only specific tools are contained

I think @olexii4 means that Che-Code should start in a vanilla ubuntu container, so like Che-Code should bring Node.js and all required libraries to a user's container.

RomanNikitenko avatar Mar 05 '24 13:03 RomanNikitenko

The quick fix for bringing Node.js and all required libraries:

FROM docker.io/debian:buster

USER 0

RUN apt-get update && apt-get install -y curl && apt-get clean

ENV NODE_VERSION=v18.18.2
ENV NODE_DISTRO=linux-x64
ENV NODE_BASE_URL=[https://nodejs.org/dist/${NODE_VERSION}](https://nodejs.org/dist/$%7BNODE_VERSION%7D)

RUN curl -fsSL ${NODE_BASE_URL}/node-${NODE_VERSION}-${NODE_DISTRO}.tar.gz -o node-${NODE_VERSION}-${NODE_DISTRO}.tar.gz \
  && mkdir -p /usr/local/lib/nodejs \
  && tar -xzf node-${NODE_VERSION}-${NODE_DISTRO}.tar.gz -C /usr/local/lib/nodejs \
  && rm node-${NODE_VERSION}-${NODE_DISTRO}.tar.gz

ENV VSCODE_NODEJS_RUNTIME_DIR=/usr/local/lib/nodejs/node-${NODE_VERSION}-${NODE_DISTRO}/bin
ENV PATH=${VSCODE_NODEJS_RUNTIME_DIR}:$PATH

olexii4 avatar Mar 05 '24 15:03 olexii4

Something similar I described in another issue for ubuntu https://github.com/eclipse/che/issues/22183#issuecomment-1527121963

RomanNikitenko avatar Mar 05 '24 16:03 RomanNikitenko

I think @olexii4 means that Che-Code should start in a vanilla ubuntu container,

Hmm, but the quick fix that is shown by @olexii4 isn't a vanilla image...

so like Che-Code should bring Node.js and all required libraries to a user's container.

I'm not sure why this plan fixes the issue... It might be that I should dig a little deeper.

monaka avatar Mar 05 '24 22:03 monaka

but the quick fix that is shown by @olexii4 isn't a vanilla image...

I would say - it's a workaround

RomanNikitenko avatar Mar 06 '24 08:03 RomanNikitenko

@RomanNikitenko I think I see the point of this issue. che-code should provide /checode/checode-linux-libc/{ubuntu|deibian|brah-brah}, right?

monaka avatar Mar 20 '24 13:03 monaka

@monaka

che-code should provide /checode/checode-linux-libc/{ubuntu|deibian|brah-brah}, right?

We use that approach for ubi8/ubi9.

In fact, to run Che-Code in a user's container we need:

  • Node.js
  • Che-Code assembly
  • some libraries are required for Node.js + VS Code dependencies

At starting a workspace we copy Node.js + Che-Code assembly to a user's container. The problem is: Node.js relies on some shared libraries: image

For example, it's possible to start a workspace for docker.io/ubuntu: 22.04 as a user's container. It means that docker.io/ubuntu: 22.04 has required libraries. At the same time it's impossible to start a workspace for the docker.io/ubuntu:20.04 based container - some libraries are absent in the image/container.

Node.js can not be run if a library is absent in a user's container.
So, we need a solution that will provide all required libraries to a user's container.

RomanNikitenko avatar Mar 20 '24 13:03 RomanNikitenko

So, we need a solution that will provide all required libraries to a user's container.

Well. And it can be solved by ...

  • Adding some shared libs to /checode/checode-linux-libc/{Ubuntu|...}/lib.
  • Adding a path /checode/.../lib to LD_LIBRARY_PATH.

monaka avatar Mar 21 '24 13:03 monaka

@monaka We use such approach: https://github.com/che-incubator/che-code/blob/a711ca09a1e0a6e0ac3c2a88f17be2e5f6de679a/build/scripts/entrypoint-volume.sh#L94

RomanNikitenko avatar Mar 21 '24 13:03 RomanNikitenko

I read https://github.com/che-incubator/che-code/pull/332 also. I suppose I can add some contributions to che-code, as some of my customers will want to use Ubuntu based images.

BTW... I guess there are similar issues in jetbrains-editor-images potentially, right?

monaka avatar Mar 21 '24 22:03 monaka

I suppose I can add some contributions to che-code, as some of my customers will want to use Ubuntu based images.

You are very welcome!

BTW... I guess there are similar issues in jetbrains-editor-images potentially, right?

If I'm not mistaken, it's an example of such problem: https://github.com/eclipse/che/issues/22847#issuecomment-1964310789

RomanNikitenko avatar Mar 22 '24 05:03 RomanNikitenko

@RomanNikitenko PTAL - https://github.com/jart/cosmopolitan/releases/tag/3.5.0

ibuziuk avatar Jun 25 '24 11:06 ibuziuk

@ibuziuk will explore it when come back to the current issue, thank you!

RomanNikitenko avatar Jun 25 '24 12:06 RomanNikitenko

I checked to build Node with CosmoCC. I couldn't build the master branch of Node. Because the version of gcc/g++ in CosmoCC is too fresh to build Node. I suppose we need to build our CosmoCC with downgraded gcc/g++. (Or to send PR to nodejs/node, ... of course, it's a harder way...)

monaka avatar Aug 04 '24 08:08 monaka

We should invest into automation for verification of the popular images - https://github.com/devfile/cloud-dev-images

ibuziuk avatar Oct 15 '24 12:10 ibuziuk