From 5c6e913fcab7653d36e47a05075ea3fb6750b7aa Mon Sep 17 00:00:00 2001 From: Rodwin Spruel Date: Mon, 14 Apr 2025 23:29:41 +0000 Subject: [PATCH 01/10] upgrading to libwebp 1.5.0 abd adding sharpyuv and an included library based on the change in how it is included with libwebp --- builder/scripts/build-webp | 4 ++-- unix/xserver/hw/vnc/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builder/scripts/build-webp b/builder/scripts/build-webp index a6b2fd0..1254230 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 make make install } diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am index a25d214..c3226eb 100644 --- a/unix/xserver/hw/vnc/Makefile.am +++ b/unix/xserver/hw/vnc/Makefile.am @@ -52,7 +52,7 @@ Xvnc_CPPFLAGS = $(XVNC_CPPFLAGS) -DKASMVNC -DNO_MODULE_EXTS \ -I$(top_srcdir)/dri3 @LIBDRM_CFLAGS@ Xvnc_LDADD = $(XVNC_LIBS) libvnccommon.la $(COMMON_LIBS) \ - $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lssl -lcrypto -lcrypt \ + $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XVNC_SYS_LIBS) -lX11 -lwebp -lsharpyuv -lssl -lcrypto -lcrypt \ -lfreetype Xvnc_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -fopenmp From fd78b3fe62730f8334fb567e9ca23165e4b0f9e1 Mon Sep 17 00:00:00 2001 From: Rodwin Spruel Date: Tue, 15 Apr 2025 23:16:01 +0000 Subject: [PATCH 02/10] updaing opensuse docker file to --- builder/dockerfile.opensuse_15.build | 5 ++++- builder/scripts/build-webp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/builder/dockerfile.opensuse_15.build b/builder/dockerfile.opensuse_15.build index 954ada8..800c752 100644 --- a/builder/dockerfile.opensuse_15.build +++ b/builder/dockerfile.opensuse_15.build @@ -45,7 +45,10 @@ RUN zypper install -ny \ xorg-x11-util-devel \ zlib-devel -RUN update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-14 100 +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 140 \ + --slave /usr/bin/g++ g++ /usr/bin/g++-14 \ + --slave /usr/bin/gcov gcov /usr/bin/gcov-14 + RUN useradd -u 1000 docker && \ groupadd -g 1000 docker && \ diff --git a/builder/scripts/build-webp b/builder/scripts/build-webp index 1254230..e5e19f1 100755 --- a/builder/scripts/build-webp +++ b/builder/scripts/build-webp @@ -21,7 +21,7 @@ prepare_source() { build_and_install() { export MAKEFLAGS=-j$(nproc) - ./configure --enable-static --disable-shared --enable-threading --enable-sse2 + ./configure --enable-static --disable-shared --enable-threading --enable-sse2 --enable-neon make make install } From c2b9721fdc2b35b063d4f1bd61f0c619b8e6c5bd Mon Sep 17 00:00:00 2001 From: El Date: Wed, 5 Mar 2025 15:41:05 +0500 Subject: [PATCH 03/10] KASM-7194 Removed package installation from this script since they're already included in the Docker image. Switched to Ninja for faster builds --- builder/scripts/build-libjpeg-turbo | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) 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 From f38ad7122cf25d129fab0f8fe84c37d9bc36ddae Mon Sep 17 00:00:00 2001 From: El Date: Wed, 5 Mar 2025 15:41:54 +0500 Subject: [PATCH 04/10] KASM-7194 Fixed a typo --- BUILDING.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILDING.txt b/BUILDING.txt index 4bfaa3f..34b6ab8 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -91,7 +91,7 @@ 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 +sudo builder/scripts/build-libjpeg-turbo # Build KasmVNC builder/build.sh ``` From c0d73ebd28b6867f4d6bf4064956a7f340d043d1 Mon Sep 17 00:00:00 2001 From: El Date: Wed, 12 Mar 2025 21:01:52 +0500 Subject: [PATCH 05/10] KASM-7194 Add additional tools and scripts to Dockerfile for dev setup KASM-7194 Add WebP and libjpeg-turbo build scripts to Dockerfile --- builder/dockerfile.ubuntu_jammy.dev | 46 ++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/builder/dockerfile.ubuntu_jammy.dev b/builder/dockerfile.ubuntu_jammy.dev index d13638d..7201cf2 100644 --- a/builder/dockerfile.ubuntu_jammy.dev +++ b/builder/dockerfile.ubuntu_jammy.dev @@ -12,11 +12,55 @@ USER root 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 \ + 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 && \ 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 + +COPY builder/scripts/build-webp /tmp +COPY builder/scripts/build-libjpeg-turbo /tmp +COPY builder/common.sh /tmp + +RUN chmod +x /tmp/build-webp && /tmp/build-webp +RUN chmod +x /tmp/build-libjpeg-turbo && /tmp/build-libjpeg-turbo USER 1000 From 62a1c210c9e795d147b2e1972b06e3903371c357 Mon Sep 17 00:00:00 2001 From: El Date: Fri, 14 Mar 2025 15:25:52 +0500 Subject: [PATCH 06/10] KASM-7194 Add NASM to all builder Dockerfiles --- builder/dockerfile.alpine_318.build | 1 + builder/dockerfile.alpine_319.build | 1 + builder/dockerfile.alpine_320.build | 1 + builder/dockerfile.alpine_321.build | 1 + builder/dockerfile.debian_bookworm.build | 2 +- builder/dockerfile.debian_bullseye.build | 2 +- builder/dockerfile.debian_buster.build | 2 +- builder/dockerfile.fedora_forty.build | 1 + builder/dockerfile.fedora_fortyone.build | 1 + builder/dockerfile.fedora_thirtynine.build | 1 + builder/dockerfile.kali_kali-rolling.build | 2 +- builder/dockerfile.opensuse_15.build | 1 + builder/dockerfile.oracle_8.build | 1 + builder/dockerfile.oracle_9.build | 1 + builder/dockerfile.ubuntu_focal.build | 7 ++++--- builder/dockerfile.ubuntu_jammy.build | 2 +- builder/dockerfile.ubuntu_noble.build | 2 +- 17 files changed, 20 insertions(+), 9 deletions(-) diff --git a/builder/dockerfile.alpine_318.build b/builder/dockerfile.alpine_318.build index 8a01ac8..b163664 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 \ diff --git a/builder/dockerfile.alpine_319.build b/builder/dockerfile.alpine_319.build index a73670b..c0b18b7 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 \ diff --git a/builder/dockerfile.alpine_320.build b/builder/dockerfile.alpine_320.build index 42995f1..8212b60 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 \ diff --git a/builder/dockerfile.alpine_321.build b/builder/dockerfile.alpine_321.build index e73d31f..5ccb9ac 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 \ diff --git a/builder/dockerfile.debian_bookworm.build b/builder/dockerfile.debian_bookworm.build index 8c0e8de..c0c9212 100644 --- a/builder/dockerfile.debian_bookworm.build +++ b/builder/dockerfile.debian_bookworm.build @@ -22,7 +22,7 @@ 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 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 ENV SCRIPTS_DIR=/tmp/scripts diff --git a/builder/dockerfile.debian_bullseye.build b/builder/dockerfile.debian_bullseye.build index 077a2e5..528b179 100644 --- a/builder/dockerfile.debian_bullseye.build +++ b/builder/dockerfile.debian_bullseye.build @@ -12,7 +12,7 @@ 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 git libgnutls28-dev vim wget tightvncserver curl +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 RUN CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \ diff --git a/builder/dockerfile.debian_buster.build b/builder/dockerfile.debian_buster.build index c8f8008..a1e2afd 100644 --- a/builder/dockerfile.debian_buster.build +++ b/builder/dockerfile.debian_buster.build @@ -12,7 +12,7 @@ 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 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 ENV SCRIPTS_DIR=/tmp/scripts diff --git a/builder/dockerfile.fedora_forty.build b/builder/dockerfile.fedora_forty.build index d5ad068..686feb6 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 \ diff --git a/builder/dockerfile.fedora_fortyone.build b/builder/dockerfile.fedora_fortyone.build index 5c2bf48..81c44b4 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 \ diff --git a/builder/dockerfile.fedora_thirtynine.build b/builder/dockerfile.fedora_thirtynine.build index 0854956..aa10cf4 100644 --- a/builder/dockerfile.fedora_thirtynine.build +++ b/builder/dockerfile.fedora_thirtynine.build @@ -16,6 +16,7 @@ RUN \ byacc \ bzip2 \ cmake \ + nasm \ diffutils \ doxygen \ file \ diff --git a/builder/dockerfile.kali_kali-rolling.build b/builder/dockerfile.kali_kali-rolling.build index 0812308..43a1e3a 100644 --- a/builder/dockerfile.kali_kali-rolling.build +++ b/builder/dockerfile.kali_kali-rolling.build @@ -13,7 +13,7 @@ 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 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 ENV SCRIPTS_DIR=/tmp/scripts diff --git a/builder/dockerfile.opensuse_15.build b/builder/dockerfile.opensuse_15.build index 800c752..d00eb4b 100644 --- a/builder/dockerfile.opensuse_15.build +++ b/builder/dockerfile.opensuse_15.build @@ -9,6 +9,7 @@ RUN zypper install -ny \ bdftopcf \ bigreqsproto-devel \ cmake \ + nasm \ curl \ ffmpeg-4-libavcodec-devel \ fonttosfnt \ diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build index f28c1df..59c09f1 100644 --- a/builder/dockerfile.oracle_8.build +++ b/builder/dockerfile.oracle_8.build @@ -12,6 +12,7 @@ RUN \ bzip2-devel \ ca-certificates \ cmake \ + nasm \ dnf-plugins-core \ gcc \ gcc-c++ \ diff --git a/builder/dockerfile.oracle_9.build b/builder/dockerfile.oracle_9.build index ca6e705..fb27999 100644 --- a/builder/dockerfile.oracle_9.build +++ b/builder/dockerfile.oracle_9.build @@ -12,6 +12,7 @@ RUN \ bzip2-devel \ ca-certificates \ cmake \ + nasm \ dnf-plugins-core \ gcc \ gcc-c++ \ diff --git a/builder/dockerfile.ubuntu_focal.build b/builder/dockerfile.ubuntu_focal.build index bdfad4c..03f5253 100644 --- a/builder/dockerfile.ubuntu_focal.build +++ b/builder/dockerfile.ubuntu_focal.build @@ -12,13 +12,11 @@ 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 ninja-build nasm git vim wget curl RUN apt-get update && apt-get -y install libtbb-dev 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 @@ -35,6 +33,9 @@ RUN ARCH=$(arch) && \ (echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \ rm cmake.sh +RUN $SCRIPTS_DIR/build-webp +RUN $SCRIPTS_DIR/build-libjpeg-turbo + COPY --chown=docker:docker . /src/ USER docker diff --git a/builder/dockerfile.ubuntu_jammy.build b/builder/dockerfile.ubuntu_jammy.build index 933fc90..cc6c4ff 100644 --- a/builder/dockerfile.ubuntu_jammy.build +++ b/builder/dockerfile.ubuntu_jammy.build @@ -12,7 +12,7 @@ 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 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 ENV SCRIPTS_DIR=/tmp/scripts diff --git a/builder/dockerfile.ubuntu_noble.build b/builder/dockerfile.ubuntu_noble.build index a71ad86..a4c3a6f 100644 --- a/builder/dockerfile.ubuntu_noble.build +++ b/builder/dockerfile.ubuntu_noble.build @@ -12,7 +12,7 @@ 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 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 ENV SCRIPTS_DIR=/tmp/scripts From 81fa5f8f653f974c9b89ddff93d97d34aa0d0048 Mon Sep 17 00:00:00 2001 From: El Date: Sun, 16 Mar 2025 17:04:27 +0500 Subject: [PATCH 07/10] KASM-7194 Use `ln -sf` to force symbolic link creation --- builder/build.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/builder/build.sh b/builder/build.sh index be9d899..b35f83d 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -44,7 +44,10 @@ 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 + +if [ ! -f xorg-server-"${XORG_VER}".tar.gz ]; then + wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-"${XORG_VER}".tar.gz +fi #git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git #cd kasmvnc @@ -59,7 +62,7 @@ sed -i -e '/find_package(FLTK/s@^@#@' \ 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 @@ -114,18 +117,22 @@ fi # 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 cd xorg.build/bin/ -ln -s /src/unix/xserver/hw/vnc/Xvnc Xvnc +ln -sf /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 + +if [ ! -d lib ]; then + mkdir lib +fi + cd lib if [ -d /usr/lib/x86_64-linux-gnu/dri ]; then ln -s /usr/lib/x86_64-linux-gnu/dri dri From 35d1d49d208b9ec9dddb8533b76425687acf1250 Mon Sep 17 00:00:00 2001 From: El Date: Thu, 17 Apr 2025 22:34:38 +0500 Subject: [PATCH 08/10] KASM-7194 Add ninja-build and libSM-devel to Docker build files --- builder/dockerfile.opensuse_15.build | 1 + builder/dockerfile.oracle_8.build | 1 + builder/dockerfile.oracle_9.build | 1 + 3 files changed, 3 insertions(+) diff --git a/builder/dockerfile.opensuse_15.build b/builder/dockerfile.opensuse_15.build index d00eb4b..6c2cd1b 100644 --- a/builder/dockerfile.opensuse_15.build +++ b/builder/dockerfile.opensuse_15.build @@ -8,6 +8,7 @@ ENV XORG_VER 1.20.3 RUN zypper install -ny \ bdftopcf \ bigreqsproto-devel \ + ninja \ cmake \ nasm \ curl \ diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build index 59c09f1..0a9ecfe 100644 --- a/builder/dockerfile.oracle_8.build +++ b/builder/dockerfile.oracle_8.build @@ -11,6 +11,7 @@ RUN \ dnf install -y \ bzip2-devel \ ca-certificates \ + ninja-build \ cmake \ nasm \ dnf-plugins-core \ diff --git a/builder/dockerfile.oracle_9.build b/builder/dockerfile.oracle_9.build index fb27999..aaa9184 100644 --- a/builder/dockerfile.oracle_9.build +++ b/builder/dockerfile.oracle_9.build @@ -11,6 +11,7 @@ RUN \ dnf install -y \ bzip2-devel \ ca-certificates \ + ninja-build \ cmake \ nasm \ dnf-plugins-core \ From 4a4c5f1c499527b23da29c274b62d16b2e7948bb Mon Sep 17 00:00:00 2001 From: El Date: Sat, 19 Apr 2025 00:43:29 +0500 Subject: [PATCH 09/10] KASM-7194 Refactor build scripts and enable conditional test builds --- CMakeLists.txt | 5 +- builder/build.sh | 129 +++++++++++++++++++++++------------------------ 2 files changed, 66 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 22f21dc..537063e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,8 +242,9 @@ if(ENABLE_NLS) add_subdirectory(po) endif() -####add_subdirectory(tests) - +if (TESTS) + add_subdirectory(tests) +endif () include(cmake/BuildPackages.cmake) diff --git a/builder/build.sh b/builder/build.sh index b35f83d..ed481df 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -45,8 +45,10 @@ else XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##') fi -if [ ! -f xorg-server-"${XORG_VER}".tar.gz ]; then - 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 @@ -54,96 +56,91 @@ fi #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 -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 -autoreconf -i -# Configuring Xorg is long and has many distro-specific paths. -# The distro paths start after prefix and end with the font path, -# everything after that is based on BUILDING.txt to remove unneeded -# components. -# remove gl check for opensuse -if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then - sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure + autoreconf -i + # Configuring Xorg is long and has many distro-specific paths. + # The distro paths start after prefix and end with the font path, + # everything after that is based on BUILDING.txt to remove unneeded + # components. + # remove gl check for opensuse + if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then + sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure + fi + + # build X11 + ./configure \ + --disable-config-hal \ + --disable-config-udev \ + --disable-dmx \ + --disable-dri \ + --disable-dri2 \ + --disable-kdrive \ + --disable-static \ + --disable-xephyr \ + --disable-xinerama \ + --disable-xnest \ + --disable-xorg \ + --disable-xvfb \ + --disable-xwayland \ + --disable-xwin \ + --enable-glx \ + --prefix=/opt/kasmweb \ + --with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \ + --without-dtrace \ + --with-sha1=libcrypto \ + --with-xkb-bin-directory=/usr/bin \ + --with-xkb-output=/var/lib/xkb \ + --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' {} \; fi -# build X11 -./configure \ - --disable-config-hal \ - --disable-config-udev \ - --disable-dmx \ - --disable-dri \ - --disable-dri2 \ - --disable-kdrive \ - --disable-static \ - --disable-xephyr \ - --disable-xinerama \ - --disable-xnest \ - --disable-xorg \ - --disable-xvfb \ - --disable-xwayland \ - --disable-xwin \ - --enable-glx \ - --prefix=/opt/kasmweb \ - --with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \ - --without-dtrace \ - --with-sha1=libcrypto \ - --with-xkb-bin-directory=/usr/bin \ - --with-xkb-output=/var/lib/xkb \ - --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 -j"$(nproc)" # modifications for the servertarball cd /src mkdir -p xorg.build/bin cd xorg.build/bin/ -ln -sf /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 -if [ ! -d lib ]; then - mkdir lib -fi +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 From 2dbcd283545921d4c9a53196e0bd461d2d2fd25d Mon Sep 17 00:00:00 2001 From: Rodwin Spruel Date: Tue, 22 Apr 2025 11:22:20 +0000 Subject: [PATCH 10/10] Adding ability to override webp benchmark value --- common/rfb/EncodeManager.cxx | 2 +- common/rfb/ServerCore.cxx | 5 +++++ common/rfb/ServerCore.h | 1 + common/rfb/TightWEBPEncoder.cxx | 5 +++-- unix/vncserver | 9 +++++++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/common/rfb/EncodeManager.cxx b/common/rfb/EncodeManager.cxx index 5e94cdc..30bfdce 100644 --- a/common/rfb/EncodeManager.cxx +++ b/common/rfb/EncodeManager.cxx @@ -395,7 +395,7 @@ void EncodeManager::doUpdate(bool allowLossy, const Region& changed_, screenArea = pb->getRect().width() * pb->getRect().height(); screenArea *= 1024; screenArea /= 256 * 256; - screenArea *= webpBenchResult; + screenArea *= screenArea *= Server::webpEncodingTime > 0 ? Server::webpEncodingTime : webpBenchResult; // Encoding the entire screen would take this many 1024*msecs, worst case // Calculate how many us we can send webp for, before switching to jpeg diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx index 03a69d9..3c15be6 100644 --- a/common/rfb/ServerCore.cxx +++ b/common/rfb/ServerCore.cxx @@ -287,3 +287,8 @@ rfb::PresetParameter rfb::Server::preferBandwidth ("PreferBandwidth", "Set various options for lower bandwidth use. The default is off, aka to prefer quality.", false, bandwidthPreset); + +rfb::IntParameter rfb::Server::webpEncodingTime +("udpPort", + "Sets the benchmak WebP encoding time in KasmVNC. Default is calculated in TightWEBPEncoder benchmark function", + 0, 0, 10000); diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h index 2035cf6..c3a53e5 100644 --- a/common/rfb/ServerCore.h +++ b/common/rfb/ServerCore.h @@ -91,6 +91,7 @@ namespace rfb { static BoolParameter ignoreClientSettingsKasm; static BoolParameter selfBench; static PresetParameter preferBandwidth; + static IntParameter webpEncodingTime; }; }; diff --git a/common/rfb/TightWEBPEncoder.cxx b/common/rfb/TightWEBPEncoder.cxx index 89d9b3a..2e79c6c 100644 --- a/common/rfb/TightWEBPEncoder.cxx +++ b/common/rfb/TightWEBPEncoder.cxx @@ -259,13 +259,14 @@ void TightWEBPEncoder::writeRect(const PixelBuffer* pb, const Palette& palette) WebPMemoryWriterClear(&wrt); } -// How many milliseconds would it take to encode a 256x256 block at quality 8 +// How many milliseconds would it take to encode a 256x256 block at quality 5 rdr::U32 TightWEBPEncoder::benchmark() const { rdr::U8* buffer; struct timeval start; int stride, i; - const uint8_t quality = 8, method = 2; + // the minimum WebP quality settings used in KasmVNC + const uint8_t quality = 5, method = 0; WebPConfig cfg; WebPPicture pic; WebPMemoryWriter wrt; diff --git a/unix/vncserver b/unix/vncserver index 41fc1be..eb2695f 100755 --- a/unix/vncserver +++ b/unix/vncserver @@ -2068,6 +2068,15 @@ sub DefineConfigToCLIConversion { $value; } }), + KasmVNC::CliOption->new({ + name => 'webpEncodingTime', + configKeys => [ + KasmVNC::ConfigKey->new({ + name => "encoding.video_encoding_mode.webp_encoding_time", + type => KasmVNC::ConfigKey::INT + }) + ] + }), KasmVNC::CliOption->new({ name => 'CompareFB', configKeys => [