diff --git a/components/dashboard/leeway.Dockerfile b/components/dashboard/leeway.Dockerfile index 4b2e91e69ef2b7..f5c67bccfabbfb 100644 --- a/components/dashboard/leeway.Dockerfile +++ b/components/dashboard/leeway.Dockerfile @@ -18,7 +18,7 @@ RUN find . -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' -o -name ' COPY components-gitpod-protocol--gitpod-schema/gitpod-schema.json /www/static/schemas/gitpod-schema.json -FROM caddy/caddy:2.4.0-alpine +FROM caddy:2.4.0-alpine COPY components-dashboard--static/conf/Caddyfile /etc/caddy/Caddyfile COPY --from=compress /www /www diff --git a/components/docker-up/dependencies.sh b/components/docker-up/dependencies.sh index 0525342f60cb69..271d173ea85a0d 100755 --- a/components/docker-up/dependencies.sh +++ b/components/docker-up/dependencies.sh @@ -6,7 +6,9 @@ set -euo pipefail DOCKER_VERSION=19.03.15 -DOCKER_COMPOSE_VERSION=1.29.2 +DOCKER_COMPOSE_VERSION=2.2.3 +SLIRP4NETNS_VERSION=v1.1.12 -curl -o docker.tgz -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz -curl -o docker-compose -fsSL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64 +curl -o docker.tgz -fsSL https://download.docker.com/linux/static/stable/$(uname -m)/docker-${DOCKER_VERSION}.tgz +curl -o docker-compose -fsSL https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-$(uname -m) +curl -o slirp4netns -fsSL https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/slirp4netns-$(uname -m) diff --git a/components/gitpod-db/leeway.Dockerfile b/components/gitpod-db/leeway.Dockerfile index 2e961f82c072d2..037a3337eab3ef 100644 --- a/components/gitpod-db/leeway.Dockerfile +++ b/components/gitpod-db/leeway.Dockerfile @@ -8,7 +8,7 @@ WORKDIR /app RUN /installer/install.sh FROM node:16.13.0 as proxy -RUN wget https://storage.googleapis.com/cloudsql-proxy/v1.23.0/cloud_sql_proxy.linux.amd64 -O /bin/cloud_sql_proxy \ +RUN wget https://storage.googleapis.com/cloudsql-proxy/v1.23.0/cloud_sql_proxy.linux.$(dpkg --print-architecture) -O /bin/cloud_sql_proxy \ && chmod +x /bin/cloud_sql_proxy FROM node:16.13.0-slim diff --git a/components/ide-proxy/Dockerfile b/components/ide-proxy/Dockerfile index 749b4ad5383b51..53033d8ff52bf1 100644 --- a/components/ide-proxy/Dockerfile +++ b/components/ide-proxy/Dockerfile @@ -19,7 +19,7 @@ RUN for FILE in `ls /bin/gitpod-local-companion*`;do \ done -FROM caddy/caddy:2.4.6-alpine +FROM caddy:2.4.6-alpine COPY conf/Caddyfile /etc/caddy/Caddyfile COPY static /www/ diff --git a/components/ide/code/leeway.Dockerfile b/components/ide/code/leeway.Dockerfile index 879d304a7b5e3d..4bbc7c66baa0c0 100644 --- a/components/ide/code/leeway.Dockerfile +++ b/components/ide/code/leeway.Dockerfile @@ -2,7 +2,10 @@ # Licensed under the GNU Affero General Public License (AGPL). # See License-AGPL.txt in the project root for license information. -FROM gitpod/openvscode-server-linux-build-agent:centos7-devtoolset8-x64 as dependencies_builder +FROM gitpod/openvscode-server-linux-build-agent:centos7-devtoolset8 as dependencies_builder +# BUILDER_BASE is a placeholder, will be replaced before build time +# Check BUILD.yaml +FROM BUILDER_BASE as code_installer ARG CODE_COMMIT @@ -16,7 +19,7 @@ WORKDIR /gp-code RUN yarn --cwd remote --frozen-lockfile --network-timeout 180000 -FROM gitpod/openvscode-server-linux-build-agent:bionic-x64 as code_installer +FROM gitpod/openvscode-server-linux-build-agent:bionic as code_installer USER root @@ -44,8 +47,20 @@ RUN yarn --frozen-lockfile --network-timeout 180000 \ && yarn --cwd remote/web --frozen-lockfile --network-timeout 180000 \ && yarn --cwd extensions compile \ && yarn gulp vscode-web-min \ - && yarn gulp vscode-reh-linux-x64-min -COPY --from=dependencies_builder /gp-code/remote/node_modules/ /vscode-reh-linux-x64/node_modules/ +RUN arch="$(uname -m)"; \ + case "$arch" in \ + 'x86_64') \ + yarn gulp vscode-reh-linux-x64-min \ + && mv /vscode-reh-linux-x64 /vscode-reh-linux \ + ;; \ + 'aarch64') \ + yarn gulp vscode-reh-linux-arm64-min \ + && mv /vscode-reh-linux-arm64 /vscode-reh-linux \ + ;; \ + *) echo >&2 "error: unsupported architecture '$arch'"; exit 1 ;; \ + esac; + && yarn gulp vscode-web-min \ +COPY --from=dependencies_builder /gp-code/remote/node_modules/ /vscode-reh-linux/node_modules/ # config for first layer needed by blobserve # we also remove `static/` from resource urls as that's needed by blobserve, @@ -60,12 +75,12 @@ COPY bin /ide/bin RUN chmod -R ugo+x /ide/bin # grant write permissions for built-in extensions -RUN chmod -R ugo+w /vscode-reh-linux-x64/extensions +RUN chmod -R ugo+w /vscode-reh-linux/extensions FROM scratch # copy static web resources in first layer to serve from blobserve COPY --from=code_installer --chown=33333:33333 /vscode-web/ /ide/ -COPY --from=code_installer --chown=33333:33333 /vscode-reh-linux-x64/ /ide/ +COPY --from=code_installer --chown=33333:33333 /vscode-reh-linux/ /ide/ COPY --chown=33333:33333 startup.sh supervisor-ide-config.json /ide/ COPY --from=code_installer --chown=33333:33333 /ide/bin /ide/bin/remote-cli diff --git a/components/image-builder-bob/pkg/builder/builder.go b/components/image-builder-bob/pkg/builder/builder.go index 9e56aed695b47c..0a39c6f1b90293 100644 --- a/components/image-builder-bob/pkg/builder/builder.go +++ b/components/image-builder-bob/pkg/builder/builder.go @@ -12,6 +12,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "syscall" "time" @@ -146,6 +147,7 @@ func buildImage(ctx context.Context, contextDir, dockerfile, authLayer, target s "--frontend=dockerfile.v0", "--local=dockerfile=" + filepath.Dir(dockerfile), "--opt=filename=" + filepath.Base(dockerfile), + "--opt=platform=" + fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), } buildctlCmd := exec.Command("buildctl", buildctlArgs...) diff --git a/components/image-builder-mk3/pkg/resolve/resolve.go b/components/image-builder-mk3/pkg/resolve/resolve.go index ee74dfbeb26a5a..84857a3501f3c9 100644 --- a/components/image-builder-mk3/pkg/resolve/resolve.go +++ b/components/image-builder-mk3/pkg/resolve/resolve.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "runtime" "strings" "sync" "time" @@ -137,13 +138,13 @@ func (sr *StandaloneRefResolver) Resolve(ctx context.Context, ref string, opts . var dgst digest.Digest for _, mf := range mfl.Manifests { - if fmt.Sprintf("%s-%s", mf.Platform.OS, mf.Platform.Architecture) == "linux-amd64" { + if fmt.Sprintf("%s-%s", mf.Platform.OS, mf.Platform.Architecture) == fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH) { dgst = mf.Digest break } } if dgst == "" { - return "", fmt.Errorf("no manifest for platform linux-amd64 found") + return "", fmt.Errorf("no manifest for platform %s found", fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH)) } pref, err = reference.WithDigest(pref, dgst) diff --git a/components/proxy/Dockerfile b/components/proxy/Dockerfile index f5ed33ccab0996..4b81e35e3259c5 100644 --- a/components/proxy/Dockerfile +++ b/components/proxy/Dockerfile @@ -4,7 +4,7 @@ FROM golang:1.17 as builder -RUN curl -fsSL https://github.com/caddyserver/xcaddy/releases/download/v0.2.0/xcaddy_0.2.0_linux_amd64.tar.gz \ +RUN curl -fsSL https://github.com/caddyserver/xcaddy/releases/download/v0.2.0/xcaddy_0.2.0_linux_$(dpkg --print-architecture).tar.gz \ | tar -xzv -C /usr/local/bin/ xcaddy WORKDIR /plugins diff --git a/components/workspacekit/BUILD.yaml b/components/workspacekit/BUILD.yaml index eafa0503cc177b..d038f7f1685123 100644 --- a/components/workspacekit/BUILD.yaml +++ b/components/workspacekit/BUILD.yaml @@ -19,7 +19,7 @@ packages: type: generic config: commands: - - ["sh", "-c", "curl -o fuse-overlayfs -L https://github.com/containers/fuse-overlayfs/releases/download/v1.7.1/fuse-overlayfs-x86_64 && chmod +x fuse-overlayfs"] + - ["sh", "-c", "curl -o fuse-overlayfs -L https://github.com/containers/fuse-overlayfs/releases/download/v1.7.1/fuse-overlayfs-$(uname -m) && chmod +x fuse-overlayfs"] - name: lib type: go srcs: diff --git a/components/workspacekit/leeway.Dockerfile b/components/workspacekit/leeway.Dockerfile index 0034e476dd355b..fae3bf36af1d3f 100644 --- a/components/workspacekit/leeway.Dockerfile +++ b/components/workspacekit/leeway.Dockerfile @@ -5,7 +5,7 @@ FROM alpine:3.15 as download ENV SLIRP4NETNS_VERSION=v1.1.12 WORKDIR /download -RUN wget https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/slirp4netns-x86_64 -O slirp4netns && chmod 755 slirp4netns +RUN wget https://github.com/rootless-containers/slirp4netns/releases/download/${SLIRP4NETNS_VERSION}/slirp4netns-$(uname -m) -O slirp4netns && chmod 755 slirp4netns FROM scratch diff --git a/components/ws-daemon/leeway.Dockerfile b/components/ws-daemon/leeway.Dockerfile index 248982799951f2..3f218b910b56f3 100644 --- a/components/ws-daemon/leeway.Dockerfile +++ b/components/ws-daemon/leeway.Dockerfile @@ -4,9 +4,19 @@ FROM alpine:3.15 as dl WORKDIR /dl -RUN apk add --no-cache curl \ - && curl -OL https://github.com/opencontainers/runc/releases/download/v1.0.1/runc.amd64 \ - && chmod +x runc.amd64 +RUN arch="$(uname -m)"; \ + case "$arch" in \ + 'x86_64') \ + export ARCH='amd64' \ + ;; \ + 'aarch64') \ + export ARCH='arm64' \ + ;; \ + *) echo >&2 "error: unsupported architecture '$arch'"; exit 1 ;; \ + esac; \ + apk add --no-cache curl \ + && curl -o runc -L https://github.com/opencontainers/runc/releases/download/v1.1.0/runc.${ARCH} \ + && chmod +x runc FROM alpine:3.15 @@ -18,7 +28,7 @@ RUN apk add --no-cache git bash openssh-client lz4 e2fsprogs coreutils tar strac RUN apk add --no-cache kubectl --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing -COPY --from=dl /dl/runc.amd64 /usr/bin/runc +COPY --from=dl /dl/runc /usr/bin/runc # Add gitpod user for operations (e.g. checkout because of the post-checkout hook!) RUN addgroup -g 33333 gitpod \ diff --git a/contrib/docker/examples/gitpod-gitlab/gitlab/Dockerfile b/contrib/docker/examples/gitpod-gitlab/gitlab/Dockerfile index 472193dd8dffb5..3b9888669ffda3 100644 --- a/contrib/docker/examples/gitpod-gitlab/gitlab/Dockerfile +++ b/contrib/docker/examples/gitpod-gitlab/gitlab/Dockerfile @@ -3,8 +3,7 @@ FROM rancher/k3s:v1.21.2-k3s1 -ADD https://github.com/krallin/tini/releases/download/v0.19.0/tini-static /tini -RUN chmod +x /tini +RUN apk add --no-cache tini VOLUME /var/gitlab/gitaly VOLUME /var/gitlab/minio @@ -18,4 +17,4 @@ COPY persistent-volumes.yaml /var/lib/rancher/k3s/server/manifests/ COPY entrypoint.sh /entrypoint -ENTRYPOINT [ "/tini", "-g", "--", "/entrypoint" ] +ENTRYPOINT [ "/sbin/tini", "-g", "--", "/entrypoint" ] diff --git a/contrib/docker/gitpod-image/Dockerfile b/contrib/docker/gitpod-image/Dockerfile index f571d1a411250e..c6dab421983f8a 100644 --- a/contrib/docker/gitpod-image/Dockerfile +++ b/contrib/docker/gitpod-image/Dockerfile @@ -3,11 +3,23 @@ FROM rancher/k3s:v1.21.2-k3s1 -ADD https://github.com/krallin/tini/releases/download/v0.19.0/tini-static /tini -RUN chmod +x /tini +RUN apk add --no-cache tini -ADD https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 /bin/yq -RUN chmod +x /bin/yq +ADD https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_arm64 /bin/yq-arm64 +RUN chmod +x /bin/yq-arm64 +ADD https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 /bin/yq-amd64 +RUN chmod +x /bin/yq-amd64 + +RUN arch="$(uname -m)"; \ + case "$arch" in \ + 'x86_64') \ + mv /bin/yq-amd64 /bin/yq \ + ;; \ + 'aarch64') \ + mv /bin/yq-arm64 /bin/yq \ + ;; \ + *) echo >&2 "error: unsupported architecture '$arch'"; exit 1 ;; \ + esac; VOLUME /var/gitpod/docker VOLUME /var/gitpod/docker-registry @@ -22,4 +34,4 @@ COPY chart--helm/gitpod /chart COPY entrypoint.sh /entrypoint -ENTRYPOINT [ "/tini", "-g", "--", "/entrypoint" ] +ENTRYPOINT [ "/sbin/tini", "-g", "--", "/entrypoint" ]