diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3f43dfc..196d8fa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -99,23 +99,6 @@ build_ubuntu_bionic_arm: paths: - output/ -build_ubuntu_bionic_libjpeg_turbo: - stage: build - allow_failure: false - before_script: - - *prepare_build - - *prepare_www - after_script: - - *prepare_artfacts - script: - - bash builder/build-package ubuntu bionic +libjpeg-turbo_latest - only: - variables: - - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME - artifacts: - paths: - - output/ - build_ubuntu_focal: stage: build allow_failure: true diff --git a/CMakeLists.txt b/CMakeLists.txt index ab5725d..56f6336 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,8 @@ find_package(ZLIB REQUIRED) # Check for libjpeg find_package(JPEG REQUIRED) +# Staticly link libjpeg-turbo +set(JPEG_LIBRARIES "-Wl,-Bstatic -lturbojpeg -Wl,-Bdynamic") # Warn if it doesn't seem to be the accelerated libjpeg that's found set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES}) set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR}) diff --git a/README.md b/README.md index 2be7842..f226003 100644 --- a/README.md +++ b/README.md @@ -231,6 +231,7 @@ command_line: # New Features! + - Faster jpeg compression (via statically linked libjpeg-turbo) - Webp image compression for better bandwidth usage - Automatic mixing of webp and jpeg based on CPU availability on server - Multi-threaded image encoding for smoother frame rate for servers with more cores diff --git a/builder/README.md b/builder/README.md index 2687777..ea05cc1 100644 --- a/builder/README.md +++ b/builder/README.md @@ -48,6 +48,18 @@ It will install the package inside a new container and run KasmVNC. Open browser and point to https://localhost:443/ or https://\:443/ +## Debugging + +To debug a test container, run `test-deb ubuntu focal -s` or `test-deb ubuntu +focal --shell`. It runs a shell instead of starting KasmVNC. + +## Testing performance + +To run a performance test, add `-p` option: +``` +builder/test-deb ubuntu focal -p +``` + # Package development ## deb/rpm package building and testing diff --git a/builder/dockerfile.alpine_317.build b/builder/dockerfile.alpine_317.build index 6e44049..2fdecd3 100644 --- a/builder/dockerfile.alpine_317.build +++ b/builder/dockerfile.alpine_317.build @@ -68,6 +68,12 @@ RUN \ xorg-server-dev \ xtrans + +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/ diff --git a/builder/dockerfile.centos_core.build b/builder/dockerfile.centos_core.build index 476c1e4..cb6d4fa 100644 --- a/builder/dockerfile.centos_core.build +++ b/builder/dockerfile.centos_core.build @@ -5,11 +5,11 @@ ENV KASMVNC_BUILD_OS_CODENAME core RUN yum install -y ca-certificates RUN yum install -y build-dep xorg-server libxfont-dev sudo -RUN yum install -y gcc cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver -RUN yum install -y libjpeg-dev libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel +RUN yum install -y gcc cmake git libgnutls28-dev vim wget tightvncserver +RUN yum install -y libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel RUN yum install -y make RUN yum group install -y "Development Tools" -RUN yum install -y xorg-x11-server-devel zlib-devel libjpeg-turbo-devel +RUN yum install -y xorg-x11-server-devel zlib-devel RUN yum install -y libxkbfile-devel libXfont2-devel xorg-x11-font-utils \ xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel pam-devel \ gnutls-devel libX11-devel libXtst-devel libXcursor-devel @@ -23,6 +23,10 @@ RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install +ENV SCRIPTS_DIR=/tmp/scripts +COPY builder/scripts $SCRIPTS_DIR +RUN $SCRIPTS_DIR/build-libjpeg-turbo + RUN useradd -m docker && echo "docker:docker" | chpasswd COPY --chown=docker:docker . /src/ diff --git a/builder/dockerfile.debian_bullseye.build b/builder/dockerfile.debian_bullseye.build index b1a1908..4f0a970 100644 --- a/builder/dockerfile.debian_bullseye.build +++ b/builder/dockerfile.debian_bullseye.build @@ -12,15 +12,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 libjpeg-dev libgnutls28-dev vim wget tightvncserver +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 -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 diff --git a/builder/dockerfile.debian_buster.build b/builder/dockerfile.debian_buster.build index 9849856..8c8fc7b 100644 --- a/builder/dockerfile.debian_buster.build +++ b/builder/dockerfile.debian_buster.build @@ -12,15 +12,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 libjpeg-dev libgnutls28-dev vim wget tightvncserver +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 -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 diff --git a/builder/dockerfile.debian_buster.deb.test b/builder/dockerfile.debian_buster.deb.test index 7193650..416e9fc 100644 --- a/builder/dockerfile.debian_buster.deb.test +++ b/builder/dockerfile.debian_buster.deb.test @@ -34,14 +34,6 @@ 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 -RUN apt-get update && apt-get install -y task-cinnamon-desktop -RUN apt-get update && apt-get install -y task-gnome-desktop -RUN mkdir -p /usr/share/man/man1 -RUN apt-get update && apt-get install -y apt-utils openjdk-11-jre -RUN apt-get update && apt-get install -y task-lxde-desktop -RUN apt-get update && apt-get install -y task-mate-desktop -RUN apt-get update && apt-get install -y task-kde-desktop - RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc RUN mkdir -p $STARTUPDIR diff --git a/builder/dockerfile.fedora_thirtyseven.build b/builder/dockerfile.fedora_thirtyseven.build index e3c75b4..4557431 100644 --- a/builder/dockerfile.fedora_thirtyseven.build +++ b/builder/dockerfile.fedora_thirtyseven.build @@ -27,8 +27,6 @@ RUN \ glibc-devel \ libdrm-devel \ libepoxy-devel \ - libjpeg-turbo-devel \ - libjpeg-turbo-static \ libmd-devel \ libpciaccess-devel \ libtool \ @@ -75,6 +73,11 @@ RUN \ 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/ diff --git a/builder/dockerfile.fedora_thirtyseven.rpm.test b/builder/dockerfile.fedora_thirtyseven.rpm.test index 2bce89f..5c7dea3 100644 --- a/builder/dockerfile.fedora_thirtyseven.rpm.test +++ b/builder/dockerfile.fedora_thirtyseven.rpm.test @@ -31,8 +31,7 @@ WORKDIR $HOME RUN dnf install -y openssl xterm gettext wget RUN dnf install -y nss_wrapper -RUN dnf install -y xorg-x11-xauth xorg-x11-xkb-utils \ - xkeyboard-config xorg-x11-server-utils +RUN dnf install -y xorg-x11-xauth xkeyboard-config # xorg-x11-server-Xorg # RUN dnf install -y @xfce-desktop-environment RUN dnf erase -y pm-utils xscreensaver* diff --git a/builder/dockerfile.kali_kali-rolling.build b/builder/dockerfile.kali_kali-rolling.build index 2123440..23346d5 100644 --- a/builder/dockerfile.kali_kali-rolling.build +++ b/builder/dockerfile.kali_kali-rolling.build @@ -15,15 +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-11 g++-11 -RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver +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 -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make -j$(nproc) && make install +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 diff --git a/builder/dockerfile.opensuse_15.build b/builder/dockerfile.opensuse_15.build index 6576dc8..4d98116 100644 --- a/builder/dockerfile.opensuse_15.build +++ b/builder/dockerfile.opensuse_15.build @@ -22,7 +22,6 @@ RUN zypper install -ny \ libgbm-devel \ libGLw-devel \ libgnutls-devel \ - libjpeg8-devel \ libopenssl-devel \ libpng16-devel \ libtiff-devel \ @@ -43,12 +42,10 @@ RUN zypper install -ny \ xorg-x11-util-devel \ zlib-devel -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 && \ diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build index a0527d3..d3cc907 100644 --- a/builder/dockerfile.oracle_8.build +++ b/builder/dockerfile.oracle_8.build @@ -50,12 +50,10 @@ RUN dnf install -y \ libXtst-devel \ libXcursor-devel -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 diff --git a/builder/dockerfile.oracle_9.build b/builder/dockerfile.oracle_9.build index 9c3c544..2b4a102 100644 --- a/builder/dockerfile.oracle_9.build +++ b/builder/dockerfile.oracle_9.build @@ -49,12 +49,11 @@ RUN dnf install -y \ libXtst-devel \ libXcursor-devel -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install + +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 diff --git a/builder/dockerfile.ubuntu1604.build b/builder/dockerfile.ubuntu1604.build deleted file mode 100644 index 8ca3260..0000000 --- a/builder/dockerfile.ubuntu1604.build +++ /dev/null @@ -1,21 +0,0 @@ -FROM ubuntu:16.04 - -RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list - -RUN apt-get update && \ - apt-get -y install sudo - -RUN apt-get -y build-dep xorg-server -RUN apt-get -y install cmake git libjpeg-dev libgnutls-dev vim wget tightvncserver -RUN apt-get -y install libjpeg-dev libpng-dev libtiff-dev libgif-dev -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzvf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && ./configure && make && make install - -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.ubuntu_bionic+libjpeg-turbo_latest.build b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build deleted file mode 100644 index 2615bff..0000000 --- a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:18.04 - -ENV KASMVNC_BUILD_OS ubuntu -ENV KASMVNC_BUILD_OS_CODENAME bionic -ENV XORG_VER 1.20.10 - -RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list - -RUN apt-get update && \ - apt-get -y install sudo - -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 -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 install -y cmake nasm gcc -RUN git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git -RUN export MAKEFLAGS=-j`nproc`; cd libjpeg-turbo && cmake -G"Unix Makefiles" && make deb -RUN export MAKEFLAGS=-j`nproc`; cd libjpeg-turbo && cmake -DCMAKE_INSTALL_PREFIX=/usr/local -G"Unix Makefiles" && make && make install - -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install - -# Fix for older required libs -#RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \ -# wget http://launchpadlibrarian.net/347526425/libxfont1_1.5.2-4ubuntu2_amd64.deb && \ -# dpkg -i libxfont1_1.5.2-4ubuntu2_amd64.deb && \ -# dpkg -i libxfont1-dev_1.5.2-4ubuntu2_amd64.deb - -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.ubuntu_bionic+libjpeg-turbo_latest.deb.build b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.build deleted file mode 100644 index 7782f10..0000000 --- a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.build +++ /dev/null @@ -1,23 +0,0 @@ -FROM ubuntu:bionic - -RUN apt-get update && \ - apt-get -y install vim build-essential devscripts equivs - -ARG KASMVNC_PACKAGE_DIR -COPY $KASMVNC_PACKAGE_DIR/libjpeg-turbo*deb /tmp/ -RUN apt-get install /tmp/libjpeg-turbo*deb - -# Install build-deps for the package. -COPY ./debian/control /tmp -RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control - -ENV LD_LIBRARY_PATH="/opt/libjpeg-turbo/lib64/:$LD_LIBRARY_PATH" - -ARG L_UID -RUN if [ "$L_UID" -eq 0 ]; then \ - useradd -m docker; \ - else \ - useradd -m docker -u $L_UID;\ - fi - -USER docker diff --git a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test deleted file mode 100644 index 635ee0f..0000000 --- a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test +++ /dev/null @@ -1,60 +0,0 @@ -FROM ubuntu:bionic - -ENV DISPLAY=:1 \ - VNC_PORT=8443 \ - VNC_RESOLUTION=1280x720 \ - MAX_FRAME_RATE=24 \ - VNCOPTIONS="-PreferBandwidth -DynamicQualityMin=4 -DynamicQualityMax=7" \ - HOME=/home/user \ - TERM=xterm \ - STARTUPDIR=/dockerstartup \ - INST_SCRIPTS=/dockerstartup/install \ - KASM_RX_HOME=/dockerstartup/kasmrx \ - DEBIAN_FRONTEND=noninteractive \ - VNC_COL_DEPTH=24 \ - VNC_RESOLUTION=1280x1024 \ - VNC_PW=vncpassword \ - VNC_USER=user \ - VNC_VIEW_ONLY_PW=vncviewonlypassword \ - LD_LIBRARY_PATH=/opt/libjpeg-turbo/lib64/:/usr/local/lib/ \ - OMP_WAIT_POLICY=PASSIVE \ - SHELL=/bin/bash \ - SINGLE_APPLICATION=0 \ - KASMVNC_BUILD_OS=ubuntu \ - KASMVNC_BUILD_OS_CODENAME=bionic - -EXPOSE $VNC_PORT - -WORKDIR $HOME - -### REQUIRED STUFF ### - -RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal 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 - -RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc - -RUN mkdir -p $STARTUPDIR -COPY builder/startup/ $STARTUPDIR - -### START CUSTOM STUFF #### -COPY ./builder/scripts/ /tmp/scripts/ -COPY ./debian/changelog /tmp - -ARG KASMVNC_PACKAGE_DIR -COPY $KASMVNC_PACKAGE_DIR/libjpeg-turbo_*.deb /tmp/ -RUN apt-get install /tmp/libjpeg-turbo*deb - -ARG BUILD_DEBIAN_REVISION -COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*$BUILD_DEBIAN_REVISION*.deb /tmp/ -RUN /tmp/scripts/install_kasmvncserver_package "$BUILD_DEBIAN_REVISION" - -### END CUSTOM STUFF ### - -RUN chown -R 1000:0 $HOME -USER 1000:ssl-cert -WORKDIR $HOME - -ENTRYPOINT [ "/dockerstartup/vnc_startup.sh" ] diff --git a/builder/dockerfile.ubuntu_bionic.build b/builder/dockerfile.ubuntu_bionic.build index f54123b..4095901 100644 --- a/builder/dockerfile.ubuntu_bionic.build +++ b/builder/dockerfile.ubuntu_bionic.build @@ -10,15 +10,13 @@ RUN apt-get update && \ apt-get -y install sudo RUN apt-get update && apt-get -y build-dep xorg-server libxfont-dev -RUN apt-get update && apt-get -y install cmake git libjpeg-dev libgnutls28-dev vim wget tightvncserver +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 -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +ENV SCRIPTS_DIR=/tmp/scripts +COPY builder/scripts $SCRIPTS_DIR +RUN $SCRIPTS_DIR/build-webp +RUN $SCRIPTS_DIR/build-libjpeg-turbo # Fix for older required libs #RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \ diff --git a/builder/dockerfile.ubuntu_bionic.test b/builder/dockerfile.ubuntu_bionic.test index de10bd1..a9c2049 100644 --- a/builder/dockerfile.ubuntu_bionic.test +++ b/builder/dockerfile.ubuntu_bionic.test @@ -29,7 +29,7 @@ WORKDIR $HOME ### REQUIRED STUFF ### -RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget +RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget RUN apt-get purge -y pm-utils xscreensaver* RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc diff --git a/builder/dockerfile.ubuntu_focal.barebones.deb.test b/builder/dockerfile.ubuntu_focal.barebones.deb.test index 9b16154..d9effe0 100644 --- a/builder/dockerfile.ubuntu_focal.barebones.deb.test +++ b/builder/dockerfile.ubuntu_focal.barebones.deb.test @@ -2,9 +2,13 @@ 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 rm -f /tmp/kasmvncserver_*+*.deb; apt-get update && dpkg -i /tmp/*.deb; apt-get -yf install +RUN /tmp/scripts/install_kasmvncserver_package + RUN apt-get update && apt-get -y install xterm lsb-release RUN mkdir -p $STARTUPDIR diff --git a/builder/dockerfile.ubuntu_focal.build b/builder/dockerfile.ubuntu_focal.build index 5925c92..43094ed 100644 --- a/builder/dockerfile.ubuntu_focal.build +++ b/builder/dockerfile.ubuntu_focal.build @@ -12,15 +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 libjpeg-dev vim wget +RUN apt-get update && apt-get -y install cmake git vim wget RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 diff --git a/builder/dockerfile.ubuntu_focal.test b/builder/dockerfile.ubuntu_focal.test index 7cf307b..3002fb5 100644 --- a/builder/dockerfile.ubuntu_focal.test +++ b/builder/dockerfile.ubuntu_focal.test @@ -29,7 +29,7 @@ WORKDIR $HOME ### REQUIRED STUFF ### -RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget +RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget RUN apt-get purge -y pm-utils xscreensaver* RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc diff --git a/builder/dockerfile.ubuntu_jammy.build b/builder/dockerfile.ubuntu_jammy.build index 4ca442f..33a3709 100644 --- a/builder/dockerfile.ubuntu_jammy.build +++ b/builder/dockerfile.ubuntu_jammy.build @@ -12,15 +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 libjpeg-dev libgnutls28-dev vim wget tightvncserver +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 -# Additions for webp -RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz -RUN cd /tmp && tar -xzf /tmp/libwebp-* -RUN cd /tmp/libwebp-1.0.2 && \ - ./configure --enable-static --disable-shared && \ - make && make install +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 diff --git a/builder/dockerfile.ubuntu_jammy.test b/builder/dockerfile.ubuntu_jammy.test index 9adc1b5..a4fb5d7 100644 --- a/builder/dockerfile.ubuntu_jammy.test +++ b/builder/dockerfile.ubuntu_jammy.test @@ -29,7 +29,7 @@ WORKDIR $HOME ### REQUIRED STUFF ### -RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget +RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget RUN apt-get purge -y pm-utils xscreensaver* RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc diff --git a/builder/os_ver_cli.sh b/builder/os_ver_cli.sh index f23fb9e..534810d 100644 --- a/builder/os_ver_cli.sh +++ b/builder/os_ver_cli.sh @@ -1,3 +1,5 @@ +#!/bin/bash + default_os=${default_os:-ubuntu} default_os_codename=${default_os_codename:-bionic} diff --git a/builder/process_test_options.sh b/builder/process_test_options.sh new file mode 100644 index 0000000..da8b55c --- /dev/null +++ b/builder/process_test_options.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +usage() { + echo >&2 "Usage: $(basename "$0") [-s|--shell] [-p|--perf-test] [-h|--help] " + exit +} + +process_options() { + local sorted_options=$(getopt -o psh --long perf-test --long shell --long help -- "$@") + eval set -- $sorted_options + + while : ; do + case "$1" in + -p|--perf-test) + entrypoint_args='-interface 0.0.0.0 -selfBench :1' + entrypoint_executable="--entrypoint=/usr/bin/Xvnc" + shift + ;; + -s|--shell) + entrypoint_executable="--entrypoint=bash" + shift + ;; + -h|--help) + print_usage=1 + ;; + --) + shift + break + ;; + esac + done + + leftover_options=("$@") +} + +declare -a leftover_options + +if [ "$#" -eq 0 ]; then + usage + exit +fi + +process_options "$@" +set -- "${leftover_options[@]}" + +if [ -n "$print_usage" ]; then + usage + exit +fi diff --git a/builder/scripts/build-libjpeg-turbo b/builder/scripts/build-libjpeg-turbo new file mode 100755 index 0000000..49134ba --- /dev/null +++ b/builder/scripts/build-libjpeg-turbo @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +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 +} + +prepare_libjpeg_source() { + git clone --depth=1 https://github.com/libjpeg-turbo/libjpeg-turbo.git + cd libjpeg-turbo +} + +source_dir=$(dirname "$0") +. "$source_dir/common.sh" + +install_build_dependencies +prepare_libjpeg_source +build_and_install diff --git a/builder/scripts/build-webp b/builder/scripts/build-webp new file mode 100755 index 0000000..1393b47 --- /dev/null +++ b/builder/scripts/build-webp @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -euo pipefail + +webp_tar_url=https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz + +prepare_source() { + cd /tmp + wget "$webp_tar_url" + tar -xzf /tmp/libwebp-* + rm /tmp/libwebp-*.tar.gz + cd /tmp/libwebp-* +} + +build_and_install() { + export MAKEFLAGS=-j`nproc` + ./configure --enable-static --disable-shared + make + make install +} + +prepare_source +build_and_install diff --git a/builder/scripts/common.sh b/builder/scripts/common.sh new file mode 100644 index 0000000..4440b66 --- /dev/null +++ b/builder/scripts/common.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +detect_distro() { + if [ -f /etc/centos-release ]; then + DISTRO=centos + elif [ -f /etc/oracle-release ]; then + DISTRO=oracle + elif [ -f /etc/fedora-release ]; then + DISTRO=fedora + elif [ -f /usr/bin/zypper ]; then + DISTRO=opensuse + elif [ -f /etc/alpine-release ]; then + DISTRO=alpine + else + DISTRO=debian + fi +} + +install_packages() { + local install_cmd=no-command-defined + + case "$DISTRO" in + centos) install_cmd="yum install -y" ;; + oracle) install_cmd="dnf install -y" ;; + fedora) install_cmd="dnf install -y" ;; + opensuse) install_cmd="zypper install -y" ;; + alpine) install_cmd="apk add" ;; + *) install_cmd="apt-get update && apt-get install -y" + esac + + eval "$install_cmd $*" +} + +detect_distro diff --git a/builder/test-deb b/builder/test-deb index 50accfa..9a8c11d 100755 --- a/builder/test-deb +++ b/builder/test-deb @@ -3,6 +3,7 @@ set -e cd "$(dirname "$0")/.." +. ./builder/process_test_options.sh . ./builder/os_ver_cli.sh . ./builder/common.sh @@ -11,8 +12,11 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \ --build-arg BUILD_DEBIAN_REVISION="$build_debian_revision" \ -t "$tester_image" \ -f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" . + docker run -it -p "443:$VNC_PORT" --rm \ -e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \ -e "VNC_USER=foo" -e "VNC_PW=foobar" \ -e "VNC_PORT=$VNC_PORT" \ - "$tester_image" + $entrypoint_executable \ + "$tester_image" \ + $entrypoint_args diff --git a/builder/test-deb-barebones b/builder/test-deb-barebones index d29978e..9ffdb5d 100755 --- a/builder/test-deb-barebones +++ b/builder/test-deb-barebones @@ -3,6 +3,7 @@ set -e cd "$(dirname "$0")/.." +. ./builder/process_test_options.sh . ./builder/common.sh os="${1:-debian}" os_codename="${2:-buster}" @@ -13,4 +14,6 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \ echo docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \ -e "VNC_PORT=$VNC_PORT" \ - kasmvnctester_barebones_${os}:$os_codename + $entrypoint_executable \ + kasmvnctester_barebones_${os}:$os_codename \ + $entrypoint_args diff --git a/builder/test-rpm b/builder/test-rpm index fbf731e..aed8652 100755 --- a/builder/test-rpm +++ b/builder/test-rpm @@ -3,6 +3,7 @@ set -e cd "$(dirname "$0")/.." +. ./builder/process_test_options.sh . ./builder/os_ver_cli.sh . ./builder/common.sh @@ -16,4 +17,6 @@ docker run -it -p "443:$VNC_PORT" --rm \ -e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \ -e "VNC_USER=foo" -e "VNC_PW=foobar" \ -e "VNC_PORT=$VNC_PORT" \ - kasmvnctester_${os}:$os_codename + $entrypoint_executable \ + kasmvnctester_${os}:$os_codename \ + $entrypoint_args diff --git a/builder/test-rpm-barebones b/builder/test-rpm-barebones index b804a75..6318bda 100755 --- a/builder/test-rpm-barebones +++ b/builder/test-rpm-barebones @@ -3,6 +3,7 @@ set -e cd "$(dirname "$0")" +. ./process_test_options.sh . ./common.sh os="${1:-centos}" os_codename="${2:-core}" @@ -12,4 +13,6 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="build/${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" \ -e "VNC_PORT=$VNC_PORT" \ - kasmvnctester_barebones_${os}:$os_codename + $entrypoint_executable \ + kasmvnctester_barebones_${os}:$os_codename \ + $entrypoint_args diff --git a/debian/control b/debian/control index fb506b4..2c860c5 100644 --- a/debian/control +++ b/debian/control @@ -16,12 +16,12 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth, libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl, libtry-tiny-perl, libgbm1 Provides: vnc-server -Description: KasmVNC provides remote web-based access to a Desktop or application. - While VNC is in the name, KasmVNC differs from other VNC variants such - as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB - specification which defines VNC, in order to support modern technologies - and increase security. KasmVNC is accessed by users from any modern - browser and does not support legacy VNC viewer applications. KasmVNC - uses a modern YAML based configuration at the server and user level, - allowing for ease of management. KasmVNC is maintained by Kasm - Technologies Corp, www.kasmweb.com. +Description: KasmVNC provides remote web-based access to a Desktop or application. + While VNC is in the name, KasmVNC differs from other VNC variants such + as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB + specification which defines VNC, in order to support modern technologies + and increase security. KasmVNC is accessed by users from any modern + browser and does not support legacy VNC viewer applications. KasmVNC + uses a modern YAML based configuration at the server and user level, + allowing for ease of management. KasmVNC is maintained by Kasm + Technologies Corp, www.kasmweb.com. diff --git a/opensuse/kasmvncserver.spec b/opensuse/kasmvncserver.spec index 871753f..408cdc2 100644 --- a/opensuse/kasmvncserver.spec +++ b/opensuse/kasmvncserver.spec @@ -11,14 +11,14 @@ Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, open Conflicts: tigervnc, tigervnc-x11vnc %description -KasmVNC provides remote web-based access to a Desktop or application. -While VNC is in the name, KasmVNC differs from other VNC variants such -as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB -specification which defines VNC, in order to support modern technologies -and increase security. KasmVNC is accessed by users from any modern -browser and does not support legacy VNC viewer applications. KasmVNC -uses a modern YAML based configuration at the server and user level, -allowing for ease of management. KasmVNC is maintained by Kasm +KasmVNC provides remote web-based access to a Desktop or application. +While VNC is in the name, KasmVNC differs from other VNC variants such +as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB +specification which defines VNC, in order to support modern technologies +and increase security. KasmVNC is accessed by users from any modern +browser and does not support legacy VNC viewer applications. KasmVNC +uses a modern YAML based configuration at the server and user level, +allowing for ease of management. KasmVNC is maintained by Kasm Technologies Corp, www.kasmweb.com. %prep diff --git a/unix/KasmVNC/Config.pm b/unix/KasmVNC/Config.pm index 7bcfdc2..78d49d3 100644 --- a/unix/KasmVNC/Config.pm +++ b/unix/KasmVNC/Config.pm @@ -8,6 +8,8 @@ use Data::Dumper; use Hash::Merge::Simple; use KasmVNC::Utils; +our $logger; + sub merge { my @configsToMerge = map { $_->{data} } @_; my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {}; @@ -31,7 +33,13 @@ sub load { failIfConfigNotReadable($self->{filename}); - $self->{data} = YAML::Tiny->read($self->{filename})->[0]; + $logger->debug("Loading config " . $self->{filename}); + my $yamlDocuments = YAML::Tiny->read($self->{filename}); + unless (defined $yamlDocuments) { + die "Couldn't load config: $self->{filename}. Probable reason: No newline at end of file\n"; + } + + $self->{data} = $yamlDocuments->[0]; } sub get { diff --git a/unix/KasmVNC/Logger.pm b/unix/KasmVNC/Logger.pm index b8e64af..e5ab497 100644 --- a/unix/KasmVNC/Logger.pm +++ b/unix/KasmVNC/Logger.pm @@ -8,9 +8,18 @@ use Data::Dumper; sub new { my ($class, $args) = @_; my $self = bless { + level => $args->{level} // "warn" }, $class; } +sub debug { + my $self = shift; + + return unless ($self->{level} eq "debug"); + + say { *STDERR } @_; +} + sub warn { my $self = shift; diff --git a/unix/vncserver b/unix/vncserver index b5301a4..a3e3269 100755 --- a/unix/vncserver +++ b/unix/vncserver @@ -1171,6 +1171,7 @@ sub DefineFilePathsAndStuff { $KasmVNC::Users::vncPasswdBin = $exedir . "kasmvncpasswd"; $KasmVNC::Users::logger = $logger; + $KasmVNC::Config::logger = $logger; $vncSystemConfigDir = "/etc/kasmvnc"; if ($ENV{KASMVNC_DEVELOPMENT}) { @@ -2787,5 +2788,6 @@ sub SetAppSettingsFromConfigAndCli { } sub InitLogger { - $logger = KasmVNC::Logger->new(); + my $debugEnabled = any { $_ eq "-debug" } @ARGV; + $logger = KasmVNC::Logger->new({ level => $debugEnabled ? "debug" : "warn" }); }