Merge branch 'feature/KASM-2016_ARM' into 'develop'

Resolve KASM-2016 "Feature/ arm"

Closes KASM-2016

See merge request kasm-technologies/internal/workspaces-images!16
This commit is contained in:
Matthew McClaskey 2021-10-27 18:55:31 +00:00
commit 437bd60b2e
12 changed files with 120 additions and 32 deletions

View File

@ -1,6 +1,10 @@
image: docker image: docker
services: services:
- docker:dind - docker:dind
variables:
DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG}
PLATFORM: "linux/amd64"
ARM_BUILDS: ",chromium,firefox,ubuntu-bionic-desktop,terminal,remmina,rdesktop,"
stages: stages:
- build - build
@ -14,24 +18,28 @@ before_script:
# Jobs for the develop and release branches. They should push to the private and public repos # Jobs for the develop and release branches. They should push to the private and public repos
build: build:
stage: build stage: build
image: kasmweb/docker-buildx-private:develop
script: script:
- BUILD_PLATFORM=$PLATFORM
- if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi;
- echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}"
# to get qemu ready
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# to prepare the buildx env
- docker buildx create --use
# Ensure readme and description files are present # Ensure readme and description files are present
- ls docs/$KASM_IMAGE/README.md - ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt - ls docs/$KASM_IMAGE/description.txt
- docker build -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH -f dockerfile-kasm-$KASM_IMAGE --build-arg BASE_TAG="develop" . - docker buildx build --push --platform $BUILD_PLATFORM -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH --build-arg BASE_TAG="develop" -f dockerfile-kasm-$KASM_IMAGE .
- docker push ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH
- docker push ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH
- docker push ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH
- docker push ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH
only: only:
- develop - develop
- /^release\/.*$/ - /^release\/.*$/
except: except:
- schedules - schedules
tags:
- aws-autoscale
parallel: parallel:
matrix: matrix:
- KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ] - KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ]
@ -43,17 +51,26 @@ build:
build_dev: build_dev:
stage: build stage: build
image: kasmweb/docker-buildx-private:develop
script: script:
- BUILD_PLATFORM=$PLATFORM
- if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi;
- echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}"
# to get qemu ready
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# to prepare the buildx env
- docker buildx create --use
# Ensure readme and description files are present # Ensure readme and description files are present
- ls docs/$KASM_IMAGE/README.md - ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt - ls docs/$KASM_IMAGE/description.txt
# Equivilant to docker build and docker push. Builds amd64 natively uses qemu for arm64.
- docker build -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH -f dockerfile-kasm-$KASM_IMAGE --build-arg BASE_TAG="develop" . # The only way to push multiple architectures to the same tag is to use buildx.
- docker buildx build --push --platform $BUILD_PLATFORM -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH --build-arg BASE_TAG="develop" -f dockerfile-kasm-$KASM_IMAGE .
- docker push ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH
except: except:
- develop - develop
- /^release\/.*$/ - /^release\/.*$/
tags:
- aws-autoscale
parallel: parallel:
matrix: matrix:
- KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ] - KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ]
@ -62,18 +79,26 @@ build_dev:
# These jobs are for the "rolling" release of the images. They should only run for scheduled jobs and should only push the rolling tags # These jobs are for the "rolling" release of the images. They should only run for scheduled jobs and should only push the rolling tags
build_schedules: build_schedules:
image: kasmweb/docker-buildx-private:develop
stage: build stage: build
script: script:
- BUILD_PLATFORM=$PLATFORM
- if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi;
- echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}"
# to get qemu ready
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# to prepare the buildx env
- docker buildx create --use
# Ensure readme and description files are present # Ensure readme and description files are present
- ls docs/$KASM_IMAGE/README.md - ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt - ls docs/$KASM_IMAGE/description.txt
# Equivilant to docker build and docker push. Builds amd64 natively uses qemu for arm64.
- docker build -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH -f dockerfile-kasm-$KASM_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" . # The only way to push multiple architectures to the same tag is to use buildx.
- docker buildx build --push --platform $BUILD_PLATFORM -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
- docker push ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH
- docker push ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH
only: only:
- schedules - schedules
tags:
- aws-autoscale
parallel: parallel:
matrix: matrix:
- KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ] - KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ]
@ -97,4 +122,3 @@ update_readmes:
parallel: parallel:
matrix: matrix:
- KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ] - KASM_IMAGE: [chrome, chromium, firefox, desktop, desktop-deluxe, firefox-mobile, tor-browser, doom, edge, terminal, vmware-horizon, remmina, rdesktop, brave, discord, sublime-text, gimp, vs-code, slack, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, ubuntu-bionic-desktop, maltego, centos-7-desktop, telegram ]

View File

@ -4,6 +4,12 @@ set -ex
CHROME_ARGS="--password-store=basic --no-sandbox --ignore-gpu-blocklist --user-data-dir --no-first-run --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" CHROME_ARGS="--password-store=basic --no-sandbox --ignore-gpu-blocklist --user-data-dir --no-first-run --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'"
CHROME_VERSION=$1 CHROME_VERSION=$1
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "$ARCH" == "arm64" ] ; then
echo "Chrome not supported on arm64, skipping Chrome installation"
exit 0
fi
if [ "$DISTRO" = centos ]; then if [ "$DISTRO" = centos ]; then
if [ ! -z "${CHROME_VERSION}" ]; then if [ ! -z "${CHROME_VERSION}" ]; then
wget https://dl.google.com/linux/chrome/rpm/stable/x86_64/google-chrome-stable-${CHROME_VERSION}.x86_64.rpm -O chrome.rpm wget https://dl.google.com/linux/chrome/rpm/stable/x86_64/google-chrome-stable-${CHROME_VERSION}.x86_64.rpm -O chrome.rpm

View File

@ -27,7 +27,7 @@ fi
if [ "$DISTRO" != centos ]; then if [ "$DISTRO" != centos ]; then
# Update firefox to utilize the system certificate store instead of the one that ships with firefox # Update firefox to utilize the system certificate store instead of the one that ships with firefox
rm /usr/lib/firefox/libnssckbi.so rm /usr/lib/firefox/libnssckbi.so
ln /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so ln /usr/lib/$(arch)-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so
fi fi
if [ "$DISTRO" = centos ]; then if [ "$DISTRO" = centos ]; then

View File

@ -3,7 +3,8 @@
set -e set -e
libgtk_deb=libgtk.deb libgtk_deb=libgtk.deb
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
wget https://kasmweb-build-artifacts.s3.amazonaws.com/kasm-gtk-3-restricted-file-chooser/de486e8c3c5f3d3c0f898fb9d6e05755897b1970/output/libgtk-3-0_3.22.30-1ubuntu4_amd64.deb -O $libgtk_deb wget https://kasmweb-build-artifacts.s3.amazonaws.com/kasm-gtk-3-restricted-file-chooser/5ed0c7b5bf4b56562269b3527b3446febc8bd91a/output/libgtk-3-0_3.22.30-1ubuntu4_${ARCH}.deb -O $libgtk_deb
apt-get install -y --allow-downgrades ./"$libgtk_deb" apt-get install -y --allow-downgrades ./"$libgtk_deb"
rm "$libgtk_deb" rm "$libgtk_deb"

View File

@ -1,5 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "OBS for arm64 currently not supported, skipping install"
exit 0
fi
apt-get update apt-get update
apt-get install -y mesa-utils libglu1-mesa-dev freeglut3-dev mesa-common-dev apt-get install -y mesa-utils libglu1-mesa-dev freeglut3-dev mesa-common-dev
add-apt-repository -y ppa:obsproject/obs-studio add-apt-repository -y ppa:obsproject/obs-studio
@ -10,4 +18,4 @@ chmod +x $HOME/Desktop/com.obsproject.Studio.desktop
wget https://github.com/CatxFish/obs-v4l2sink/releases/download/0.1.0/obs-v4l2sink.deb wget https://github.com/CatxFish/obs-v4l2sink/releases/download/0.1.0/obs-v4l2sink.deb
apt-get install ./obs-v4l2sink.deb apt-get install ./obs-v4l2sink.deb
rm -f obs-v4l2sink.deb rm -f obs-v4l2sink.deb

View File

@ -1,6 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
curl -L -o only_office.deb "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb"
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "$ARCH" == "arm64" ] ; then
echo "Only Office is not supported on arm64, skipping Only Office installation"
exit 0
fi
curl -L -o only_office.deb "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_${ARCH}.deb"
apt-get update apt-get update
apt-get install -y ./only_office.deb apt-get install -y ./only_office.deb
rm -rf only_office.deb rm -rf only_office.deb

View File

@ -1,7 +1,15 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "Signal for arm64 currently not supported, skipping install"
exit 0
fi
wget -O- https://updates.signal.org/desktop/apt/keys.asc | apt-key add - wget -O- https://updates.signal.org/desktop/apt/keys.asc | apt-key add -
echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" | tee -a /etc/apt/sources.list.d/signal-xenial.list echo "deb [arch=${ARCH}] https://updates.signal.org/desktop/apt xenial main" | tee -a /etc/apt/sources.list.d/signal-xenial.list
apt-get update apt-get update
apt-get install -y signal-desktop maximus apt-get install -y signal-desktop maximus
cp /usr/share/applications/signal-desktop.desktop $HOME/Desktop/ cp /usr/share/applications/signal-desktop.desktop $HOME/Desktop/

View File

@ -1,10 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
wget -q https://downloads.slack-edge.com/linux_releases/slack-desktop-4.3.2-amd64.deb ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "Slack for arm64 currently not supported, skipping install"
exit 0
fi
wget -q https://downloads.slack-edge.com/linux_releases/slack-desktop-4.3.2-${ARCH}.deb
apt-get update apt-get update
apt-get install -y maximus apt-get install -y maximus
apt-get install -y ./slack-desktop-4.3.2-amd64.deb apt-get install -y ./slack-desktop-4.3.2-${ARCH}.deb
rm slack-desktop-4.3.2-amd64.deb rm slack-desktop-4.3.2-${ARCH}.deb
sed -i 's,/usr/bin/slack,/usr/bin/slack --no-sandbox,g' /usr/share/applications/slack.desktop sed -i 's,/usr/bin/slack,/usr/bin/slack --no-sandbox,g' /usr/share/applications/slack.desktop
cp /usr/share/applications/slack.desktop $HOME/Desktop/ cp /usr/share/applications/slack.desktop $HOME/Desktop/
chmod +x $HOME/Desktop/slack.desktop chmod +x $HOME/Desktop/slack.desktop

View File

@ -1,8 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "Teams for arm64 currently not supported, skipping install"
exit 0
fi
curl -L -o teams.deb "https://go.microsoft.com/fwlink/p/?linkid=2112886&clcid=0x409&culture=en-us&country=us" curl -L -o teams.deb "https://go.microsoft.com/fwlink/p/?linkid=2112886&clcid=0x409&culture=en-us&country=us"
apt-get install -y ./teams.deb apt-get install -y ./teams.deb
rm teams.deb rm teams.deb
sed -i "s/Exec=teams/Exec=teams --no-sandbox/g" /usr/share/applications/teams.desktop sed -i "s/Exec=teams/Exec=teams --no-sandbox/g" /usr/share/applications/teams.desktop
cp /usr/share/applications/teams.desktop $HOME/Desktop/ cp /usr/share/applications/teams.desktop $HOME/Desktop/
chmod +x $HOME/Desktop/teams.desktop chmod +x $HOME/Desktop/teams.desktop

View File

@ -1,6 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "Terraform for arm64 currently not supported, skipping install"
exit 0
fi
curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -
apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main" apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
apt-get update apt-get update

View File

@ -1,12 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
wget -q https://update.code.visualstudio.com/latest/linux-deb-x64/stable -O vs_code_amd64.deb ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/x64/g')
dpkg -i vs_code_amd64.deb
wget -q https://update.code.visualstudio.com/latest/linux-deb-${ARCH}/stable -O vs_code.deb
dpkg -i vs_code.deb
sed -i 's#/usr/share/code/code#/usr/share/code/code --no-sandbox##' /usr/share/applications/code.desktop sed -i 's#/usr/share/code/code#/usr/share/code/code --no-sandbox##' /usr/share/applications/code.desktop
cp /usr/share/applications/code.desktop $HOME/Desktop cp /usr/share/applications/code.desktop $HOME/Desktop
chmod +x $HOME/Desktop/code.desktop chmod +x $HOME/Desktop/code.desktop
chown 1000:1000 $HOME/Desktop/code.desktop chown 1000:1000 $HOME/Desktop/code.desktop
rm vs_code_amd64.deb rm vs_code.deb
# Conveniences for python development # Conveniences for python development
apt-get update apt-get update

View File

@ -1,9 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -ex set -ex
wget -q https://zoom.us/client/latest/zoom_amd64.deb
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g')
if [ "${ARCH}" == "arm64" ] ; then
echo "Zoom for arm64 currently not supported, skipping install"
exit 0
fi
wget -q https://zoom.us/client/latest/zoom_${ARCH}.deb
apt-get update apt-get update
apt-get install -y maximus apt-get install -y maximus
apt-get install -y ./zoom_amd64.deb apt-get install -y ./zoom_${ARCH}.deb
rm zoom_amd64.deb rm zoom_amd64.deb
cp /usr/share/applications/Zoom.desktop $HOME/Desktop/ cp /usr/share/applications/Zoom.desktop $HOME/Desktop/
chmod +x $HOME/Desktop/Zoom.desktop chmod +x $HOME/Desktop/Zoom.desktop