diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 24394c5..ecdd707 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,12 +5,14 @@ variables:
KASM_RELEASE: "1.12.0"
DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG}
PLATFORM: "linux/amd64"
- ARM_BUILDS: ",chromium,firefox,gimp,remmina,terminal,ubuntu-bionic-desktop,ubuntu-focal-desktop,ubuntu-jammy-desktop,vlc,vs-code,doom,sublime-text,tor-browser,java-dev,telegram,opensuse-15-desktop,oracle-8-desktop,libre-office,thunderbird,audacity,deluge,filezilla,inkscape,pinta,qbittorrent,vivaldi,minetest,retroarch,super-tux-kart,"
+ ARM_BUILDS: ",chromium,firefox,gimp,remmina,terminal,ubuntu-bionic-desktop,ubuntu-focal-desktop,ubuntu-jammy-desktop,vlc,vs-code,doom,sublime-text,tor-browser,java-dev,telegram,opensuse-15-desktop,oracle-8-desktop,libre-office,thunderbird,audacity,deluge,filezilla,inkscape,pinta,qbittorrent,vivaldi,minetest,retroarch,super-tux-kart,ubuntu-focal-dind,ubuntu-focal-dind-rootless,ubuntu-jammy-dind,ubuntu-jammy-dind-rootless,almalinux-8-desktop,almalinux-9-desktop,alpine-317-desktop,debian-bullseye-desktop,fedora-37-desktop,kali-rolling-desktop,oracle-9-desktop,parrotos-5-desktop,rockylinux-8-desktop,rockylinux-9-desktop,"
CORE_IMAGE_TAG: "develop"
CORE_IMAGE: "core-ubuntu-focal"
USE_PRIVATE_IMAGES: 0
-# YAML level anchors
+######################
+# YAML level anchors #
+######################
.MULTI_ARCH_BUILDS: &MULTI_ARCH_BUILDS
- audacity
- chromium
@@ -38,9 +40,23 @@ variables:
- vs-code
.MULTI_ARCH_BUILDS2: &MULTI_ARCH_BUILDS2
+ - almalinux-8-desktop
+ - almalinux-9-desktop
+ - alpine-317-desktop
+ - debian-bullseye-desktop
+ - fedora-37-desktop
+ - kali-rolling-desktop
- minetest
+ - oracle-9-desktop
+ - parrotos-5-desktop
- retroarch
+ - rockylinux-8-desktop
+ - rockylinux-9-desktop
- super-tux-kart
+ - ubuntu-focal-dind
+ - ubuntu-focal-dind-rootless
+ - ubuntu-jammy-dind
+ - ubuntu-jammy-dind-rootless
- vivaldi
.SINGLE_ARCH_BUILDS: &SINGLE_ARCH_BUILDS
@@ -59,17 +75,86 @@ variables:
- only-office
- oracle-7-desktop
- postman
+ - remnux-focal-desktop
- signal
- steam
- - teams
- tracelabs
+ - unityhub
+ - zoom
+ - zsnes
+
+.BROWSER_IMAGES: &BROWSER_IMAGES
+ - brave
+ - chrome
+ - chromium
+ - edge
+ - firefox
+ - tor-browser
+ - vivaldi
+
+.APP_IMAGES: &APP_IMAGES
+ - atom
+ - audacity
+ - blender
+ - deluge
+ - discord
+ - filezilla
+ - gimp
+ - hunchly
+ - inkscape
+ - insomnia
+ - java-dev
+ - libre-office
+ - maltego
+ - only-office
+ - pinta
+ - postman
+ - qbittorrent
+ - remmina
+ - signal
+ - steam
+ - sublime-text
+ - telegram
+ - terminal
+ - thunderbird
+ - unityhub
+ - vlc
+ - vs-code
+ - zoom
+ - zsnes
+
+.UBUNTU_IMAGES: &UBUNTU_IMAGES
+ - desktop
+ - desktop-deluxe
+ - remnux-focal-desktop
+ - ubuntu-focal-desktop
+ - ubuntu-jammy-desktop
- ubuntu-focal-dind
- ubuntu-focal-dind-rootless
- ubuntu-jammy-dind
- ubuntu-jammy-dind-rootless
- - unityhub
- - zoom
- - zsnes
+
+.NON_UBUNTU_IMAGES: &NON_UBUNTU_IMAGES
+ - almalinux-8-desktop
+ - almalinux-9-desktop
+ - alpine-317-desktop
+ - centos-7-desktop
+ - debian-bullseye-desktop
+ - kali-rolling-desktop
+ - opensuse-15-desktop
+ - oracle-7-desktop
+ - oracle-8-desktop
+ - oracle-9-desktop
+ - parrotos-5-desktop
+ - rockylinux-8-desktop
+ - rockylinux-9-desktop
+ - tracelabs
+
+.GAME_IMAGES: &GAME_IMAGES
+ - doom
+ - minetest
+ - retroarch
+ - super-tux-kart
stages:
- readme
@@ -83,7 +168,9 @@ before_script:
- export SANITIZED_BRANCH="$(echo $CI_COMMIT_REF_NAME | sed -r 's#^release/##' | sed 's/\//_/g')"
- export SANITIZED_ROLLING_BRANCH=${SANITIZED_BRANCH}-rolling
-# 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_browser_images:
stage: build
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -100,8 +187,16 @@ build_browser_images:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
- - 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG=$CORE_IMAGE_TAG -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG=$CORE_IMAGE_TAG
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- develop
- /^release\/.*$/
@@ -111,7 +206,7 @@ build_browser_images:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [chrome, chromium, firefox, tor-browser, edge, brave, vivaldi]
+ - KASM_IMAGE: *BROWSER_IMAGES
build_app_images:
stage: build
@@ -129,8 +224,16 @@ build_app_images:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
- - 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG=$CORE_IMAGE_TAG -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG=$CORE_IMAGE_TAG
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- develop
- /^release\/.*$/
@@ -140,7 +243,7 @@ build_app_images:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [sublime-text, gimp, vs-code, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, maltego, telegram, hunchly, java-dev, terminal, remmina, discord, libre-office, thunderbird, atom, audacity, deluge, filezilla, inkscape, pinta, qbittorrent, blender, unityhub]
+ - KASM_IMAGE: *APP_IMAGES
build_ubuntu_desktop_images:
stage: build
@@ -157,12 +260,22 @@ build_ubuntu_desktop_images:
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
+ - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ # Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
- - 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG=$CORE_IMAGE_TAG -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG=$CORE_IMAGE_TAG
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- develop
- /^release\/.*$/
@@ -172,7 +285,7 @@ build_ubuntu_desktop_images:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [desktop, desktop-deluxe, ubuntu-focal-desktop, ubuntu-jammy-desktop, ubuntu-focal-dind, ubuntu-focal-dind-rootless, ubuntu-jammy-dind, ubuntu-jammy-dind-rootless]
+ - KASM_IMAGE: *UBUNTU_IMAGES
build_non_ubuntu:
stage: build
@@ -189,16 +302,33 @@ build_non_ubuntu:
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
# Set base image based on kasm_image variable
+ - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi
- if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi
- - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi
+ - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi
+ - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi
- if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi
- - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi
+ - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
- - 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG=$CORE_IMAGE_TAG -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG=$CORE_IMAGE_TAG
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- develop
- /^release\/.*$/
@@ -208,7 +338,44 @@ build_non_ubuntu:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [centos-7-desktop, tracelabs, opensuse-15-desktop, oracle-7-desktop, oracle-8-desktop]
+ - KASM_IMAGE: *NON_UBUNTU_IMAGES
+
+build_fedora_37:
+ stage: build
+ script:
+ - >
+ docker build
+ -t ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_BRANCH
+ -f dockerfile-kasm-fedora-37-desktop .
+ - docker push ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_BRANCH
+ only:
+ - develop
+ - /^release\/.*$/
+ except:
+ - schedules
+ tags:
+ - ${TAG}
+ parallel:
+ matrix:
+ - TAG: [ aws-autoscale, aws-autoscale-arm64 ]
+
+manifest_fedora_37:
+ stage: manifest
+ script:
+ - docker pull ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_BRANCH
+ - docker pull ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH
+ - "docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH || :"
+ - docker manifest create ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH
+ - docker manifest annotate ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH --os linux --arch arm64 --variant v8
+ - docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH
+ only:
+ - develop
+ - /^release\/.*$/
+ except:
+ - schedules
+ needs: [ build_fedora_37 ]
+ tags:
+ - aws-autoscale
build_games:
stage: build
@@ -226,8 +393,16 @@ build_games:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
- - 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG=$CORE_IMAGE_TAG -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG=$CORE_IMAGE_TAG
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- develop
- /^release\/.*$/
@@ -237,9 +412,11 @@ build_games:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [doom, minetest, retroarch, super-tux-kart]
+ - KASM_IMAGE: *GAME_IMAGES
-# These jobs should run on the feature/bugfix branches - anything that is not the develop or release branches. It should only push images to the private repos
+################################################################################################################################################################
+# These jobs should run on the feature/bugfix branches - anything that is not the develop or release branches. It should only push images to the private repos #
+################################################################################################################################################################
build_multi_arch_dev:
stage: build
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -248,12 +425,24 @@ build_multi_arch_dev:
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
# Set core image names
+ - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi
- if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi
- - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi
+ - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi
+ - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi
- if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi
- - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
+ - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi
+ - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
- >
@@ -281,12 +470,24 @@ build_multi_arch_dev2:
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
# Set core image names
+ - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi
- if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi
- - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi
+ - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi
+ - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi
- if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi
- - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
+ - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi
+ - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
- >
@@ -317,11 +518,7 @@ build_single_arch_dev:
- if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi
- if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
- if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi
- - if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi
- - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
- >
@@ -343,7 +540,7 @@ build_single_arch_dev:
test_multi_arch_dev:
stage: test
script:
- - docker pull kasmweb/kasm-tester:1.12.0
+ - docker pull kasmweb/kasm-tester:1.13.0
- >
docker run --rm --privileged
-e KASM_PORT=443
@@ -360,7 +557,7 @@ test_multi_arch_dev:
-e S3_BUCKET=kasm-ci
-e COMMIT=${CI_COMMIT_SHA}
-e REPO=workspaces-images
- kasmweb/kasm-tester:1.12.0
+ kasmweb/kasm-tester:1.13.0
except:
- develop
- /^release\/.*$/
@@ -375,7 +572,7 @@ test_multi_arch_dev:
test_multi_arch_dev2:
stage: test
script:
- - docker pull kasmweb/kasm-tester:1.12.0
+ - docker pull kasmweb/kasm-tester:1.13.0
- >
docker run --rm --privileged
-e KASM_PORT=443
@@ -392,7 +589,7 @@ test_multi_arch_dev2:
-e S3_BUCKET=kasm-ci
-e COMMIT=${CI_COMMIT_SHA}
-e REPO=workspaces-images
- kasmweb/kasm-tester:1.12.0
+ kasmweb/kasm-tester:1.13.0
except:
- develop
- /^release\/.*$/
@@ -407,7 +604,7 @@ test_multi_arch_dev2:
test_single_arch_dev:
stage: test
script:
- - docker pull kasmweb/kasm-tester:1.12.0
+ - docker pull kasmweb/kasm-tester:1.13.0
- >
docker run --rm --privileged
-e KASM_PORT=443
@@ -424,7 +621,7 @@ test_single_arch_dev:
-e S3_BUCKET=kasm-ci
-e COMMIT=${CI_COMMIT_SHA}
-e REPO=workspaces-images
- kasmweb/kasm-tester:1.12.0
+ kasmweb/kasm-tester:1.13.0
except:
- develop
- /^release\/.*$/
@@ -520,7 +717,9 @@ link_tests_multi_arch_dev2:
- ARCH: [ aarch64, x86_64 ]
KASM_IMAGE: *MULTI_ARCH_BUILDS2
-# 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_browser_images:
image: ${ORG_NAME}/docker-buildx-private:develop
stage: build
@@ -537,17 +736,23 @@ build_schedules_browser_images:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE-IMAGE-private; fi;
-
# Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64.
# 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH"
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- schedules
tags:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [chrome, chromium, firefox, tor-browser, edge, brave, vivaldi]
+ - KASM_IMAGE: *BROWSER_IMAGES
build_schedules_app_images:
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -565,17 +770,23 @@ build_schedules_app_images:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
# Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64.
# 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH"
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- schedules
tags:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [sublime-text, gimp, vs-code, teams, only-office, zoom, signal, steam, postman, insomnia, zsnes, vlc, maltego, telegram, hunchly, java-dev, terminal, remmina, discord, libre-office, thunderbird, atom, audacity, deluge, filezilla, inkscape, pinta, qbittorrent, blender, unityhub]
+ - KASM_IMAGE: *APP_IMAGES
build_schedules_ubuntu_desktop_images:
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -591,22 +802,30 @@ build_schedules_ubuntu_desktop_images:
# Ensure readme and description files are present
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
- # Check for private variable to build against private core images
+ # Set base image based on kasm_image variable
+ - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
- if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi
+ # Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
# Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64.
# 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH"
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- schedules
tags:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [desktop, desktop-deluxe, ubuntu-focal-desktop, ubuntu-jammy-desktop, ubuntu-focal-dind, ubuntu-focal-dind-rootless, ubuntu-jammy-dind, ubuntu-jammy-dind-rootless]
+ - KASM_IMAGE: *UBUNTU_IMAGES
build_schedules_non_ubuntu:
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -623,24 +842,71 @@ build_schedules_non_ubuntu:
- ls docs/$KASM_IMAGE/README.md
- ls docs/$KASM_IMAGE/description.txt
# Set base image based on kasm_image variable
+ - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi
- if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi
- - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi
+ - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi
+ - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi
+ - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
- if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi
- if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi
- - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi
+ - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi
+ - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi
+ - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi
+ - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
# Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64.
# 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH"
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- schedules
tags:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [centos-7-desktop, tracelabs, opensuse-15-desktop, oracle-7-desktop, oracle-8-desktop]
+ - KASM_IMAGE: *NON_UBUNTU_IMAGES
+
+build_fedora_37_schedules:
+ stage: build
+ script:
+ - >
+ docker build
+ -t ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_ROLLING_BRANCH
+ -f dockerfile-kasm-fedora-37-desktop .
+ - docker push ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_ROLLING_BRANCH
+ only:
+ - schedules
+ tags:
+ - ${TAG}
+ parallel:
+ matrix:
+ - TAG: [ aws-autoscale, aws-autoscale-arm64 ]
+
+manifest_fedora_37_schedules:
+ stage: manifest
+ script:
+ - docker pull ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_ROLLING_BRANCH
+ - docker pull ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH
+ - "docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH || :"
+ - docker manifest create ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH
+ - docker manifest annotate ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH --os linux --arch arm64 --variant v8
+ - docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH
+ only:
+ - schedules
+ needs: [ build_fedora_37_schedules ]
+ tags:
+ - aws-autoscale
build_schedules_games:
image: ${ORG_NAME}/docker-buildx-private:develop
@@ -658,18 +924,27 @@ build_schedules_games:
- ls docs/$KASM_IMAGE/description.txt
# Check for private variable to build against private core images
- if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi;
-
# Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64.
# 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_IMAGE=$CORE_IMAGE --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" -f dockerfile-kasm-$KASM_IMAGE .
+ - >
+ 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_IMAGE=$CORE_IMAGE
+ --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH"
+ -f dockerfile-kasm-$KASM_IMAGE .
only:
- schedules
tags:
- aws-autoscale
parallel:
matrix:
- - KASM_IMAGE: [doom, minetest, retroarch, super-tux-kart]
+ - KASM_IMAGE: *GAME_IMAGES
+###############################
+# Readme Updates in Dockerhub #
+###############################
update_readmes:
stage: readme
script:
@@ -689,6 +964,9 @@ update_readmes:
parallel:
matrix:
- KASM_IMAGE:
+ - almalinux-8-desktop
+ - almalinux-9-desktop
+ - alpine-317-desktop
- atom
- audacity
- blender
@@ -696,12 +974,14 @@ update_readmes:
- centos-7-desktop
- chrome
- chromium
+ - debian-bullseye-desktop
- deluge
- desktop
- desktop-deluxe
- discord
- doom
- edge
+ - fedora-37-desktop
- filezilla
- firefox
- gimp
@@ -709,33 +989,31 @@ update_readmes:
- inkscape
- insomnia
- java-dev
- - libre-office
+ - kali-rolling-desktop
+ - libre-office
- maltego
+ - minetest
- only-office
- opensuse-15-desktop
- oracle-7-desktop
- oracle-8-desktop
+ - oracle-9-desktop
+ - parrotos-5-desktop
- pinta
- postman
- qbittorrent
- remmina
+ - retroarch
+ - rockylinux-8-desktop
+ - rockylinux-9-desktop
- signal
- steam
- sublime-text
+ - super-tux-kart
- teams
- telegram
- terminal
- thunderbird
- - tor-browser
- - tracelabs
- - ubuntu-focal-desktop
- - ubuntu-jammy-desktop
- - ubuntu-focal-dind
- - ubuntu-focal-dind-rootless
- - unityhub
- - vlc
- - vs-code
- - zoom
update_readmes2:
stage: readme
@@ -756,9 +1034,16 @@ update_readmes2:
parallel:
matrix:
- KASM_IMAGE:
- - minetest
- - retroarch
- - super-tux-kart
+ - tor-browser
+ - tracelabs
+ - ubuntu-focal-desktop
+ - ubuntu-focal-dind
+ - ubuntu-focal-dind-rootless
+ - ubuntu-jammy-desktop
- ubuntu-jammy-dind
- ubuntu-jammy-dind-rootless
+ - unityhub
- vivaldi
+ - vlc
+ - vs-code
+ - zoom
diff --git a/dockerfile-kasm-almalinux-8-desktop b/dockerfile-kasm-almalinux-8-desktop
new file mode 100644
index 0000000..6c26e4d
--- /dev/null
+++ b/dockerfile-kasm-almalinux-8-desktop
@@ -0,0 +1,92 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-almalinux-8"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=almalinux8
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install NextCloud
+COPY ./src/ubuntu/install/nextcloud $INST_SCRIPTS/nextcloud/
+RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/nextcloud/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install OBS Studio
+COPY ./src/oracle/install/obs $INST_SCRIPTS/obs/
+RUN bash $INST_SCRIPTS/obs/install_obs.sh && rm -rf $INST_SCRIPTS/obs/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-almalinux-9-desktop b/dockerfile-kasm-almalinux-9-desktop
new file mode 100644
index 0000000..a50e0c9
--- /dev/null
+++ b/dockerfile-kasm-almalinux-9-desktop
@@ -0,0 +1,88 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-alamalinux-9"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=almalinux9
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install Visual Studio Code
+COPY ./src/oracle/install/vs_code $INST_SCRIPTS/vs_code/
+RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_code/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-alpine-317-desktop b/dockerfile-kasm-alpine-317-desktop
new file mode 100644
index 0000000..05b013c
--- /dev/null
+++ b/dockerfile-kasm-alpine-317-desktop
@@ -0,0 +1,97 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-alpine-317"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=alpine317
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+### Install Tools
+COPY ./src/alpine/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/alpine/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/alpine/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/alpine/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/alpine/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Remmina
+COPY ./src/alpine/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install GIMP
+COPY ./src/alpine/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Ansible
+COPY ./src/alpine/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/alpine/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Thunderbird
+COPY ./src/alpine/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+### Install Audacity
+COPY ./src/alpine/install/audacity $INST_SCRIPTS/audacity/
+RUN bash $INST_SCRIPTS/audacity/install_audacity.sh && rm -rf $INST_SCRIPTS/audacity/
+
+### Install Blender
+COPY ./src/alpine/install/blender $INST_SCRIPTS/blender/
+RUN bash $INST_SCRIPTS/blender/install_blender.sh && rm -rf $INST_SCRIPTS/blender/
+
+### Install Geany
+COPY ./src/alpine/install/geany $INST_SCRIPTS/geany/
+RUN bash $INST_SCRIPTS/geany/install_geany.sh && rm -rf $INST_SCRIPTS/geany/
+
+### Install Inkscape
+COPY ./src/alpine/install/inkscape $INST_SCRIPTS/inkscape/
+RUN bash $INST_SCRIPTS/inkscape/install_inkscape.sh && rm -rf $INST_SCRIPTS/inkscape/
+
+### Install LibreOffice
+COPY ./src/alpine/install/libre_office $INST_SCRIPTS/libre_office/
+RUN bash $INST_SCRIPTS/libre_office/install_libre_office.sh && rm -rf $INST_SCRIPTS/libre_office/
+
+### Install Pinta
+COPY ./src/alpine/install/pinta $INST_SCRIPTS/pinta/
+RUN bash $INST_SCRIPTS/pinta/install_pinta.sh && rm -rf $INST_SCRIPTS/pinta/
+
+### Install OBS
+COPY ./src/alpine/install/obs $INST_SCRIPTS/obs/
+RUN bash $INST_SCRIPTS/obs/install_obs.sh && rm -rf $INST_SCRIPTS/obs/
+
+### Install Filezilla
+COPY ./src/alpine/install/filezilla $INST_SCRIPTS/filezilla/
+RUN bash $INST_SCRIPTS/filezilla/install_filezilla.sh && rm -rf $INST_SCRIPTS/filezilla/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-debian-bullseye-desktop b/dockerfile-kasm-debian-bullseye-desktop
new file mode 100644
index 0000000..64cffc3
--- /dev/null
+++ b/dockerfile-kasm-debian-bullseye-desktop
@@ -0,0 +1,101 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-debian-bullseye"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/ubuntu/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/ubuntu/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Google Chrome
+COPY ./src/ubuntu/install/chrome $INST_SCRIPTS/chrome/
+RUN bash $INST_SCRIPTS/chrome/install_chrome.sh && rm -rf $INST_SCRIPTS/chrome/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN if [ "$(uname -m)" = "aarch64" ]; then bash $INST_SCRIPTS/chromium/install_chromium.sh; fi && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/ubuntu/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install Visual Studio Code
+COPY ./src/ubuntu/install/vs_code $INST_SCRIPTS/vs_code/
+RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_code/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/ubuntu/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install Signal
+COPY ./src/ubuntu/install/signal $INST_SCRIPTS/signal/
+RUN bash $INST_SCRIPTS/signal/install_signal.sh && rm -rf $INST_SCRIPTS/signal/
+
+### Install GIMP
+COPY ./src/ubuntu/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/ubuntu/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install OBS Studio
+COPY ./src/ubuntu/install/obs $INST_SCRIPTS/obs/
+RUN bash $INST_SCRIPTS/obs/install_obs.sh && rm -rf $INST_SCRIPTS/obs/
+
+### Install Ansible
+COPY ./src/ubuntu/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/ubuntu/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/ubuntu/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+# Install Gamepad Testing Utils
+COPY ./src/ubuntu/install/gamepad_utils $INST_SCRIPTS/gamepad_utils/
+RUN bash $INST_SCRIPTS/gamepad_utils/install_gamepad_utils.sh && rm -rf $INST_SCRIPTS/gamepad_utils/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-desktop-deluxe b/dockerfile-kasm-desktop-deluxe
index 12e5c33..02cebe0 100644
--- a/dockerfile-kasm-desktop-deluxe
+++ b/dockerfile-kasm-desktop-deluxe
@@ -54,10 +54,6 @@ RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/n
COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
-### Install Teams
-COPY ./src/ubuntu/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
### Install Only Office
COPY ./src/ubuntu/install/only_office $INST_SCRIPTS/only_office/
RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
diff --git a/dockerfile-kasm-fedora-37-desktop b/dockerfile-kasm-fedora-37-desktop
new file mode 100644
index 0000000..d85948e
--- /dev/null
+++ b/dockerfile-kasm-fedora-37-desktop
@@ -0,0 +1,88 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-fedora-37"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=fedora37
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install Visual Studio Code
+COPY ./src/oracle/install/vs_code $INST_SCRIPTS/vs_code/
+RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_code/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-kali-rolling-desktop b/dockerfile-kasm-kali-rolling-desktop
new file mode 100644
index 0000000..6a06744
--- /dev/null
+++ b/dockerfile-kasm-kali-rolling-desktop
@@ -0,0 +1,35 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-kali-rolling"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+USER root
+
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+ENV INST_SCRIPTS $STARTUPDIR/install
+WORKDIR $HOME
+
+######### Customize Container Here ###########
+
+
+# Install Kali utils
+COPY ./src/ubuntu/install/kali $INST_SCRIPTS/kali/
+RUN bash $INST_SCRIPTS/kali/install_kali.sh && rm -rf $INST_SCRIPTS/kali/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+######### End Customizations ###########
+
+RUN chown 1000:0 $HOME
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
diff --git a/dockerfile-kasm-opensuse-15-desktop b/dockerfile-kasm-opensuse-15-desktop
index c55e7eb..a020298 100644
--- a/dockerfile-kasm-opensuse-15-desktop
+++ b/dockerfile-kasm-opensuse-15-desktop
@@ -76,10 +76,6 @@ RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/tel
COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
-### Install Teams
-COPY ./src/opensuse/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
#ADD ./src/common/scripts $STARTUPDIR
RUN $STARTUPDIR/set_user_permission.sh $HOME
diff --git a/dockerfile-kasm-oracle-7-desktop b/dockerfile-kasm-oracle-7-desktop
index f3efca1..d22e93f 100644
--- a/dockerfile-kasm-oracle-7-desktop
+++ b/dockerfile-kasm-oracle-7-desktop
@@ -4,7 +4,7 @@ FROM kasmweb/$BASE_IMAGE:$BASE_TAG
USER root
-ENV DISTRO=oracle7
+ENV DISTRO=centos
ENV HOME /home/kasm-default-profile
ENV STARTUPDIR /dockerstartup
WORKDIR $HOME
@@ -44,10 +44,6 @@ RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_co
COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
-### Install Teams
-COPY ./src/oracle/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
### Install Only Office
COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
diff --git a/dockerfile-kasm-oracle-8-desktop b/dockerfile-kasm-oracle-8-desktop
index bf26cdb..41946f4 100644
--- a/dockerfile-kasm-oracle-8-desktop
+++ b/dockerfile-kasm-oracle-8-desktop
@@ -51,10 +51,6 @@ RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/n
COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
-### Install Teams
-COPY ./src/oracle/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
### Install Only Office
COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
diff --git a/dockerfile-kasm-oracle-9-desktop b/dockerfile-kasm-oracle-9-desktop
new file mode 100644
index 0000000..47baed6
--- /dev/null
+++ b/dockerfile-kasm-oracle-9-desktop
@@ -0,0 +1,88 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-oracle-9"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=oracle9
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install Visual Studio Code
+COPY ./src/oracle/install/vs_code $INST_SCRIPTS/vs_code/
+RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_code/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-parrotos-5-desktop b/dockerfile-kasm-parrotos-5-desktop
new file mode 100644
index 0000000..6ac7b86
--- /dev/null
+++ b/dockerfile-kasm-parrotos-5-desktop
@@ -0,0 +1,34 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-parrotos-5"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+USER root
+
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+ENV INST_SCRIPTS $STARTUPDIR/install
+WORKDIR $HOME
+
+######### Customize Container Here ###########
+
+# Install Parrot utils
+COPY ./src/ubuntu/install/parrot $INST_SCRIPTS/parrot/
+RUN bash $INST_SCRIPTS/parrot/install_parrot.sh && rm -rf $INST_SCRIPTS/parrot/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+######### End Customizations ###########
+
+RUN chown 1000:0 $HOME
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
diff --git a/dockerfile-kasm-remnux-focal-desktop b/dockerfile-kasm-remnux-focal-desktop
new file mode 100644
index 0000000..d8457d9
--- /dev/null
+++ b/dockerfile-kasm-remnux-focal-desktop
@@ -0,0 +1,31 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-remnux-focal"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+USER root
+
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+ENV INST_SCRIPTS $STARTUPDIR/install
+WORKDIR $HOME
+
+######### Customize Container Here ###########
+
+
+# Install Remnux Utils
+COPY ./src/ubuntu/install/remnux $INST_SCRIPTS/remnux/
+RUN bash $INST_SCRIPTS/remnux/install_remnux.sh && rm -rf $INST_SCRIPTS/remnux/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+######### End Customizations ###########
+
+RUN chown 1000:0 $HOME
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
diff --git a/dockerfile-kasm-rockylinux-8-desktop b/dockerfile-kasm-rockylinux-8-desktop
new file mode 100644
index 0000000..6e28d40
--- /dev/null
+++ b/dockerfile-kasm-rockylinux-8-desktop
@@ -0,0 +1,92 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-rockylinux-8"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=rockylinux8
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install NextCloud
+COPY ./src/ubuntu/install/nextcloud $INST_SCRIPTS/nextcloud/
+RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/nextcloud/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install OBS Studio
+COPY ./src/oracle/install/obs $INST_SCRIPTS/obs/
+RUN bash $INST_SCRIPTS/obs/install_obs.sh && rm -rf $INST_SCRIPTS/obs/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-rockylinux-9-desktop b/dockerfile-kasm-rockylinux-9-desktop
new file mode 100644
index 0000000..f97cad0
--- /dev/null
+++ b/dockerfile-kasm-rockylinux-9-desktop
@@ -0,0 +1,88 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-rockylinux-9"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=rockylinux9
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND noninteractive
+ENV KASM_RX_HOME $STARTUPDIR/kasmrx
+ENV INST_SCRIPTS $STARTUPDIR/install
+
+
+### Install Tools
+COPY ./src/oracle/install/tools $INST_SCRIPTS/tools/
+RUN bash $INST_SCRIPTS/tools/install_tools_deluxe.sh && rm -rf $INST_SCRIPTS/tools/
+
+# Install Utilities
+COPY ./src/oracle/install/misc $INST_SCRIPTS/misc/
+RUN bash $INST_SCRIPTS/misc/install_tools.sh && rm -rf $INST_SCRIPTS/misc/
+
+# Install Chromium
+COPY ./src/ubuntu/install/chromium $INST_SCRIPTS/chromium/
+RUN bash $INST_SCRIPTS/chromium/install_chromium.sh && rm -rf $INST_SCRIPTS/chromium/
+
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+COPY ./src/ubuntu/install/firefox/firefox.desktop $HOME/Desktop/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
+### Install Sublime Text
+COPY ./src/oracle/install/sublime_text $INST_SCRIPTS/sublime_text/
+RUN bash $INST_SCRIPTS/sublime_text/install_sublime_text.sh && rm -rf $INST_SCRIPTS/sublime_text/
+
+### Install Visual Studio Code
+COPY ./src/oracle/install/vs_code $INST_SCRIPTS/vs_code/
+RUN bash $INST_SCRIPTS/vs_code/install_vs_code.sh && rm -rf $INST_SCRIPTS/vs_code/
+
+### Install Remmina
+COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
+RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
+
+### Install Only Office
+COPY ./src/oracle/install/only_office $INST_SCRIPTS/only_office/
+RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
+
+### Install GIMP
+COPY ./src/oracle/install/gimp $INST_SCRIPTS/gimp/
+RUN bash $INST_SCRIPTS/gimp/install_gimp.sh && rm -rf $INST_SCRIPTS/gimp/
+
+### Install Zoom
+COPY ./src/oracle/install/zoom $INST_SCRIPTS/zoom/
+RUN bash $INST_SCRIPTS/zoom/install_zoom.sh && rm -rf $INST_SCRIPTS/zoom/
+
+### Install Ansible
+COPY ./src/oracle/install/ansible $INST_SCRIPTS/ansible/
+RUN bash $INST_SCRIPTS/ansible/install_ansible.sh && rm -rf $INST_SCRIPTS/ansible/
+
+### Install Terraform
+COPY ./src/oracle/install/terraform $INST_SCRIPTS/terraform/
+RUN bash $INST_SCRIPTS/terraform/install_terraform.sh && rm -rf $INST_SCRIPTS/terraform/
+
+### Install Telegram
+COPY ./src/oracle/install/telegram $INST_SCRIPTS/telegram/
+RUN bash $INST_SCRIPTS/telegram/install_telegram.sh && rm -rf $INST_SCRIPTS/telegram/
+
+### Install Thunderbird
+COPY ./src/ubuntu/install/thunderbird $INST_SCRIPTS/thunderbird/
+RUN bash $INST_SCRIPTS/thunderbird/install_thunderbird.sh && rm -rf $INST_SCRIPTS/thunderbird/
+
+#ADD ./src/common/scripts $STARTUPDIR
+RUN $STARTUPDIR/set_user_permission.sh $HOME
+
+RUN rm -f /etc/X11/xinit/Xclients
+
+RUN chown 1000:0 $HOME
+
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+RUN mkdir -p $HOME && chown -R 1000:0 $HOME
+
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-tracelabs b/dockerfile-kasm-tracelabs
index f99e0f5..4c0601c 100644
--- a/dockerfile-kasm-tracelabs
+++ b/dockerfile-kasm-tracelabs
@@ -15,6 +15,10 @@ WORKDIR $HOME
COPY ./src/ubuntu/install/tracelabs $INST_SCRIPTS/tracelabs/
RUN bash $INST_SCRIPTS/tracelabs/install_tracelabs.sh && rm -rf $INST_SCRIPTS/tracelabs/
+# Install Firefox
+COPY ./src/ubuntu/install/firefox/ $INST_SCRIPTS/firefox/
+RUN bash $INST_SCRIPTS/firefox/install_firefox.sh && rm -rf $INST_SCRIPTS/firefox/
+
######### End Customizations ###########
RUN chown 1000:0 $HOME
diff --git a/dockerfile-kasm-ubuntu-focal-desktop b/dockerfile-kasm-ubuntu-focal-desktop
index 1dd080d..a3bc136 100644
--- a/dockerfile-kasm-ubuntu-focal-desktop
+++ b/dockerfile-kasm-ubuntu-focal-desktop
@@ -54,10 +54,6 @@ RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/n
COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
-### Install Teams
-COPY ./src/ubuntu/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
### Install Only Office
COPY ./src/ubuntu/install/only_office $INST_SCRIPTS/only_office/
RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
diff --git a/dockerfile-kasm-ubuntu-jammy-desktop b/dockerfile-kasm-ubuntu-jammy-desktop
index aaa7581..c4a2a41 100644
--- a/dockerfile-kasm-ubuntu-jammy-desktop
+++ b/dockerfile-kasm-ubuntu-jammy-desktop
@@ -54,10 +54,6 @@ RUN bash $INST_SCRIPTS/nextcloud/install_nextcloud.sh && rm -rf $INST_SCRIPTS/n
COPY ./src/ubuntu/install/remmina $INST_SCRIPTS/remmina/
RUN bash $INST_SCRIPTS/remmina/install_remmina.sh && rm -rf $INST_SCRIPTS/remmina/
-### Install Teams
-COPY ./src/ubuntu/install/teams $INST_SCRIPTS/teams/
-RUN bash $INST_SCRIPTS/teams/install_teams.sh && rm -rf $INST_SCRIPTS/teams/
-
### Install Only Office
COPY ./src/ubuntu/install/only_office $INST_SCRIPTS/only_office/
RUN bash $INST_SCRIPTS/only_office/install_only_office.sh && rm -rf $INST_SCRIPTS/only_office/
diff --git a/docs/almalinux-8-desktop/README.md b/docs/almalinux-8-desktop/README.md
new file mode 100644
index 0000000..9cdd0ab
--- /dev/null
+++ b/docs/almalinux-8-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible AlmaLinux 8 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/alamalinux-8-desktop.png "Image Screenshot"
diff --git a/docs/almalinux-8-desktop/demo.txt b/docs/almalinux-8-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/almalinux-8-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/almalinux-8-desktop/description.txt b/docs/almalinux-8-desktop/description.txt
new file mode 100644
index 0000000..7409a1f
--- /dev/null
+++ b/docs/almalinux-8-desktop/description.txt
@@ -0,0 +1 @@
+AlmaLinux 8 desktop for Kasm Workspaces
diff --git a/docs/almalinux-9-desktop/README.md b/docs/almalinux-9-desktop/README.md
new file mode 100644
index 0000000..301860e
--- /dev/null
+++ b/docs/almalinux-9-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible AlmaLinux 9 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/almalinux-9-desktop.png "Image Screenshot"
diff --git a/docs/almalinux-9-desktop/demo.txt b/docs/almalinux-9-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/almalinux-9-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/almalinux-9-desktop/description.txt b/docs/almalinux-9-desktop/description.txt
new file mode 100644
index 0000000..7cc7229
--- /dev/null
+++ b/docs/almalinux-9-desktop/description.txt
@@ -0,0 +1 @@
+AlmaLinux 9 desktop for Kasm Workspaces
diff --git a/docs/alpine-317-desktop/README.md b/docs/alpine-317-desktop/README.md
new file mode 100644
index 0000000..9989c0c
--- /dev/null
+++ b/docs/alpine-317-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Alpine 3.17 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/alpine-317-desktop.png "Image Screenshot"
diff --git a/docs/alpine-317-desktop/demo.txt b/docs/alpine-317-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/alpine-317-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/alpine-317-desktop/description.txt b/docs/alpine-317-desktop/description.txt
new file mode 100644
index 0000000..bbdabab
--- /dev/null
+++ b/docs/alpine-317-desktop/description.txt
@@ -0,0 +1 @@
+Alpine 3.17 desktop for Kasm Workspaces
diff --git a/docs/debian-bullseye-desktop/README.md b/docs/debian-bullseye-desktop/README.md
new file mode 100644
index 0000000..b7a35f0
--- /dev/null
+++ b/docs/debian-bullseye-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Debian Bullseye Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/debian-bullseye-desktop.png "Image Screenshot"
diff --git a/docs/debian-bullseye-desktop/demo.txt b/docs/debian-bullseye-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/debian-bullseye-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/debian-bullseye-desktop/description.txt b/docs/debian-bullseye-desktop/description.txt
new file mode 100644
index 0000000..f25edb4
--- /dev/null
+++ b/docs/debian-bullseye-desktop/description.txt
@@ -0,0 +1 @@
+Debian Bullseye desktop for Kasm Workspaces
diff --git a/docs/fedora-37-desktop/README.md b/docs/fedora-37-desktop/README.md
new file mode 100644
index 0000000..b71943a
--- /dev/null
+++ b/docs/fedora-37-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Fedora 37 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/fedora-37-desktop.png "Image Screenshot"
diff --git a/docs/fedora-37-desktop/demo.txt b/docs/fedora-37-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/fedora-37-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/fedora-37-desktop/description.txt b/docs/fedora-37-desktop/description.txt
new file mode 100644
index 0000000..1b29538
--- /dev/null
+++ b/docs/fedora-37-desktop/description.txt
@@ -0,0 +1 @@
+Fedora 37 desktop for Kasm Workspaces
diff --git a/docs/kali-rolling-desktop/README.md b/docs/kali-rolling-desktop/README.md
new file mode 100644
index 0000000..44f2db9
--- /dev/null
+++ b/docs/kali-rolling-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Kali Rolling Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/kali-rolling-desktop.png "Image Screenshot"
diff --git a/docs/kali-rolling-desktop/demo.txt b/docs/kali-rolling-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/kali-rolling-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/kali-rolling-desktop/description.txt b/docs/kali-rolling-desktop/description.txt
new file mode 100644
index 0000000..9750e4b
--- /dev/null
+++ b/docs/kali-rolling-desktop/description.txt
@@ -0,0 +1 @@
+Kali Rolling desktop for Kasm Workspaces
diff --git a/docs/oracle-9-desktop/README.md b/docs/oracle-9-desktop/README.md
new file mode 100644
index 0000000..9ce7018
--- /dev/null
+++ b/docs/oracle-9-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Oracle 9 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/oracle-9-desktop.png "Image Screenshot"
diff --git a/docs/oracle-9-desktop/demo.txt b/docs/oracle-9-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/oracle-9-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/oracle-9-desktop/description.txt b/docs/oracle-9-desktop/description.txt
new file mode 100644
index 0000000..a3d0730
--- /dev/null
+++ b/docs/oracle-9-desktop/description.txt
@@ -0,0 +1 @@
+Oracle 9 desktop for Kasm Workspaces
diff --git a/docs/parrotos-5-desktop/README.md b/docs/parrotos-5-desktop/README.md
new file mode 100644
index 0000000..4397b12
--- /dev/null
+++ b/docs/parrotos-5-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Parrot OS 5 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/parrotos-5-desktop.png "Image Screenshot"
diff --git a/docs/parrotos-5-desktop/demo.txt b/docs/parrotos-5-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/parrotos-5-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/parrotos-5-desktop/description.txt b/docs/parrotos-5-desktop/description.txt
new file mode 100644
index 0000000..fd1f48a
--- /dev/null
+++ b/docs/parrotos-5-desktop/description.txt
@@ -0,0 +1 @@
+Parrot OS 5 desktop for Kasm Workspaces
diff --git a/docs/remnux-focal-desktop/README.md b/docs/remnux-focal-desktop/README.md
new file mode 100644
index 0000000..6a74d2a
--- /dev/null
+++ b/docs/remnux-focal-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Remnux Focal Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/remnux-focal-desktop.png "Image Screenshot"
diff --git a/docs/remnux-focal-desktop/demo.txt b/docs/remnux-focal-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/remnux-focal-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/remnux-focal-desktop/description.txt b/docs/remnux-focal-desktop/description.txt
new file mode 100644
index 0000000..64b3eb1
--- /dev/null
+++ b/docs/remnux-focal-desktop/description.txt
@@ -0,0 +1 @@
+Remnux Focal desktop for Kasm Workspaces
diff --git a/docs/rockylinux-8-desktop/README.md b/docs/rockylinux-8-desktop/README.md
new file mode 100644
index 0000000..522be34
--- /dev/null
+++ b/docs/rockylinux-8-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Rocky Linux 8 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://5856039.fs1.hubspotusercontent-na1.net/hubfs/5856039/dockerhub/image-screenshots/ubuntu_jammy_desktop.png "Image Screenshot"
diff --git a/docs/rockylinux-8-desktop/demo.txt b/docs/rockylinux-8-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/rockylinux-8-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/rockylinux-8-desktop/description.txt b/docs/rockylinux-8-desktop/description.txt
new file mode 100644
index 0000000..ef81a8c
--- /dev/null
+++ b/docs/rockylinux-8-desktop/description.txt
@@ -0,0 +1 @@
+Rocky Linux 8 desktop for Kasm Workspaces
diff --git a/docs/rockylinux-9-desktop/README.md b/docs/rockylinux-9-desktop/README.md
new file mode 100644
index 0000000..d6a6d8d
--- /dev/null
+++ b/docs/rockylinux-9-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Rocky Linux 9 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/rockylinux-8-desktop.png "Image Screenshot"
diff --git a/docs/rockylinux-9-desktop/demo.txt b/docs/rockylinux-9-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/rockylinux-9-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/rockylinux-9-desktop/description.txt b/docs/rockylinux-9-desktop/description.txt
new file mode 100644
index 0000000..814cc27
--- /dev/null
+++ b/docs/rockylinux-9-desktop/description.txt
@@ -0,0 +1 @@
+Rocky Linux 9 desktop for Kasm Workspaces
diff --git a/docs/teams/demo.txt b/docs/teams/demo.txt
index ef3147d..e6df724 100644
--- a/docs/teams/demo.txt
+++ b/docs/teams/demo.txt
@@ -1,3 +1,7 @@
+# This image is deprecated
+
+Microsoft has retired Teams for Linux [More Info](https://learn.microsoft.com/en-us/microsoftteams/hardware-requirements-for-the-teams-app#hardware-requirements-for-teams-on-linux)
+
# Live Demo
diff --git a/src/alpine/install/ansible/install_ansible.sh b/src/alpine/install/ansible/install_ansible.sh
new file mode 100644
index 0000000..001b613
--- /dev/null
+++ b/src/alpine/install/ansible/install_ansible.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ ansible \
+ python3
diff --git a/src/alpine/install/audacity/audacity.cfg b/src/alpine/install/audacity/audacity.cfg
new file mode 100644
index 0000000..bd1c984
--- /dev/null
+++ b/src/alpine/install/audacity/audacity.cfg
@@ -0,0 +1,2 @@
+[GUI]
+ShowSplashScreen=0
diff --git a/src/alpine/install/audacity/custom_startup.sh b/src/alpine/install/audacity/custom_startup.sh
new file mode 100644
index 0000000..a18f23d
--- /dev/null
+++ b/src/alpine/install/audacity/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="audacity"
+PGREP="audacity"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Audacity"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/audacity/install_audacity.sh b/src/alpine/install/audacity/install_audacity.sh
new file mode 100644
index 0000000..41a3277
--- /dev/null
+++ b/src/alpine/install/audacity/install_audacity.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ audacity
+
+# Desktop icon
+cp /usr/share/applications/audacity.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/audacity.desktop
diff --git a/src/alpine/install/blender/custom_startup.sh b/src/alpine/install/blender/custom_startup.sh
new file mode 100644
index 0000000..c4069ba
--- /dev/null
+++ b/src/alpine/install/blender/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="blender"
+PGREP="blender"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Blender"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/blender/install_blender.sh b/src/alpine/install/blender/install_blender.sh
new file mode 100644
index 0000000..b7823f3
--- /dev/null
+++ b/src/alpine/install/blender/install_blender.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cach \
+ blender
+
+# Desktop icon
+cp /usr/share/applications/blender.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/blender.desktop
diff --git a/src/alpine/install/chromium/custom_startup.sh b/src/alpine/install/chromium/custom_startup.sh
new file mode 100644
index 0000000..46d284c
--- /dev/null
+++ b/src/alpine/install/chromium/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="chromium-browser"
+PGREP="chromium"
+MAXIMIZE="true"
+DEFAULT_ARGS=""
+
+if [[ $MAXIMIZE == 'true' ]] ; then
+ DEFAULT_ARGS+=" --start-maximized"
+fi
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/chromium/install_chromium.sh b/src/alpine/install/chromium/install_chromium.sh
new file mode 100644
index 0000000..d9871bc
--- /dev/null
+++ b/src/alpine/install/chromium/install_chromium.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+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'"
+
+apk add --no-cache \
+ chromium
+
+if [ "$(arch)" == "x86_64" ]; then
+ apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \
+ virtualgl
+fi
+
+REAL_BIN=chromium
+
+cp /usr/share/applications/chromium.desktop $HOME/Desktop/
+chown 1000:1000 $HOME/Desktop/chromium.desktop
+
+mv /usr/bin/chromium-browser /usr/bin/chromium-browser-orig
+cat >/usr/bin/chromium-browser <> $HOME/.config/mimeapps.list <>/etc/chromium/policies/managed/default_managed_policy.json <&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/filezilla/filezilla.xml b/src/alpine/install/filezilla/filezilla.xml
new file mode 100644
index 0000000..fabe9ac
--- /dev/null
+++ b/src/alpine/install/filezilla/filezilla.xml
@@ -0,0 +1,139 @@
+
+
+
+ 1
+ 0
+ 6000
+ 7000
+ 0
+ 0
+
+ http://ip.filezilla-project.org/ip.php
+
+ 1
+ 0
+ 20
+ 0
+ 0
+
+
+ 1
+ 2
+ 5
+ 0
+ 1000
+ 100
+ 0
+ 0
+ 0
+ 0
+ 4194304
+ 262144
+ 0
+ 0
+
+
+
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 10
+ 0
+ 3
+ 1
+ 1
+ 15
+ 600
+ 2
+ 0
+ am|asp|bat|c|cfm|cgi|conf|cpp|css|dhtml|diz|h|hpp|htm|html|in|inc|java|js|jsp|lua|m4|mak|md5|nfo|nsi|pas|patch|pem|php|phtml|pl|po|py|qmail|sh|sha1|sha256|sha512|shtml|sql|svg|tcl|tpl|txt|vbs|xhtml|xml|xrc
+ 1
+ 1
+
+ 0
+ 0
+ 1
+ 7
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3.46.3
+
+
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0 0
+ 0 0
+
+
+ 1
+ 1
+
+ 0
+ 1
+
+ 1
+ 1
+
+ default
+ 125
+ 0
+
+ 1111
+ 111111
+ 0,1,2,3
+ 0,1,2,3,4,5
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+ 0
+
+ 1
+ 1
+
+ 1
+ _
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+
+ 0
+ 0
+
+ /home/kasm-user/.config/filezilla/
+ 0
+ 1
+
+
+
+
diff --git a/src/alpine/install/filezilla/install_filezilla.sh b/src/alpine/install/filezilla/install_filezilla.sh
new file mode 100644
index 0000000..3d5760e
--- /dev/null
+++ b/src/alpine/install/filezilla/install_filezilla.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ filezilla
+
+# Desktop icon
+cp /usr/share/applications/filezilla.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/filezilla.desktop
diff --git a/src/alpine/install/firefox/custom_startup.sh b/src/alpine/install/firefox/custom_startup.sh
new file mode 100644
index 0000000..943d5dd
--- /dev/null
+++ b/src/alpine/install/firefox/custom_startup.sh
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="firefox"
+PGREP="firefox"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Mozilla Firefox"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+# run with vgl if GPU is available
+if [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then
+ START_COMMAND="/opt/VirtualGL/bin/vglrun -d ${KASM_EGL_CARD} $START_COMMAND"
+fi
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/firefox/firefox.desktop b/src/alpine/install/firefox/firefox.desktop
new file mode 100644
index 0000000..e836241
--- /dev/null
+++ b/src/alpine/install/firefox/firefox.desktop
@@ -0,0 +1,221 @@
+[Desktop Entry]
+Version=1.0
+Name=Firefox Web Browser
+Name[ar]=متصفح الويب فَيَرفُكْس
+Name[ast]=Restolador web Firefox
+Name[bn]=ফায়ারফক্স ওয়েব ব্রাউজার
+Name[ca]=Navegador web Firefox
+Name[cs]=Firefox Webový prohlížeč
+Name[da]=Firefox - internetbrowser
+Name[el]=Περιηγητής Firefox
+Name[es]=Navegador web Firefox
+Name[et]=Firefoxi veebibrauser
+Name[fa]=مرورگر اینترنتی Firefox
+Name[fi]=Firefox-selain
+Name[fr]=Navigateur Web Firefox
+Name[gl]=Navegador web Firefox
+Name[he]=דפדפן האינטרנט Firefox
+Name[hr]=Firefox web preglednik
+Name[hu]=Firefox webböngésző
+Name[it]=Firefox Browser Web
+Name[ja]=Firefox ウェブ・ブラウザ
+Name[ko]=Firefox 웹 브라우저
+Name[ku]=Geroka torê Firefox
+Name[lt]=Firefox interneto naršyklė
+Name[nb]=Firefox Nettleser
+Name[nl]=Firefox webbrowser
+Name[nn]=Firefox Nettlesar
+Name[no]=Firefox Nettleser
+Name[pl]=Przeglądarka WWW Firefox
+Name[pt]=Firefox Navegador Web
+Name[pt_BR]=Navegador Web Firefox
+Name[ro]=Firefox – Navigator Internet
+Name[ru]=Веб-браузер Firefox
+Name[sk]=Firefox - internetový prehliadač
+Name[sl]=Firefox spletni brskalnik
+Name[sv]=Firefox webbläsare
+Name[tr]=Firefox Web Tarayıcısı
+Name[ug]=Firefox توركۆرگۈ
+Name[uk]=Веб-браузер Firefox
+Name[vi]=Trình duyệt web Firefox
+Name[zh_CN]=Firefox 网络浏览器
+Name[zh_TW]=Firefox 網路瀏覽器
+Comment=Browse the World Wide Web
+Comment[ar]=تصفح الشبكة العنكبوتية العالمية
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইন্টারনেট ব্রাউজ করুন
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי האינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=Доступ в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=İnternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=Перегляд сторінок Інтернету
+Comment[vi]=Để duyệt các trang web
+Comment[zh_CN]=浏览互联网
+Comment[zh_TW]=瀏覽網際網路
+GenericName=Web Browser
+GenericName[ar]=متصفح ويب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeč
+GenericName[da]=Webbrowser
+GenericName[el]=Περιηγητής διαδικτύου
+GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=Internetový prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sv]=Webbläsare
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络浏览器
+GenericName[zh_TW]=網路瀏覽器
+Keywords=Internet;WWW;Browser;Web;Explorer
+Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
+Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
+Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
+Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
+Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
+Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
+Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ
+Keywords[es]=Explorador;Internet;WWW
+Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
+Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
+Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
+Keywords[hr]=Internet;WWW;preglednik;Web
+Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
+Keywords[it]=Internet;WWW;Browser;Web;Navigatore
+Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
+Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
+Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
+Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
+Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
+Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
+Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
+Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
+Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
+Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
+Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站;
+Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
+Exec=firefox %u
+Terminal=false
+X-MultipleArgs=false
+Type=Application
+Icon=/usr/lib/firefox/browser/chrome/icons/default/default128.png
+Categories=GNOME;GTK;Network;WebBrowser;
+MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
+StartupNotify=true
+Actions=NewWindow;NewPrivateWindow;
+
+[Desktop Action NewWindow]
+Name=Open a New Window
+Name[ar]=افتح نافذة جديدة
+Name[ast]=Abrir una ventana nueva
+Name[bn]=Abrir una ventana nueva
+Name[ca]=Obre una finestra nova
+Name[cs]=Otevřít nové okno
+Name[da]=Åbn et nyt vindue
+Name[de]=Ein neues Fenster öffnen
+Name[el]=Άνοιγμα νέου παραθύρου
+Name[es]=Abrir una ventana nueva
+Name[fi]=Avaa uusi ikkuna
+Name[fr]=Ouvrir une nouvelle fenêtre
+Name[gl]=Abrir unha nova xanela
+Name[he]=פתיחת חלון חדש
+Name[hr]=Otvori novi prozor
+Name[hu]=Új ablak nyitása
+Name[it]=Apri una nuova finestra
+Name[ja]=新しいウィンドウを開く
+Name[ko]=새 창 열기
+Name[ku]=Paceyeke nû veke
+Name[lt]=Atverti naują langą
+Name[nb]=Åpne et nytt vindu
+Name[nl]=Nieuw venster openen
+Name[pt]=Abrir nova janela
+Name[pt_BR]=Abrir nova janela
+Name[ro]=Deschide o fereastră nouă
+Name[ru]=Новое окно
+Name[sk]=Otvoriť nové okno
+Name[sl]=Odpri novo okno
+Name[sv]=Öppna ett nytt fönster
+Name[tr]=Yeni pencere aç
+Name[ug]=يېڭى كۆزنەك ئېچىش
+Name[uk]=Відкрити нове вікно
+Name[vi]=Mở cửa sổ mới
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開啟新視窗
+Exec=firefox -new-window
+OnlyShowIn=Unity;
+
+[Desktop Action NewPrivateWindow]
+Name=Open a New Private Window
+Name[ar]=افتح نافذة جديدة للتصفح الخاص
+Name[ca]=Obre una finestra nova en mode d'incògnit
+Name[de]=Ein neues privates Fenster öffnen
+Name[es]=Abrir una ventana privada nueva
+Name[fi]=Avaa uusi yksityinen ikkuna
+Name[fr]=Ouvrir une nouvelle fenêtre de navigation privée
+Name[he]=פתיחת חלון גלישה פרטית חדש
+Name[hu]=Új privát ablak nyitása
+Name[it]=Apri una nuova finestra anonima
+Name[nb]=Åpne et nytt privat vindu
+Name[ru]=Новое приватное окно
+Name[sl]=Odpri novo okno zasebnega brskanja
+Name[tr]=Yeni bir pencere aç
+Name[uk]=Відкрити нове вікно у потайливому режимі
+Name[zh_TW]=開啟新隱私瀏覽視窗
+Exec=firefox -private-window
+OnlyShowIn=Unity;
diff --git a/src/alpine/install/firefox/install_firefox.sh b/src/alpine/install/firefox/install_firefox.sh
new file mode 100644
index 0000000..e7664ff
--- /dev/null
+++ b/src/alpine/install/firefox/install_firefox.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+set -xe
+
+apk add --no-cache \
+ firefox
+
+# Disabling default first run URL
+cat >/usr/lib/firefox/browser/defaults/preferences/vendor.js <>$HOME/.mozilla/firefox/profiles.ini <&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/gimp/install_gimp.sh b/src/alpine/install/gimp/install_gimp.sh
new file mode 100644
index 0000000..af74a3d
--- /dev/null
+++ b/src/alpine/install/gimp/install_gimp.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ gimp
+
+# Desktop icon
+cp /usr/share/applications/gimp.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/gimp.desktop
diff --git a/src/alpine/install/inkscape/custom_startup.sh b/src/alpine/install/inkscape/custom_startup.sh
new file mode 100644
index 0000000..7233e41
--- /dev/null
+++ b/src/alpine/install/inkscape/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="inkscape"
+PGREP="inkscape"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Inkscape"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/inkscape/install_inkscape.sh b/src/alpine/install/inkscape/install_inkscape.sh
new file mode 100644
index 0000000..b8e2922
--- /dev/null
+++ b/src/alpine/install/inkscape/install_inkscape.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ inkscape
+
+# Default settings and desktop icon
+cp /usr/share/applications/org.inkscape.Inkscape.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/org.inkscape.Inkscape.desktop
diff --git a/src/alpine/install/libre_office/custom_startup.sh b/src/alpine/install/libre_office/custom_startup.sh
new file mode 100644
index 0000000..1db9c9f
--- /dev/null
+++ b/src/alpine/install/libre_office/custom_startup.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+set -ex
+LD_LIBRARY_PATH=:/usr/lib/libreoffice/program:/usr/lib/$(arch)-linux-gnu/
+START_COMMAND="libreoffice"
+PGREP="soffice.bin"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="LibreOffice"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/libre_office/install_libre_office.sh b/src/alpine/install/libre_office/install_libre_office.sh
new file mode 100644
index 0000000..027d6cf
--- /dev/null
+++ b/src/alpine/install/libre_office/install_libre_office.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ libreoffice \
+ openjdk8-jre \
+ openjdk8-jre-base
+
+cp /usr/share/applications/libreoffice-startcenter.desktop $HOME/Desktop/
+chown 1000:1000 $HOME/Desktop/libreoffice-startcenter.desktop
+chmod +x $HOME/Desktop/libreoffice-startcenter.desktop
diff --git a/src/alpine/install/misc/install_tools.sh b/src/alpine/install/misc/install_tools.sh
new file mode 100644
index 0000000..f4bba89
--- /dev/null
+++ b/src/alpine/install/misc/install_tools.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ nano \
+ vim \
+ xdotool \
+ zip
diff --git a/src/opensuse/install/obs/install_obs.sh b/src/alpine/install/obs/install_obs.sh
similarity index 53%
rename from src/opensuse/install/obs/install_obs.sh
rename to src/alpine/install/obs/install_obs.sh
index a59afba..73a7d9a 100644
--- a/src/opensuse/install/obs/install_obs.sh
+++ b/src/alpine/install/obs/install_obs.sh
@@ -1,14 +1,9 @@
#!/usr/bin/env bash
set -ex
-if [ "${DISTRO}" == "oracle8" ]; then
- dnf install -y obs-studio
- dnf clean all
-else
- yum install -y obs-studio
- yum clean all
-fi
+apk add --no-cache \
+ obs-studio
+# Desktop icon
cp /usr/share/applications/com.obsproject.Studio.desktop $HOME/Desktop/
chmod +x $HOME/Desktop/com.obsproject.Studio.desktop
-
diff --git a/src/alpine/install/pinta/custom_startup.sh b/src/alpine/install/pinta/custom_startup.sh
new file mode 100644
index 0000000..56901ab
--- /dev/null
+++ b/src/alpine/install/pinta/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="pinta"
+PGREP="pinta"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Pinta"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/pinta/install_pinta.sh b/src/alpine/install/pinta/install_pinta.sh
new file mode 100644
index 0000000..52d6d95
--- /dev/null
+++ b/src/alpine/install/pinta/install_pinta.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ pinta
+
+# Default settings and desktop icon
+cp /usr/share/applications/pinta.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/pinta.desktop
diff --git a/src/alpine/install/remmina/custom_startup.sh b/src/alpine/install/remmina/custom_startup.sh
new file mode 100644
index 0000000..4bc7833
--- /dev/null
+++ b/src/alpine/install/remmina/custom_startup.sh
@@ -0,0 +1,97 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="remmina"
+PGREP="remmina"
+DEFAULT_ARGS=""
+export MAXIMIZE="false"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+update_profile() {
+ if [ -n "$REMMINA_OPTIONS" ] && [ -n "$REMMINA_PROFILE" ] ; then
+ R_OPTIONS=""
+ for i in ${REMMINA_OPTIONS//,/ }
+ do
+ R_OPTIONS="$R_OPTIONS --set-option $i"
+ done
+
+ remmina --update-profile $REMMINA_PROFILE $R_OPTIONS
+ unset REMMINA_OPTIONS
+ fi
+}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ update_profile
+ $START_COMMAND $ARGS $URL $REMMINA_PROFILE
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/remmina/install_remmina.sh b/src/alpine/install/remmina/install_remmina.sh
new file mode 100644
index 0000000..7460bd5
--- /dev/null
+++ b/src/alpine/install/remmina/install_remmina.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ remmina
+
+# Desktop icon
+cp /usr/share/applications/org.remmina.Remmina.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/org.remmina.Remmina.desktop
diff --git a/src/alpine/install/remmina/remmina.pref b/src/alpine/install/remmina/remmina.pref
new file mode 100644
index 0000000..30d44c7
--- /dev/null
+++ b/src/alpine/install/remmina/remmina.pref
@@ -0,0 +1,13 @@
+[remmina_pref]
+disable_tray_icon=true
+
+[usage_stats]
+periodic_usage_stats_permitted=false
+periodic_usage_stats_last_sent=0
+periodic_usage_stats_uuid_prefix=
+
+[remmina_news]
+periodic_news_permitted=false
+periodic_rmnews_last_get=1617502161
+periodic_rmnews_get_count=2
+periodic_rmnews_uuid_prefix=ONIZ7TTK015NCL
diff --git a/src/alpine/install/terraform/install_terraform.sh b/src/alpine/install/terraform/install_terraform.sh
new file mode 100644
index 0000000..804757f
--- /dev/null
+++ b/src/alpine/install/terraform/install_terraform.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ terraform
diff --git a/src/alpine/install/thunderbird/custom_startup.sh b/src/alpine/install/thunderbird/custom_startup.sh
new file mode 100644
index 0000000..130cf9a
--- /dev/null
+++ b/src/alpine/install/thunderbird/custom_startup.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+set -ex
+START_COMMAND="thunderbird"
+PGREP="thunderbird"
+export MAXIMIZE="true"
+export MAXIMIZE_NAME="Mozilla"
+MAXIMIZE_SCRIPT=$STARTUPDIR/maximize_window.sh
+DEFAULT_ARGS=""
+ARGS=${APP_ARGS:-$DEFAULT_ARGS}
+
+options=$(getopt -o gau: -l go,assign,url: -n "$0" -- "$@") || exit
+eval set -- "$options"
+
+while [[ $1 != -- ]]; do
+ case $1 in
+ -g|--go) GO='true'; shift 1;;
+ -a|--assign) ASSIGN='true'; shift 1;;
+ -u|--url) OPT_URL=$2; shift 2;;
+ *) echo "bad option: $1" >&2; exit 1;;
+ esac
+done
+shift
+
+# Process non-option arguments.
+for arg; do
+ echo "arg! $arg"
+done
+
+FORCE=$2
+
+kasm_exec() {
+ if [ -n "$OPT_URL" ] ; then
+ URL=$OPT_URL
+ elif [ -n "$1" ] ; then
+ URL=$1
+ fi
+
+ # Since we are execing into a container that already has the browser running from startup,
+ # when we don't have a URL to open we want to do nothing. Otherwise a second browser instance would open.
+ if [ -n "$URL" ] ; then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $OPT_URL
+ else
+ echo "No URL specified for exec command. Doing nothing."
+ fi
+}
+
+kasm_startup() {
+ if [ -n "$KASM_URL" ] ; then
+ URL=$KASM_URL
+ elif [ -z "$URL" ] ; then
+ URL=$LAUNCH_URL
+ fi
+
+ if [ -z "$DISABLE_CUSTOM_STARTUP" ] || [ -n "$FORCE" ] ; then
+
+ echo "Entering process startup loop"
+ set +x
+ while true
+ do
+ if ! pgrep -x $PGREP > /dev/null
+ then
+ /usr/bin/filter_ready
+ /usr/bin/desktop_ready
+ set +e
+ bash ${MAXIMIZE_SCRIPT} &
+ $START_COMMAND $ARGS $URL
+ set -e
+ fi
+ sleep 1
+ done
+ set -x
+
+ fi
+
+}
+
+if [ -n "$GO" ] || [ -n "$ASSIGN" ] ; then
+ kasm_exec
+else
+ kasm_startup
+fi
diff --git a/src/alpine/install/thunderbird/install_thunderbird.sh b/src/alpine/install/thunderbird/install_thunderbird.sh
new file mode 100644
index 0000000..200bc78
--- /dev/null
+++ b/src/alpine/install/thunderbird/install_thunderbird.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ thunderbird
+
+# Desktop icon
+cp /usr/share/applications/thunderbird.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/thunderbird.desktop
diff --git a/src/alpine/install/tools/install_tools_deluxe.sh b/src/alpine/install/tools/install_tools_deluxe.sh
new file mode 100644
index 0000000..4e7d1d5
--- /dev/null
+++ b/src/alpine/install/tools/install_tools_deluxe.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -ex
+
+apk add --no-cache \
+ git \
+ tmux \
+ vlc-qt
+
+# Desktop icon
+cp /usr/share/applications/vlc.desktop $HOME/Desktop/
+chmod +x $HOME/Desktop/vlc.desktop
+
+
diff --git a/src/oracle/install/ansible/install_ansible.sh b/src/oracle/install/ansible/install_ansible.sh
index ed287d1..b733e24 100644
--- a/src/oracle/install/ansible/install_ansible.sh
+++ b/src/oracle/install/ansible/install_ansible.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -ex
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf install -y ansible
dnf clean all
else
diff --git a/src/oracle/install/gimp/install_gimp.sh b/src/oracle/install/gimp/install_gimp.sh
index 0b4db44..a1ef1ce 100644
--- a/src/oracle/install/gimp/install_gimp.sh
+++ b/src/oracle/install/gimp/install_gimp.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
set -ex
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf install -y gimp
dnf clean all
else
diff --git a/src/oracle/install/libre_office/install_libre_office.sh b/src/oracle/install/libre_office/install_libre_office.sh
index db26fa5..733c7bc 100644
--- a/src/oracle/install/libre_office/install_libre_office.sh
+++ b/src/oracle/install/libre_office/install_libre_office.sh
@@ -7,7 +7,7 @@ if [ "$ARCH" == "amd64" ] ; then
exit 0
fi
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf install -y \
libreoffice-core \
libreoffice-writer \
diff --git a/src/oracle/install/obs/install_obs.sh b/src/oracle/install/obs/install_obs.sh
index bee8dbc..6e947da 100644
--- a/src/oracle/install/obs/install_obs.sh
+++ b/src/oracle/install/obs/install_obs.sh
@@ -7,7 +7,7 @@ if [ "$ARCH" == "arm64" ] ; then
exit 0
fi
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux8|almalinux8) ]]; then
dnf install -y obs-studio
dnf clean all
else
diff --git a/src/oracle/install/only_office/install_only_office.sh b/src/oracle/install/only_office/install_only_office.sh
index 76e368d..4574981 100644
--- a/src/oracle/install/only_office/install_only_office.sh
+++ b/src/oracle/install/only_office/install_only_office.sh
@@ -8,7 +8,7 @@ if [ "$ARCH" == "arm64" ] ; then
fi
curl -L -o only_office.rpm "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors.$(arch).rpm"
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf localinstall -y only_office.rpm
dnf clean all
else
diff --git a/src/oracle/install/slack/install_slack.sh b/src/oracle/install/slack/install_slack.sh
index bfade98..7b210a5 100644
--- a/src/oracle/install/slack/install_slack.sh
+++ b/src/oracle/install/slack/install_slack.sh
@@ -21,7 +21,7 @@ version=4.12.2
# This path may not be accurate once arm64 support arrives. Specifically I don't know if it will still be under x64
wget -q https://downloads.slack-edge.com/releases/linux/${version}/prod/x64/slack-${version}-0.1.fc21.x86_64.rpm -O slack.rpm
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf localinstall -y slack.rpm
dnf clean all
else
diff --git a/src/oracle/install/sublime_text/install_sublime_text.sh b/src/oracle/install/sublime_text/install_sublime_text.sh
index e348a9a..0f0d01c 100644
--- a/src/oracle/install/sublime_text/install_sublime_text.sh
+++ b/src/oracle/install/sublime_text/install_sublime_text.sh
@@ -8,7 +8,7 @@ fi
rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/$(arch)/sublime-text.repo
dnf install -y sublime-text
dnf clean all
diff --git a/src/oracle/install/terraform/install_terraform.sh b/src/oracle/install/terraform/install_terraform.sh
index f3827bd..c500dcf 100644
--- a/src/oracle/install/terraform/install_terraform.sh
+++ b/src/oracle/install/terraform/install_terraform.sh
@@ -8,10 +8,14 @@ if [ "${ARCH}" == "arm64" ] ; then
exit 0
fi
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8) ]]; then
dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
dnf install -y terraform
dnf clean all
+elif [ "${DISTRO}" == "fedora37" ]; then
+ dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
+ dnf install -y terraform
+ dnf clean all
else
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install -y terraform
diff --git a/src/oracle/install/tools/install_tools_deluxe.sh b/src/oracle/install/tools/install_tools_deluxe.sh
index 3910b50..8c852dc 100644
--- a/src/oracle/install/tools/install_tools_deluxe.sh
+++ b/src/oracle/install/tools/install_tools_deluxe.sh
@@ -2,7 +2,7 @@
set -ex
if [ -f /usr/bin/dnf ]; then
- dnf install -y vlc git tmux
+ dnf install -y vlc git tmux xz glibc-locale-source glibc-langpack-en
dnf clean all
else
yum-config-manager --enable ol7_optional_latest
diff --git a/src/oracle/install/vs_code/install_vs_code.sh b/src/oracle/install/vs_code/install_vs_code.sh
index 292c50b..2ed0973 100644
--- a/src/oracle/install/vs_code/install_vs_code.sh
+++ b/src/oracle/install/vs_code/install_vs_code.sh
@@ -3,7 +3,7 @@ set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/x64/g')
wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm
dnf localinstall -y vs_code.rpm
else
@@ -20,7 +20,7 @@ chown 1000:1000 $HOME/Desktop/code.desktop
rm vs_code.rpm
# Conveniences for python development
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf install -y python3-setuptools python3-virtualenv
dnf clean all
else
diff --git a/src/oracle/install/zoom/install_zoom.sh b/src/oracle/install/zoom/install_zoom.sh
index 70a172d..0072e90 100644
--- a/src/oracle/install/zoom/install_zoom.sh
+++ b/src/oracle/install/zoom/install_zoom.sh
@@ -8,7 +8,7 @@ fi
wget -q https://zoom.us/client/latest/zoom_$(arch).rpm
-if [ "${DISTRO}" == "oracle8" ]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then
dnf localinstall -y zoom_$(arch).rpm
dnf clean all
else
diff --git a/src/ubuntu/install/ansible/install_ansible.sh b/src/ubuntu/install/ansible/install_ansible.sh
index 00988b1..e5eba5c 100644
--- a/src/ubuntu/install/ansible/install_ansible.sh
+++ b/src/ubuntu/install/ansible/install_ansible.sh
@@ -1,7 +1,12 @@
#!/usr/bin/env bash
set -ex
-apt-get update
-apt-get install -y software-properties-common
-apt-add-repository --yes --update ppa:ansible/ansible
-apt-get install -y ansible
\ No newline at end of file
+if grep -q "ID=debian" /etc/os-release; then
+ apt-get update
+ apt-get install -y ansible
+else
+ apt-get update
+ apt-get install -y software-properties-common
+ apt-add-repository --yes --update ppa:ansible/ansible
+ apt-get install -y ansible
+fi
diff --git a/src/ubuntu/install/chrome/install_chrome.sh b/src/ubuntu/install/chrome/install_chrome.sh
index fa5cdc7..bd9f975 100644
--- a/src/ubuntu/install/chrome/install_chrome.sh
+++ b/src/ubuntu/install/chrome/install_chrome.sh
@@ -10,13 +10,13 @@ if [ "$ARCH" == "arm64" ] ; then
exit 0
fi
-if [[ "${DISTRO}" == @(centos|oracle7|oracle8) ]]; then
+if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8) ]]; 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
else
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm -O chrome.rpm
fi
- if [ "${DISTRO}" == "oracle8" ]; then
+ if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8) ]]; then
dnf localinstall -y chrome.rpm
dnf clean all
else
@@ -33,7 +33,6 @@ elif [ "${DISTRO}" == "opensuse" ]; then
zypper clean --all
else
apt-get update
- apt-get remove -y chromium-browser-l10n chromium-codecs-ffmpeg chromium-browser
if [ ! -z "${CHROME_VERSION}" ]; then
wget https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb -O chrome.deb
else
@@ -65,7 +64,7 @@ EOL
chmod +x /usr/bin/google-chrome
cp /usr/bin/google-chrome /usr/bin/chrome
-if [[ "${DISTRO}" == @(centos|oracle7|oracle8|opensuse) ]]; then
+if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|opensuse) ]]; then
cat >> $HOME/.config/mimeapps.list </usr/bin/chromium-browser </usr/bin/${REAL_BIN} <> $HOME/.config/mimeapps.list < /etc/apt/preferences.d/mozilla-firefox
fi
apt-get install -y firefox p11-kit-modules
+elif grep -q "ID=debian" /etc/os-release || grep -q "ID=kali" /etc/os-release || grep -q "ID=parrot" /etc/os-release; then
+ echo \
+ "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> \
+ /etc/apt/sources.list
+cat > /etc/apt/preferences.d/99pin-unstable <>$HOME/.mozilla/firefox/profiles.ini <>$HOME/.mozilla/firefox/profiles.ini < /usr/bin/blueman-applet
+rm -f /usr/share/xfce4/panel/plugins/power-manager-plugin.desktop
+rm -rf \
+ /var/lib/apt/lists/* \
+ /var/tmp/* \
+ /tmp/*
+rm -Rf /root
+mkdir -p /root
rm -rf /tmp/tlosint-live
diff --git a/src/ubuntu/install/vivaldi/install_vivaldi.sh b/src/ubuntu/install/vivaldi/install_vivaldi.sh
index decd2d8..44e84e2 100644
--- a/src/ubuntu/install/vivaldi/install_vivaldi.sh
+++ b/src/ubuntu/install/vivaldi/install_vivaldi.sh
@@ -8,7 +8,15 @@ wget -qO- https://repo.vivaldi.com/archive/linux_signing_key.pub | gpg --dearmor
echo "deb [signed-by=/usr/share/keyrings/vivaldi-browser.gpg arch=$(dpkg --print-architecture)] https://repo.vivaldi.com/archive/deb/ stable main" > /etc/apt/sources.list.d/vivaldi-archive.list
apt-get update && apt-get install -y vivaldi-stable
mkdir -p /var/opt/vivaldi
-/opt/vivaldi/update-ffmpeg
+set +e
+for i in {1..120}; do
+ /opt/vivaldi/update-ffmpeg
+ if [ $? -eq 0 ]; then
+ break
+ fi
+ sleep 1
+done
+set -e
# Add Desktop Icon
cp /usr/share/applications/vivaldi-stable.desktop $HOME/Desktop/