diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f360ce6..607cd0e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -263,6 +263,42 @@ build_centos7: paths: - output/ +build_oracle_8: + stage: build + allow_failure: true + before_script: + - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package oracle 8; + only: + variables: + - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME + artifacts: + paths: + - output/ + +build_oracle_8_arm: + stage: build + allow_failure: true + tags: + - arm + before_script: + - *prepare_build + - *prepare_www + after_script: + - *prepare_artfacts + script: + - bash builder/build-package oracle 8; + only: + variables: + - $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME + artifacts: + paths: + - output/ + upload: stage: upload image: ubuntu:focal diff --git a/builder/build-rpm-inside-docker b/builder/build-rpm-inside-docker index 5f51cd1..7839dba 100755 --- a/builder/build-rpm-inside-docker +++ b/builder/build-rpm-inside-docker @@ -8,7 +8,7 @@ prepare_build_env() { } copy_spec_and_tar_with_binaries() { - cp /src/centos/kasmvncserver.spec ~/rpmbuild/SPECS/ + cp /tmp/kasmvncserver.spec ~/rpmbuild/SPECS/ cp /src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \ ~/rpmbuild/SOURCES/ } @@ -20,8 +20,13 @@ copy_rpm_to_build_dir() { cd "$(dirname "$0")/.." -os=$(lsb_release -is | tr '[:upper:]' '[:lower:]') -os_codename=$(lsb_release -cs | tr '[:upper:]' '[:lower:]') +if [ -z ${KASMVNC_BUILD_OS_CODENAME+x} ]; then + os=$(lsb_release -is | tr '[:upper:]' '[:lower:]') + os_codename=$(lsb_release -cs | tr '[:upper:]' '[:lower:]') +else + os=${KASMVNC_BUILD_OS} + os_codename=${KASMVNC_BUILD_OS_CODENAME} +fi os_dir="build/${os}_${os_codename}" prepare_build_env diff --git a/builder/dockerfile.oracle_8.barebones.rpm.test b/builder/dockerfile.oracle_8.barebones.rpm.test new file mode 100644 index 0000000..e04170e --- /dev/null +++ b/builder/dockerfile.oracle_8.barebones.rpm.test @@ -0,0 +1,20 @@ +FROM oraclelinux:8 + +RUN dnf install -y \ + less \ + redhat-lsb-core \ + vim \ + xterm + +ARG KASMVNC_PACKAGE_DIR +COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp +RUN dnf localinstall -y /tmp/*.rpm + +RUN useradd -m foo + +USER foo:kasmvnc-cert + +RUN mkdir ~/.vnc && echo '/usr/bin/xterm &' >> ~/.vnc/xstartup && \ + chmod +x ~/.vnc/xstartup + +ENTRYPOINT bash -c "echo -e \"$VNC_PW\n$VNC_PW\n\" | kasmvncpasswd -w -u \"$VNC_USER\" && vncserver :1 -interface 0.0.0.0 && vncserver -kill :1 && vncserver :1 -depth 24 -geometry 1280x1050 -websocketPort 8443 -cert /etc/pki/tls/private/kasmvnc.pem -sslOnly -FrameRate=24 -interface 0.0.0.0 -httpd /usr/share/kasmvnc/www && tail -f $HOME/.vnc/*.log " diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build new file mode 100644 index 0000000..8baf9e4 --- /dev/null +++ b/builder/dockerfile.oracle_8.build @@ -0,0 +1,58 @@ +FROM oraclelinux:8 + +ENV KASMVNC_BUILD_OS oracle +ENV KASMVNC_BUILD_OS_CODENAME 8 +ENV XORG_VER 1.20.10 + +# Install from stock repos +RUN dnf install -y \ + bzip2-devel \ + ca-certificates \ + cmake \ + dnf-plugins-core \ + gcc \ + gcc-c++ \ + git \ + gnutls-devel \ + libjpeg-turbo-devel \ + libpng-devel \ + libtiff-devel \ + make \ + mesa-dri-drivers \ + openssl-devel \ + openssl-devel \ + patch \ + tigervnc-server \ + wget \ + xorg-x11-font-utils \ + zlib-devel + +# Enable additional repos (epel, powertools, and fusion) +RUN dnf config-manager --set-enabled ol8_codeready_builder +RUN dnf install -y oracle-epel-release-el8 +RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm + +# Install from new repos +RUN dnf install -y \ + ffmpeg-devel \ + giflib-devel \ + lbzip2 \ + libXfont2-devel \ + libxkbfile-devel \ + xorg-x11-server-devel \ + xorg-x11-xkb-utils-devel \ + xorg-x11-xtrans-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 + +RUN useradd -m docker && echo "docker:docker" | chpasswd + +COPY --chown=docker:docker . /src/ + +USER docker +ENTRYPOINT ["/src/builder/build.sh"] diff --git a/builder/dockerfile.oracle_8.rpm.build b/builder/dockerfile.oracle_8.rpm.build new file mode 100644 index 0000000..edc637d --- /dev/null +++ b/builder/dockerfile.oracle_8.rpm.build @@ -0,0 +1,21 @@ +FROM oraclelinux:8 + +ENV KASMVNC_BUILD_OS oracle +ENV KASMVNC_BUILD_OS_CODENAME 8 + +RUN dnf install -y \ + gpg* \ + less \ + redhat-lsb-core \ + rng-tools \ + rpm* \ + rpmlint \ + tree \ + vim + +COPY oracle/*.spec /tmp +RUN dnf builddep -y /tmp/*.spec + +RUN useradd -m docker && echo "docker:docker" | chpasswd + +USER docker diff --git a/oracle/kasmvncserver.spec b/oracle/kasmvncserver.spec new file mode 100644 index 0000000..ae67ac8 --- /dev/null +++ b/oracle/kasmvncserver.spec @@ -0,0 +1,105 @@ +Name: kasmvncserver +Version: 0.9.3~beta +Release: 1%{?dist} +Summary: VNC server accessible from a web browser + +License: GPLv2+ +URL: https://github.com/kasmtech/KasmVNC + +BuildRequires: rsync +Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl +Conflicts: tigervnc-server, tigervnc-server-minimal + +%description +VNC stands for Virtual Network Computing. It is, in essence, a remote +display system which allows you to view a computing `desktop' environment +not only on the machine where it is running, but from anywhere on the +Internet and from a wide variety of machine architectures. + +KasmVNC has different goals than TigerVNC: + +Web-based - KasmVNC is designed to provide a web accessible remote desktop. +It comes with a web server and web-socket server built in. There is no need to +install other components. Simply run and navigate to your desktop's URL on the +port you specify. While you can still tun on the legacy VNC port, it is +disabled by default. + +Security - KasmVNC defaults to HTTPS and allows for HTTP Basic Auth. VNC +Password authentication is limited by specification to 8 characters and is not +sufficient for use on an internet accessible remote desktop. Our goal is to +create a by default secure, web based experience. + +Simplicity - KasmVNC aims at being simple to deploy and configure. + +%prep + +%install +rm -rf $RPM_BUILD_ROOT + +TARGET_OS=$KASMVNC_BUILD_OS +TARGET_OS_CODENAME=$KASMVNC_BUILD_OS_CODENAME +TARBALL=$RPM_SOURCE_DIR/kasmvnc.${TARGET_OS}_${TARGET_OS_CODENAME}.tar.gz +TAR_DATA=$(mktemp -d) +tar -xzf "$TARBALL" -C "$TAR_DATA" + +SRC=$TAR_DATA/usr/local +SRC_BIN=$SRC/bin +DESTDIR=$RPM_BUILD_ROOT +DST_MAN=$DESTDIR/usr/share/man/man1 + +mkdir -p $DESTDIR/usr/bin $DESTDIR/usr/share/man/man1 \ + $DESTDIR/usr/share/doc/kasmvncserver +cp $SRC_BIN/Xvnc $DESTDIR/usr/bin; +cp $SRC_BIN/vncserver $DESTDIR/usr/bin; +cp $SRC_BIN/vncconfig $DESTDIR/usr/bin; +cp $SRC_BIN/kasmvncpasswd $DESTDIR/usr/bin; +cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd; +cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/ +rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \ + --exclude www/utils/ --exclude .eslintrc \ + $SRC/share/kasmvnc $DESTDIR/usr/share +cp $SRC/man/man1/Xvnc.1 $DESTDIR/usr/share/man/man1/; +cp $SRC/share/man/man1/vncserver.1 $DST_MAN; +cp $SRC/share/man/man1/vncconfig.1 $DST_MAN; +cp $SRC/share/man/man1/vncpasswd.1 $DST_MAN; +cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1; + +%files +/usr/bin/* +/usr/share/man/man1/* +/usr/share/kasmvnc/www + +%license /usr/share/doc/kasmvncserver/LICENSE.TXT +%doc /usr/share/doc/kasmvncserver/README.md + +%changelog +* Tue Mar 22 2022 KasmTech - 0.9.3~beta-1 +* Fri Feb 12 2021 KasmTech - 0.9.1~beta-1 +- Initial release of the rpm package. + +%post + kasmvnc_group="kasmvnc-cert" + + create_kasmvnc_group() { + if ! getent group "$kasmvnc_group" >/dev/null; then + groupadd --system "$kasmvnc_group" + fi + } + + make_self_signed_certificate() { + local cert_file=/etc/pki/tls/private/kasmvnc.pem + [ -f "$cert_file" ] && return 0 + + openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ + -keyout "$cert_file" \ + -out "$cert_file" -subj \ + "/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none" + chgrp "$kasmvnc_group" "$cert_file" + chmod 640 "$cert_file" + } + + create_kasmvnc_group + make_self_signed_certificate + +%postun + rm -f /etc/pki/tls/private/kasmvnc.pem