From f68b31b28e35380465e828cfd56dda846ad13798 Mon Sep 17 00:00:00 2001 From: Muhammad Atif Ali Date: Thu, 21 Sep 2023 15:04:56 +0300 Subject: [PATCH] add kasmVNC --- .icons/kasm.png | Bin 0 -> 29593 bytes kasmvnc/README.md | 25 +++++++++++++++++++-- kasmvnc/main.tf | 55 ++++++++++++---------------------------------- kasmvnc/run.sh | 18 ++++++++------- 4 files changed, 47 insertions(+), 51 deletions(-) create mode 100644 .icons/kasm.png diff --git a/.icons/kasm.png b/.icons/kasm.png new file mode 100644 index 0000000000000000000000000000000000000000..2da3cf151826854b6f6e91d70add534dabdabc94 GIT binary patch literal 29593 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 literal 0 HcmV?d00001 diff --git a/kasmvnc/README.md b/kasmvnc/README.md index 1803268..d07d894 100644 --- a/kasmvnc/README.md +++ b/kasmvnc/README.md @@ -1,7 +1,7 @@ --- display_name: KasmVNC description: A modern open source VNC server -icon: ../.icons/kasmvnc.svg +icon: ../.icons/kasm.png maintainer_github: coder verified: true tags: [helper, ide] @@ -13,4 +13,25 @@ Automatically install [KasmVNC](https://kasmweb.com/kasmvnc) in a workspace, and ## Examples -TODO \ No newline at end of file +1. Add latest version of KasmVNC with ['lxde'](https://www.lxde.org/) desktop environment: + + ```hcl + module "kasmvnc" { + source = "https://registry.coder.com/modules/kasmvnc" + agent_id = coder_agent.example.id + } + + ``` + +2. Add specific version '0.9.11' of KasmVNC with ['mate'](https://mate-desktop.org/) desktop environment and custom port: + + ```hcl + module "kasmvnc" { + source = "https://registry.coder.com/modules/kasmvnc" + agent_id = coder_agent.example.id + version = "1.0.0" + desktop_environment = "mate" + port = 6080 + } + + ``` diff --git a/kasmvnc/main.tf b/kasmvnc/main.tf index 65ea242..5702357 100644 --- a/kasmvnc/main.tf +++ b/kasmvnc/main.tf @@ -14,53 +14,32 @@ variable "agent_id" { description = "The ID of a Coder agent." } -variable "extensions" { - type = list(string) - description = "A list of extensions to install." - default = [] -} - variable "port" { type = number - description = "The port to run code-server on." - default = 13337 + description = "The port to run KasmVNC on." + default = 8443 } -variable "settings" { - type = map(string) - description = "A map of settings to apply to code-server." - default = {} -} - -variable "folder" { +variable "desktop_environment" { type = string - description = "The folder to open in code-server." - default = "" + description = "The desktop environment to for KasmVNC (xfce, lxde, mate, etc)." + default = "lxde" } -variable "install_prefix" { +variable "version" { type = string - description = "The prefix to install code-server to." - default = "/tmp/code-server" + description = "Version of KasmVNC to install." + default = "1.2.0" } -variable "log_path" { - type = string - description = "The path to log code-server to." - default = "/tmp/code-server.log" -} - -resource "coder_script" "code-server" { +resource "coder_script" "kasm_vnc" { agent_id = var.agent_id - display_name = "code-server" - icon = "/icon/code.svg" + display_name = "KasmVNC" + icon = "/icon/kasm.png" script = templatefile("${path.module}/run.sh", { - EXTENSIONS : join(",", var.extensions), PORT : var.port, - LOG_PATH : var.log_path, - INSTALL_PREFIX : var.install_prefix, - // This is necessary otherwise the quotes are stripped! - SETTINGS : replace(jsonencode(var.settings), "\"", "\\\""), + DESKTOP_ENVIRONMENT : var.desktop_environment, + VERSION : var.version }) run_on_start = true } @@ -70,13 +49,7 @@ resource "coder_app" "kasm_vnc" { slug = "kasm-vnc" display_name = "kasmVNC" url = "http://localhost:${var.port}" - icon = "/icon/vnc.svg" + icon = "/icon/kasm.png" subdomain = false share = "owner" - - healthcheck { - url = "http://localhost:${var.port}/healthz" - interval = 5 - threshold = 6 - } } diff --git a/kasmvnc/run.sh b/kasmvnc/run.sh index 49347f9..7a59580 100644 --- a/kasmvnc/run.sh +++ b/kasmvnc/run.sh @@ -1,20 +1,21 @@ #!/usr/bin/env bash -# Check if LXDE is installed -if ! dpkg -s lxde &>/dev/null; then +# Check if desktop enivronment is installed +if ! dpkg -s ${DESKTOP_ENVIRONMENT} &>/dev/null; then sudo apt-get update - DEBIAN_FRONTEND=noninteractive sudo apt-get install -y lxde + DEBIAN_FRONTEND=noninteractive sudo apt-get install -y ${DESKTOP_ENVIRONMENT} else - echo "LXDE is already installed." + echo "${DESKTOP_ENVIRONMENT} is already installed." fi # Check if vncserver is installed if ! dpkg -s kasmvncserver &>/dev/null; then cd /tmp - wget https://github.com/kasmtech/KasmVNC/releases/download/v1.1.0/kasmvncserver_focal_1.1.0_amd64.deb - sudo apt install -y ./kasmvncserver_focal_1.1.0_amd64.deb + wget https://github.com/kasmtech/KasmVNC/releases/download/v${VERSION}/kasmvncserver_focal_${VERSION}_amd64.deb + sudo apt install -y ./kasmvncserver_focal_${VERSION}_amd64.deb + printf "🥳 KasmVNC v${VERSION} has been successfully installed!\n\n" else - echo "VNC Server is already installed." + echo "KasmVNC is already installed." fi sudo addgroup $USER ssl-cert @@ -23,6 +24,7 @@ sudo addgroup $USER ssl-cert sudo bash -c 'cat > /etc/kasmvnc/kasmvnc.yaml <