VNC-295 Use sccache to speed up compilation

This commit is contained in:
Dmitry Maksyoma 2026-05-20 09:40:22 +00:00 committed by Matthew McClaskey
parent dd1417229e
commit 28364977dc
55 changed files with 598 additions and 245 deletions

1
.dockerignore Normal file
View file

@ -0,0 +1 @@
builder/build/.sccache

View file

@ -39,11 +39,12 @@ stages:
.prepare_build: &prepare_build
- pwd
- mkdir -p "$GITLAB_SHARED_DIND_DIR" && chmod 777 "$GITLAB_SHARED_DIND_DIR"
- apt-get update && apt-get install -y docker.io
- apt-get update && apt-get install -y docker.io sudo
- echo "$DOCKER_HUB_PASSWORD" | docker login --username $DOCKER_HUB_USERNAME --password-stdin
.prepare_www: &prepare_www
- tar -zxf output/www/kasm_www.tar.gz -C builder/
- touch builder/www
.prepare_artfacts: &prepare_artfacts
- cp -r builder/build/* output/
@ -55,36 +56,52 @@ stages:
.parallel_matrix: &parallel_matrix
matrix:
- DISTRO: 'ubuntu focal'
DISTRO_SLUG: 'ubuntu_focal'
GROUP: 0
- DISTRO: 'ubuntu jammy'
DISTRO_SLUG: 'ubuntu_jammy'
GROUP: 1
- DISTRO: 'ubuntu noble'
DISTRO_SLUG: 'ubuntu_noble'
GROUP: 2
- DISTRO: 'debian bullseye'
DISTRO_SLUG: 'debian_bullseye'
GROUP: 3
- DISTRO: 'debian bookworm'
DISTRO_SLUG: 'debian_bookworm'
GROUP: 4
- DISTRO: 'debian trixie'
DISTRO_SLUG: 'debian_trixie'
GROUP: 5
- DISTRO: 'kali kali-rolling'
DISTRO_SLUG: 'kali_kali-rolling'
GROUP: 6
- DISTRO: 'oracle 8'
DISTRO_SLUG: 'oracle_8'
GROUP: 7
- DISTRO: 'oracle 9'
DISTRO_SLUG: 'oracle_9'
GROUP: 8
- DISTRO: 'opensuse 15'
DISTRO_SLUG: 'opensuse_15'
GROUP: 9
- DISTRO: 'opensuse 16'
DISTRO_SLUG: 'opensuse_16'
GROUP: 10
- DISTRO: 'fedora 42'
DISTRO_SLUG: 'fedora_42'
GROUP: 11
- DISTRO: 'fedora 43'
DISTRO_SLUG: 'fedora_43'
GROUP: 12
- DISTRO: 'alpine 321'
DISTRO_SLUG: 'alpine_321'
GROUP: 13
- DISTRO: 'alpine 322'
DISTRO_SLUG: 'alpine_322'
GROUP: 14
- DISTRO: 'alpine 323'
DISTRO_SLUG: 'alpine_323'
GROUP: 15
default:
@ -126,15 +143,13 @@ functional_test:
build_www:
stage: www
allow_failure: false
image: $DEBIAN_STABLE_IMAGE
tags:
- oci-fixed-amd
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
- builder/build-www
- mkdir -p output/www
- cd builder
- echo $PWD
@ -161,11 +176,16 @@ build_amd64:
after_script:
- *prepare_artfacts
script:
- set -e
- is_build_this_distro "$DISTRO" && builder/build-package $DISTRO
artifacts:
paths:
- output/
cache:
key: "sccache-$CI_RUNNER_EXECUTABLE_ARCH-$CI_COMMIT_REF_SLUG-$DISTRO_SLUG"
paths:
- builder/build/.sccache
policy: pull-push
resource_group: "concurrent_$GROUP"
parallel:
*parallel_matrix
@ -188,6 +208,11 @@ build_arm64:
artifacts:
paths:
- output/
cache:
key: "sccache-$CI_RUNNER_EXECUTABLE_ARCH-$CI_COMMIT_REF_SLUG-$DISTRO_SLUG"
paths:
- builder/build/.sccache
policy: pull-push
resource_group: "concurrent_$GROUP"
parallel:
*parallel_matrix

View file

@ -43,12 +43,6 @@ if(MSVC)
message(FATAL_ERROR "KasmVNC cannot be built with Visual Studio. Please use MinGW")
endif()
if(NOT BUILD_TIMESTAMP)
set(BUILD_TIMESTAMP "")
execute_process(COMMAND "date" "+%Y-%m-%d %H:%M" OUTPUT_VARIABLE BUILD_TIMESTAMP)
string(REGEX REPLACE "\n" "" BUILD_TIMESTAMP ${BUILD_TIMESTAMP})
endif()
# Default to optimised builds instead of debug ones. Our code has no bugs ;)
# (CMake makes it fairly easy to toggle this back to Debug if needed)
if(NOT CMAKE_BUILD_TYPE)
@ -58,8 +52,6 @@ endif()
message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message(STATUS "VERSION = ${VERSION}")
message(STATUS "BUILD_TIMESTAMP = ${BUILD_TIMESTAMP}")
add_definitions(-DBUILD_TIMESTAMP="${BUILD_TIMESTAMP}")
message(STATUS "WWWDIR = ${DATA_DIR}/kasmvnc/www")
add_definitions(-DWWWDIR="${DATA_DIR}/kasmvnc/www")
@ -155,6 +147,8 @@ find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})
# Staticly link libjpeg-turbo
# Add library search paths for custom-built libjpeg-turbo in ~/.local
link_directories("$ENV{HOME}/.local/lib" "$ENV{HOME}/.local/lib64")
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})

View file

@ -3,33 +3,33 @@
set -e
copy_signing_key_to_user_abuild_dir() {
docker run --rm -v $PWD/alpine/.abuild:/abuild --user $L_UID:$L_GID \
docker run --rm -v $PWD/alpine/.abuild:/abuild \
--user "$output_owner_uid:$output_owner_gid" \
$builder_image \
cp /etc/apk/keys/kasmvnc_signing_key.rsa.pub \
/etc/apk/keys/kasmvnc_signing_key.rsa /abuild
}
. builder/os_ver_cli.sh
. builder/scripts/output_owner.sh
cd "$(dirname "$0")/.."
L_UID=$(id -u)
L_GID=$(id -g)
select_consistent_output_owner_uid_and_gid
ABUILD_GID=300
if [ "$L_UID" = 0 ]; then
L_UID=1000
L_GID=1000
fi
builder_image=kasmvnc_apkbuilder_${os}:${os_codename}
docker build -t $builder_image \
--build-arg KASMVNC_ALPINE_PRIVATE_KEY \
--build-arg KASMVNC_ALPINE_PUBLIC_KEY \
--build-arg OUTPUT_OWNER_UID="$output_owner_uid" \
-f builder/dockerfile.${os}_${os_codename}.apk.build .
copy_signing_key_to_user_abuild_dir
source_dir=$(echo $PWD)
docker run --rm -v "$source_dir":/src --user $L_UID:$L_GID \
docker run --rm -v "$source_dir":/src \
--user "$output_owner_uid:$output_owner_gid" \
--group-add $ABUILD_GID \
-e CI \
kasmvnc_apkbuilder_${os}:${os_codename} /bin/bash -c \

View file

@ -4,18 +4,19 @@ set -e
cd "$(dirname "$0")/.."
. builder/os_ver_cli.sh
. builder/scripts/output_owner.sh
L_UID=$(id -u) #Ubuntu already has UID env var, but this should work on all Linix systems
L_GID=$(id -g)
select_consistent_output_owner_uid_and_gid
builder_image=debbuilder_${os}:${os_codename}${build_tag_for_images}
docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
--build-arg L_UID="$L_UID" \
--build-arg OUTPUT_OWNER_UID="$output_owner_uid" \
-t "$builder_image" -f \
builder/dockerfile.${os}_${os_codename}${build_tag}.deb.build .
deb_output_dir=$(cd .. && echo $PWD)
docker run --rm -v "$deb_output_dir":/src -e BUILD_TAG="$build_tag" \
--user "$L_UID:$L_GID" \
--user "$output_owner_uid:$output_owner_gid" \
"$builder_image" /bin/bash -c \
'/src/*/builder/build-deb-inside-docker'

View file

@ -13,14 +13,17 @@ warn_build_tag_not_supported_for_rpm_and_exit() {
cd "$(dirname "$0")/.."
. builder/os_ver_cli.sh
. builder/scripts/output_owner.sh
warn_build_tag_not_supported_for_rpm_and_exit "$build_tag"
docker build -t kasmvnc_rpmbuilder_${os}:${os_codename} -f \
builder/dockerfile.${os}_${os_codename}.rpm.build .
select_consistent_output_owner_uid_and_gid
docker build -t kasmvnc_rpmbuilder_${os}:${os_codename} \
--build-arg OUTPUT_OWNER_UID="$output_owner_uid" \
-f builder/dockerfile.${os}_${os_codename}.rpm.build .
source_dir=$(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 "$source_dir":/src --user $L_UID:$L_GID \
docker run --rm -v "$source_dir":/src \
--user "$output_owner_uid:$output_owner_gid" \
kasmvnc_rpmbuilder_${os}:${os_codename} /bin/bash -c \
'/src/builder/build-rpm-inside-docker'

View file

@ -2,46 +2,46 @@
set -e
build_www_dir() {
local webpacked_www=$PWD/builder/www
local src_www=kasmweb
if [ "$src_www" -nt "$webpacked_www" ]; then
docker build -t kasmweb/www -f builder/dockerfile.www.build .
docker run --rm -v $PWD/builder/www:/build kasmweb/www:latest
fi
build_tarball_builder_image() {
builder_image=kasmvncbuilder:$os_codename${build_tag_for_images}
docker build -t "$builder_image" \
--build-arg OUTPUT_OWNER_UID="$output_owner_uid" \
-f builder/dockerfile.${os}_${os_codename}${build_tag}.build .
}
move_libjpeg_turbo_to_os_specific_dir() {
chown $L_UID:$L_GID $shared_with_docker_dir/${os_codename}/*
mkdir -p $PWD/builder/build/${os_codename}/
mv $shared_with_docker_dir/${os_codename}/libjpeg-turbo*.deb \
$PWD/builder/build/${os_codename}/
create_distro_sccache_dir_under_output_owner() {
sccache_dir_for_distro="$PWD/builder/build/.sccache/user_${output_owner_uid}/${os}_${os_codename}${build_tag}"
as_output_owner mkdir -p "$sccache_dir_for_distro"
}
shared_with_docker_dir=${GITLAB_SHARED_DIND_DIR:-/tmp}
create_build_dir_under_output_owner() {
build_dir="$PWD/builder/build"
as_output_owner mkdir -p "$build_dir"
}
cd "$(dirname "$0")/.."
. builder/os_ver_cli.sh
. builder/scripts/output_owner.sh
build_www_dir
select_consistent_output_owner_uid_and_gid
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 -e BUILD_TAG="$build_tag" \
builder/build-www
build_tarball_builder_image
create_build_dir_under_output_owner
create_distro_sccache_dir_under_output_owner
docker run -v $build_dir:/build \
-v "$sccache_dir_for_distro":/sccache \
-e BUILD_TAG="$build_tag" \
--user "$output_owner_uid":"$output_owner_gid" \
-e KASMVNC_COMMIT_ID="$KASMVNC_COMMIT_ID" \
-e SCCACHE_DIR=/sccache \
--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/"$tarball_name_with_build_tag"
if [ "$build_tag" = "+libjpeg-turbo_latest" ]; then
move_libjpeg_turbo_to_os_specific_dir
if [[ "$tarball_name" != "$tarball_name_with_build_tag" ]]; then
mv "$build_dir/$tarball_name" \
"$build_dir/$tarball_name_with_build_tag"
fi

33
builder/build-www Executable file
View file

@ -0,0 +1,33 @@
#!/bin/bash
set -eo pipefail
build_www_dir() {
select_consistent_output_owner_uid_and_gid
as_output_owner mkdir -p "$built_www"
docker build -t kasmweb/www \
--build-arg OUTPUT_OWNER_UID="$output_owner_uid" \
-f builder/dockerfile.www.build .
docker run --rm -v "$built_www:/build" \
--user "$output_owner_uid":"$output_owner_gid" \
kasmweb/www:latest
}
www_source_not_changed() {
[[ "$src_www" -ot "$built_www" ]]
}
cd "$(dirname "$0")/.."
. builder/scripts/output_owner.sh
src_www=kasmweb
built_www=$PWD/builder/www
if www_source_not_changed; then
echo "Source for www (kasmweb) did not change, doing nothing."
exit
fi
echo "Building www..."
build_www_dir

View file

@ -2,6 +2,11 @@
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -z "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
fi
debian_patches_dir="debian/patches"
is_debian_patches_present() {
@ -38,6 +43,26 @@ EOF
fi
}
enable_sccache_debug_log() {
export SCCACHE_LOG="sccache::server=debug,sccache::compiler=trace,sccache::cache=debug"
export SCCACHE_ERROR_LOG=/tmp/sccache.log
}
setup_sccache() {
export SCCACHE_CACHE_SIZE=160M
export CC="sccache ${CC:-gcc}"
export CXX="sccache ${CXX:-g++}"
}
setup_compilers_to_see_libs_in_dot_local() {
export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig:$HOME/.local/lib64/pkgconfig:$HOME/.local/share/pkgconfig:${PKG_CONFIG_PATH}"
export CPATH="$HOME/.local/include${CPATH:+:CPATH}"
}
ensure_libturbojpeg_links() {
export LDFLAGS="-L$HOME/.local/lib -L$HOME/.local/lib64"
}
# For build-dep to work, the apt sources need to have the source server
#sudo apt-get build-dep xorg-server
@ -48,6 +73,12 @@ EOF
# Ubuntu applies a million patches, but here we use upstream to simplify matters
cd /tmp
setup_sccache
setup_compilers_to_see_libs_in_dot_local
$SCRIPTS_DIR/build-deps.sh
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
XORG_VER=${XORG_VER:-"1.19.6"}
if [[ "${XORG_VER}" == 21* ]]; then
@ -67,8 +98,17 @@ fi
#git checkout dynjpeg
cd /src
ensure_libturbojpeg_links
cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF \
-DENABLE_GNUTLS:BOOL=OFF
-DENABLE_GNUTLS:BOOL=OFF \
-DCMAKE_PREFIX_PATH="$HOME/.local" \
-DCMAKE_LIBRARY_PATH="$HOME/.local/lib;$HOME/.local/lib64" \
-DCMAKE_INCLUDE_PATH="$HOME/.local/include" \
-DCMAKE_EXE_LINKER_FLAGS="-L$HOME/.local/lib -L$HOME/.local/lib64" \
-DCMAKE_SHARED_LINKER_FLAGS="-L$HOME/.local/lib -L$HOME/.local/lib64" \
-DCMAKE_MODULE_LINKER_FLAGS="-L$HOME/.local/lib -L$HOME/.local/lib64"
make -j"$(nproc)"
if [ ! -d unix/xserver/include ]; then
@ -165,6 +205,8 @@ if is_debian; then
apply_debian_patches
fi
sccache --show-stats || true
make servertarball
cp kasmvnc*.tar.gz /build/kasmvnc.${KASMVNC_BUILD_OS}_${KASMVNC_BUILD_OS_CODENAME}.tar.gz

View file

@ -13,7 +13,5 @@ ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/install_alpine_signing_keys
RUN useradd -m docker && echo "docker:docker" | chpasswd
RUN echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -15,6 +15,7 @@ RUN \
ca-certificates \
cmake \
nasm \
sccache \
coreutils \
curl \
eudev-dev \
@ -78,11 +79,10 @@ RUN if [ "$(uname -m)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -13,7 +13,5 @@ ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/install_alpine_signing_keys
RUN useradd -m docker && echo "docker:docker" | chpasswd
RUN echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -78,11 +78,12 @@ RUN if [ "$(uname -m)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
RUN $SCRIPTS_DIR/install_sccache_from_github
COPY --chown=docker:docker . /src/
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -13,7 +13,5 @@ ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/install_alpine_signing_keys
RUN useradd -m docker && echo "docker:docker" | chpasswd
RUN echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -14,6 +14,7 @@ RUN \
bash \
ca-certificates \
nasm \
sccache \
coreutils \
curl \
eudev-dev \
@ -80,11 +81,10 @@ RUN pip install --break-system-packages cmake==3.22.6
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -22,7 +22,7 @@ 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 ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver curl
RUN apt-get update && apt-get -y install ninja-build cmake nasm sccache git libgnutls28-dev vim wget tightvncserver curl
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
libxcursor-dev libavformat-dev libswscale-dev libva-dev
@ -33,11 +33,10 @@ RUN if [ "$(arch)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -31,11 +31,11 @@ RUN CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN $SCRIPTS_DIR/install_sccache_from_github
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -22,7 +22,7 @@ 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 ninja-build cmake nasm git libgnutls28-dev vim wget tightvncserver curl
RUN apt-get update && apt-get -y install ninja-build cmake nasm sccache git libgnutls28-dev vim wget tightvncserver curl
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
libxcursor-dev libavformat-dev libswscale-dev libva-dev
@ -33,11 +33,10 @@ RUN if [ "$(arch)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -25,6 +25,7 @@ RUN \
fop \
gcc \
gcc-c++ \
sccache \
git \
glibc-devel \
libdrm-devel \
@ -80,11 +81,10 @@ RUN \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -10,6 +10,8 @@ RUN dnf install -y dnf-plugins-core
COPY fedora/*.spec /tmp
RUN dnf builddep -y /tmp/*.spec
RUN useradd -m docker && echo "docker:docker" | chpasswd
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -25,6 +25,7 @@ RUN \
fop \
gcc \
gcc-c++ \
sccache \
git \
glibc-devel \
libdrm-devel \
@ -80,11 +81,10 @@ RUN \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -10,6 +10,8 @@ RUN dnf install -y dnf-plugins-core
COPY fedora/*.spec /tmp
RUN dnf builddep -y /tmp/*.spec
RUN useradd -m docker && echo "docker:docker" | chpasswd
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -7,7 +7,7 @@ ENV DEBIAN_FRONTEND noninteractive
ENV CXXFLAGS="-Wno-stringop-overflow"
ENV CFLAGS="-Wno-stringop-overflow"
RUN grep '^deb' /etc/apt/sources.list | sed 's#^deb#deb-src#' >> /etc/apt/sources.list
RUN sed -i 's/Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/kali.sources
RUN apt-get update && \
apt-get -y install sudo
@ -15,12 +15,10 @@ 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 g++ curl ca-certificates && update-ca-certificates
RUN apt-get update && apt-get -y install ninja-build nasm git libgnutls28-dev vim wget tightvncserver
RUN apt-get update && apt-get -y install ninja-build nasm git sccache 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 libavformat-dev libswscale-dev libva-dev libcrypt-dev
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN ARCH=$(arch) && \
CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
if [ "$ARCH" = "x86_64" ]; then \
@ -34,11 +32,12 @@ RUN ARCH=$(arch) && \
(echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
rm cmake.sh
RUN $SCRIPTS_DIR/build-deps.sh
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN useradd -m docker && echo "docker:docker" | chpasswd && usermod -aG sudo docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -18,6 +18,7 @@ RUN zypper install -ny \
font-util \
gcc14 \
gcc14-c++ \
sccache \
giflib-devel \
git \
gzip \
@ -49,9 +50,6 @@ RUN zypper install -ny \
zlib-devel \
libva-devel
RUN groupadd -g 1000 docker && \
useradd -u 1000 -g docker docker
RUN ARCH=$(arch) && \
CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
if [ "$ARCH" = "x86_64" ]; then \
@ -65,14 +63,15 @@ RUN ARCH=$(arch) && \
(echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
rm cmake.sh
RUN ln -s /usr/bin/gcc-14 /usr/local/bin/gcc && ln -s /usr/bin/g++-14 /usr/local/bin/g++
ENV SCRIPTS_DIR=/tmp/scripts
ENV CC=/usr/bin/gcc-14
ENV CXX=/usr/bin/g++-14
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
COPY --chown=docker:docker . /src/
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]

View file

@ -20,7 +20,8 @@ COPY opensuse/kasmvncserver.spec /tmp
RUN zypper -n install $(grep BuildRequires /tmp/*.spec | cut -d' ' -f2 | xargs)
RUN groupadd -g 1000 docker && \
useradd -u 1000 -m -d /home/docker -g docker docker
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -18,6 +18,7 @@ RUN zypper install -ny \
gcc15 \
gcc15-c++ \
cmake \
sccache \
giflib-devel \
git \
gzip \
@ -51,18 +52,14 @@ RUN zypper install -ny \
zlib-devel \
libva-devel
RUN useradd -u 1000 docker && \
usermod -a -G docker docker
RUN ln -s /usr/bin/gcc-15 /usr/local/bin/gcc && ln -s /usr/bin/g++-15 /usr/local/bin/g++
ENV SCRIPTS_DIR=/tmp/scripts
ENV CC=/usr/bin/gcc-15
ENV CXX=/usr/bin/g++-15
ENV PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
COPY --chown=docker:docker . /src/
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]

View file

@ -20,7 +20,8 @@ COPY opensuse/kasmvncserver16.spec /tmp
RUN zypper -n install $(grep BuildRequires /tmp/*.spec | cut -d' ' -f2 | xargs)
RUN useradd -u 1000 -m -d /home/docker docker && \
usermod -a -G docker docker
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -59,11 +59,13 @@ ENV SCRIPTS_DIR=/tmp/scripts
ENV PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:${PKG_CONFIG_PATH:-/opt/rh/gcc-toolset-14/root/usr/lib64/pkgconfig}
COPY builder/scripts $SCRIPTS_DIR
RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh && \
$SCRIPTS_DIR/build-deps.sh && \
useradd -m docker && echo "docker:docker" | chpasswd
RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh
COPY --chown=docker:docker . /src/
RUN $SCRIPTS_DIR/install_sccache_from_github
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]

View file

@ -16,6 +16,8 @@ RUN dnf install -y \
COPY oracle/kasmvncserver.spec /tmp
RUN dnf builddep -y /tmp/*.spec
RUN useradd -m docker && echo "docker:docker" | chpasswd
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -58,11 +58,13 @@ RUN dnf install -y \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh && \
$SCRIPTS_DIR/build-deps.sh && \
useradd -m docker && echo "docker:docker" | chpasswd
RUN echo "source /opt/rh/gcc-toolset-14/enable" > /etc/profile.d/gcc-toolset.sh
COPY --chown=docker:docker . /src/
RUN $SCRIPTS_DIR/install_sccache_from_github
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["bash", "-l", "-c", "/src/builder/build.sh"]

View file

@ -18,6 +18,8 @@ RUN dnf install --nobest -y \
COPY oracle/kasmvncserver9.spec /tmp
RUN useradd -m docker && echo "docker:docker" | chpasswd
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -27,7 +27,9 @@ RUN if [ "$(arch)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN $SCRIPTS_DIR/install_sccache_from_github
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
RUN ARCH=$(arch) && \
CMAKE_URL="https://cmake.org/files/v3.22/cmake-3.22.0" && \
@ -42,9 +44,6 @@ RUN ARCH=$(arch) && \
(echo y; echo n) | bash cmake.sh --prefix=/usr/local --skip-license && \
rm cmake.sh
RUN $SCRIPTS_DIR/build-deps.sh
COPY --chown=$OUTPUT_OWNER_UID . /src/
COPY --chown=docker:docker . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -23,11 +23,11 @@ RUN if [ "$(arch)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN $SCRIPTS_DIR/install_sccache_from_github
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -12,7 +12,7 @@ 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 ninja-build cmake nasm git libgnutls28-dev vim wget curl
RUN apt-get update && apt-get -y install ninja-build cmake nasm sccache git libgnutls28-dev vim wget curl
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev \
libxcursor-dev libavformat-dev libswscale-dev libva-dev
@ -23,11 +23,10 @@ RUN if [ "$(arch)" = "x86_64" ]; then \
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
RUN $SCRIPTS_DIR/build-deps.sh
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=docker:docker . /src/
COPY --chown=$OUTPUT_OWNER_UID . /src/
USER docker
ENTRYPOINT ["/src/builder/build.sh"]

View file

@ -9,11 +9,8 @@ RUN apt-get update && \
COPY ./debian/control /tmp
RUN apt-get update && echo YYY | mk-build-deps --install --remove /tmp/control
ARG L_UID
RUN if [ "$L_UID" -eq 0 ]; then \
useradd -m docker; \
else \
useradd -m docker -u $L_UID;\
fi
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
USER docker
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"

View file

@ -1,12 +1,21 @@
FROM alpine
RUN apk add npm nodejs
RUN apk add bash shadow
COPY kasmweb/ /src/www
COPY builder/build_www.sh /src/
ENV SCRIPTS_DIR=/tmp/scripts
COPY builder/scripts $SCRIPTS_DIR
ARG OUTPUT_OWNER_UID
RUN $SCRIPTS_DIR/add-docker-user "$OUTPUT_OWNER_UID"
COPY --chown=$OUTPUT_OWNER_UID kasmweb/ /src/www
COPY --chown=$OUTPUT_OWNER_UID builder/build-www-inside-docker /src/
WORKDIR /src/www
USER $OUTPUT_OWNER_UID
RUN npm install
ENTRYPOINT [ "/src/build_www.sh" ]
ENTRYPOINT [ "/src/build-www-inside-docker" ]

View file

@ -12,4 +12,5 @@ if [[ -n "$build_tag" ]]; then
fi
os_image="$os:$os_codename"
echo "Building for $os_image"
echo "Distro image: $os_image"
echo

41
builder/scripts/add-docker-user Executable file
View file

@ -0,0 +1,41 @@
#!/bin/bash
set -eo pipefail
output_owner_is_root() {
[ "$output_owner_uid" -eq 0 ]
}
output_owner_user_exists() {
getent passwd "$output_owner_uid" >/dev/null
}
output_owner_non_root_user_exists() {
output_owner_user_exists
}
add_docker_user_with_homedir_rwx_by_output_owner() {
useradd -m docker -u "$output_owner_uid"
echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
}
add_docker_user_with_homedir_that_output_owner_can_compile_in() {
if output_owner_is_root; then
echo >&2 "ERROR: output owner can't be root"
exit 1
fi
if output_owner_non_root_user_exists; then
return
fi
add_docker_user_with_homedir_rwx_by_output_owner
}
output_owner_uid="$1"
if [[ $# -ne 1 ]]; then
echo >&2 "Usage: $(basename "$0") <output_owner_uid>"
exit 1
fi
add_docker_user_with_homedir_that_output_owner_can_compile_in

View file

@ -3,12 +3,15 @@
set -euo pipefail
build_and_install() {
cmake -S . -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DLIBCPUID_ENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -GNinja
cmake -S . -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DLIBCPUID_ENABLE_TESTS=OFF -DBUILD_SHARED_LIBS=OFF \
-DLIBCPUID_BUILD_DRIVERS=OFF -DCMAKE_BUILD_TYPE=Release \
-GNinja -DCMAKE_INSTALL_PREFIX=$HOME/.local
ninja -C build install
}
prepare_source() {
DIR=tbb
DIR=cpuid
cd /tmp
[ -d ./${DIR} ] && rm -rf ./${DIR}
mkdir ${DIR}

View file

@ -14,4 +14,4 @@ echo ">> Building cpuid..."
echo ">> Building fmt..."
"${source_dir}"/build-fmt
echo ">> Building libyuv..."
"${source_dir}"/build-libyuv
"${source_dir}"/build-libyuv

View file

@ -3,7 +3,9 @@
set -euo pipefail
build_and_install() {
cmake -S . -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -GNinja
cmake -S . -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$HOME/.local -GNinja
ninja -C build install
}
@ -23,4 +25,4 @@ prepare_source() {
}
prepare_source
build_and_install
build_and_install

View file

@ -3,7 +3,9 @@
set -euo pipefail
build_and_install() {
cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja .
cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.local \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja \
.
ninja -C build install
}

View file

@ -27,10 +27,10 @@ build_and_install() {
EXTRA_CXXFLAGS=""
fi
cp -r include/ /usr/
cp -r include/ "$HOME/.local/"
make V=1 -f linux.mk CFLAGS="-O2 -fomit-frame-pointer -fPIC" CXXFLAGS="-O2 -fomit-frame-pointer -fPIC $EXTRA_CXXFLAGS"
install -D -m 0644 libyuv.a /usr/lib/libyuv.a
install -D -m 0644 libyuv.a "$HOME/.local/lib/libyuv.a"
}
prepare_source

View file

@ -6,18 +6,12 @@ build_and_install() {
if [ $older_release -eq 1 ]; then
make extra_inc=big_iron.inc work_dir="$PWD"/ tbb_root="$PWD"
if [ -d /usr/lib/x86_64-linux-gnu ]; then
LIBS=lib/x86_64-linux-gnu
elif [ -d /usr/lib/aarch64-linux-gnu ]; then
LIBS=lib/aarch64-linux-gnu
elif [ -d /usr/lib/arm-linux-gnueabihf ]; then
LIBS=lib/arm-linux-gnu
fi
mkdir -p $HOME/.local/lib/pkgconfig
PC_FILE=/usr/${LIBS}/pkgconfig/tbb.pc
echo "prefix=/usr" > "${PC_FILE}"
PC_FILE=$HOME/.local/lib/pkgconfig/tbb.pc
echo "prefix=$HOME/.local" > "${PC_FILE}"
echo "exec_prefix=\${prefix}" >> "${PC_FILE}"
echo "libdir=\${exec_prefix}/lib/${LIBS}" >> "${PC_FILE}"
echo "libdir=\${exec_prefix}/lib/" >> "${PC_FILE}"
echo "includedir=\${prefix}/include" >> "${PC_FILE}"
echo "Name: Threading Building Blocks" >> "${PC_FILE}"
echo "Description: Intel's parallelism library for C++" >> "${PC_FILE}"
@ -26,10 +20,10 @@ build_and_install() {
echo "Libs: -ltbb -latomic" >> "${PC_FILE}"
echo "Cflags: -I\${includedir}" >> "${PC_FILE}"
cp _release/*.a /usr/"${LIBS}"/
cp -r include/* /usr/include/
cp _release/*.a $HOME/.local/lib/
cp -r include/ $HOME/.local/
else
cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local \
cmake -B build -DCMAKE_INSTALL_PREFIX="$HOME/.local" \
-DCMAKE_CXX_FLAGS="-Wno-stringop-overflow" \
-DTBB_TEST=OFF -DBUILD_SHARED_LIBS=OFF -GNinja .
ninja -C build install

View file

@ -21,7 +21,7 @@ prepare_source() {
build_and_install() {
export MAKEFLAGS=-j$(nproc)
CONFIG_FLAGS=( --enable-static --disable-shared --enable-threading )
CONFIG_FLAGS=( --enable-static --disable-shared --enable-threading --prefix="$HOME/.local")
ARCH=$(arch)
if [ "$ARCH" = "x86_64" ]; then
@ -38,4 +38,3 @@ build_and_install() {
prepare_source
build_and_install

View file

@ -0,0 +1,37 @@
#!/bin/bash
set -eo pipefail
detect_ssccache_arch() {
arch="$(arch)"
case $arch in
x86_64)
sccache_arch=x86_64
;;
aarch64)
sccache_arch=aarch64
;;
*)
echo >&2 "Unknown arch: $arch"
return 1
esac
}
fetch_sccache_and_put_into_user_local_bin() {
cd /tmp
detect_ssccache_arch
wget "https://github.com/mozilla/sccache/releases/download/${sccache_version}/sccache-${sccache_version}-$sccache_arch-unknown-linux-musl.tar.gz"
tar -xzf sccache*.tar.gz
mv sccache*/sccache /usr/local/bin/sccache
}
cleanup_download() {
rm -r sccache*
}
sccache_version="v0.14.0"
fetch_sccache_and_put_into_user_local_bin
cleanup_download

View file

@ -0,0 +1,93 @@
#!/bin/bash
as_output_owner() {
sudo -u "#$output_owner_uid" "$@"
}
is_under_sudo() {
[[ -n "$SUDO_UID" ]]
}
is_sudo_invoker_root() {
[[ "$SUDO_UID" -eq 0 ]]
}
is_root() {
[[ "$effective_uid" -eq 0 ]]
}
is_ci() {
[[ -n "$CI" ]]
}
use_effective_uid_and_gid_for_output_owner() {
output_owner_uid="$effective_uid"
output_owner_gid="$effective_gid"
}
use_uid_and_gid_of_sudo_invoker_for_output_owner() {
output_owner_uid="$SUDO_UID"
output_owner_gid="$SUDO_GID"
}
use_first_non_system_uid_and_gid_for_output_owner() {
output_owner_uid=1000
output_owner_gid=1000
if host_output_owner_user_exists; then
return
fi
create_host_output_owner_user_and_group
}
host_output_owner_user_exists() {
getent passwd "$output_owner_uid" >/dev/null
}
create_host_output_owner_user_and_group() {
groupadd -g "$output_owner_gid" build
useradd -m -u "$output_owner_uid" -g "$output_owner_gid" build
}
fail_if_sudo_invoker_is_root() {
if ! is_sudo_invoker_root; then
return
fi
echo >&2 "ERROR: sudo invoker is root. Please call sudo from a non-root user."
exit 1
}
use_non_root_uid_and_gid_for_output_owner_or_fail() {
if is_ci; then
use_first_non_system_uid_and_gid_for_output_owner
return
fi
if is_under_sudo; then
fail_if_sudo_invoker_is_root
use_uid_and_gid_of_sudo_invoker_for_output_owner
return
fi
fail_if_there_is_no_way_to_use_non_root
}
fail_if_there_is_no_way_to_use_non_root() {
echo >&2 "ERROR: please don't run this script as root, use sudo if needed."
exit 1
}
select_consistent_output_owner_uid_and_gid() {
if ! is_root; then
use_effective_uid_and_gid_for_output_owner
return
fi
use_non_root_uid_and_gid_for_output_owner_or_fail
}
effective_uid="$(id -u)"
effective_gid="$(id -g)"

94
builder/test/test-build-tarball Executable file
View file

@ -0,0 +1,94 @@
#!/bin/bash
set -eo pipefail
create_fresh_test_env() {
test_env_dir=$(mktemp -d /tmp/kasmvnc-test.XXXXXXX)
test_env_dir=$(realpath "$test_env_dir")
rsync -av --exclude=builder/build --exclude=builder/www "$PWD" "$test_env_dir"
}
expect_dir_not_to_be_owned_by_root() {
local dir="$1"
local uid_and_gid_of_dir
uid_and_gid_of_dir=$(stat -c "%u %g" "$dir")
[[ "$uid_and_gid_of_dir" != "0 0" ]] || error "Directory $dir is owned by root"
}
error() {
local message="$1"
echo >&2 -e "ERROR: $message"
exit 1
}
setup() {
project_dir="$PWD"
create_fresh_test_env
cd "$test_env_dir/"*
}
cleanup() {
cd "$project_dir"
case "$test_env_dir" in
/tmp/*)
rm -rf -- "$test_env_dir"
;;
*)
echo "Refusing to remove unsafe test env dir: $test_env_dir" >&2
exit 1
;;
esac
}
expect_build_dirs_not_to_be_owned_by_root() {
expect_dir_not_to_be_owned_by_root "$build_dir"
expect_dir_not_to_be_owned_by_root "$www_dir"
expect_dir_not_to_be_owned_by_root "$sccache_dir"
}
test_build_dirs_dont_exist() {
setup
[[ ! -d "$build_dir" ]] || error "$build_dir exists in fresh env"
[[ ! -d "$www_dir" ]] || error "$www_dir exists in fresh env"
[[ ! -d "$sccache_dir" ]] || error "$sccache_dir exists in fresh env"
cleanup
}
test_compilation_produces_build_dirs_not_owned_by_root() {
setup
./builder/build-tarball debian trixie
expect_build_dirs_not_to_be_owned_by_root
cleanup
}
test_sudo_compilation_produces_build_dirs_not_owned_by_root() {
setup
sudo ./builder/build-tarball debian trixie
expect_build_dirs_not_to_be_owned_by_root
cleanup
}
trap cleanup EXIT
build_dir="./builder/build"
www_dir="./builder/www"
sccache_dir="./builder/build/.sccache"
test_build_dirs_dont_exist
test_sudo_compilation_produces_build_dirs_not_owned_by_root
test_compilation_produces_build_dirs_not_owned_by_root
echo
echo "All tests green"