From b5e26fe6156792ef4dd987adf7623e95d7614d09 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 8 Sep 2022 16:27:40 +0200 Subject: [PATCH 1/2] :tada: Make the devenv docker image multiplatform Add support for aarch64 --- docker/devenv/Dockerfile | 79 ++++++++++++++++++++++++++++++++++------ manage.sh | 18 ++++++++- 2 files changed, 84 insertions(+), 13 deletions(-) diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile index 3a7138921..bcdb548d9 100644 --- a/docker/devenv/Dockerfile +++ b/docker/devenv/Dockerfile @@ -5,8 +5,8 @@ ARG DEBIAN_FRONTEND=noninteractive ENV NODE_VERSION=v16.17.0 \ CLOJURE_VERSION=1.11.1.1149 \ - CLJKONDO_VERSION=2022.06.22 \ - BABASHKA_VERSION=0.8.156 \ + CLJKONDO_VERSION=2022.09.08 \ + BABASHKA_VERSION=0.9.162 \ LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 @@ -103,8 +103,24 @@ RUN set -ex; \ ; \ rm -rf /var/lib/apt/lists/*; -RUN set -ex; \ - curl -LfsSo /tmp/openjdk.tar.gz https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_linux_hotspot_18.0.1_10.tar.gz; \ +RUN set -eux; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + ESUM='37ceaf232a85cce46bcccfd71839854e8b14bf3160e7ef72a676b9cae45ee8af'; \ + BINARY_URL='https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_aarch64_linux_hotspot_18.0.1_10.tar.gz'; \ + ;; \ + amd64|x86_64) \ + ESUM='16b1d9d75f22c157af04a1fd9c664324c7f4b5163c022b382a2f2e8897c1b0a2'; \ + BINARY_URL='https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_linux_hotspot_18.0.1_10.tar.gz'; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ + curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \ + echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \ mkdir -p /usr/lib/jvm/openjdk; \ cd /usr/lib/jvm/openjdk; \ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \ @@ -122,20 +138,33 @@ RUN set -ex; \ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -; \ echo "deb http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" >> /etc/apt/sources.list.d/postgresql.list; \ apt-get -qq update; \ - apt-get -qqy install postgresql-client-13; \ + apt-get -qqy install postgresql-client-14; \ rm -rf /var/lib/apt/lists/*; -RUN set -ex; \ - curl -LfsSo /tmp/nodejs.tar.xz https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.xz; \ + +RUN set -eux; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + BINARY_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-arm64.tar.xz"; \ + ;; \ + amd64|x86_64) \ + BINARY_URL="https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz"; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ + curl -LfsSo /tmp/nodejs.tar.xz ${BINARY_URL}; \ mkdir -p /usr/local/nodejs; \ cd /usr/local/nodejs; \ tar -xf /tmp/nodejs.tar.xz --strip-components=1; \ chown -R root /usr/local/nodejs; \ - PATH="$PATH:/usr/local/nodejs/bin"; \ - /usr/local/nodejs/bin/npm install --location=global yarn; \ - /usr/local/nodejs/bin/npm install --location=global svgo; \ + /usr/local/nodejs/bin/npm install -g yarn; \ rm -rf /tmp/nodejs.tar.xz; +# TODO: waiting for aarch64 build # Install clj-kondo RUN set -ex; \ curl -LfsSo /tmp/clj-kondo.zip https://github.com/borkdude/clj-kondo/releases/download/v$CLJKONDO_VERSION/clj-kondo-$CLJKONDO_VERSION-linux-amd64.zip; \ @@ -144,8 +173,21 @@ RUN set -ex; \ rm /tmp/clj-kondo.zip; RUN set -ex; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + BINARY_URL="https://github.com/babashka/babashka/releases/download/v$BABASHKA_VERSION/babashka-$BABASHKA_VERSION-linux-aarch64.tar.gz"; \ + ;; \ + amd64|x86_64) \ + BINARY_URL="https://github.com/babashka/babashka/releases/download/v$BABASHKA_VERSION/babashka-$BABASHKA_VERSION-linux-amd64.tar.gz"; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ cd /tmp; \ - curl -LfsSo /tmp/babashka.tar.gz https://github.com/babashka/babashka/releases/download/v$BABASHKA_VERSION/babashka-$BABASHKA_VERSION-linux-amd64.tar.gz; \ + curl -LfsSo /tmp/babashka.tar.gz ${BINARY_URL}; \ cd /usr/local/bin; \ tar -xf /tmp/babashka.tar.gz; \ rm -rf /tmp/babashka.tar.gz; @@ -153,7 +195,20 @@ RUN set -ex; \ # Install minio client RUN set -ex; \ - wget -O /tmp/mc https://dl.min.io/client/mc/release/linux-amd64/mc; \ + ARCH="$(dpkg --print-architecture)"; \ + case "${ARCH}" in \ + aarch64|arm64) \ + BINARY_URL="https://dl.min.io/client/mc/release/linux-arm64/mc"; \ + ;; \ + amd64|x86_64) \ + BINARY_URL="https://dl.min.io/client/mc/release/linux-amd64/mc"; \ + ;; \ + *) \ + echo "Unsupported arch: ${ARCH}"; \ + exit 1; \ + ;; \ + esac; \ + wget -O /tmp/mc ${BINARY_URL}; \ mv /tmp/mc /usr/local/bin/; \ chmod +x /usr/local/bin/mc; diff --git a/manage.sh b/manage.sh index 97b501ca6..de4398405 100755 --- a/manage.sh +++ b/manage.sh @@ -23,7 +23,23 @@ function build-devenv { echo "Building development image $DEVENV_IMGNAME:latest..." pushd docker/devenv; - docker build -t $DEVENV_IMGNAME:latest . + + docker buildx inspect penpot > /dev/null 2>&1; + docker run --privileged --rm tonistiigi/binfmt --install all + + + if [ $? -eq 1 ]; then + docker buildx create --name=penpot --use + docker buildx inspect --bootstrap > /dev/null 2>&1; + else + docker buildx use penpot; + docker buildx inspect --bootstrap > /dev/null 2>&1; + fi + + # docker build -t $DEVENV_IMGNAME:latest . + docker buildx build --platform linux/amd64,linux/arm64 --push -t $DEVENV_IMGNAME:latest .; + docker pull $DEVENV_IMGNAME:latest; + popd; } From 172a39c2e296bf307bad7cf62c4f4988220f05ba Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 12 Sep 2022 09:39:44 +0200 Subject: [PATCH 2/2] :sparkles: Improve storage sharding replacing uuid/next with uuid/random --- backend/src/app/storage.clj | 2 +- manage.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/app/storage.clj b/backend/src/app/storage.clj index a4e7209ea..4b714d42f 100644 --- a/backend/src/app/storage.clj +++ b/backend/src/app/storage.clj @@ -88,7 +88,7 @@ [{:keys [conn backend executor]} {:keys [::content ::expired-at ::touched-at] :as params}] (us/assert ::storage-content content) (px/with-dispatch executor - (let [id (uuid/next) + (let [id (uuid/random) mdata (cond-> (get-metadata params) (satisfies? impl/IContentHash content) diff --git a/manage.sh b/manage.sh index de4398405..438da6f8f 100755 --- a/manage.sh +++ b/manage.sh @@ -24,9 +24,8 @@ function build-devenv { pushd docker/devenv; - docker buildx inspect penpot > /dev/null 2>&1; docker run --privileged --rm tonistiigi/binfmt --install all - + docker buildx inspect penpot > /dev/null 2>&1; if [ $? -eq 1 ]; then docker buildx create --name=penpot --use