diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index e052dcf..0000000 --- a/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -builder/build diff --git a/builder/build-deb b/builder/build-deb index 73751ef..f790123 100755 --- a/builder/build-deb +++ b/builder/build-deb @@ -5,12 +5,15 @@ set -e cd "$(dirname "$0")/.." . builder/os_ver_cli.sh -docker build -t debbuilder_${os}:${os_codename} -f \ - builder/dockerfile.${os}_${os_codename}.deb.build . +builder_image=debbuilder_${os}:${os_codename}${build_tag_for_images} +docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \ + -t "$builder_image" -f \ + builder/dockerfile.${os}_${os_codename}${build_tag}.deb.build . deb_output_dir=$(cd .. && echo $PWD) L_UID=$(id -u) #Ubuntu already has UID env var, but this should work on all Linix systems L_GID=$(id -g) -docker run --rm -v "$deb_output_dir":/src --user $L_UID:$L_GID \ - debbuilder_${os}:${os_codename} /bin/bash -c \ +docker run --rm -v "$deb_output_dir":/src -e BUILD_TAG="$build_tag" \ + --user "$L_UID:$L_GID" \ + "$builder_image" /bin/bash -c \ '/src/*/builder/build-deb-inside-docker' diff --git a/builder/build-deb-inside-docker b/builder/build-deb-inside-docker index faca5d0..9918cec 100755 --- a/builder/build-deb-inside-docker +++ b/builder/build-deb-inside-docker @@ -8,6 +8,11 @@ os=$(lsb_release -is | tr '[:upper:]' '[:lower:]') os_codename=$(lsb_release -cs) os_dir="builder/build/${os_codename}" +if [ "$BUILD_TAG" = "+libjpeg-turbo_latest" ]; then + echo 'libjpeg 62 libjpeg-turbo (>= 2.1.1)' > debian/shlibs.local + trap 'rm -f debian/shlibs.local' EXIT +fi + dpkg-buildpackage -us -uc -b mkdir -p "$os_dir" cp ../*.deb "$os_dir" diff --git a/builder/build-package b/builder/build-package index a21bf01..e89df96 100755 --- a/builder/build-package +++ b/builder/build-package @@ -4,6 +4,7 @@ set -e os="$1" codename="$2" +build_tag="$3" detect_package_format() { package_format=rpm @@ -15,5 +16,5 @@ detect_package_format() { cd "$(dirname "$0")/.." detect_package_format -builder/build-tarball "$os" "$codename" -builder/build-${package_format} "$os" "$codename" +builder/build-tarball "$os" "$codename" "$build_tag" +builder/build-${package_format} "$os" "$codename" "$build_tag" diff --git a/builder/build-tarball b/builder/build-tarball index 3cf9d2f..41b4375 100755 --- a/builder/build-tarball +++ b/builder/build-tarball @@ -19,13 +19,23 @@ cd "$(dirname "$0")/.." build_www_dir -docker build -t kasmvncbuilder:$os_codename \ - -f builder/dockerfile.${os}_${os_codename}.build . +builder_image=kasmvncbuilder:$os_codename${build_tag_for_images} +docker build -t "$builder_image" \ + -f builder/dockerfile.${os}_${os_codename}${build_tag}.build . mkdir -p builder/build -docker run -v $shared_with_docker_dir:/build --rm kasmvncbuilder:$os_codename +docker run -v $shared_with_docker_dir:/build -e BUILD_TAG="$build_tag" \ + --rm "$builder_image" L_GID=$(id -g) L_UID=$(id -u) tarball_name="kasmvnc.${os}_${os_codename}.tar.gz" +tarball_name_with_build_tag="kasmvnc.${os}_${os_codename}${build_tag}.tar.gz" chown $L_UID:$L_GID $shared_with_docker_dir/$tarball_name -mv $shared_with_docker_dir/$tarball_name $PWD/builder/build/ +mv $shared_with_docker_dir/$tarball_name \ + $PWD/builder/build/"$tarball_name_with_build_tag" + +if [ "$build_tag" = "+libjpeg-turbo_latest" ]; then + chown $L_UID:$L_GID $shared_with_docker_dir/${os_codename}/* + mv $shared_with_docker_dir/${os_codename}/*.deb \ + $PWD/builder/build/${os_codename}/ +fi diff --git a/builder/build.sh b/builder/build.sh index 75794db..4192f36 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -84,3 +84,7 @@ fi make servertarball cp kasmvnc*.tar.gz /build/kasmvnc.${KASMVNC_BUILD_OS}_${KASMVNC_BUILD_OS_CODENAME}.tar.gz +if [ "$BUILD_TAG" = "+libjpeg-turbo_latest" ]; then + mkdir -p /build/${KASMVNC_BUILD_OS_CODENAME}/ + cp /libjpeg-turbo/libjpeg*.deb /build/${KASMVNC_BUILD_OS_CODENAME}/ +fi diff --git a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build new file mode 100644 index 0000000..7f6ca1d --- /dev/null +++ b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build @@ -0,0 +1,39 @@ +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 + +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 -xzvf /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 new file mode 100644 index 0000000..91104bb --- /dev/null +++ b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.build @@ -0,0 +1,16 @@ +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" + +USER 1000 diff --git a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test new file mode 100644 index 0000000..ff7377f --- /dev/null +++ b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.deb.test @@ -0,0 +1,57 @@ +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 startup/ $STARTUPDIR + +### START CUSTOM STUFF #### + +ARG KASMVNC_PACKAGE_DIR +COPY $KASMVNC_PACKAGE_DIR/libjpeg-turbo_*.deb /tmp +RUN apt-get install /tmp/libjpeg-turbo*deb + +COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp +RUN dpkg -i /tmp/*.deb; apt-get -yf install + +### END CUSTOM STUFF ### + +RUN chown -R 1000:0 $HOME +USER 1000:ssl-cert +WORKDIR $HOME + +ENTRYPOINT [ "/dockerstartup/vnc_startup.sh" ] diff --git a/builder/os_ver_cli.sh b/builder/os_ver_cli.sh index e1e230f..846f085 100644 --- a/builder/os_ver_cli.sh +++ b/builder/os_ver_cli.sh @@ -3,6 +3,10 @@ default_os_codename=bionic os=${1:-$default_os} os_codename=${2:-$default_os_codename} +build_tag="${3:-}" +if [[ -n "$build_tag" ]]; then + build_tag_for_images="_${build_tag#+}" +fi os_image="$os:$os_codename" echo "Building for $os_image" diff --git a/builder/test-deb b/builder/test-deb index 9114a3e..389c576 100755 --- a/builder/test-deb +++ b/builder/test-deb @@ -5,10 +5,11 @@ set -e cd "$(dirname "$0")" . ./os_ver_cli.sh +tester_image=kasmvnctester_${os}:$os_codename${build_tag_for_images} docker build --build-arg KASMVNC_PACKAGE_DIR="build/${os_codename}" \ - -t kasmvnctester_${os}:$os_codename \ - -f dockerfile.${os}_${os_codename}.deb.test . + -t "$tester_image" \ + -f dockerfile.${os}_${os_codename}${build_tag}.deb.test . docker run -it -p 443:8443 --rm \ -e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \ -e "VNC_USER=foo" -e "VNC_PW=foobar" \ - kasmvnctester_${os}:$os_codename + "$tester_image" diff --git a/debian/Makefile.to_fakebuild_tar_package b/debian/Makefile.to_fakebuild_tar_package index dd097af..4a0938d 100644 --- a/debian/Makefile.to_fakebuild_tar_package +++ b/debian/Makefile.to_fakebuild_tar_package @@ -1,7 +1,7 @@ TARGET_OS := $(shell lsb_release -is | tr '[:upper:]' '[:lower:]') TARGET_OS_CODENAME := $(shell lsb_release -cs | tr '[:upper:]' '[:lower:]') TARBALL_DIR := builder/build -TARBALL := $(TARBALL_DIR)/kasmvnc.$(TARGET_OS)_$(TARGET_OS_CODENAME).tar.gz +TARBALL := $(TARBALL_DIR)/kasmvnc.$(TARGET_OS)_$(TARGET_OS_CODENAME)$(BUILD_TAG).tar.gz TAR_DATA := $(shell mktemp -d) SRC := $(TAR_DATA)/usr/local SRC_BIN := $(SRC)/bin