diff --git a/.ci/upload.sh b/.ci/helpers.sh
similarity index 50%
rename from .ci/upload.sh
rename to .ci/helpers.sh
index cc51e50..442a8aa 100644
--- a/.ci/upload.sh
+++ b/.ci/helpers.sh
@@ -61,24 +61,93 @@ function prepare_upload_filename() {
fi
};
+list_files_in_directory() {
+ local dir="$1"
+ find "$1" -mindepth 1
+}
+
+upload_directory_to_s3() {
+ local dir_to_upload="$1"
+ local s3_directory="$2";
+ local s3_bucket="$3";
+
+ for file_to_upload in $(list_files_in_directory "$dir_to_upload"); do
+ upload_to_s3 "$file_to_upload" "$s3_directory/$file_to_upload" "$s3_bucket"
+ done
+}
+
+prepare_functional_tests_source_and_cd_into_it() {
+ cd kasmvnc-functional-tests
+ mkdir output && chown 1000:1000 output
+ mkdir report && chown 1000:1000 report
+}
+
+upload_report_to_s3() {
+ s3_tests_directory="kasmvnc/${CI_COMMIT_SHA}/tests"
+ upload_directory_to_s3 report "$s3_tests_directory" "$S3_BUCKET"
+}
+
+put_report_into_ci_pipeline() {
+ local functional_tests_exit_code="$1"
+ local report_name="Functional%20test%20report"
+ local report_url="https://${S3_BUCKET}.s3.amazonaws.com/${s3_tests_directory}/report/index.html"
+ local state="success"
+ if [ "$functional_tests_exit_code" -ne 0 ]; then
+ state="failed"
+ fi
+ curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=${state}&name=${report_name}&target_url=${report_url}"
+}
+
+prepare_kasmvnc_built_packages_to_replace_workspaces_image_packages() {
+ cp -r ../output/jammy output/
+}
+
+prepare_to_run_functional_tests() {
+ install_packages_needed_for_functional_tests
+ prepare_functional_tests_source_and_cd_into_it
+ prepare_kasmvnc_built_packages_to_replace_workspaces_image_packages
+ heed_debug_variable_and_toggle_debug_in_functional_tests
+}
+
+heed_debug_variable_and_toggle_debug_in_functional_tests() {
+ if [ -z "$CI" ]; then
+ return
+ fi
+
+ if [ "$DEBUG" = "true" ]; then
+ export KASMVNC_FUNC_TESTS_DEBUG=1
+ fi
+}
+
+install_packages_needed_for_functional_tests() {
+ prepare_to_run_scripts_and_s3_uploads
+ apt-get install -y tree docker.io
+}
+
+is_build_this_distro() {
+ local distro="$1"
+ [[ "$BUILD_DISTROS_REGEX" = 'all' ]] || [[ "$distro" =~ $BUILD_DISTROS_REGEX ]]
+}
+
function upload_to_s3() {
- local package="$1";
- local upload_filename="$2";
+ local file_to_upload="$1";
+ local s3_url_for_file="$2";
local s3_bucket="$3";
# Transfer to S3
- python3 amazon-s3-bitbucket-pipelines-python/s3_upload.py "${s3_bucket}" "$package" "${upload_filename}";
+ aws s3 cp "$file_to_upload" \
+ "s3://${S3_BUCKET}/${s3_url_for_file}" \
+ --metadata-directive REPLACE \
+ --content-type "$(file --mime-type -b \"$file_to_upload\")"
# Use the Gitlab API to tell Gitlab where the artifact was stored
- export S3_URL="https://${s3_bucket}.s3.amazonaws.com/${upload_filename}";
+ export S3_URL="https://${s3_bucket}.s3.amazonaws.com/${s3_url_for_file}";
};
function prepare_to_run_scripts_and_s3_uploads() {
- export DEBIAN_FRONTEND=noninteractive;
- apt-get update;
- apt-get install -y ruby2.7 git wget;
- apt-get install -y python3 python3-pip python3-boto3 curl pkg-config libxmlsec1-dev;
- git clone https://bitbucket.org/awslabs/amazon-s3-bitbucket-pipelines-python.git;
-};
+ export DEBIAN_FRONTEND=noninteractive
+ apt-get update
+ apt-get install -y ruby3.1 wget curl file awscli
+}
detect_release_branch() {
if echo $CI_COMMIT_REF_NAME | grep -Pq '^release/([\d.]+)$'; then
diff --git a/.gitignore b/.gitignore
index 35ea059..026ae1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,9 @@ builder/build/
builder/www/
spec/tmp
+Benchmark.xml
+SelfBench.xml
+
# Deb building artefacts
debian/.debhelper/
debian/files
@@ -29,6 +32,9 @@ debian/kasmvncserver/
.pc
.vscode/
+# --run-test artifacts
+run_test/
+
alpine/.abuild/kasmvnc_signing_key.rsa
alpine/.abuild/kasmvnc_signing_key.rsa.pub
alpine/packages/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e234c79..b653e0e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,14 +3,21 @@ services:
- docker:dind
variables:
+ DEBUG: true
KASMVNC_COMMIT_ID: $CI_COMMIT_SHA
GITLAB_SHARED_DIND_DIR: /builds/$CI_PROJECT_PATH/shared
- GIT_SUBMODULE_STRATEGY: normal
+ GIT_SUBMODULE_STRATEGY: recursive
+ GIT_SUBMODULE_FORCE_HTTPS: "true"
GIT_FETCH_EXTRA_FLAGS: --tags --force
- # E.g. BUILD_JOBS: build_debian_buster,build_ubuntu_focal. This will include
- # arm builds, because build_debian_buster_arm matches build_debian_buster.
- # "BUILD_JOBS: none" won't build any build jobs, nor www.
- BUILD_JOBS: all
+ # For example, BUILD_DISTROS_REGEX: "jammy|focal".
+ # "BUILD_DISTROS_REGEX: none" won't build any distros, nor www.
+ # "BUILD_DISTROS_REGEX: all" would build all distros.
+ # Make sure you quote any whitespace characters you use.
+ # E.g. BUILD_DISTROS_REGEX: "jammy|\ focal".
+ BUILD_DISTROS_REGEX: all
+ # To debug upload stage, you can limit BUILD_DISTROS_REGEX to jammy and allow
+ # run_test distros to fail, by setting ALLOW_RUN_TESTS_TO_FAIL to true.
+ ALLOW_RUN_TESTS_TO_FAIL: false
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
@@ -22,13 +29,16 @@ workflow:
stages:
- www
- build
+ - functional_test
+ - run_test
- test
- upload
.prepare_build: &prepare_build
- pwd
- - apk add bash
- mkdir -p "$GITLAB_SHARED_DIND_DIR" && chmod 777 "$GITLAB_SHARED_DIND_DIR"
+ - apt-get update && apt-get install -y docker.io
+ - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
.prepare_www: &prepare_www
- tar -zxf output/www/kasm_www.tar.gz -C builder/
@@ -37,10 +47,36 @@ stages:
- cp -r builder/build/* output/
- rm output/*.tar.gz
+.enable_core_dumps: &enable_core_dumps
+ - echo core > /proc/sys/kernel/core_pattern
+
default:
+ retry: 2
tags:
- oci-fixed-amd
+functional_test:
+ stage: functional_test
+ image: debian:bookworm-slim
+ tags:
+ - oci-fixed-amd
+ before_script:
+ - . .ci/helpers.sh
+ script:
+ - prepare_to_run_functional_tests
+ - set +e; ./functional-test; exit_code=$?; set -e
+ - upload_report_to_s3
+ - put_report_into_ci_pipeline "$exit_code"
+ - exit "$exit_code"
+ dependencies:
+ - build_amd64
+ artifacts:
+ paths:
+ - kasmvnc-functional-tests/output/
+ reports:
+ junit:
+ - kasmvnc-functional-tests/report/*.xml
+
build_www:
stage: www
allow_failure: false
@@ -61,641 +97,140 @@ build_www:
- tar -zcvf ../output/www/kasm_www.tar.gz www
only:
variables:
- - $BUILD_JOBS !~ /^none$/
+ - $BUILD_DISTROS_REGEX !~ /^none$/
artifacts:
paths:
- output/
-build_ubuntu_focal:
+build_amd64:
stage: build
allow_failure: true
+ image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- *prepare_build
- *prepare_www
+ - . .ci/helpers.sh
after_script:
- *prepare_artfacts
script:
- - bash builder/build-package ubuntu focal;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
+ - set -e
+ - is_build_this_distro "$DISTRO" && builder/build-package $DISTRO
artifacts:
paths:
- output/
+ parallel:
+ matrix:
+ - DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
-build_ubuntu_focal_arm:
+build_arm64:
stage: build
allow_failure: true
+ image: debian:bookworm-slim
tags:
- oci-fixed-arm
before_script:
- *prepare_build
- *prepare_www
+ - . .ci/helpers.sh
after_script:
- *prepare_artfacts
script:
- - bash builder/build-package ubuntu focal;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
+ - set -e
+ - is_build_this_distro "$DISTRO" && builder/build-package $DISTRO
artifacts:
paths:
- output/
+ parallel:
+ matrix:
+ - DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
-build_ubuntu_jammy:
- stage: build
- allow_failure: true
+run_test_amd64:
+ stage: run_test
+ image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
+ - *enable_core_dumps
+ - . .ci/helpers.sh
script:
- - bash builder/build-package ubuntu jammy;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
+ - set -e
+ - is_build_this_distro "$DISTRO" && builder/test-barebones --run-test $DISTRO
+ rules:
+ - if: $ALLOW_RUN_TESTS_TO_FAIL == "false"
+ - if: $ALLOW_RUN_TESTS_TO_FAIL == "true"
+ allow_failure: true
+ dependencies:
+ - build_amd64
artifacts:
+ when: always
paths:
- - output/
+ - run_test/core_dumps/*/core
+ reports:
+ junit:
+ - run_test/*.xml
+ parallel:
+ matrix:
+ - DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
-build_ubuntu_jammy_arm:
- stage: build
- allow_failure: true
+run_test_arm64:
+ stage: run_test
+ image: debian:bookworm-slim
tags:
- oci-fixed-arm
before_script:
- *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
+ - *enable_core_dumps
+ - . .ci/helpers.sh
script:
- - bash builder/build-package ubuntu jammy;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
+ - set -e
+ - is_build_this_distro "$DISTRO" && builder/test-barebones --run-test $DISTRO
+ rules:
+ - if: $ALLOW_RUN_TESTS_TO_FAIL == "false"
+ - if: $ALLOW_RUN_TESTS_TO_FAIL == "true"
+ allow_failure: true
+ dependencies:
+ - build_arm64
artifacts:
- paths:
- - output/
-
-build_ubuntu_noble:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package ubuntu noble;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
artifacts:
+ when: always
paths:
- - output/
+ - run_test/core_dumps/*/core
+ reports:
+ junit:
+ - run_test/*.xml
+ parallel:
+ matrix:
+ - DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
-build_ubuntu_noble_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package ubuntu noble;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_debian_bullseye:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package debian bullseye;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_debian_bullseye_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package debian bullseye;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-
-build_debian_bookworm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package debian bookworm;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_debian_bookworm_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package debian bookworm;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_kali_rolling:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package kali kali-rolling;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_kali_rolling_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package kali kali-rolling;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_oracle_8:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package oracle 8;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_oracle_8_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package oracle 8;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_oracle_9:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package oracle 9;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_oracle_9_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package oracle 9;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_opensuse_15:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package opensuse 15;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_opensuse_15_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package opensuse 15;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_thirtynine:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora thirtynine;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_thirtynine_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora thirtynine;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_forty:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora forty;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_forty_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora forty;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_fortyone:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora fortyone;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_fedora_fortyone_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package fedora fortyone;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-
-test:
+spec_test:
stage: test
+ image: debian:bookworm-slim
tags:
- - oci-fixed-amd
+ - kasmvnc-x86
before_script:
- *prepare_build
- script:
- - bash builder/test-vncserver
-
-
-build_alpine_318:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 318;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
artifacts:
- paths:
- - output/
-
-build_alpine_318_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
+ reports:
+ junit:
+ - SelfBench.xml
+ - Benchmark.xml
script:
- - bash builder/build-package alpine 318;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
+ - builder/test-vncserver
-build_alpine_319:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 319;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_alpine_319_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 319;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_alpine_320:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 320;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_alpine_320_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 320;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_alpine_321:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-amd
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 321;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
-
-build_alpine_321_arm:
- stage: build
- allow_failure: true
- tags:
- - oci-fixed-arm
- before_script:
- - *prepare_build
- - *prepare_www
- after_script:
- - *prepare_artfacts
- script:
- - bash builder/build-package alpine 321;
- only:
- variables:
- - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
- artifacts:
- paths:
- - output/
upload:
stage: upload
- image: ubuntu:focal
+ image: debian:bookworm-slim
tags:
- oci-fixed-amd
artifacts:
paths:
- output/
before_script:
- - . .ci/upload.sh
+ - . .ci/helpers.sh
script:
- prepare_to_run_scripts_and_s3_uploads
- S3_CRASHPAD_BUILD_DIRECTORY="kasmvnc/crashpad/${CI_COMMIT_SHA}"
@@ -727,11 +262,11 @@ upload_build_preview:
stage: upload
needs: ["upload"]
dependencies: ["upload"]
- image: ubuntu:focal
+ image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- - . .ci/upload.sh
+ - . .ci/helpers.sh
resource_group: upload_build_preview
only:
variables:
diff --git a/.gitmodules b/.gitmodules
index e43a13a..8232a78 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,3 +2,6 @@
path = kasmweb
url = https://github.com/kasmtech/noVNC.git
branch = master
+[submodule "kasmvnc-functional-tests"]
+ path = kasmvnc-functional-tests
+ url = git@gitlab.com:kasm-technologies/internal/kasmvnc-functional-tests.git
diff --git a/BUILDING.txt b/BUILDING.md
similarity index 59%
rename from BUILDING.txt
rename to BUILDING.md
index 4bfaa3f..668e488 100644
--- a/BUILDING.txt
+++ b/BUILDING.md
@@ -1,86 +1,17 @@
-*******************************************************************************
-** Building KasmVNC
-*******************************************************************************
+# Building KasmVNC
-
-================================
-Build Requirements (All Systems)
-================================
-
--- CMake (http://www.cmake.org) v2.8 or later
-
--- zlib
-
--- If building TLS support:
- * GnuTLS 3.x
- * See "Building TLS Support" below.
-
--- If building native language support (NLS):
- * Gnu gettext 0.14.4 or later
- * See "Building Native Language Support" below.
-
--- libjpeg-turbo
- * "Normal" libjpegv6 is also supported, although it is not
- recommended as it is much slower.
-
--- libwebp
-
-
-=========================
-Build Requirements (Unix)
-=========================
-
--- Non-Mac platforms:
- * X11 development kit
-
--- If building Xvnc/libvnc.so:
- * Xorg server source code, 1.7 or never
- * All build requirements Xorg imposes (see its documentation)
-
-============================
-Build Requirements (Windows)
-============================
-
--- MinGW or MinGW-w64
-
--- Inno Setup (needed to build the KasmVNC installer)
- Inno Setup can be downloaded from http://www.jrsoftware.org/isinfo.php.
- You also need the Inno Setup Preprocessor, which is available in the
- Inno Setup QuickStart Pack.
-
- Add the directory containing iscc.exe (for instance,
- C:\Program Files\Inno Setup 5) to the system or user PATH environment
- variable prior to building KasmVNC.
-
-
-==================
-Out-of-Tree Builds
-==================
-
-Binary objects, libraries, and executables are generated in the same directory
-from which cmake was executed (the "binary directory"), and this directory need
-not necessarily be the same as the KasmVNC source directory. You can create
-multiple independent binary directories, in which different versions of
-KasmVNC can be built from the same source tree using different compilers or
-settings. In the sections below, {build_directory} refers to the binary
-directory, whereas {source_directory} refers to the KasmVNC source directory.
-For in-tree builds, these directories are the same.
-
-
-=================
-Building KasmVNC
-=================
-
-Building the KasmVNC Server using Docker
-----------------------------------------
+## Building the KasmVNC Server using Docker
```bash
git submodule init
git submodule update --remote --merge
sudo docker build -t kasmvnc:dev -f builder/dockerfile.ubuntu_jammy.dev .
-sudo docker run -it -v ./:/src -p 6901:6901 kasmvnc:dev
+sudo docker run -it --rm -v ./:/src -p 6901:6901 -p 8443:8443 --name kasmvnc_dev kasmvnc:dev
```
+**The above assumes you are UID 1000 on the host as the container UID is 1000.**
+Ensure you switch to the user associated to UID 1000 on the host.
+
Now from inside the container.
```bash
@@ -89,9 +20,9 @@ cd kasmweb
npm install
npm run build # <-- only run this on subsequent changes to front-end code
cd ..
-# build dependencies
-sudo builder/scripts/build-webp
-sudo builder/scripts/build-build-libjpeg-turbo
+# build dependencies, this is optional as they are pre-built in the docker image. Only rebuild if you made version changes and need to test.
+# sudo builder/scripts/build-webp
+# sudo builder/scripts/build-libjpeg-turbo
# Build KasmVNC
builder/build.sh
```
@@ -99,14 +30,93 @@ builder/build.sh
Now run Xvnc and Xfce4 from inside the container
```bash
-/src/xorg.build/bin/Xvnc -interface 0.0.0.0 -PublicIP 127.0.0.1 -disableBasicAuth -RectThreads 0 -Log *:stdout:100 -httpd /src/kasmweb/dist -sslOnly 0 -SecurityTypes None -websocketPort 6901 :1 &
+/src/xorg.build/bin/Xvnc -interface 0.0.0.0 -PublicIP 127.0.0.1 -disableBasicAuth -RectThreads 0 -Log *:stdout:100 -httpd /src/kasmweb/dist -sslOnly 0 -SecurityTypes None -websocketPort 6901 -FreeKeyMappings :1 &
/usr/bin/xfce4-session --display :1
```
Now open a browser and navigate to your dev VM on port 6901.
-Building the KasmVNC Server on Modern Unix/Linux Systems
----------------------------------------------------------
+## Running noVNC from source
+If you need to debug or make changes to the UI code, use the following procedures to use npm to serve the web code. The code will automatically rebuild when changes are made and the code will not be packaged.
+These steps assume you are inside the kasmvnc:dev container started in the above steps.
+
+Now from inside the container. **This assumes KasmVNC is already built, follow steps above if you need to build KasmVNC**
+
+```bash
+# Run KasmVNC
+/src/xorg.build/bin/Xvnc -interface 0.0.0.0 -PublicIP 127.0.0.1 -disableBasicAuth -RectThreads 0 -Log *:stdout:100 -httpd /src/kasmweb/dist -sslOnly 0 -SecurityTypes None -websocketPort 6901 -FreeKeyMappings :1 &
+/usr/bin/xfce4-session --display :1 &
+
+sudo nginx
+cd kasmweb
+npm install # only needs done first time
+npm run serve # <-- Needs to run in foreground
+```
+
+Now open a browser and navigate to your dev VM on port 8443 over https.
+
+NGINX is proxying the websocket to KasmVNC and all other requests go to the node server. NGINX listens on 8443 with ssl.
+
+Since `npm run serve` needs to run in the foreground, you may need to exec into the container from another terminal to run additional commands like stopping Xvnc, rebuilding KasmVNC, etc.
+
+```bash
+sudo docker exec -it kasmvnc_dev /bin/bash
+```
+
+## Building in CI
+
+### Achieve a faster feedback loop in CI
+
+To achieve a faster feedback loop in CI, you can limit built distros to a few
+distros you're interested in.
+
+#### Best way to debug CI in a fast feedback loop
+
+Specify `BUILD_DISTROS_REGEX: "jammy"`, and build only Ubuntu Jammy. That's
+only 2 distro package build jobs, one for amd64 and one for arm64.
+
+Specify `ALLOW_RUN_TESTS_TO_FAIL: true` to ignore `run_test` job failures and
+debug the upload stage.
+
+#### Build only a few distros
+
+To build only distros you want, specify a regex in `$BUILD_DISTROS_REGEX`
+variable. For example, build Ubuntu Jammy and Focal with `BUILD_DISTROS_REGEX:
+"jammy|focal"`. Or simply a single distro Ubuntu Jammy with
+`BUILD_DISTROS_REGEX: "jammy"`.
+To build all distros, specify `BUILD_DISTROS_REGEX: all`.
+To build no distros, and no www, specify `BUILD_DISTROS_REGEX: none`.
+
+##### Required distros to build
+
+Functional tests and spec tests use Ubuntu Jammy. If Jammy is not built, those
+stages fail. If you want to debug pipeline stages after `functional_test`,
+building Ubuntu Jammy is required.
+
+Specify `BUILD_DISTROS_REGEX: "jammy|"`.
+
+##### Heed, when writing regex
+
+Regex placed in `$BUILD_DISTROS_REGEX` are [Bash
+regex](https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_01.html) and are
+processed by Bash.
+
+Any whitespace in `$BUILD_DISTROS_REGEX` must be escaped. For example,
+`BUILD_DISTROS_REGEX: "\ jammy"`.
+
+#### Debug upload stage, while building only a few distros
+
+`run_test` jobs fail the pipeline, whenever packages for a distro weren't
+built. When building only a few distros, packages for the rest of distros aren't
+built. Not finding the package to test, a `run_test` job fails, pipeline fails,
+and the upload stage doesn't get executed.
+
+To still execute and debug upload stage in a faster feedback loop (building only
+a few distros), specify `ALLOW_RUN_TESTS_TO_FAIL: true`. Gitlab CI's
+`allow_failure: true` is used to allow the pipeline to ignore failed `run_test`
+jobs and continue to the upload stage.
+
+## Building the KasmVNC Server on Modern Unix/Linux Systems
Building the KasmVNC Server (Xvnc) is a bit trickier. On newer systems
containing Xorg 7.4 or later (such as Fedora), Xvnc is typically built to use
@@ -114,48 +124,49 @@ the X11 shared libraries provided with the system. The procedure for this is
system-specific, since it requires specifying such things as font directories,
but the general outline is as follows.
- > cd {build_directory}
+```bash
+ cd {build_directory}
- If performing an out-of-tree build:
- > mkdir unix
- > cp -R {source_directory}/unix/xserver unix/
+ # If performing an out-of-tree build:
+ mkdir unix
+ cp -R {source_directory}/unix/xserver unix/
- > cp -R {xorg_source}/* unix/xserver/
- (NOTE: {xorg_source} is the directory containing the Xorg source for the
- machine on which you are building KasmVNC. The most recent versions of
- Red Hat/Fedora, for instance, provide an RPM called
- "xorg-x11-server-source", which installs the Xorg source under
- /usr/share/xorg-x11-server-source.)
+ cp -R {xorg_source}/* unix/xserver/
+ # (NOTE: {xorg_source} is the directory containing the Xorg source for the
+ # machine on which you are building KasmVNC. The most recent versions of
+ # Red Hat/Fedora, for instance, provide an RPM called
+ # "xorg-x11-server-source", which installs the Xorg source under
+ # /usr/share/xorg-x11-server-source.)
- > cd unix/xserver/
- > patch -p1 < {source_directory}/unix/xserver{version}.patch
- (where {version} matches the X server version you are building, such as
- "17" for version 1.7.x.)
- > autoreconf -fiv
+ cd unix/xserver/
+ patch -p1 < {source_directory}/unix/xserver{version}.patch
+ (where {version} matches the X server version you are building, such as
+ "17" for version 1.7.x.)
+ autoreconf -fiv
- > ./configure --with-pic --without-dtrace --disable-static --disable-dri \
- --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \
- --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \
- --disable-config-dbus --disable-config-hal --disable-config-udev \
- --disable-dri2 --enable-install-libxf86config --enable-glx \
- --with-default-font-path="catalogue:/etc/X11/fontpath.d,built-ins" \
- --with-fontdir=/usr/share/X11/fonts \
- --with-xkb-path=/usr/share/X11/xkb \
- --with-xkb-output=/var/lib/xkb \
- --with-xkb-bin-directory=/usr/bin \
- --with-serverconfig-path=/usr/lib[64]/xorg \
- --with-dri-driver-path=/usr/lib[64]/dri \
- {additional configure options}
- (NOTE: This is merely an example that works with Red Hat Enterprise
- and recent Fedora releases. You should customize it for your particular
- system. In particular, it will be necessary to customize the font, XKB,
- and DRI directories.)
+ ./configure --with-pic --without-dtrace --disable-static --disable-dri \
+ --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \
+ --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \
+ --disable-config-dbus --disable-config-hal --disable-config-udev \
+ --disable-dri2 --enable-install-libxf86config --enable-glx \
+ --with-default-font-path="catalogue:/etc/X11/fontpath.d,built-ins" \
+ --with-fontdir=/usr/share/X11/fonts \
+ --with-xkb-path=/usr/share/X11/xkb \
+ --with-xkb-output=/var/lib/xkb \
+ --with-xkb-bin-directory=/usr/bin \
+ --with-serverconfig-path=/usr/lib[64]/xorg \
+ --with-dri-driver-path=/usr/lib[64]/dri \
+ {additional configure options}
+ # (NOTE: This is merely an example that works with Red Hat Enterprise
+ # and recent Fedora releases. You should customize it for your particular
+ # system. In particular, it will be necessary to customize the font, XKB,
+ # and DRI directories.)
- > make KASMVNC_SRCDIR={source_directory}
+ make KASMVNC_SRCDIR={source_directory}
+```
-Building the KasmVNC Server on Legacy Unix/Linux Systems
----------------------------------------------------------
+## Building the KasmVNC Server on Legacy Unix/Linux Systems
Those using systems with older versions of Xorg must build a "legacy-friendly"
version of the KasmVNC Server. This is accomplished by downloading and
@@ -167,9 +178,11 @@ source distribution (located under contrib/xorg/) automates this process.
The following procedure will build a
"legacy-friendly" version of the KasmVNC Server:
+```bash
cd {build_directory}
sh {source_directory}/contrib/xorg/build-xorg init
sh {source_directory}/contrib/xorg/build-xorg build [additional CMake flags]
+```
build-xorg generates a version of Xvnc that has no external dependencies on the
X11 shared libraries or any other distribution-specific shared libraries. This
@@ -183,30 +196,32 @@ once the X11 modules and other dependencies have been built for the first time.
This is convenient for testing changes that just apply to the KasmVNC source
code. To accomplish this, run:
+```sh
sh {source_directory}/contrib/xorg/build-xorg rebuild [additional make flags]
+```
For instance,
+```sh
sh {source_directory}/contrib/xorg/build-xorg rebuild clean
+```
will clean the Xvnc build without destroying any of the
build configuration or module dependencies.
-Debug Build
------------
+## Debug Build
-Add "-DCMAKE_BUILD_TYPE=Debug" to the CMake command line.
+Add `-DCMAKE_BUILD_TYPE=Debug` to the CMake command line.
-Portable (semi-static) Build
-----------------------------
+## Portable (semi-static) Build
KasmVNC can under favourble circumstances be built in a way that allows
the resulting binaries to run on any system without having to also install
all the dynamic libraries it depends on. Enable this mode by adding:
- -DBUILD_STATIC=1
+ `-DBUILD_STATIC=1`
to the CMake command line.
@@ -214,30 +229,53 @@ Note that the method used to achieve this is very fragile and it may be
necessary to tweak cmake/StaticBuild.cmake to make things work on your
specific system.
+# Build Requirements (Windows)
-======================================
-Building TLS Support
-======================================
+-- MinGW or MinGW-w64
+
+-- Inno Setup (needed to build the KasmVNC installer)
+ Inno Setup can be downloaded from http://www.jrsoftware.org/isinfo.php.
+ You also need the Inno Setup Preprocessor, which is available in the
+ Inno Setup QuickStart Pack.
+
+ Add the directory containing iscc.exe (for instance,
+ C:\Program Files\Inno Setup 5) to the system or user PATH environment
+ variable prior to building KasmVNC.
+
+
+# Out-of-Tree Builds
+
+Binary objects, libraries, and executables are generated in the same directory
+from which cmake was executed (the "binary directory"), and this directory need
+not necessarily be the same as the KasmVNC source directory. You can create
+multiple independent binary directories, in which different versions of
+KasmVNC can be built from the same source tree using different compilers or
+settings. In the sections below, {build_directory} refers to the binary
+directory, whereas {source_directory} refers to the KasmVNC source directory.
+For in-tree builds, these directories are the same.
+
+
+# Building TLS Support
TLS requires GnuTLS, which is supplied with most Linux distributions and
with MinGW for Windows and can be built from source on OS X and other
Unix variants. However, GnuTLS versions > 2.12.x && < 3.3.x should be
avoided because of potential incompatibilities during initial handshaking.
-You can override the GNUTLS_LIBRARY and GNUTLS_INCLUDE_DIR CMake variables
+You can override the `GNUTLS_LIBRARY` and `GNUTLS_INCLUDE_DIR` CMake variables
to specify the locations of libgnutls and any dependencies. For instance,
adding
+```bash
-DGNUTLS_INCLUDE_DIR=/usr/local/include \
-DGNUTLS_LIBRARY=/usr/local/lib/libgnutls.a
+```
to the CMake command line would link KasmVNC against a static version of
libgnutls located under /usr/local.
-======================================
-Building Native Language Support (NLS)
-======================================
+# Building Native Language Support (NLS)
NLS requires gettext, which is supplied with most Linux distributions and
with MinGW for Windows and which can easily be built from source on OS X and
@@ -247,60 +285,57 @@ You can override the ICONV_LIBRARIES and LIBINTL_LIBRARY CMake variables to
specify the locations of libiconv and libintl, respectively. For instance,
adding
- -DLIBINTL_LIBRARY=/opt/gettext/lib/libintl.a
+ `-DLIBINTL_LIBRARY=/opt/gettext/lib/libintl.a`
to the CMake command line would link KasmVNC against a static version of
libintl located under /opt/gettext. Adding
+```bash
-DICONV_INCLUDE_DIR=/mingw/include \
-DICONV_LIBRARIES=/mingw/lib/libiconv.a \
-DGETTEXT_INCLUDE_DIR=/mingw/include \
-DLIBINTL_LIBRARY=/mingw/lib/libintl.a
+```
to the CMake command line would link KasmVNC against the static versions of
libiconv and libintl included in the MinGW Developer Toolkit.
-===================
-Installing KasmVNC
-===================
+# Installing KasmVNC
You can use the build system to install KasmVNC into a directory of your
choosing. To do this, add:
- -DCMAKE_INSTALL_PREFIX={install_directory}
+ `-DCMAKE_INSTALL_PREFIX={install_directory}`
to the CMake command line. Then, you can run 'make install' to build and
install it.
-If you don't specify CMAKE_INSTALL_PREFIX, then the default is
-c:\Program Files\KasmVNC on Windows and /usr/local on Unix.
+If you don't specify `CMAKE_INSTALL_PREFIX`, then the default is
+`c:\Program Files\KasmVNC` on Windows and `/usr/local` on Unix.
-=========================
-Creating Release Packages
-=========================
+# Creating Release Packages
The following commands can be used to create various types of release packages:
-Unix
-----
+## Unix
-make tarball
+`make tarball`
Create a binary tarball containing the utils
-make servertarball
+`make servertarball`
Create a binary tarball containing both the KasmVNC Server and utils
-make dmg
+`make dmg`
Create Macintosh disk image file that contains an application bundle of the
utils
-make udmg
+`make udmg`
On 64-bit OS X systems, this creates a version of the Macintosh package and
disk image which contains universal i386/x86-64 binaries. You should first
@@ -313,67 +348,69 @@ make udmg
using the instructions in the "Build Recipes" section.
-Windows
--------
+## Windows
-make installer
+`make installer`
Create a Windows installer using Inno Setup. The installer package
(KasmVNC[64].exe) will be located under {build_directory}.
-=============
-Build Recipes
-=============
+# Build Recipes
-32-bit Build on 64-bit Linux/Unix (including OS X)
---------------------------------------------------
+## 32-bit Build on 64-bit Linux/Unix (including OS X)
Set the following environment variables before building KasmVNC.
+```bash
CFLAGS='-O3 -m32'
CXXFLAGS='-O3 -m32'
LDFLAGS=-m32
+```
If you are building the KasmVNC Server on a modern Unix/Linux system, then
you will also need to pass the appropriate --host argument when configuring the
X server source (for instance, --host=i686-pc-linux-gnu).
-64-bit Backward-Compatible Build on 64-bit OS X
------------------------------------------------
+## 64-bit Backward-Compatible Build on 64-bit OS X
Add
+```bash
-DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.5.sdk \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.5
+```
to the CMake command line. The OS X 10.5 SDK must be installed.
-32-bit Backward-Compatible Build on 64-bit OS X
------------------------------------------------
+## 32-bit Backward-Compatible Build on 64-bit OS X
Set the following environment variables:
+```bash
CC=gcc-4.0
CXX=g++-4.0
CFLAGS='-O3 -m32'
CXXFLAGS='-O3 -m32'
LDFLAGS=-m32
+```
and add
+```bash
-DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.4u.sdk \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.4
+```
to the CMake command line. The OS X 10.4 SDK must be installed.
-64-bit MinGW Build on Cygwin
-----------------------------
+## 64-bit MinGW Build on Cygwin
+```bash
cd {build_directory}
CC=/usr/bin/x86_64-w64-mingw32-gcc CXX=/usr/bin/x86_64-w64-mingw32-g++ \
RC=/usr/bin/x86_64-w64-mingw32-windres \
@@ -381,15 +418,16 @@ to the CMake command line. The OS X 10.4 SDK must be installed.
-DCMAKE_AR=/usr/bin/x86_64-w64-mingw32-ar \
-DCMAKE_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib {source_directory}
make
+```
This produces a 64-bit build of KasmVNC that does not depend on cygwin1.dll or
other Cygwin DLL's. The mingw64-x86_64-gcc-core and mingw64-x86_64-gcc-g++
packages (and their dependencies) must be installed.
-32-bit MinGW Build on Cygwin
-----------------------------
+## 32-bit MinGW Build on Cygwin
+```bash
cd {build_directory}
CC=/usr/bin/i686-w64-mingw32-gcc CXX=/usr/bin/i686-w64-mingw32-g++ \
RC=/usr/bin/i686-w64-mingw32-windres \
@@ -397,18 +435,19 @@ packages (and their dependencies) must be installed.
-DDCMAKE_AR=/usr/bin/i686-w64-mingw32-ar \
-DCMAKE_RANLIB=/usr/bin/i686-w64-mingw32-ranlib {source_directory}
make
+```
This produces a 32-bit build of KasmVNC that does not depend on cygwin1.dll or
other Cygwin DLL's. The mingw64-i686-gcc-core and mingw64-i686-gcc-g++
packages (and their dependencies) must be installed.
-MinGW-w64 Build on Windows
---------------------------
+## MinGW-w64 Build on Windows
This produces a 64-bit build of KasmVNC using the "native" MinGW-w64 toolchain
(which is faster than the Cygwin version):
+```bash
cd {build_directory}
CC={mingw-w64_binary_path}/x86_64-w64-mingw32-gcc \
CXX={mingw-w64_binary_path}/x86_64-w64-mingw32-g++ \
@@ -418,11 +457,12 @@ This produces a 64-bit build of KasmVNC using the "native" MinGW-w64 toolchain
-DCMAKE_RANLIB={mingw-w64_binary_path}/x86_64-w64-mingw32-ranlib \
{source_directory}
make
+```
-MinGW Build on Linux
---------------------
+## MinGW Build on Linux
+```bash
cd {build_directory}
CC={mingw_binary_path}/i386-mingw32-gcc \
CXX={mingw_binary_path}/i386-mingw32-g++ \
@@ -432,15 +472,13 @@ MinGW Build on Linux
-DCMAKE_RANLIB={mingw_binary_path}/i386-mingw32-ranlib \
{source_directory}
make
+```
-===============================
-Distribution-Specific Packaging
-===============================
+# Distribution-Specific Packaging
-RPM Packages for RHEL
-------------------------------
+## RPM Packages for RHEL
The RPM spec files and patches used to create the nightly builds
and releases can be found in the "contrib/rpm/el{5,6}" directories
@@ -449,6 +487,7 @@ must be fetched manually and placed into the 'SOURCES' directory
under the rpmbuild root. Additionally, the following macros need
to be defined:
+```
EL6:
%debug_package %{nil}
@@ -457,10 +496,11 @@ to be defined:
%_smp_mflags -j3
%debug_package %{nil}
%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+```
-Debian packages for Ubuntu 12.04LTS
------------------------------------
+## Debian packages for Ubuntu 12.04LTS
+
The debian folder used to create the nightly builds and releases
can be found in the "contrib/deb/ubuntu-precise" directory of the
KasmVNC subversion trunk.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c3bded..0ef404d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ include(CheckCSourceRuns)
include(CMakeMacroLibtoolFile)
-project(kasmvnc)
+project(kasmvnc LANGUAGES C CXX)
set(VERSION 0.9)
# The RC version must always be four comma-separated numbers
@@ -74,13 +74,10 @@ set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -UNDEBUG")
# Make sure we get a sane C version
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+set(CMAKE_CXX_STANDARD 20)
# Enable OpenMP
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
-
-# Enable C++ 11
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
# Tell the compiler to be stringent
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wformat=2")
@@ -230,6 +227,7 @@ include_directories(${CMAKE_BINARY_DIR})
include(cmake/StaticBuild.cmake)
+add_subdirectory(third_party)
add_subdirectory(common)
if(WIN32)
@@ -242,11 +240,12 @@ else()
endif()
if(ENABLE_NLS)
- add_subdirectory(po)
+ add_subdirectory(po)
endif()
-####add_subdirectory(tests)
-
+if (TESTS)
+ add_subdirectory(tests)
+endif()
include(cmake/BuildPackages.cmake)
diff --git a/Pipfile b/Pipfile
index aa90173..42edbba 100644
--- a/Pipfile
+++ b/Pipfile
@@ -12,4 +12,4 @@ pexpect = "*"
[dev-packages]
[requires]
-python_version = "3.8"
+python_version = "3.10"
diff --git a/Pipfile.lock b/Pipfile.lock
index 1006c73..68f1a32 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,11 +1,11 @@
{
"_meta": {
"hash": {
- "sha256": "6745d5e5d90e44a18d73a0e23bc3d3e68acb950af0b87df50b45272d25b9e615"
+ "sha256": "f6a1fc809d6e02cd4f1ed8e45d4fc135a7c757cabe8eeb887a29e3664b796221"
},
"pipfile-spec": 6,
"requires": {
- "python_version": "3.8"
+ "python_version": "3.10"
},
"sources": [
{
@@ -30,61 +30,72 @@
},
"coverage": {
"hashes": [
- "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c",
- "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6",
- "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45",
- "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a",
- "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03",
- "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529",
- "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a",
- "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a",
- "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2",
- "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6",
- "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759",
- "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53",
- "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a",
- "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4",
- "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff",
- "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502",
- "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793",
- "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb",
- "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905",
- "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821",
- "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b",
- "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81",
- "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0",
- "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b",
- "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3",
- "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184",
- "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701",
- "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a",
- "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82",
- "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638",
- "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5",
- "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083",
- "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6",
- "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90",
- "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465",
- "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a",
- "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3",
- "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e",
- "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066",
- "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf",
- "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b",
- "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae",
- "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669",
- "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873",
- "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b",
- "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6",
- "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb",
- "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160",
- "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c",
- "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079",
- "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d",
- "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"
+ "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f",
+ "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3",
+ "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05",
+ "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25",
+ "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe",
+ "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257",
+ "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78",
+ "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada",
+ "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64",
+ "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6",
+ "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28",
+ "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067",
+ "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733",
+ "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676",
+ "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23",
+ "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008",
+ "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd",
+ "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3",
+ "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82",
+ "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545",
+ "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00",
+ "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47",
+ "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501",
+ "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d",
+ "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814",
+ "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd",
+ "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a",
+ "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318",
+ "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3",
+ "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c",
+ "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42",
+ "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a",
+ "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6",
+ "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a",
+ "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7",
+ "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487",
+ "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4",
+ "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2",
+ "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9",
+ "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd",
+ "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73",
+ "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc",
+ "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f",
+ "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea",
+ "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899",
+ "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a",
+ "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543",
+ "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1",
+ "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7",
+ "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d",
+ "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502",
+ "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b",
+ "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040",
+ "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c",
+ "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27",
+ "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c",
+ "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d",
+ "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4",
+ "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe",
+ "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323",
+ "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883",
+ "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f",
+ "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
- "version": "==5.5"
+ "markers": "python_version >= '3.9'",
+ "version": "==7.8.0"
},
"expects": {
"hashes": [
@@ -95,34 +106,34 @@
},
"mamba": {
"hashes": [
- "sha256:75cfc6dfd287dcccaf86dd753cf48e0a7337487c7c3fafda05a6a67ded6da496"
+ "sha256:4dcf69e9a53e78d4aa5ec3dee0bb2c65f02ea68a6b62c4275653d7170b8f5fe2"
],
"index": "pypi",
- "version": "==0.11.2"
+ "version": "==0.11.3"
},
"path": {
"hashes": [
- "sha256:2de925e8d421f93bcea80d511b81accfb6a7e6b249afa4a5559557b0cf817097",
- "sha256:340054c5bb459fc9fd40e7eb6768c5989f3e599d18224238465b5333bc8faa7d"
+ "sha256:688e7ec254f07a1c25f5474662d4480c663a2c8c4eb15c0ba056d8ab81608d22",
+ "sha256:d41e05ed4fa1d4f6d702df3c1e0a1a255d7b544287432456455dc7c51e5f98e9"
],
- "markers": "python_version >= '3.6'",
- "version": "==16.2.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==17.1.0"
},
"path.py": {
"hashes": [
"sha256:8d885e8b2497aed005703d94e0fd97943401f035e42a136810308bff034529a8",
"sha256:a43e82eb2c344c3fd0b9d6352f6b856f40b8b7d3d65cc05978b42c3715668496"
],
- "index": "pypi",
+ "markers": "python_version >= '3.5'",
"version": "==12.5.0"
},
"pexpect": {
"hashes": [
- "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937",
- "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
+ "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523",
+ "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"
],
"index": "pypi",
- "version": "==4.8.0"
+ "version": "==4.9.0"
},
"ptyprocess": {
"hashes": [
diff --git a/alpine/kasmvncserver/APKBUILD b/alpine/kasmvncserver/APKBUILD
index b98d00b..f5fb900 100644
--- a/alpine/kasmvncserver/APKBUILD
+++ b/alpine/kasmvncserver/APKBUILD
@@ -3,7 +3,7 @@
# Contributor:
# Maintainer: Kasm Technologies LLC
pkgname=kasmvncserver
-pkgver=1.3.3
+pkgver=1.3.4
pkgrel=0
pkgdesc="KasmVNC provides remote web-based access to a Desktop or application."
url="https://github.com/kasmtech/KasmVNC"
diff --git a/builder/README.md b/builder/README.md
index 64b8513..0daf66f 100644
--- a/builder/README.md
+++ b/builder/README.md
@@ -115,7 +115,7 @@ locally by doing stuff like this:
```
bash -c '
-. .ci/upload.sh;
+. .ci/helpers.sh;
prepare_upload_filename "focal/kasmvncserver_0.9.1~beta-1+libjpeg-turbo-latest_amd64.deb";
echo $upload_filename;'
```
diff --git a/builder/build-package b/builder/build-package
index 598230d..5f142f9 100755
--- a/builder/build-package
+++ b/builder/build-package
@@ -6,14 +6,7 @@ os="$1"
codename="$2"
build_tag="$3"
-detect_package_format() {
- package_format=rpm
- if ls builder/dockerfile*"$os"* | grep -q .deb.build; then
- package_format=deb
- elif ls builder/dockerfile*"$os"* | grep -q .apk.build; then
- package_format=apk
- fi
-}
+. ./builder/common.sh
warn_build_tag_not_supported_for_rpm_and_exit() {
if [[ "$build_tag" && "$package_format" = "rpm" ]]; then
diff --git a/builder/build.sh b/builder/build.sh
index be9d899..24d66c0 100755
--- a/builder/build.sh
+++ b/builder/build.sh
@@ -44,38 +44,41 @@ if [[ "${XORG_VER}" == 21* ]]; then
else
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
fi
-wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.gz
+
+TARBALL="xorg-server-${XORG_VER}.tar.gz"
+
+if [ ! -f "$TARBALL" ]; then
+ wget --no-check-certificate https://www.x.org/archive/individual/xserver/"$TARBALL"
+fi
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
#cd kasmvnc
#git checkout dynjpeg
cd /src
-# We only want the server, so FLTK and manual tests aren't useful.
-# Alternatively, install fltk 1.3 and its dev packages.
-sed -i -e '/find_package(FLTK/s@^@#@' \
- -e '/add_subdirectory(tests/s@^@#@' \
- CMakeLists.txt
-
cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF \
-DENABLE_GNUTLS:BOOL=OFF
-make -j5
+make -j"$(nproc)"
-tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.gz --strip-components=1
+if [ ! -d unix/xserver/include ]; then
+ tar -C unix/xserver -xf /tmp/"$TARBALL" --strip-components=1
-cd unix/xserver
-# Apply patches
-patch -Np1 -i ../xserver${XORG_PATCH}.patch
-case "$XORG_VER" in
- 1.20.*)
- patch -s -p0 < ../CVE-2022-2320-v1.20.patch
- if [ -f ../xserver120.7.patch ]; then
- patch -Np1 -i ../xserver120.7.patch
- fi ;;
- 1.19.*)
- patch -s -p0 < ../CVE-2022-2320-v1.19.patch
- ;;
-esac
+ cd unix/xserver
+ # Apply patches
+ patch -Np1 -i ../xserver"${XORG_PATCH}".patch
+ case "$XORG_VER" in
+ 1.20.*)
+ patch -s -p0 < ../CVE-2022-2320-v1.20.patch
+ if [ -f ../xserver120.7.patch ]; then
+ patch -Np1 -i ../xserver120.7.patch
+ fi ;;
+ 1.19.*)
+ patch -s -p0 < ../CVE-2022-2320-v1.19.patch
+ ;;
+ esac
+else
+ cd unix/xserver
+fi
autoreconf -i
# Configuring Xorg is long and has many distro-specific paths.
@@ -110,33 +113,38 @@ fi
--with-sha1=libcrypto \
--with-xkb-bin-directory=/usr/bin \
--with-xkb-output=/var/lib/xkb \
- --with-xkb-path=/usr/share/X11/xkb ${CONFIG_OPTIONS}
+ --with-xkb-path=/usr/share/X11/xkb "${CONFIG_OPTIONS}"
# remove array bounds errors for new versions of GCC
find . -name "Makefile" -exec sed -i 's/-Werror=array-bounds//g' {} \;
-make -j5
+
+
+make -j"$(nproc)"
# modifications for the servertarball
cd /src
mkdir -p xorg.build/bin
+mkdir -p xorg.build/lib
cd xorg.build/bin/
-ln -s /src/unix/xserver/hw/vnc/Xvnc Xvnc
+ln -sfn /src/unix/xserver/hw/vnc/Xvnc Xvnc
cd ..
mkdir -p man/man1
touch man/man1/Xserver.1
cp /src/unix/xserver/hw/vnc/Xvnc.man man/man1/Xvnc.1
-mkdir lib
+
+mkdir -p lib
+
cd lib
if [ -d /usr/lib/x86_64-linux-gnu/dri ]; then
- ln -s /usr/lib/x86_64-linux-gnu/dri dri
+ ln -sfn /usr/lib/x86_64-linux-gnu/dri dri
elif [ -d /usr/lib/aarch64-linux-gnu/dri ]; then
- ln -s /usr/lib/aarch64-linux-gnu/dri dri
+ ln -sfn /usr/lib/aarch64-linux-gnu/dri dri
elif [ -d /usr/lib/arm-linux-gnueabihf/dri ]; then
- ln -s /usr/lib/arm-linux-gnueabihf/dri dri
+ ln -sfn /usr/lib/arm-linux-gnueabihf/dri dri
elif [ -d /usr/lib/xorg/modules/dri ]; then
- ln -s /usr/lib/xorg/modules/dri dri
+ ln -sfn /usr/lib/xorg/modules/dri dri
else
- ln -s /usr/lib64/dri dri
+ ln -sfn /usr/lib64/dri dri
fi
cd /src
diff --git a/builder/build_and_deploy_kasm.sh b/builder/build_and_deploy_kasm.sh
deleted file mode 100755
index 84234b6..0000000
--- a/builder/build_and_deploy_kasm.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-# this script will build kasmvnc and build a new kasm desktop image
-# this script assumes you have an instance of kasm already deployed
-# it will replace the existing kasm desktop image so the next kasm you launch will use the updated image
-
-set -e
-
-if [[ $EUID -ne 0 ]]; then
- echo "This script must be run as root"
- exit 1
-fi
-
-docker build -t kasmvncbuilder:latest -f builder/dockerfile.build .
-docker run -v /tmp:/build kasmvncbuilder:latest
-cp /tmp/kasmvnc*.tar.gz builder/
-cd builder
-docker build -t kasmweb/desktop-deluxe:develop -f dockerfile.test .
-docker ps -aq --no-trunc -f status=exited | xargs docker rm
-docker rmi $(docker images | grep "" | awk "{print $3}")
diff --git a/builder/bump-package-version-apk b/builder/bump-package-version-apk
index adf77fe..359fcd3 100755
--- a/builder/bump-package-version-apk
+++ b/builder/bump-package-version-apk
@@ -7,7 +7,7 @@ spec_file=alpine/kasmvncserver/APKBUILD
bump_version() {
sed -i "s/^pkgver=.\+/pkgver=$new_version/" "$1"
- sed -i "s/^pkgrel=.\+/pkgver=0/" "$1"
+ sed -i "s/^pkgrel=.\+/pkgrel=0/" "$1"
}
bump_version $spec_file
diff --git a/builder/common.sh b/builder/common.sh
index 50f2c06..ae73b43 100644
--- a/builder/common.sh
+++ b/builder/common.sh
@@ -1 +1,27 @@
VNC_PORT=8443
+core_dumps_dir_inside_container="/core_dumps"
+core_dumps_dir_on_host="run_test/core_dumps"
+core_dumps_dir_volume_option="-v ${PWD}/${core_dumps_dir_on_host}:/${core_dumps_dir_inside_container}"
+
+detect_build_dir() {
+ if [ -n "$CI" ]; then
+ build_dir=output
+ else
+ build_dir=builder/build
+ fi
+}
+
+detect_interactive() {
+ if [ -z "$run_test" ]; then
+ interactive=-it
+ fi
+}
+
+detect_package_format() {
+ package_format=rpm
+ if ls builder/dockerfile*"$os"* | grep -q .deb.build; then
+ package_format=deb
+ elif ls builder/dockerfile*"$os"* | grep -q .apk.build; then
+ package_format=apk
+ fi
+}
diff --git a/builder/conf/nginx_kasm.conf b/builder/conf/nginx_kasm.conf
new file mode 100644
index 0000000..a341c59
--- /dev/null
+++ b/builder/conf/nginx_kasm.conf
@@ -0,0 +1,42 @@
+server {
+ listen 8443 ssl;
+ ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
+ ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
+
+ location / {
+ proxy_pass http://127.0.0.1:5173;
+ }
+
+ location /api/ {
+ proxy_pass https://127.0.0.1:6901;
+ }
+
+ location /websockify {
+ # The following configurations must be configured when proxying to Kasm Workspaces
+
+ # WebSocket Support
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ # Host and X headers
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # Connectivity Options
+ proxy_http_version 1.1;
+ proxy_read_timeout 1800s;
+ proxy_send_timeout 1800s;
+ proxy_connect_timeout 1800s;
+ proxy_buffering off;
+
+ # Allow large requests to support file uploads to sessions
+ client_max_body_size 10M;
+
+ # # Proxy to KasmVNC using SSL
+ #proxy_pass https://127.0.0.1:6901;
+ # Proxy to KasmVNC without SSL
+ proxy_pass http://127.0.0.1:6901;
+ }
+ }
\ No newline at end of file
diff --git a/builder/devenv-vncserver b/builder/devenv-vncserver
index 1ec401f..34b446b 100755
--- a/builder/devenv-vncserver
+++ b/builder/devenv-vncserver
@@ -3,7 +3,7 @@
set -e
default_os=ubuntu
-default_os_codename=focal
+default_os_codename=jammy
cd "$(dirname "$0")/.."
. ./builder/os_ver_cli.sh
diff --git a/builder/dockerfile.alpine.barebones.apk.test b/builder/dockerfile.alpine.barebones.apk.test
new file mode 100644
index 0000000..061a54f
--- /dev/null
+++ b/builder/dockerfile.alpine.barebones.apk.test
@@ -0,0 +1,24 @@
+ARG BASE_IMAGE
+FROM $BASE_IMAGE
+
+RUN apk add bash
+
+ENV STARTUPDIR=/dockerstartup
+
+COPY ./builder/scripts/ /tmp/scripts/
+COPY alpine/kasmvncserver/APKBUILD /tmp
+
+ARG KASMVNC_PACKAGE_DIR
+COPY $KASMVNC_PACKAGE_DIR/kasmvncserver-*.apk /tmp/
+RUN /tmp/scripts/install_kasmvncserver_package
+
+ARG RUN_TEST
+RUN [ "$RUN_TEST" = 1 ] || apk add xterm
+
+RUN mkdir -p $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
+
+RUN adduser -D -s/bin/bash foo && addgroup foo kasmvnc-cert
+USER foo
+
+ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
diff --git a/builder/dockerfile.alpine_318.barebones.apk.test b/builder/dockerfile.alpine_318.barebones.apk.test
new file mode 120000
index 0000000..388647d
--- /dev/null
+++ b/builder/dockerfile.alpine_318.barebones.apk.test
@@ -0,0 +1 @@
+dockerfile.alpine.barebones.apk.test
\ No newline at end of file
diff --git a/builder/dockerfile.alpine_318.build b/builder/dockerfile.alpine_318.build
index 8a01ac8..f4d3bdf 100644
--- a/builder/dockerfile.alpine_318.build
+++ b/builder/dockerfile.alpine_318.build
@@ -14,6 +14,7 @@ RUN \
bash \
ca-certificates \
cmake \
+ nasm \
coreutils \
curl \
eudev-dev \
@@ -66,13 +67,13 @@ RUN \
xorgproto \
xorg-server-common \
xorg-server-dev \
- xtrans
+ xtrans \
+ ffmpeg-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.alpine_319.barebones.apk.test b/builder/dockerfile.alpine_319.barebones.apk.test
new file mode 120000
index 0000000..388647d
--- /dev/null
+++ b/builder/dockerfile.alpine_319.barebones.apk.test
@@ -0,0 +1 @@
+dockerfile.alpine.barebones.apk.test
\ No newline at end of file
diff --git a/builder/dockerfile.alpine_319.build b/builder/dockerfile.alpine_319.build
index a73670b..67a8951 100644
--- a/builder/dockerfile.alpine_319.build
+++ b/builder/dockerfile.alpine_319.build
@@ -14,6 +14,7 @@ RUN \
bash \
ca-certificates \
cmake \
+ nasm \
coreutils \
curl \
eudev-dev \
@@ -66,13 +67,13 @@ RUN \
xorgproto \
xorg-server-common \
xorg-server-dev \
- xtrans
+ xtrans \
+ ffmpeg-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.alpine_320.barebones.apk.test b/builder/dockerfile.alpine_320.barebones.apk.test
new file mode 120000
index 0000000..388647d
--- /dev/null
+++ b/builder/dockerfile.alpine_320.barebones.apk.test
@@ -0,0 +1 @@
+dockerfile.alpine.barebones.apk.test
\ No newline at end of file
diff --git a/builder/dockerfile.alpine_320.build b/builder/dockerfile.alpine_320.build
index 42995f1..cf4e697 100644
--- a/builder/dockerfile.alpine_320.build
+++ b/builder/dockerfile.alpine_320.build
@@ -14,6 +14,7 @@ RUN \
bash \
ca-certificates \
cmake \
+ nasm \
coreutils \
curl \
eudev-dev \
@@ -66,13 +67,13 @@ RUN \
xorgproto \
xorg-server-common \
xorg-server-dev \
- xtrans
+ xtrans \
+ ffmpeg-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.alpine_321.apk.build b/builder/dockerfile.alpine_321.apk.build
index 2bc1af0..6f41bde 100644
--- a/builder/dockerfile.alpine_321.apk.build
+++ b/builder/dockerfile.alpine_321.apk.build
@@ -1,7 +1,7 @@
FROM alpine:3.21
RUN apk add shadow bash
-RUN apk add abuild sudo less
+RUN apk add abuild sudo less ffmpeg-dev
ENV HOME /src/alpine
WORKDIR $HOME/kasmvncserver
diff --git a/builder/dockerfile.alpine_321.barebones.apk.test b/builder/dockerfile.alpine_321.barebones.apk.test
new file mode 120000
index 0000000..388647d
--- /dev/null
+++ b/builder/dockerfile.alpine_321.barebones.apk.test
@@ -0,0 +1 @@
+dockerfile.alpine.barebones.apk.test
\ No newline at end of file
diff --git a/builder/dockerfile.alpine_321.build b/builder/dockerfile.alpine_321.build
index e73d31f..80972ad 100644
--- a/builder/dockerfile.alpine_321.build
+++ b/builder/dockerfile.alpine_321.build
@@ -14,6 +14,7 @@ RUN \
bash \
ca-certificates \
cmake \
+ nasm \
coreutils \
curl \
eudev-dev \
@@ -66,13 +67,13 @@ RUN \
xorgproto \
xorg-server-common \
xorg-server-dev \
- xtrans
+ xtrans \
+ ffmpeg-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.debian_buster.barebones.deb.test b/builder/dockerfile.debian.barebones.deb.test
similarity index 65%
rename from builder/dockerfile.debian_buster.barebones.deb.test
rename to builder/dockerfile.debian.barebones.deb.test
index 516bbca..927f52d 100644
--- a/builder/dockerfile.debian_buster.barebones.deb.test
+++ b/builder/dockerfile.debian.barebones.deb.test
@@ -1,4 +1,5 @@
-FROM debian:buster-slim
+ARG BASE_IMAGE
+FROM $BASE_IMAGE
ENV STARTUPDIR=/dockerstartup
@@ -8,12 +9,14 @@ COPY ./debian/changelog /tmp
ARG KASMVNC_PACKAGE_DIR
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
RUN /tmp/scripts/install_kasmvncserver_package
-RUN apt-get update && apt-get -y install xterm
+
+ARG RUN_TEST
+RUN if [ "$RUN_TEST" != 1 ]; then apt-get update && apt-get -y install xterm lsb-release; fi
RUN mkdir -p $STARTUPDIR
COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
-RUN useradd -m foo
-USER foo:ssl-cert
+RUN useradd -m foo && adduser foo ssl-cert
+USER foo
ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
diff --git a/builder/dockerfile.debian_bookworm.barebones.deb.test b/builder/dockerfile.debian_bookworm.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.debian_bookworm.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.debian_bookworm.build b/builder/dockerfile.debian_bookworm.build
index 8c0e8de..bda5926 100644
--- a/builder/dockerfile.debian_bookworm.build
+++ b/builder/dockerfile.debian_bookworm.build
@@ -22,13 +22,13 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
diff --git a/builder/dockerfile.debian_bullseye.barebones.deb.test b/builder/dockerfile.debian_bullseye.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.debian_bullseye.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.debian_bullseye.build b/builder/dockerfile.debian_bullseye.build
index f626bb7..bd950e7 100644
--- a/builder/dockerfile.debian_bullseye.build
+++ b/builder/dockerfile.debian_bullseye.build
@@ -12,13 +12,26 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build nasm git libgnutls28-dev vim wget tightvncserver curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
+
+RUN CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
+ ARCH=$(arch) && \
+ if [ "$ARCH" = "x86_64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-x86_64.sh"; \
+ elif [ "$ARCH" = "aarch64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-aarch64.sh"; \
+ else \
+ echo "Unsupported architecture: $ARCH" && exit 1; \
+ fi && \
+ curl -fsSL $CMAKE_URL -o cmake.sh && \
+ (echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
+ rm cmake.sh
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
diff --git a/builder/dockerfile.debian_buster.build b/builder/dockerfile.debian_buster.build
deleted file mode 100644
index c8f8008..0000000
--- a/builder/dockerfile.debian_buster.build
+++ /dev/null
@@ -1,28 +0,0 @@
-FROM debian:buster
-
-ENV KASMVNC_BUILD_OS debian
-ENV KASMVNC_BUILD_OS_CODENAME buster
-ENV XORG_VER 1.20.10
-ENV DEBIAN_FRONTEND noninteractive
-
-RUN grep '^deb' /etc/apt/sources.list | sed 's#^deb#deb-src#' >> /etc/apt/sources.list
-
-RUN apt-get update && \
- apt-get -y install sudo
-
-RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
-RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
-
-ENV SCRIPTS_DIR=/tmp/scripts
-COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
-
-RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
-
-COPY --chown=docker:docker . /src/
-
-USER docker
-ENTRYPOINT ["/src/builder/build.sh"]
diff --git a/builder/dockerfile.debian_trixie.barebones.deb.test b/builder/dockerfile.debian_trixie.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.debian_trixie.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.debian_trixie.build b/builder/dockerfile.debian_trixie.build
new file mode 100644
index 0000000..0236c10
--- /dev/null
+++ b/builder/dockerfile.debian_trixie.build
@@ -0,0 +1,38 @@
+FROM debian:trixie-slim
+
+ENV KASMVNC_BUILD_OS debian
+ENV KASMVNC_BUILD_OS_CODENAME trixie
+ENV XORG_VER 21.1.7
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN \
+ echo "**** add all sources ****" && \
+ echo "deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
+ echo "deb-src http://deb.debian.org/debian trixie main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb-src http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb-src http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb http://security.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ echo "deb-src http://security.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
+ rm -f /etc/apt/sources.list.d/debian.sources
+
+RUN apt-get update && \
+ apt-get -y install sudo
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
+RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
+RUN apt-get update && apt-get -y install ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
+
+ENV SCRIPTS_DIR=/tmp/scripts
+COPY builder/scripts $SCRIPTS_DIR
+RUN $SCRIPTS_DIR/build-deps.sh
+
+RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
+
+COPY --chown=docker:docker . /src/
+
+USER docker
+ENTRYPOINT ["/src/builder/build.sh"]
diff --git a/builder/dockerfile.debian_buster.deb.build b/builder/dockerfile.debian_trixie.deb.build
similarity index 94%
rename from builder/dockerfile.debian_buster.deb.build
rename to builder/dockerfile.debian_trixie.deb.build
index eb3a6bf..913614e 100644
--- a/builder/dockerfile.debian_buster.deb.build
+++ b/builder/dockerfile.debian_trixie.deb.build
@@ -1,4 +1,4 @@
-FROM debian:buster
+FROM debian:trixie-slim
ENV DEBIAN_FRONTEND noninteractive
diff --git a/builder/dockerfile.debian_buster.deb.test b/builder/dockerfile.debian_trixie.deb.test
similarity index 94%
rename from builder/dockerfile.debian_buster.deb.test
rename to builder/dockerfile.debian_trixie.deb.test
index 416e9fc..76b05cf 100644
--- a/builder/dockerfile.debian_buster.deb.test
+++ b/builder/dockerfile.debian_trixie.deb.test
@@ -1,4 +1,4 @@
-FROM debian:buster-slim
+FROM debian:trixie-slim
ENV DISPLAY=:1 \
VNC_PORT=8443 \
@@ -29,7 +29,7 @@ WORKDIR $HOME
### REQUIRED STUFF ###
-RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
+RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal dbus-x11 xterm libnss-wrapper gettext wget
RUN apt-get purge -y pm-utils xscreensaver*
RUN apt-get update && apt-get install -y vim less
RUN apt-get update && apt-get -y install lsb-release
@@ -40,6 +40,7 @@ RUN mkdir -p $STARTUPDIR
COPY builder/startup/ $STARTUPDIR
### START CUSTOM STUFF ####
+
COPY ./builder/scripts/ /tmp/scripts/
COPY ./debian/changelog /tmp
diff --git a/builder/dockerfile.fedora_forty.barebones.rpm.test b/builder/dockerfile.fedora_forty.barebones.rpm.test
new file mode 100644
index 0000000..de0c4ec
--- /dev/null
+++ b/builder/dockerfile.fedora_forty.barebones.rpm.test
@@ -0,0 +1,25 @@
+FROM fedora:40
+
+ENV STARTUPDIR=/dockerstartup
+
+ARG RUN_TEST
+RUN [ "$RUN_TEST" = 1 ] || dnf install -y \
+ less \
+ redhat-lsb-core \
+ vim \
+ xterm
+
+COPY ./builder/scripts/ /tmp/scripts/
+
+ARG KASMVNC_PACKAGE_DIR
+COPY $KASMVNC_PACKAGE_DIR/kasmvncserver-*.rpm /tmp/
+COPY fedora/kasmvncserver.spec /tmp/
+RUN /tmp/scripts/install_kasmvncserver_package
+
+RUN mkdir -p $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
+
+RUN useradd -m foo
+USER foo:kasmvnc-cert
+
+ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
diff --git a/builder/dockerfile.fedora_forty.build b/builder/dockerfile.fedora_forty.build
index d5ad068..7859248 100644
--- a/builder/dockerfile.fedora_forty.build
+++ b/builder/dockerfile.fedora_forty.build
@@ -16,6 +16,7 @@ RUN \
byacc \
bzip2 \
cmake \
+ nasm \
diffutils \
doxygen \
file \
@@ -71,12 +72,13 @@ RUN \
xorg-x11-server-common \
xorg-x11-server-devel \
xorg-x11-xtrans-devel \
- xsltproc
+ xsltproc \
+ libavformat-free-devel \
+ libswscale-free-devel
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.fedora_fortyone.barebones.rpm.test b/builder/dockerfile.fedora_fortyone.barebones.rpm.test
new file mode 100644
index 0000000..a2b94d1
--- /dev/null
+++ b/builder/dockerfile.fedora_fortyone.barebones.rpm.test
@@ -0,0 +1,25 @@
+FROM fedora:41
+
+ENV STARTUPDIR=/dockerstartup
+
+ARG RUN_TEST
+RUN [ "$RUN_TEST" = 1 ] || dnf install -y \
+ less \
+ redhat-lsb-core \
+ vim \
+ xterm
+
+COPY ./builder/scripts/ /tmp/scripts/
+
+ARG KASMVNC_PACKAGE_DIR
+COPY $KASMVNC_PACKAGE_DIR/kasmvncserver-*.rpm /tmp/
+COPY fedora/kasmvncserver.spec /tmp/
+RUN /tmp/scripts/install_kasmvncserver_package
+
+RUN mkdir -p $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
+
+RUN useradd -m foo
+USER foo:kasmvnc-cert
+
+ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
diff --git a/builder/dockerfile.fedora_fortyone.build b/builder/dockerfile.fedora_fortyone.build
index 5c2bf48..ef00860 100644
--- a/builder/dockerfile.fedora_fortyone.build
+++ b/builder/dockerfile.fedora_fortyone.build
@@ -17,6 +17,7 @@ RUN \
byacc \
bzip2 \
cmake \
+ nasm \
diffutils \
doxygen \
file \
@@ -72,12 +73,13 @@ RUN \
xorg-x11-server-common \
xorg-x11-server-devel \
xorg-x11-xtrans-devel \
- xsltproc
+ xsltproc \
+ libavformat-free-devel \
+ libswscale-free-devel
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
diff --git a/builder/dockerfile.fedora_thirtynine.build b/builder/dockerfile.fedora_thirtynine.build
deleted file mode 100644
index 0854956..0000000
--- a/builder/dockerfile.fedora_thirtynine.build
+++ /dev/null
@@ -1,86 +0,0 @@
-FROM fedora:39
-
-ENV KASMVNC_BUILD_OS fedora
-ENV KASMVNC_BUILD_OS_CODENAME thirtynine
-ENV XORG_VER 1.20.14
-
-RUN \
- echo "**** install build deps ****" && \
- dnf group install -y \
- "C Development Tools and Libraries" \
- "Development Tools" && \
- dnf install -y \
- autoconf \
- automake \
- bison \
- byacc \
- bzip2 \
- cmake \
- diffutils \
- doxygen \
- file \
- flex \
- fop \
- gcc \
- gcc-c++ \
- git \
- glibc-devel \
- libdrm-devel \
- libepoxy-devel \
- libmd-devel \
- libpciaccess-devel \
- libtool \
- libwebp-devel \
- libX11-devel \
- libXau-devel \
- libxcb-devel \
- libXcursor-devel \
- libxcvt-devel \
- libXdmcp-devel \
- libXext-devel \
- libXfont2-devel \
- libxkbfile-devel \
- libXrandr-devel \
- libxshmfence-devel \
- libXtst-devel \
- mesa-libEGL-devel \
- mesa-libgbm-devel \
- mesa-libGL-devel \
- meson \
- mingw64-binutils \
- mt-st \
- nettle-devel \
- openssl-devel \
- patch \
- pixman-devel \
- wayland-devel \
- wget \
- which \
- xcb-util-devel \
- xcb-util-image-devel \
- xcb-util-keysyms-devel \
- xcb-util-renderutil-devel \
- xcb-util-wm-devel \
- xinit \
- xkbcomp \
- xkbcomp-devel \
- xkeyboard-config \
- xmlto \
- xorg-x11-font-utils \
- xorg-x11-proto-devel \
- xorg-x11-server-common \
- xorg-x11-server-devel \
- xorg-x11-xtrans-devel \
- xsltproc
-
-ENV SCRIPTS_DIR=/tmp/scripts
-COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
-
-RUN useradd -m docker && echo "docker:docker" | chpasswd
-
-COPY --chown=docker:docker . /src/
-
-USER docker
-ENTRYPOINT ["/src/builder/build.sh"]
diff --git a/builder/dockerfile.fedora_thirtynine.rpm.build b/builder/dockerfile.fedora_thirtynine.rpm.build
deleted file mode 100644
index 0a1bfc4..0000000
--- a/builder/dockerfile.fedora_thirtynine.rpm.build
+++ /dev/null
@@ -1,13 +0,0 @@
-FROM fedora:39
-
-RUN dnf install -y fedora-packager fedora-review
-RUN dnf install -y tree vim less
-RUN dnf install -y redhat-lsb-core
-RUN dnf install -y dnf-plugins-core
-
-COPY fedora/*.spec /tmp
-RUN dnf builddep -y /tmp/*.spec
-
-RUN useradd -m docker && echo "docker:docker" | chpasswd
-
-USER docker
diff --git a/builder/dockerfile.kali_kali-rolling.barebones.deb.test b/builder/dockerfile.kali_kali-rolling.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.kali_kali-rolling.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.kali_kali-rolling.build b/builder/dockerfile.kali_kali-rolling.build
index 0812308..7dad223 100644
--- a/builder/dockerfile.kali_kali-rolling.build
+++ b/builder/dockerfile.kali_kali-rolling.build
@@ -4,6 +4,8 @@ ENV KASMVNC_BUILD_OS kali
ENV KASMVNC_BUILD_OS_CODENAME kali-rolling
ENV XORG_VER 21.1.14
ENV DEBIAN_FRONTEND noninteractive
+ENV CXXFLAGS="-Wno-stringop-overflow"
+ENV CFLAGS="-Wno-stringop-overflow"
RUN grep '^deb' /etc/apt/sources.list | sed 's#^deb#deb-src#' >> /etc/apt/sources.list
@@ -13,13 +15,13 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
RUN apt-get update && apt-get -y install gcc g++ curl
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
diff --git a/builder/dockerfile.opensuse_15.barebones.rpm.test b/builder/dockerfile.opensuse_15.barebones.rpm.test
index 3501b64..fa4f435 100644
--- a/builder/dockerfile.opensuse_15.barebones.rpm.test
+++ b/builder/dockerfile.opensuse_15.barebones.rpm.test
@@ -3,7 +3,8 @@ FROM opensuse/leap:15.5
ENV STARTUPDIR=/dockerstartup
# base tools
-RUN zypper -n install -y \
+ARG RUN_TEST
+RUN [ "$RUN_TEST" = 1 ] || zypper -n install -y \
less \
vim \
xterm
@@ -15,7 +16,7 @@ COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp
RUN zypper install -y --allow-unsigned-rpm /tmp/*.rpm
RUN mkdir -p $STARTUPDIR
-COPY startup/vnc_startup_barebones.sh $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
RUN useradd -m foo
USER foo:kasmvnc-cert
diff --git a/builder/dockerfile.opensuse_15.build b/builder/dockerfile.opensuse_15.build
index db2f130..57f81e1 100644
--- a/builder/dockerfile.opensuse_15.build
+++ b/builder/dockerfile.opensuse_15.build
@@ -8,13 +8,16 @@ ENV XORG_VER 1.20.3
RUN zypper install -ny \
bdftopcf \
bigreqsproto-devel \
- cmake \
+ ninja \
+ nasm \
curl \
ffmpeg-4-libavcodec-devel \
+ ffmpeg-4-libswscale-devel \
+ ffmpeg-4-libavformat-devel \
fonttosfnt \
font-util \
- gcc \
- gcc-c++ \
+ gcc14 \
+ gcc14-c++ \
giflib-devel \
git \
gzip \
@@ -45,17 +48,31 @@ RUN zypper install -ny \
xorg-x11-util-devel \
zlib-devel
-ENV SCRIPTS_DIR=/tmp/scripts
-COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
-
RUN useradd -u 1000 docker && \
groupadd -g 1000 docker && \
usermod -a -G docker docker
+RUN ARCH=$(arch) && \
+ CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
+ if [ "$ARCH" = "x86_64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-x86_64.sh"; \
+ elif [ "$ARCH" = "aarch64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-aarch64.sh"; \
+ else \
+ echo "Unsupported architecture: $ARCH" && exit 1; \
+ fi && \
+ curl -fsSL $CMAKE_URL -o cmake.sh && \
+ (echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
+ rm cmake.sh
+
+ENV SCRIPTS_DIR=/tmp/scripts
+ENV CC=/usr/bin/gcc-14
+ENV CXX=/usr/bin/g++-14
+
+COPY builder/scripts $SCRIPTS_DIR
+RUN $SCRIPTS_DIR/build-deps.sh
+
COPY --chown=docker:docker . /src/
-
USER docker
-ENTRYPOINT ["/src/builder/build.sh"]
+ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]
diff --git a/builder/dockerfile.oracle_8.barebones.rpm.test b/builder/dockerfile.oracle_8.barebones.rpm.test
index d4cc293..3904e2c 100644
--- a/builder/dockerfile.oracle_8.barebones.rpm.test
+++ b/builder/dockerfile.oracle_8.barebones.rpm.test
@@ -2,7 +2,8 @@ FROM oraclelinux:8
ENV STARTUPDIR=/dockerstartup
-RUN dnf install -y \
+ARG RUN_TEST
+RUN [ "$RUN_TEST" = 1 ] || dnf install -y \
less \
redhat-lsb-core \
vim \
@@ -10,12 +11,15 @@ RUN dnf install -y \
RUN dnf config-manager --set-enabled ol8_codeready_builder
RUN dnf install -y oracle-epel-release-el8
+COPY ./builder/scripts/ /tmp/scripts/
+
ARG KASMVNC_PACKAGE_DIR
-COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp
-RUN dnf localinstall -y /tmp/*.rpm
+COPY $KASMVNC_PACKAGE_DIR/kasmvncserver-*.rpm /tmp/
+COPY fedora/kasmvncserver.spec /tmp/
+RUN /tmp/scripts/install_kasmvncserver_package
RUN mkdir -p $STARTUPDIR
-COPY startup/vnc_startup_barebones.sh $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
RUN useradd -m foo
USER foo:kasmvnc-cert
diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build
index 4a98a19..4a2a13a 100644
--- a/builder/dockerfile.oracle_8.build
+++ b/builder/dockerfile.oracle_8.build
@@ -11,10 +11,13 @@ RUN \
dnf install -y \
bzip2-devel \
ca-certificates \
+ ninja-build \
cmake \
+ nasm \
dnf-plugins-core \
gcc \
gcc-c++ \
+ gcc-toolset-14 \
git \
gnutls-devel \
libjpeg-turbo-devel \
@@ -48,16 +51,18 @@ RUN dnf install -y \
xorg-x11-xtrans-devel \
libXrandr-devel \
libXtst-devel \
- libXcursor-devel
+ libXcursor-devel \
+ libSM-devel
ENV SCRIPTS_DIR=/tmp/scripts
-COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+ENV PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:${PKG_CONFIG_PATH:-/opt/rh/gcc-toolset-14/root/usr/lib64/pkgconfig}
-RUN useradd -m docker && echo "docker:docker" | chpasswd
+COPY builder/scripts $SCRIPTS_DIR
+RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh && \
+ $SCRIPTS_DIR/build-deps.sh && \
+ useradd -m docker && echo "docker:docker" | chpasswd
COPY --chown=docker:docker . /src/
USER docker
-ENTRYPOINT ["/src/builder/build.sh"]
+ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]
diff --git a/builder/dockerfile.oracle_9.barebones.rpm.test b/builder/dockerfile.oracle_9.barebones.rpm.test
index 2e8f3b5..e4fa885 100644
--- a/builder/dockerfile.oracle_9.barebones.rpm.test
+++ b/builder/dockerfile.oracle_9.barebones.rpm.test
@@ -2,7 +2,7 @@ FROM oraclelinux:9
ENV STARTUPDIR=/dockerstartup
-RUN dnf install -y \
+RUN [ "$RUN_TEST" = 1 ] || dnf install -y \
less \
vim \
xterm
@@ -17,7 +17,7 @@ RUN dnf install -y crypto-policies-scripts
RUN update-crypto-policies --set FIPS:SHA1
RUN mkdir -p $STARTUPDIR
-COPY startup/vnc_startup_barebones.sh $STARTUPDIR
+COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
RUN useradd -m foo
USER foo:kasmvnc-cert
diff --git a/builder/dockerfile.oracle_9.build b/builder/dockerfile.oracle_9.build
index ca94b69..8053bd5 100644
--- a/builder/dockerfile.oracle_9.build
+++ b/builder/dockerfile.oracle_9.build
@@ -11,10 +11,13 @@ RUN \
dnf install -y \
bzip2-devel \
ca-certificates \
+ ninja-build \
cmake \
+ nasm \
dnf-plugins-core \
gcc \
gcc-c++ \
+ gcc-toolset-14 \
git \
gnutls-devel \
libjpeg-turbo-devel \
@@ -40,6 +43,7 @@ RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-
# Install from new repos
RUN dnf install -y \
giflib-devel \
+ ffmpeg-devel \
lbzip2 \
libXfont2-devel \
libxkbfile-devel \
@@ -47,17 +51,16 @@ RUN dnf install -y \
xorg-x11-xtrans-devel \
libXrandr-devel \
libXtst-devel \
- libXcursor-devel
-
+ libXcursor-devel \
+ libSM-devel
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
-
-RUN useradd -m docker && echo "docker:docker" | chpasswd
+RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh && \
+ $SCRIPTS_DIR/build-deps.sh && \
+ useradd -m docker && echo "docker:docker" | chpasswd
COPY --chown=docker:docker . /src/
USER docker
-ENTRYPOINT ["/src/builder/build.sh"]
+ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]
diff --git a/builder/dockerfile.ubuntu_focal.barebones.deb.test b/builder/dockerfile.ubuntu_focal.barebones.deb.test
deleted file mode 100644
index d9effe0..0000000
--- a/builder/dockerfile.ubuntu_focal.barebones.deb.test
+++ /dev/null
@@ -1,20 +0,0 @@
-FROM ubuntu:focal
-
-ENV STARTUPDIR=/dockerstartup
-
-COPY ./builder/scripts/ /tmp/scripts/
-COPY ./debian/changelog /tmp
-
-ARG KASMVNC_PACKAGE_DIR
-COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
-RUN /tmp/scripts/install_kasmvncserver_package
-
-RUN apt-get update && apt-get -y install xterm lsb-release
-
-RUN mkdir -p $STARTUPDIR
-COPY builder/startup/vnc_startup_barebones.sh $STARTUPDIR
-
-RUN useradd -m foo && addgroup foo ssl-cert
-USER foo
-
-ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
diff --git a/builder/dockerfile.ubuntu_focal.barebones.deb.test b/builder/dockerfile.ubuntu_focal.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.ubuntu_focal.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.ubuntu_focal.build b/builder/dockerfile.ubuntu_focal.build
index c734715..0ecb1ee 100644
--- a/builder/dockerfile.ubuntu_focal.build
+++ b/builder/dockerfile.ubuntu_focal.build
@@ -12,16 +12,30 @@ RUN apt-get update && \
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git vim wget curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build nasm git vim wget curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
+RUN ARCH=$(arch) && \
+ CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
+ if [ "$ARCH" = "x86_64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-x86_64.sh"; \
+ elif [ "$ARCH" = "aarch64" ]; then \
+ CMAKE_URL="${CMAKE_URL}-linux-aarch64.sh"; \
+ else \
+ echo "Unsupported architecture: $ARCH" && exit 1; \
+ fi && \
+ curl -fsSL $CMAKE_URL -o cmake.sh && \
+ (echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
+ rm cmake.sh
+
+RUN $SCRIPTS_DIR/build-deps.sh
+
COPY --chown=docker:docker . /src/
USER docker
diff --git a/builder/dockerfile.ubuntu_jammy.barebones.deb.test b/builder/dockerfile.ubuntu_jammy.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.ubuntu_jammy.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.ubuntu_jammy.build b/builder/dockerfile.ubuntu_jammy.build
index 933fc90..3cbfe75 100644
--- a/builder/dockerfile.ubuntu_jammy.build
+++ b/builder/dockerfile.ubuntu_jammy.build
@@ -12,13 +12,13 @@ RUN apt-get update && \
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
diff --git a/builder/dockerfile.ubuntu_jammy.dev b/builder/dockerfile.ubuntu_jammy.dev
index d13638d..552b588 100644
--- a/builder/dockerfile.ubuntu_jammy.dev
+++ b/builder/dockerfile.ubuntu_jammy.dev
@@ -10,14 +10,60 @@ EXPOSE 6901
USER root
+COPY builder/conf/nginx_kasm.conf /etc/nginx/conf.d/
+
RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list && \
apt update && \
- apt install -y socat sudo libxfont-dev cmake git libgnutls28-dev vim wget tightvncserver curl libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev pkg-config libfreetype6-dev libxtst-dev autoconf automake libtool xutils-dev libpixman-1-dev libxshmfence-dev libxcvt-dev libxkbfile-dev x11proto-dev libgbm-dev inotify-tools && \
+ apt install -y \
+ ninja-build \
+ gdb \
+ valgrind \
+ rsync \
+ dos2unix \
+ socat \
+ sudo \
+ libxfont-dev \
+ cmake \
+ nasm \
+ git \
+ libgnutls28-dev \
+ vim \
+ wget \
+ tightvncserver \
+ curl \
+ libpng-dev \
+ libtiff-dev \
+ libgif-dev \
+ libavformat-dev \
+ libavcodec-dev \
+ libswscale-dev \
+ libssl-dev \
+ libxrandr-dev \
+ libxcursor-dev \
+ pkg-config \
+ libfreetype6-dev \
+ libxtst-dev \
+ autoconf \
+ automake \
+ libtool \
+ xutils-dev \
+ libpixman-1-dev \
+ libxshmfence-dev \
+ libxcvt-dev \
+ libxkbfile-dev \
+ x11proto-dev \
+ libgbm-dev \
+ htop \
+ inotify-tools && \
echo "kasm-user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
-RUN apt install -y nodejs
-
+RUN apt install -y nodejs nginx
+
+ENV SCRIPTS_DIR=/tmp/scripts
+COPY builder/scripts $SCRIPTS_DIR
+RUN $SCRIPTS_DIR/build-deps.sh
+
USER 1000
WORKDIR /src
diff --git a/builder/dockerfile.ubuntu_focal.specs.test b/builder/dockerfile.ubuntu_jammy.specs.test
similarity index 91%
rename from builder/dockerfile.ubuntu_focal.specs.test
rename to builder/dockerfile.ubuntu_jammy.specs.test
index 663fe3d..ed59899 100644
--- a/builder/dockerfile.ubuntu_focal.specs.test
+++ b/builder/dockerfile.ubuntu_jammy.specs.test
@@ -1,4 +1,4 @@
-FROM ubuntu:focal
+FROM ubuntu:jammy
ENV DEBIAN_FRONTEND=noninteractive
@@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y vim less
RUN apt-get update && apt-get install -y python3-pip
RUN apt-get update && apt-get install -y strace silversearcher-ag xfonts-base
RUN apt-get update && apt-get install -y cinnamon
-RUN apt-get update && apt-get install -y mate
+RUN apt-get update && apt-get install -y mate wget
RUN useradd -m docker
diff --git a/builder/dockerfile.ubuntu_focal.vncserver_devenv.test b/builder/dockerfile.ubuntu_jammy.vncserver_devenv.test
similarity index 99%
rename from builder/dockerfile.ubuntu_focal.vncserver_devenv.test
rename to builder/dockerfile.ubuntu_jammy.vncserver_devenv.test
index 103a6f2..975a97c 100644
--- a/builder/dockerfile.ubuntu_focal.vncserver_devenv.test
+++ b/builder/dockerfile.ubuntu_jammy.vncserver_devenv.test
@@ -1,4 +1,4 @@
-FROM ubuntu:focal
+FROM ubuntu:jammy
ENV DEBIAN_FRONTEND=noninteractive
ENV VNC_PORT 8443
diff --git a/builder/dockerfile.ubuntu_noble.barebones.deb.test b/builder/dockerfile.ubuntu_noble.barebones.deb.test
new file mode 120000
index 0000000..9ec488c
--- /dev/null
+++ b/builder/dockerfile.ubuntu_noble.barebones.deb.test
@@ -0,0 +1 @@
+dockerfile.debian.barebones.deb.test
\ No newline at end of file
diff --git a/builder/dockerfile.ubuntu_noble.build b/builder/dockerfile.ubuntu_noble.build
index a71ad86..4301f3a 100644
--- a/builder/dockerfile.ubuntu_noble.build
+++ b/builder/dockerfile.ubuntu_noble.build
@@ -12,13 +12,13 @@ RUN apt-get update && \
RUN apt-get update && apt-get install -y --no-install-recommends tzdata
RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev
-RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget curl
-RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
+RUN apt-get update && apt-get -y install ninja-build cmake nasm git libgnutls28-dev vim wget curl
+RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
+ libxcursor-dev libavformat-dev libswscale-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
-RUN $SCRIPTS_DIR/build-webp
-RUN $SCRIPTS_DIR/build-libjpeg-turbo
+RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
diff --git a/builder/process_test_options.sh b/builder/process_test_options.sh
index da8b55c..7f7d659 100644
--- a/builder/process_test_options.sh
+++ b/builder/process_test_options.sh
@@ -6,7 +6,7 @@ usage() {
}
process_options() {
- local sorted_options=$(getopt -o psh --long perf-test --long shell --long help -- "$@")
+ local sorted_options=$(getopt -o prsh --long perf-test --long run-test --long shell --long help -- "$@")
eval set -- $sorted_options
while : ; do
@@ -16,6 +16,10 @@ process_options() {
entrypoint_executable="--entrypoint=/usr/bin/Xvnc"
shift
;;
+ -r|--run-test)
+ run_test=1
+ shift
+ ;;
-s|--shell)
entrypoint_executable="--entrypoint=bash"
shift
diff --git a/builder/scripts/build-cpuid b/builder/scripts/build-cpuid
new file mode 100755
index 0000000..0996cb5
--- /dev/null
+++ b/builder/scripts/build-cpuid
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+build_and_install() {
+ cmake -S . -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DLIBCPUID_ENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -GNinja
+ ninja -C build install
+}
+
+prepare_source() {
+ DIR=tbb
+ cd /tmp
+ [ -d ./${DIR} ] && rm -rf ./${DIR}
+ mkdir ${DIR}
+
+ LIBCPUID_RELEASE=$(curl -sL "https://api.github.com/repos/anrieff/libcpuid/releases/latest" \
+ | grep '"tag_name":' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
+
+ curl -Ls "https://github.com/anrieff/libcpuid/archive/${LIBCPUID_RELEASE}.tar.gz" | \
+
+ tar xzvf - -C ${DIR}/ --strip-components=1
+ cd ${DIR}
+}
+
+prepare_source
+build_and_install
diff --git a/builder/scripts/build-deps.sh b/builder/scripts/build-deps.sh
new file mode 100755
index 0000000..5257861
--- /dev/null
+++ b/builder/scripts/build-deps.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+source_dir=$(dirname "$0")
+"${source_dir}"/build-libjpeg-turbo
+"${source_dir}"/build-webp
+"${source_dir}"/build-tbb
+"${source_dir}"/build-cpuid
\ No newline at end of file
diff --git a/builder/scripts/build-libjpeg-turbo b/builder/scripts/build-libjpeg-turbo
index 13d1f3f..ed8a737 100755
--- a/builder/scripts/build-libjpeg-turbo
+++ b/builder/scripts/build-libjpeg-turbo
@@ -3,20 +3,8 @@
set -euo pipefail
build_and_install() {
- export MAKEFLAGS=-j`nproc`
- export CFLAGS="-fpic"
- cmake -DCMAKE_INSTALL_PREFIX=/usr/local -G"Unix Makefiles"
- make
- make install
-}
-
-install_build_dependencies() {
- install_packages cmake gcc
- ensure_libjpeg_is_fast
-}
-
-ensure_libjpeg_is_fast() {
- install_packages nasm
+ cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja .
+ ninja -C build install
}
prepare_libjpeg_source() {
@@ -32,6 +20,5 @@ prepare_libjpeg_source() {
source_dir=$(dirname "$0")
. "$source_dir/common.sh"
-install_build_dependencies
prepare_libjpeg_source
build_and_install
diff --git a/builder/scripts/build-tbb b/builder/scripts/build-tbb
new file mode 100755
index 0000000..03593f2
--- /dev/null
+++ b/builder/scripts/build-tbb
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+build_and_install() {
+ if [ $older_release -eq 1 ]; then
+ make extra_inc=big_iron.inc work_dir="$PWD"/ tbb_root="$PWD"
+
+ if [ -d /usr/lib/x86_64-linux-gnu ]; then
+ LIBS=lib/x86_64-linux-gnu
+ elif [ -d /usr/lib/aarch64-linux-gnu ]; then
+ LIBS=lib/aarch64-linux-gnu
+ elif [ -d /usr/lib/arm-linux-gnueabihf ]; then
+ LIBS=lib/arm-linux-gnu
+ fi
+
+ PC_FILE=/usr/${LIBS}/pkgconfig/tbb.pc
+ echo "prefix=/usr" > "${PC_FILE}"
+ echo "exec_prefix=\${prefix}" >> "${PC_FILE}"
+ echo "libdir=\${exec_prefix}/lib/${LIBS}" >> "${PC_FILE}"
+ echo "includedir=\${prefix}/include" >> "${PC_FILE}"
+ echo "Name: Threading Building Blocks" >> "${PC_FILE}"
+ echo "Description: Intel's parallelism library for C++" >> "${PC_FILE}"
+ echo "URL: http://www.threadingbuildingblocks.org/" >> "${PC_FILE}"
+ echo "Version: v2020.3.3" >> "${PC_FILE}"
+ echo "Libs: -ltbb -latomic" >> "${PC_FILE}"
+ echo "Cflags: -I\${includedir}" >> "${PC_FILE}"
+
+ cp _release/*.a /usr/"${LIBS}"/
+ cp -r include/* /usr/include/
+ else
+ cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DTBB_TEST=OFF -DBUILD_SHARED_LIBS=OFF -GNinja .
+ ninja -C build install
+ fi
+}
+
+prepare_source() {
+ DIR=tbb
+ cd /tmp
+ [ -d ./${DIR} ] && rm -rf ./${DIR}
+ mkdir ${DIR}
+
+ if [ $older_release -eq 1 ]; then
+ TBB_RELEASE="v2020.3.3"
+ else
+ TBB_RELEASE=$(curl -sL "https://api.github.com/repos/uxlfoundation/oneTBB/releases/latest" \
+ | grep '"tag_name":' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
+ fi
+
+ curl -Ls "https://github.com/uxlfoundation/oneTBB/archive/${TBB_RELEASE}.tar.gz" | \
+
+ tar xzvf - -C ${DIR}/ --strip-components=1
+ cd ${DIR}
+}
+
+older_release=0
+if grep -q 'Ubuntu 20.04\|Debian GNU/Linux 11' /etc/os-release 2>/dev/null; then
+ older_release=1
+fi
+
+prepare_source
+build_and_install
diff --git a/builder/scripts/build-webp b/builder/scripts/build-webp
index a6b2fd0..e5e19f1 100755
--- a/builder/scripts/build-webp
+++ b/builder/scripts/build-webp
@@ -2,7 +2,7 @@
set -euo pipefail
-WEBP_VERSION="1.2.4"
+WEBP_VERSION="1.5.0"
WEBP_TAR_URL="https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz"
WEBP_TAR_FILE="/tmp/libwebp-${WEBP_VERSION}.tar.gz"
WEBP_SRC_DIR="/tmp/libwebp-${WEBP_VERSION}"
@@ -21,7 +21,7 @@ prepare_source() {
build_and_install() {
export MAKEFLAGS=-j$(nproc)
- ./configure --enable-static --disable-shared
+ ./configure --enable-static --disable-shared --enable-threading --enable-sse2 --enable-neon
make
make install
}
diff --git a/builder/scripts/install_kasmvncserver_package b/builder/scripts/install_kasmvncserver_package
index 7537d57..dcdf79c 100755
--- a/builder/scripts/install_kasmvncserver_package
+++ b/builder/scripts/install_kasmvncserver_package
@@ -10,6 +10,10 @@ is_debian() {
[[ -f /etc/debian_version ]]
}
+is_alpine() {
+ [[ -f /etc/alpine-release ]]
+}
+
check_package_version_exists() {
if ! stat /tmp/kasmvncserver_"$package_version"*.deb; then
>&2 echo "No package found for version $package_version"
@@ -42,7 +46,16 @@ install_package_built_for_current_branch_package_version_deb() {
--file /tmp/changelog)
check_package_version_exists
- apt-get install -y /tmp/kasmvncserver_"$package_version"*"$tag"*.deb
+ dpkg_arch=$(dpkg-architecture -q DEB_BUILD_ARCH)
+ apt-get install -y /tmp/kasmvncserver_"$package_version"*"$tag"*_${dpkg_arch}.deb
+}
+
+detect_dnf_command() {
+ if command -v dnf5 >/dev/null; then
+ echo dnf install -y --allowerasing
+ else
+ echo dnf localinstall -y --allowerasing
+ fi
}
install_package_built_for_current_branch_package_version_rpm() {
@@ -50,15 +63,24 @@ install_package_built_for_current_branch_package_version_rpm() {
$rpm_package_manager install -y rpmdevtools
package_version=$(rpmspec -q --qf '%{version}\n' /tmp/kasmvncserver.spec 2>/dev/null)
+ package_name=/tmp/kasmvncserver-"$package_version"*.$(arch).rpm
if [[ $rpm_package_manager = "dnf" ]]; then
- dnf localinstall -y --allowerasing /tmp/kasmvncserver-"$package_version"*.rpm
+ local dnf_cmd=$(detect_dnf_command)
+ $dnf_cmd $package_name
else
- yum install -y /tmp/kasmvncserver-"$package_version"*.rpm
+ yum install -y $package_name
fi
}
+install_package_built_for_current_branch_package_version_apk() {
+ package_version=$(sed -n 's/pkgver=\(.\+\)/\1/p' /tmp/APKBUILD )
+ apk add /tmp/kasmvncserver-"$package_version"*.apk /tmp/kasmvncserver-doc-"$package_version"*.apk --allow-untrusted
+}
+
if is_debian ; then
install_package_built_for_current_branch_package_version_deb
+elif is_alpine; then
+ install_package_built_for_current_branch_package_version_apk
else
install_package_built_for_current_branch_package_version_rpm
fi
diff --git a/builder/startup/deb/kasmvncserver-easy-start b/builder/startup/deb/kasmvncserver-easy-start
deleted file mode 100755
index 538bbd6..0000000
--- a/builder/startup/deb/kasmvncserver-easy-start
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-set -e
-
-display=:10
-interface=0.0.0.0
-
-vncserver $display -depth 24 -geometry 1280x1050 -websocketPort 8443 \
- -cert /etc/ssl/certs/ssl-cert-snakeoil.pem \
- -key /etc/ssl/private/ssl-cert-snakeoil.key -sslOnly -FrameRate=24 \
- -interface $interface -httpd /usr/share/kasmvnc/www
diff --git a/builder/startup/vnc_startup_barebones.sh b/builder/startup/vnc_startup_barebones.sh
index 2fea7f8..f49250a 100755
--- a/builder/startup/vnc_startup_barebones.sh
+++ b/builder/startup/vnc_startup_barebones.sh
@@ -12,11 +12,64 @@ create_kasm_user() {
echo -e "$VNC_PW\n$VNC_PW\n" | kasmvncpasswd -w -u "$VNC_USER"
}
+wait_for_core_to_be_dumped() {
+ if [ "$vncserver_exit_code" -eq 0 ]; then
+ return
+ fi
+
+ local timeout=2
+ local elapsed=0
+ local interval=1
+ while [[ ! -f core && "$elapsed" -lt "$timeout" ]]; do
+ sleep $interval
+ elapsed=$(($elapsed + $interval))
+ done
+}
+
+copy_core_to_host() {
+ mkdir -p "$CORE_DUMP_DIR_INSIDE_CONTAINER"
+ cp core "$CORE_DUMP_DIR_INSIDE_CONTAINER"
+}
+
+allow_core_to_be_dumped() {
+ ulimit -c unlimited
+ cd "$HOME"
+}
+
+clean_up_old_core_dir() {
+ if [ -d "$CORE_DUMP_DIR_INSIDE_CONTAINER" ]; then
+ rm -r "$CORE_DUMP_DIR_INSIDE_CONTAINER"
+ fi
+}
+
+core_was_dumped() {
+ [ -f core ]
+}
+
+say_where_to_find_core_on_host() {
+ echo "Core dumped to $CORE_DUMP_DIR_ON_HOST"
+}
+
config_dir="$HOME/.vnc"
xstartup="$config_dir/xstartup"
set_xterm_to_run
create_kasm_user
+allow_core_to_be_dumped
+clean_up_old_core_dir
+set +e
vncserver -select-de manual -websocketPort "$VNC_PORT"
+vncserver_exit_code=$?
+set -e
+
+wait_for_core_to_be_dumped
+if core_was_dumped; then
+ copy_core_to_host
+ say_where_to_find_core_on_host
+fi
+if [ "$RUN_TEST" = 1 ]; then
+ exit "$vncserver_exit_code"
+fi
+
tail -f "$config_dir"/*.log
diff --git a/builder/test-apk-barebones b/builder/test-apk-barebones
new file mode 100755
index 0000000..0fe7093
--- /dev/null
+++ b/builder/test-apk-barebones
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+set -e
+
+detect_base_image() {
+ BASE_IMAGE=$(echo "${os}:${os_codename}" | sed 's/\([0-9]\{2\}\)$/.\1/')
+}
+
+cd "$(dirname "$0")/.."
+. ./builder/process_test_options.sh
+. ./builder/common.sh
+os="${1:-alpine}"
+os_codename="${2:-321}"
+distro="${os}_${os_codename}"
+
+detect_build_dir
+detect_base_image
+docker build --build-arg KASMVNC_PACKAGE_DIR="${build_dir}/${distro}" \
+ --build-arg RUN_TEST="$run_test" \
+ --build-arg BASE_IMAGE="$BASE_IMAGE" \
+ -t kasmvnctester_barebones_${os}:$os_codename \
+ -f builder/dockerfile.${distro}.barebones.apk.test .
+echo
+
+detect_interactive
+docker run $interactive -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
+ $core_dumps_dir_volume_option \
+ -e "VNC_PORT=$VNC_PORT" \
+ -e RUN_TEST="$run_test" \
+ -e CORE_DUMP_DIR_ON_HOST="$core_dumps_dir_on_host/${distro}" \
+ -e CORE_DUMP_DIR_INSIDE_CONTAINER="${core_dumps_dir_inside_container}/${distro}" \
+ --cap-add=SYS_PTRACE \
+ --cap-add=SYS_RESOURCE \
+ --ulimit core=-1 \
+ $entrypoint_executable \
+ kasmvnctester_barebones_${os}:$os_codename \
+ $entrypoint_args
diff --git a/builder/test-barebones b/builder/test-barebones
new file mode 100755
index 0000000..35467f4
--- /dev/null
+++ b/builder/test-barebones
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+set -eo pipefail
+
+create_gitlab_report() {
+ local error="$1"
+failure_report=$(cat <
+
+
+ ${error}
+
+
+EOF
+)
+}
+
+write_gitlab_report() {
+ echo "$failure_report" > run_test/"${os}_${os_codename}.xml"
+}
+
+create_core_dumps_dir_writeable_by_container() {
+ mkdir -p "$core_dumps_dir_on_host"
+ if [[ -n "$CI" && $(id -u) = 0 ]]; then
+ chown 1000:1000 "$core_dumps_dir_on_host"
+ fi
+}
+
+saved_options=("$@")
+. ./builder/process_test_options.sh
+. ./builder/common.sh
+
+os="$1"
+os_codename="$2"
+os_fullname="${os}_${os_codename}"
+
+detect_package_format
+if [ "$run_test" != 1 ]; then
+ builder/test-${package_format}-barebones "${saved_options[@]}"
+ exit $?
+fi
+
+create_core_dumps_dir_writeable_by_container
+if ! builder/test-${package_format}-barebones "${saved_options[@]}" 2>&1 | \
+ tee run_test/"${os_fullname}.log"; then
+ create_gitlab_report "$(tail -1 run_test/${os_fullname}.log)"
+ write_gitlab_report
+ exit 1
+fi
diff --git a/builder/test-deb-barebones b/builder/test-deb-barebones
index 9ffdb5d..e40e3c0 100755
--- a/builder/test-deb-barebones
+++ b/builder/test-deb-barebones
@@ -2,18 +2,40 @@
set -e
+detect_base_image() {
+ if [ "$os" = kali ]; then
+ BASE_IMAGE=kalilinux/kali-rolling:latest
+ return
+ fi
+ BASE_IMAGE="${os}:${os_codename}"
+}
+
cd "$(dirname "$0")/.."
. ./builder/process_test_options.sh
. ./builder/common.sh
os="${1:-debian}"
os_codename="${2:-buster}"
+distro="${os}_${os_codename}"
-docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
+detect_build_dir
+detect_base_image
+docker build --build-arg KASMVNC_PACKAGE_DIR="${build_dir}/${os_codename}" \
+ --build-arg RUN_TEST="$run_test" \
+ --build-arg BASE_IMAGE="$BASE_IMAGE" \
-t kasmvnctester_barebones_${os}:$os_codename \
- -f builder/dockerfile.${os}_${os_codename}.barebones.deb.test .
+ -f builder/dockerfile.${distro}.barebones.deb.test .
echo
-docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
+
+detect_interactive
+docker run $interactive -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
+ $core_dumps_dir_volume_option \
-e "VNC_PORT=$VNC_PORT" \
+ -e RUN_TEST="$run_test" \
+ -e CORE_DUMP_DIR_ON_HOST="$core_dumps_dir_on_host/${distro}" \
+ -e CORE_DUMP_DIR_INSIDE_CONTAINER="${core_dumps_dir_inside_container}/${distro}" \
+ --cap-add=SYS_PTRACE \
+ --cap-add=SYS_RESOURCE \
+ --ulimit core=-1 \
$entrypoint_executable \
kasmvnctester_barebones_${os}:$os_codename \
$entrypoint_args
diff --git a/builder/test-rpm-barebones b/builder/test-rpm-barebones
index ea4cae6..56dbb36 100755
--- a/builder/test-rpm-barebones
+++ b/builder/test-rpm-barebones
@@ -2,17 +2,29 @@
set -e
-cd "$(dirname "$0")"
-. ./process_test_options.sh
-. ./common.sh
+cd "$(dirname "$0")/.."
+. ./builder/process_test_options.sh
+. ./builder/common.sh
os="${1:-oracle}"
os_codename="${2:-8}"
+distro="${os}_${os_codename}"
-docker build --build-arg KASMVNC_PACKAGE_DIR="build/${os}_${os_codename}" \
+detect_build_dir
+docker build --build-arg KASMVNC_PACKAGE_DIR="${build_dir}/${distro}" \
+ --build-arg RUN_TEST="$run_test" \
-t kasmvnctester_barebones_${os}:$os_codename \
- -f dockerfile.${os}_${os_codename}.barebones.rpm.test .
-docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
+ -f builder/dockerfile.${distro}.barebones.rpm.test .
+
+detect_interactive
+docker run $interactive -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
+ $core_dumps_dir_volume_option \
-e "VNC_PORT=$VNC_PORT" \
+ -e RUN_TEST="$run_test" \
+ -e CORE_DUMP_DIR_ON_HOST="$core_dumps_dir_on_host/${distro}" \
+ -e CORE_DUMP_DIR_INSIDE_CONTAINER="${core_dumps_dir_inside_container}/${distro}" \
+ --cap-add=SYS_PTRACE \
+ --cap-add=SYS_RESOURCE \
+ --ulimit core=-1 \
$entrypoint_executable \
kasmvnctester_barebones_${os}:$os_codename \
$entrypoint_args
diff --git a/builder/test-vncserver b/builder/test-vncserver
index 3263943..14b4fc0 100755
--- a/builder/test-vncserver
+++ b/builder/test-vncserver
@@ -3,7 +3,7 @@
set -e
default_os=ubuntu
-default_os_codename=focal
+default_os_codename=jammy
. ./builder/os_ver_cli.sh
diff --git a/builder/test_build_containers b/builder/test_build_containers
new file mode 100755
index 0000000..426770c
--- /dev/null
+++ b/builder/test_build_containers
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+#set -e
+
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+current_dir="$(pwd)"
+
+images_list=()
+
+for file in "$script_dir"/dockerfile.*.build; do
+ if [[ "$file" == *deb* ]] || [[ "$file" == *apk* ]] || [[ "$file" == *rpm* ]] || [[ "$file" == *www* ]]; then
+ continue
+ fi
+
+ [ -e "$file" ] || continue
+
+ filename="$(basename "$file")"
+ image_name=$(echo "$filename" | sed -E 's/^(dockerfile\.|Dockerfile\.)(.*)\.build$/\2/')
+
+ if [ -e builder/build/kasmvnc."$image_name".tar.gz ]; then
+ continue
+ fi
+
+ echo "Building docker image: $image_name using file: $file"
+
+ docker build -f "$file" -t "$image_name" "$current_dir"
+ exit_code=$?
+ if [ $exit_code -ne 0 ]; then
+ echo "Build failed for $filename"
+ break
+ fi
+
+ rm -rf .cmake CMakeFiles build.ninja cmake_install.cmake cmake_uninstall.cmake CMakeCache.txt config.h
+
+ echo "Running container from image '$image_name'"
+ # Run the container and capture the exit code
+ docker run -it -v "$current_dir":/src -v "$current_dir/builder/build":/build "$image_name"
+ exit_code=$?
+
+ echo "Container for image '$image_name' "
+ if [ $exit_code -ne 0 ]; then
+ echo "exited with error (exit code $exit_code)."
+ break
+ else
+ echo "finished successfully."
+ images_list+=("$image_name")
+ fi
+done
+
+echo "Removing all built docker images..."
+for img in "${images_list[@]}"; do
+ echo "Removing docker image: $img"
+ docker rmi -f "$img"
+done
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index e4489f6..1fbdc22 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -9,7 +9,7 @@ add_subdirectory(rfb)
# because PIC code does not exist on that platform and MinGW complains if -fPIC
# is passed (additionally, libvnc is not used on Windows.)
-if(NOT WIN32)
- set_target_properties(os rdr network Xregion rfb
- PROPERTIES COMPILE_FLAGS -fPIC)
-endif()
+if (NOT WIN32)
+ set_target_properties(os rdr network Xregion rfb
+ PROPERTIES COMPILE_FLAGS -fPIC)
+endif ()
diff --git a/common/network/GetAPI.h b/common/network/GetAPI.h
index 5b6c7ed..5a6a335 100644
--- a/common/network/GetAPI.h
+++ b/common/network/GetAPI.h
@@ -28,6 +28,7 @@
#include