diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 771a4ae..ed6a950 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,25 +8,61 @@ variables: GIT_FETCH_EXTRA_FLAGS: --tags stages: + - www - build - upload .prepare_build: &prepare_build - - ls -l - pwd - apk add bash - mkdir -p "$GITLAB_SHARED_DIND_DIR" && chmod 777 "$GITLAB_SHARED_DIND_DIR" +.prepare_www: &prepare_www + - tar -zxf output/www/kasm_www.tar.gz -C builder/ + .prepare_artfacts: &prepare_artfacts - - mkdir output - cp -r builder/build/* output/ - rm output/*.tar.gz +build_www: + stage: www + allow_failure: false + before_script: + - *prepare_build + script: + - webpacked_www=$PWD/builder/www + - src_www=kasmweb + - docker build -t kasmweb/www -f builder/dockerfile.www.build . + - docker run --rm -v $PWD/builder/www:/build kasmweb/www:latest + - mkdir -p output/www + - cd builder + - tar -zcvf ../output/www/kasm_www.tar.gz www + artifacts: + paths: + - output/ + build_ubuntu_bionic: stage: build allow_failure: true before_script: - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package ubuntu bionic + artifacts: + paths: + - output/ + +build_ubuntu_bionic_arm: + stage: build + allow_failure: false + tags: + - arm + before_script: + - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -40,6 +76,7 @@ build_ubuntu_bionic_libjpeg_turbo: allow_failure: false before_script: - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -53,6 +90,23 @@ build_ubuntu_focal: allow_failure: true before_script: - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package ubuntu focal; + artifacts: + paths: + - output/ + +build_ubuntu_focal_arm: + stage: build + allow_failure: true + tags: + - arm + before_script: + - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -66,6 +120,23 @@ build_debian_buster: allow_failure: true before_script: - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package debian buster; + artifacts: + paths: + - output/ + +build_debian_buster_arm: + stage: build + allow_failure: true + tags: + - arm + before_script: + - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -79,6 +150,23 @@ build_debian_bullseye: allow_failure: true before_script: - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package debian bullseye; + artifacts: + paths: + - output/ + +build_debian_bullseye_arm: + stage: build + allow_failure: true + tags: + - arm + before_script: + - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -92,6 +180,7 @@ build_kali_rolling: allow_failure: true before_script: - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -105,6 +194,7 @@ build_centos7: allow_failure: true before_script: - *prepare_build + - *prepare_www after_script: - *prepare_artfacts script: @@ -127,4 +217,5 @@ upload: echo; echo "File to upload $upload_filename"; upload_to_s3 "$package" "$upload_filename"; + curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=$upload_filename&target_url=${S3_URL}"; done diff --git a/builder/README.md b/builder/README.md index acae94e..9d59373 100644 --- a/builder/README.md +++ b/builder/README.md @@ -90,3 +90,33 @@ bash -c ' prepare_upload_filename "bionic/kasmvncserver_0.9.1~beta-1+libjpeg-turbo-latest_amd64.deb"; echo $upload_filename;' ``` + +# ARM + +KasmVNC is supported on ARM, however, the build process needs to be broken into two parts with one occuring on a x64 system and the other on an ARM system. All our testing and official builds are done on AWS Graviton instances. + +### Build www code on x86 System +The www code is webpacked for performance and thus requires building. There are NPM packages, phantomjs, which do not have an ARM build. Therefore, this must be built on x86 and then copied over to the ARM system for final packaging. + +``` +cd ~/KasmVNC +mkdir builder/www +sudo docker build -t kasmweb/www -f builder/dockerfile.www.build . +sudo docker run --rm -v $PWD/builder/www:/build kasmweb/www:latest +cd builder +tar -zcvf /tmp/kasm_www.tar.gz www +``` + +Now transfer ```kasm_www.tar.gz``` to the ARM system. + +### Build KasmVNC ARM +These instructions assume KasmVNC has been cloned at $HOME and ```kasm_www.tar.gz``` has been placed at $HOME as well, adjust for your environment. + +``` +cd ~ +tar -zxf kasm_www.tar.gz -C KasmVNC/builder/ +cd KasmVNC +sudo builder/build-package ubuntu bionic +``` +The resulting deb package can be found under ~/KasmVNC/builder/build/bionic +Replace ```bionic``` with ```focal``` to build for Ubuntu 20.04LTS. At this time, only Ubuntu Bionic has been tested, however, other Debian based builds we support should also work. diff --git a/builder/build.sh b/builder/build.sh index 4192f36..9db927c 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -30,16 +30,19 @@ sed -i -e '/find_package(FLTK/s@^@#@' \ -e '/add_subdirectory(tests/s@^@#@' \ CMakeLists.txt -cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . +cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF make -j5 -tar -C unix/xserver -xvf /tmp/xorg-server-${XORG_VER}.tar.bz2 --strip-components=1 +tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.bz2 --strip-components=1 cd unix/xserver patch -Np1 -i ../xserver${XORG_PATCH}.patch -if [[ $XORG_VER =~ ^1\.20\..*$ ]]; then - patch -Np1 -i ../xserver120.7.patch -fi +case "$XORG_VER" in + 1.20.*) + if [ -f ../xserver120.7.patch ]; then + patch -Np1 -i ../xserver120.7.patch + fi ;; +esac autoreconf -i # Configuring Xorg is long and has many distro-specific paths. @@ -72,6 +75,8 @@ mkdir lib cd lib if [ -d /usr/lib/x86_64-linux-gnu/dri ]; then ln -s /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 else ln -s /usr/lib64/dri dri fi diff --git a/builder/dockerfile.centos_core.build b/builder/dockerfile.centos_core.build index c277e1a..a94ee76 100644 --- a/builder/dockerfile.centos_core.build +++ b/builder/dockerfile.centos_core.build @@ -16,7 +16,7 @@ RUN yum install -y mesa-dri-drivers # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.debian_bullseye.build b/builder/dockerfile.debian_bullseye.build index 0a8428e..707facd 100644 --- a/builder/dockerfile.debian_bullseye.build +++ b/builder/dockerfile.debian_bullseye.build @@ -17,7 +17,7 @@ RUN apt-get update && apt-get -y install libjpeg-dev libpng-dev libtiff-dev libg # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.debian_buster.build b/builder/dockerfile.debian_buster.build index a47b6fe..569cc2f 100644 --- a/builder/dockerfile.debian_buster.build +++ b/builder/dockerfile.debian_buster.build @@ -17,7 +17,7 @@ RUN apt-get update && apt-get -y install libjpeg-dev libpng-dev libtiff-dev libg # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.fedora_thirtythree.build b/builder/dockerfile.fedora_thirtythree.build index 8dc4b29..537ab6b 100644 --- a/builder/dockerfile.fedora_thirtythree.build +++ b/builder/dockerfile.fedora_thirtythree.build @@ -24,7 +24,7 @@ RUN dnf install -y bzip2 redhat-lsb-core # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.kali_kali-rolling.build b/builder/dockerfile.kali_kali-rolling.build index 9705e42..05e5ebb 100644 --- a/builder/dockerfile.kali_kali-rolling.build +++ b/builder/dockerfile.kali_kali-rolling.build @@ -17,7 +17,7 @@ RUN apt-get update && apt-get -y install libjpeg-dev libpng-dev libtiff-dev libg # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build index 7f6ca1d..12482e6 100644 --- a/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build +++ b/builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build @@ -20,7 +20,7 @@ RUN export MAKEFLAGS=-j`nproc`; cd libjpeg-turbo && cmake -DCMAKE_INSTALL_PREFIX # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.ubuntu_bionic.build b/builder/dockerfile.ubuntu_bionic.build index d95bd02..5584fe2 100644 --- a/builder/dockerfile.ubuntu_bionic.build +++ b/builder/dockerfile.ubuntu_bionic.build @@ -15,7 +15,7 @@ RUN apt-get update && apt-get -y install libjpeg-dev libpng-dev libtiff-dev libg # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/builder/dockerfile.ubuntu_focal.build b/builder/dockerfile.ubuntu_focal.build index d0562d1..fb3f800 100644 --- a/builder/dockerfile.ubuntu_focal.build +++ b/builder/dockerfile.ubuntu_focal.build @@ -17,7 +17,7 @@ RUN apt-get update && apt-get -y install libjpeg-dev libpng-dev libtiff-dev libg # 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 && tar -xzf /tmp/libwebp-* RUN cd /tmp/libwebp-1.0.2 && \ ./configure --enable-static --disable-shared && \ make && make install diff --git a/debian/control b/debian/control index 623d913..7ead94c 100644 --- a/debian/control +++ b/debian/control @@ -3,14 +3,14 @@ Section: x11 Priority: optional Maintainer: Kasm Technologies LLC Build-Depends: debhelper (>= 11), rsync, libjpeg-dev, libjpeg-dev, libpng-dev, - libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6 + libtiff-dev, libgif-dev, libavcodec-dev, libssl-dev, libgl1, libxfont2, libsm6, libunwind8 Standards-Version: 4.1.3 Homepage: https://github.com/kasmtech/KasmVNC #Vcs-Browser: https://salsa.debian.org/debian/kasmvnc #Vcs-Git: https://salsa.debian.org/debian/kasmvnc.git Package: kasmvncserver -Architecture: amd64 +Architecture: amd64 arm64 Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ssl-cert, xauth, x11-xkb-utils, xkb-data, procps Provides: vnc-server