Merge branch 'feature/KASM-3870-statically-link-libjpeg' into 'master'

Resolve KASM-3870 "Feature/ statically link libjpeg"

Closes KASM-3870

See merge request kasm-technologies/internal/KasmVNC!87
This commit is contained in:
Matthew McClaskey 2023-03-14 12:20:28 +00:00
commit cc606d0c00
40 changed files with 280 additions and 263 deletions

View File

@ -99,23 +99,6 @@ build_ubuntu_bionic_arm:
paths: paths:
- output/ - 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: build_ubuntu_focal:
stage: build stage: build
allow_failure: true allow_failure: true

View File

@ -151,6 +151,8 @@ find_package(ZLIB REQUIRED)
# Check for libjpeg # Check for libjpeg
find_package(JPEG REQUIRED) 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 # Warn if it doesn't seem to be the accelerated libjpeg that's found
set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES})
set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR}) set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR})

View File

@ -231,6 +231,7 @@ command_line:
# New Features! # New Features!
- Faster jpeg compression (via statically linked libjpeg-turbo)
- Webp image compression for better bandwidth usage - Webp image compression for better bandwidth usage
- Automatic mixing of webp and jpeg based on CPU availability on server - 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 - Multi-threaded image encoding for smoother frame rate for servers with more cores

View File

@ -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://\<ip-address\>:443/ Open browser and point to https://localhost:443/ or https://\<ip-address\>: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 # Package development
## deb/rpm package building and testing ## deb/rpm package building and testing

View File

@ -68,6 +68,12 @@ RUN \
xorg-server-dev \ xorg-server-dev \
xtrans 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 RUN useradd -m docker && echo "docker:docker" | chpasswd
COPY --chown=docker:docker . /src/ COPY --chown=docker:docker . /src/

View File

@ -5,11 +5,11 @@ ENV KASMVNC_BUILD_OS_CODENAME core
RUN yum install -y ca-certificates RUN yum install -y ca-certificates
RUN yum install -y build-dep xorg-server libxfont-dev sudo 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 gcc cmake git 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 libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel
RUN yum install -y make RUN yum install -y make
RUN yum group install -y "Development Tools" 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 \ 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 \ xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel pam-devel \
gnutls-devel libX11-devel libXtst-devel libXcursor-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 && \ ./configure --enable-static --disable-shared && \
make && make install 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 RUN useradd -m docker && echo "docker:docker" | chpasswd
COPY --chown=docker:docker . /src/ COPY --chown=docker:docker . /src/

View File

@ -12,15 +12,13 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

View File

@ -12,15 +12,13 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

View File

@ -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 install -y vim less
RUN apt-get update && apt-get -y install lsb-release 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 echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
RUN mkdir -p $STARTUPDIR RUN mkdir -p $STARTUPDIR

View File

@ -27,8 +27,6 @@ RUN \
glibc-devel \ glibc-devel \
libdrm-devel \ libdrm-devel \
libepoxy-devel \ libepoxy-devel \
libjpeg-turbo-devel \
libjpeg-turbo-static \
libmd-devel \ libmd-devel \
libpciaccess-devel \ libpciaccess-devel \
libtool \ libtool \
@ -75,6 +73,11 @@ RUN \
xorg-x11-xtrans-devel \ xorg-x11-xtrans-devel \
xsltproc 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 RUN useradd -m docker && echo "docker:docker" | chpasswd
COPY --chown=docker:docker . /src/ COPY --chown=docker:docker . /src/

View File

@ -31,8 +31,7 @@ WORKDIR $HOME
RUN dnf install -y openssl xterm gettext wget RUN dnf install -y openssl xterm gettext wget
RUN dnf install -y nss_wrapper RUN dnf install -y nss_wrapper
RUN dnf install -y xorg-x11-xauth xorg-x11-xkb-utils \ RUN dnf install -y xorg-x11-xauth xkeyboard-config
xkeyboard-config xorg-x11-server-utils
# xorg-x11-server-Xorg # xorg-x11-server-Xorg
# RUN dnf install -y @xfce-desktop-environment # RUN dnf install -y @xfce-desktop-environment
RUN dnf erase -y pm-utils xscreensaver* RUN dnf erase -y pm-utils xscreensaver*

View File

@ -15,15 +15,13 @@ RUN apt-get update && \
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata 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 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make -j$(nproc) && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

View File

@ -22,7 +22,6 @@ RUN zypper install -ny \
libgbm-devel \ libgbm-devel \
libGLw-devel \ libGLw-devel \
libgnutls-devel \ libgnutls-devel \
libjpeg8-devel \
libopenssl-devel \ libopenssl-devel \
libpng16-devel \ libpng16-devel \
libtiff-devel \ libtiff-devel \
@ -43,12 +42,10 @@ RUN zypper install -ny \
xorg-x11-util-devel \ xorg-x11-util-devel \
zlib-devel zlib-devel
# Additions for webp ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -u 1000 docker && \ RUN useradd -u 1000 docker && \
groupadd -g 1000 docker && \ groupadd -g 1000 docker && \

View File

@ -50,12 +50,10 @@ RUN dnf install -y \
libXtst-devel \ libXtst-devel \
libXcursor-devel libXcursor-devel
# Additions for webp ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd RUN useradd -m docker && echo "docker:docker" | chpasswd

View File

@ -49,12 +49,11 @@ RUN dnf install -y \
libXtst-devel \ libXtst-devel \
libXcursor-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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && tar -xzf /tmp/libwebp-* COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-webp
./configure --enable-static --disable-shared && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd RUN useradd -m docker && echo "docker:docker" | chpasswd

View File

@ -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"]

View File

@ -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"]

View File

@ -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

View File

@ -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" ]

View File

@ -10,15 +10,13 @@ RUN apt-get update && \
apt-get -y install sudo 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
# Fix for older required libs # Fix for older required libs
#RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \ #RUN cd /tmp && wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb && \

View File

@ -29,7 +29,7 @@ WORKDIR $HOME
### REQUIRED STUFF ### ### 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 apt-get purge -y pm-utils xscreensaver*
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc

View File

@ -2,9 +2,13 @@ FROM ubuntu:focal
ENV STARTUPDIR=/dockerstartup ENV STARTUPDIR=/dockerstartup
COPY ./builder/scripts/ /tmp/scripts/
COPY ./debian/changelog /tmp
ARG KASMVNC_PACKAGE_DIR ARG KASMVNC_PACKAGE_DIR
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/ 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 apt-get update && apt-get -y install xterm lsb-release
RUN mkdir -p $STARTUPDIR RUN mkdir -p $STARTUPDIR

View File

@ -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 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

View File

@ -29,7 +29,7 @@ WORKDIR $HOME
### REQUIRED STUFF ### ### 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 apt-get purge -y pm-utils xscreensaver*
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc

View File

@ -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 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 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 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 ENV SCRIPTS_DIR=/tmp/scripts
RUN cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz COPY builder/scripts $SCRIPTS_DIR
RUN cd /tmp && tar -xzf /tmp/libwebp-* RUN $SCRIPTS_DIR/build-webp
RUN cd /tmp/libwebp-1.0.2 && \ RUN $SCRIPTS_DIR/build-libjpeg-turbo
./configure --enable-static --disable-shared && \
make && make install
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

View File

@ -29,7 +29,7 @@ WORKDIR $HOME
### REQUIRED STUFF ### ### 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 apt-get purge -y pm-utils xscreensaver*
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc

View File

@ -1,3 +1,5 @@
#!/bin/bash
default_os=${default_os:-ubuntu} default_os=${default_os:-ubuntu}
default_os_codename=${default_os_codename:-bionic} default_os_codename=${default_os_codename:-bionic}

View File

@ -0,0 +1,49 @@
#!/bin/bash
usage() {
echo >&2 "Usage: $(basename "$0") [-s|--shell] [-p|--perf-test] [-h|--help] <distro> <distro_version>"
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

View File

@ -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

23
builder/scripts/build-webp Executable file
View File

@ -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

34
builder/scripts/common.sh Normal file
View File

@ -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

View File

@ -3,6 +3,7 @@
set -e set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
. ./builder/process_test_options.sh
. ./builder/os_ver_cli.sh . ./builder/os_ver_cli.sh
. ./builder/common.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" \ --build-arg BUILD_DEBIAN_REVISION="$build_debian_revision" \
-t "$tester_image" \ -t "$tester_image" \
-f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" . -f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" .
docker run -it -p "443:$VNC_PORT" --rm \ docker run -it -p "443:$VNC_PORT" --rm \
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \ -e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
-e "VNC_USER=foo" -e "VNC_PW=foobar" \ -e "VNC_USER=foo" -e "VNC_PW=foobar" \
-e "VNC_PORT=$VNC_PORT" \ -e "VNC_PORT=$VNC_PORT" \
"$tester_image" $entrypoint_executable \
"$tester_image" \
$entrypoint_args

View File

@ -3,6 +3,7 @@
set -e set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
. ./builder/process_test_options.sh
. ./builder/common.sh . ./builder/common.sh
os="${1:-debian}" os="${1:-debian}"
os_codename="${2:-buster}" os_codename="${2:-buster}"
@ -13,4 +14,6 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
echo echo
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \ docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
-e "VNC_PORT=$VNC_PORT" \ -e "VNC_PORT=$VNC_PORT" \
kasmvnctester_barebones_${os}:$os_codename $entrypoint_executable \
kasmvnctester_barebones_${os}:$os_codename \
$entrypoint_args

View File

@ -3,6 +3,7 @@
set -e set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
. ./builder/process_test_options.sh
. ./builder/os_ver_cli.sh . ./builder/os_ver_cli.sh
. ./builder/common.sh . ./builder/common.sh
@ -16,4 +17,6 @@ docker run -it -p "443:$VNC_PORT" --rm \
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \ -e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
-e "VNC_USER=foo" -e "VNC_PW=foobar" \ -e "VNC_USER=foo" -e "VNC_PW=foobar" \
-e "VNC_PORT=$VNC_PORT" \ -e "VNC_PORT=$VNC_PORT" \
kasmvnctester_${os}:$os_codename $entrypoint_executable \
kasmvnctester_${os}:$os_codename \
$entrypoint_args

View File

@ -3,6 +3,7 @@
set -e set -e
cd "$(dirname "$0")" cd "$(dirname "$0")"
. ./process_test_options.sh
. ./common.sh . ./common.sh
os="${1:-centos}" os="${1:-centos}"
os_codename="${2:-core}" 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 . -f dockerfile.${os}_${os_codename}.barebones.rpm.test .
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \ docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
-e "VNC_PORT=$VNC_PORT" \ -e "VNC_PORT=$VNC_PORT" \
kasmvnctester_barebones_${os}:$os_codename $entrypoint_executable \
kasmvnctester_barebones_${os}:$os_codename \
$entrypoint_args

18
debian/control vendored
View File

@ -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, libhash-merge-simple-perl, libscalar-list-utils-perl, liblist-moreutils-perl,
libtry-tiny-perl, libgbm1 libtry-tiny-perl, libgbm1
Provides: vnc-server Provides: vnc-server
Description: KasmVNC provides remote web-based access to a Desktop or application. 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 While VNC is in the name, KasmVNC differs from other VNC variants such
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
specification which defines VNC, in order to support modern technologies specification which defines VNC, in order to support modern technologies
and increase security. KasmVNC is accessed by users from any modern and increase security. KasmVNC is accessed by users from any modern
browser and does not support legacy VNC viewer applications. KasmVNC browser and does not support legacy VNC viewer applications. KasmVNC
uses a modern YAML based configuration at the server and user level, uses a modern YAML based configuration at the server and user level,
allowing for ease of management. KasmVNC is maintained by Kasm allowing for ease of management. KasmVNC is maintained by Kasm
Technologies Corp, www.kasmweb.com. Technologies Corp, www.kasmweb.com.

View File

@ -11,14 +11,14 @@ Requires: xauth, hostname, libxkbcommon-x11-0, xkeyboard-config, x11-tools, open
Conflicts: tigervnc, tigervnc-x11vnc Conflicts: tigervnc, tigervnc-x11vnc
%description %description
KasmVNC provides remote web-based access to a Desktop or application. KasmVNC provides remote web-based access to a Desktop or application.
While VNC is in the name, KasmVNC differs from other VNC variants such While VNC is in the name, KasmVNC differs from other VNC variants such
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
specification which defines VNC, in order to support modern technologies specification which defines VNC, in order to support modern technologies
and increase security. KasmVNC is accessed by users from any modern and increase security. KasmVNC is accessed by users from any modern
browser and does not support legacy VNC viewer applications. KasmVNC browser and does not support legacy VNC viewer applications. KasmVNC
uses a modern YAML based configuration at the server and user level, uses a modern YAML based configuration at the server and user level,
allowing for ease of management. KasmVNC is maintained by Kasm allowing for ease of management. KasmVNC is maintained by Kasm
Technologies Corp, www.kasmweb.com. Technologies Corp, www.kasmweb.com.
%prep %prep

View File

@ -8,6 +8,8 @@ use Data::Dumper;
use Hash::Merge::Simple; use Hash::Merge::Simple;
use KasmVNC::Utils; use KasmVNC::Utils;
our $logger;
sub merge { sub merge {
my @configsToMerge = map { $_->{data} } @_; my @configsToMerge = map { $_->{data} } @_;
my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {}; my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {};
@ -31,7 +33,13 @@ sub load {
failIfConfigNotReadable($self->{filename}); 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 { sub get {

View File

@ -8,9 +8,18 @@ use Data::Dumper;
sub new { sub new {
my ($class, $args) = @_; my ($class, $args) = @_;
my $self = bless { my $self = bless {
level => $args->{level} // "warn"
}, $class; }, $class;
} }
sub debug {
my $self = shift;
return unless ($self->{level} eq "debug");
say { *STDERR } @_;
}
sub warn { sub warn {
my $self = shift; my $self = shift;

View File

@ -1171,6 +1171,7 @@ sub DefineFilePathsAndStuff {
$KasmVNC::Users::vncPasswdBin = $exedir . "kasmvncpasswd"; $KasmVNC::Users::vncPasswdBin = $exedir . "kasmvncpasswd";
$KasmVNC::Users::logger = $logger; $KasmVNC::Users::logger = $logger;
$KasmVNC::Config::logger = $logger;
$vncSystemConfigDir = "/etc/kasmvnc"; $vncSystemConfigDir = "/etc/kasmvnc";
if ($ENV{KASMVNC_DEVELOPMENT}) { if ($ENV{KASMVNC_DEVELOPMENT}) {
@ -2787,5 +2788,6 @@ sub SetAppSettingsFromConfigAndCli {
} }
sub InitLogger { sub InitLogger {
$logger = KasmVNC::Logger->new(); my $debugEnabled = any { $_ eq "-debug" } @ARGV;
$logger = KasmVNC::Logger->new({ level => $debugEnabled ? "debug" : "warn" });
} }