From 628039aed3ea98990fdd5e5cfc69202138b9a1f7 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 3 Mar 2025 12:58:05 +0000 Subject: [PATCH 1/2] added dev container for building kasmvnc --- .gitignore | 5 +++++ BUILDING.txt | 26 ++++++++++++++++++++++++++ CMakeLists.txt | 2 +- builder/dockerfile.ubuntu_jammy.dev | 25 +++++++++++++++++++++++++ builder/scripts/build-libjpeg-turbo | 1 + builder/scripts/build-webp | 20 ++++++++++++++------ 6 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 builder/dockerfile.ubuntu_jammy.dev diff --git a/.gitignore b/.gitignore index f4a278e..bc7e8b5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.lo .deps .libs +*.swp CMakeFiles CMakeCache.txt @@ -12,6 +13,10 @@ Makefile Makefile.in config.h +libjpeg-turbo/ +xorg.build/ +install_manifest.txt + builder/build/ builder/www/ spec/tmp diff --git a/BUILDING.txt b/BUILDING.txt index b0f3782..45b5f3f 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -71,6 +71,32 @@ For in-tree builds, these directories are the same. Building KasmVNC ================= +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 +``` + +Now from inside the container. + +```bash +kasm-user@5c2802e4cf1e:/src$ sudo builder/scripts/build-webp +kasm-user@5c2802e4cf1e:/src$ sudo builder/scripts/build-build-libjpeg-turbo +kasm-user@5c2802e4cf1e:/src$ 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 +/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 --------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index 3807fc4..1c3bded 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,7 +245,7 @@ if(ENABLE_NLS) add_subdirectory(po) endif() -add_subdirectory(tests) +####add_subdirectory(tests) include(cmake/BuildPackages.cmake) diff --git a/builder/dockerfile.ubuntu_jammy.dev b/builder/dockerfile.ubuntu_jammy.dev new file mode 100644 index 0000000..d13638d --- /dev/null +++ b/builder/dockerfile.ubuntu_jammy.dev @@ -0,0 +1,25 @@ +FROM kasmweb/ubuntu-jammy-desktop:develop + +ENV KASMVNC_BUILD_OS ubuntu +ENV KASMVNC_BUILD_OS_CODENAME jammy +ENV XORG_VER 21.1.3 +ENV XORG_PATCH 21 +ENV DEBIAN_FRONTEND noninteractive + +EXPOSE 6901 + +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 && \ + 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 + +USER 1000 + +WORKDIR /src + +ENTRYPOINT /bin/bash diff --git a/builder/scripts/build-libjpeg-turbo b/builder/scripts/build-libjpeg-turbo index 1510f24..13d1f3f 100755 --- a/builder/scripts/build-libjpeg-turbo +++ b/builder/scripts/build-libjpeg-turbo @@ -22,6 +22,7 @@ ensure_libjpeg_is_fast() { prepare_libjpeg_source() { export JPEG_TURBO_RELEASE=$(curl -sX GET "https://api.github.com/repos/libjpeg-turbo/libjpeg-turbo/releases/latest" \ | awk '/tag_name/{print $4;exit}' FS='[""]') + [ -d ./libjpeg-turbo ] && rm -rf ./libjpeg-turbo mkdir libjpeg-turbo curl -Ls "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_TURBO_RELEASE}.tar.gz" | \ tar xzvf - -C libjpeg-turbo/ --strip-components=1 diff --git a/builder/scripts/build-webp b/builder/scripts/build-webp index 82b07ba..a6b2fd0 100755 --- a/builder/scripts/build-webp +++ b/builder/scripts/build-webp @@ -2,18 +2,25 @@ set -euo pipefail -webp_tar_url=https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.2.4.tar.gz +WEBP_VERSION="1.2.4" +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}" prepare_source() { cd /tmp - wget "$webp_tar_url" - tar -xzf /tmp/libwebp-* - rm /tmp/libwebp-*.tar.gz - cd /tmp/libwebp-* + + # Remove old files if they exist + [ -f "$WEBP_TAR_FILE" ] && rm "$WEBP_TAR_FILE" + [ -d "$WEBP_SRC_DIR" ] && rm -rf "$WEBP_SRC_DIR" + + wget "$WEBP_TAR_URL" + tar -xzf "$WEBP_TAR_FILE" + cd "$WEBP_SRC_DIR" } build_and_install() { - export MAKEFLAGS=-j`nproc` + export MAKEFLAGS=-j$(nproc) ./configure --enable-static --disable-shared make make install @@ -21,3 +28,4 @@ build_and_install() { prepare_source build_and_install + From 3182b902d2a19ab1a5e807e3f53e1e1ddf78f921 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 3 Mar 2025 13:14:11 +0000 Subject: [PATCH 2/2] updates to build instructions --- BUILDING.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/BUILDING.txt b/BUILDING.txt index 45b5f3f..85918e5 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -84,15 +84,22 @@ sudo docker run -it -v ./:/src -p 6901:6901 kasmvnc:dev Now from inside the container. ```bash -kasm-user@5c2802e4cf1e:/src$ sudo builder/scripts/build-webp -kasm-user@5c2802e4cf1e:/src$ sudo builder/scripts/build-build-libjpeg-turbo -kasm-user@5c2802e4cf1e:/src$ builder/build.sh +# build frontend +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 KasmVNC +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 :1 & /usr/bin/xfce4-session --display :1 ```