Compare commits
2 Commits
v1.2.1
...
release/1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2771a09f8d | ||
|
|
8285ea812d |
@@ -89,26 +89,3 @@ detect_revision() {
|
||||
|
||||
REVISION=$(echo "$package" | sed "s/_${arch}.\+//" | sed 's/.\++//')
|
||||
}
|
||||
|
||||
make_index_html() {
|
||||
local body=""
|
||||
local bname
|
||||
|
||||
for f in "$@"; do
|
||||
bname=$(basename "$f")
|
||||
body="${body}<a href=/$f>$bname</a><br>"
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
<!doctype html>
|
||||
<html lang=en>
|
||||
<head>
|
||||
<meta charset=utf-8>
|
||||
<title>KasmVNC preview build</title>
|
||||
</head>
|
||||
<body>
|
||||
$body
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
}
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
27
.github/ISSUE_TEMPLATE/installation-issue.md
vendored
27
.github/ISSUE_TEMPLATE/installation-issue.md
vendored
@@ -1,27 +0,0 @@
|
||||
---
|
||||
name: Installation Issue
|
||||
about: Create a report about an installation issue
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the issue is.
|
||||
|
||||
**System Description**
|
||||
Provide the output of
|
||||
```bash
|
||||
cat /etc/os-release
|
||||
uname -a
|
||||
```
|
||||
|
||||
**KasmVNC Details**
|
||||
Provide the filename of the package you installed KasmVNC with. The filename includes important details like the OS, architecture, and commit sha.
|
||||
|
||||
**Installation Details**
|
||||
Provide the commands used to install the KasmVNC package and the output of those commands.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -1,46 +0,0 @@
|
||||
---
|
||||
name: Report a bug or issue with KasmVNC
|
||||
about: Create a bug/issue report on KasmVNC
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the issue is.
|
||||
|
||||
**System Description**
|
||||
Provide the output of
|
||||
```bash
|
||||
cat /etc/os-release
|
||||
uname -a
|
||||
```
|
||||
|
||||
**KasmVNC Details**
|
||||
Provide the filename of the package you installed KasmVNC with. The filename includes important details like the OS, architecture, and commit sha.
|
||||
|
||||
Provide the output of this command.
|
||||
```bash
|
||||
Xvnc -version
|
||||
```
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior (for non-installation issues):
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Browser**
|
||||
If this is a problem with the KasmVNC client, provide details about the browser you are accessing KasmVNC from.
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. Windows 11]
|
||||
- Browser [e.g. chrome, safari, edge]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
293
.gitlab-ci.yml
293
.gitlab-ci.yml
@@ -6,17 +6,11 @@ variables:
|
||||
KASMVNC_COMMIT_ID: $CI_COMMIT_SHA
|
||||
GITLAB_SHARED_DIND_DIR: /builds/$CI_PROJECT_PATH/shared
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
GIT_FETCH_EXTRA_FLAGS: --tags --force
|
||||
GIT_FETCH_EXTRA_FLAGS: --tags
|
||||
# E.g. BUILD_JOBS: build_debian_buster,build_ubuntu_bionic. This will include
|
||||
# arm builds, because build_debian_buster_arm matches build_debian_buster.
|
||||
# "BUILD_JOBS: none" won't build any build jobs, nor www.
|
||||
BUILD_JOBS: all
|
||||
DOCKER_HOST: unix://
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
# Disable tag builds.
|
||||
- if: $CI_COMMIT_TAG != $CI_COMMIT_REF_NAME
|
||||
|
||||
stages:
|
||||
- www
|
||||
@@ -36,10 +30,6 @@ stages:
|
||||
- cp -r builder/build/* output/
|
||||
- rm output/*.tar.gz
|
||||
|
||||
default:
|
||||
tags:
|
||||
- oci-fixed-amd64
|
||||
|
||||
build_www:
|
||||
stage: www
|
||||
allow_failure: false
|
||||
@@ -52,9 +42,6 @@ build_www:
|
||||
- docker run --rm -v $PWD/builder/www:/build kasmweb/www:latest
|
||||
- mkdir -p output/www
|
||||
- cd builder
|
||||
- echo $PWD
|
||||
- ls -l
|
||||
- ls -l ../output
|
||||
- tar -zcvf ../output/www/kasm_www.tar.gz www
|
||||
only:
|
||||
variables:
|
||||
@@ -84,7 +71,7 @@ build_ubuntu_bionic_arm:
|
||||
stage: build
|
||||
allow_failure: false
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -99,6 +86,23 @@ build_ubuntu_bionic_arm:
|
||||
paths:
|
||||
- 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:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
@@ -120,7 +124,7 @@ build_ubuntu_focal_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -156,7 +160,7 @@ build_ubuntu_jammy_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -192,7 +196,7 @@ build_debian_buster_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -228,7 +232,7 @@ build_debian_bullseye_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -243,43 +247,6 @@ build_debian_bullseye_arm:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
|
||||
build_debian_bookworm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package debian bookworm;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_debian_bookworm_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package debian bookworm;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_kali_rolling:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
@@ -301,7 +268,7 @@ build_kali_rolling_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -354,7 +321,7 @@ build_oracle_8_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -369,42 +336,6 @@ build_oracle_8_arm:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_oracle_9:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package oracle 9;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_oracle_9_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package oracle 9;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_opensuse_15:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
@@ -426,7 +357,7 @@ build_opensuse_15_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
- arm
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
@@ -441,114 +372,6 @@ build_opensuse_15_arm:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_fedora_thirtyseven:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package fedora thirtyseven;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_fedora_thirtyseven_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package fedora thirtyseven;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_fedora_thirtyeight:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package fedora thirtyeight;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_fedora_thirtyeight_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package fedora thirtyeight;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_alpine_317:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package alpine 317;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_alpine_317_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package alpine 317;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
test:
|
||||
stage: test
|
||||
before_script:
|
||||
@@ -556,49 +379,9 @@ test:
|
||||
script:
|
||||
- bash builder/test-vncserver
|
||||
|
||||
|
||||
build_alpine_318:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package alpine 318;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
build_alpine_318_arm:
|
||||
stage: build
|
||||
allow_failure: true
|
||||
tags:
|
||||
- oci-fixed-arm64
|
||||
before_script:
|
||||
- *prepare_build
|
||||
- *prepare_www
|
||||
after_script:
|
||||
- *prepare_artfacts
|
||||
script:
|
||||
- bash builder/build-package alpine 318;
|
||||
only:
|
||||
variables:
|
||||
- $BUILD_JOBS == 'all' || $BUILD_JOBS =~ $CI_JOB_NAME
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
|
||||
upload:
|
||||
stage: upload
|
||||
image: ubuntu:focal
|
||||
artifacts:
|
||||
paths:
|
||||
- output/
|
||||
before_script:
|
||||
- . .ci/upload.sh
|
||||
script:
|
||||
@@ -615,32 +398,12 @@ upload:
|
||||
done
|
||||
- export S3_BUILD_DIRECTORY="kasmvnc/${CI_COMMIT_SHA}"
|
||||
- export RELEASE_VERSION=$(.ci/next_release_version "$CI_COMMIT_REF_NAME")
|
||||
- uploaded_files=()
|
||||
- for package in `find output/ -type f -name '*.deb' -or -name '*.rpm' -or -name '*.tgz'`; do
|
||||
- for package in `find output/ -type f -name '*.deb' -or -name '*.rpm'`; do
|
||||
prepare_upload_filename "$package";
|
||||
upload_filename="${S3_BUILD_DIRECTORY}/$upload_filename";
|
||||
echo;
|
||||
echo "File to upload $upload_filename";
|
||||
upload_to_s3 "$package" "$upload_filename" "$S3_BUCKET";
|
||||
UPLOAD_NAME=$(basename $upload_filename | sed 's#kasmvncserver_##' | sed -r 's#_([0-9]{1,3}\.){2}[0-9]{1,2}_\S+?([a-f0-9]{6})##' | sed -r 's#\.(deb|rpm|tgz)##');
|
||||
UPLOAD_NAME=$(basename $upload_filename | sed 's#kasmvncserver_##' | sed -r 's#_([0-9]{1,3}\.){2}[0-9]{1,2}_\S+?([a-f0-9]{6})##' | sed -r 's#\.(deb|rpm)##');
|
||||
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_NAME}&target_url=${S3_URL}";
|
||||
uploaded_files+=("$upload_filename");
|
||||
done
|
||||
- make_index_html "${uploaded_files[@]}" > output/index.html;
|
||||
|
||||
upload_build_preview:
|
||||
stage: upload
|
||||
needs: ["upload"]
|
||||
dependencies: ["upload"]
|
||||
image: ubuntu:focal
|
||||
before_script:
|
||||
- . .ci/upload.sh
|
||||
resource_group: upload_build_preview
|
||||
only:
|
||||
variables:
|
||||
- $CI_COMMIT_BRANCH == 'master'
|
||||
script:
|
||||
- prepare_to_run_scripts_and_s3_uploads
|
||||
- preview_builds_dir=kasmvnc/preview-builds
|
||||
- upload_to_s3 "output/index.html" "$preview_builds_dir/index.html" "$S3_BUCKET"
|
||||
- curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=index.html&target_url=${S3_URL}";
|
||||
|
||||
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,4 +1,4 @@
|
||||
[submodule "kasmweb"]
|
||||
path = kasmweb
|
||||
url = https://github.com/kasmtech/noVNC.git
|
||||
branch = release/1.1.3
|
||||
branch = master
|
||||
|
||||
@@ -148,17 +148,9 @@ endif()
|
||||
# Check for zlib
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
# Check for libpng
|
||||
find_package(PNG REQUIRED)
|
||||
|
||||
# Check for libjpeg
|
||||
find_package(JPEG REQUIRED)
|
||||
|
||||
find_package(Freetype REQUIRED)
|
||||
include_directories(${FREETYPE_INCLUDE_DIRS})
|
||||
|
||||
# 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
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_FLAGS -I${JPEG_INCLUDE_DIR})
|
||||
|
||||
@@ -92,7 +92,7 @@ KasmVNC is configured via YAML based configurations. The server level configurat
|
||||
|
||||
The following configuration shows all default settings. Many of the encoding settings can be overridden by the client, unless the `runtime_configuration.allow_client_to_override_kasm_server_settings` setting is set tot false. By default the client is allowed to modify encoding settings.
|
||||
|
||||
For a full description of each setting see the [configuration reference](https://www.kasmweb.com/kasmvnc/docs/latest/configuration.html).
|
||||
For a full description of each setting see the [configuration reference](https://www.kasmweb/kasmvnc/docs/latest/index.html).
|
||||
|
||||
```yaml
|
||||
desktop:
|
||||
@@ -101,9 +101,6 @@ desktop:
|
||||
height: 768
|
||||
allow_resize: true
|
||||
pixel_depth: 24
|
||||
gpu:
|
||||
hw3d: false
|
||||
drinode: /dev/dri/renderD128
|
||||
|
||||
network:
|
||||
protocol: http
|
||||
@@ -231,7 +228,6 @@ command_line:
|
||||
|
||||
# New Features!
|
||||
|
||||
- Faster jpeg compression (via statically linked libjpeg-turbo)
|
||||
- Webp image compression for better bandwidth usage
|
||||
- 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
|
||||
@@ -259,7 +255,6 @@ command_line:
|
||||
- Cursor lock
|
||||
- IME support for languages with extended characters
|
||||
- Better mobile support
|
||||
- DRI3 GPU acceleration with open source drivers (AMDGPU,Intel,ATI,ARM)
|
||||
|
||||
Future Goals:
|
||||
|
||||
|
||||
@@ -48,18 +48,6 @@ 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/
|
||||
|
||||
## 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
|
||||
|
||||
## deb/rpm package building and testing
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
. builder/os_ver_cli.sh
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
docker build -t kasmvnc_apkbuilder_${os}:${os_codename} -f \
|
||||
builder/dockerfile.${os}_${os_codename}.apk.build .
|
||||
|
||||
source_dir=$(echo $PWD)
|
||||
L_UID=$(id -u)
|
||||
L_GID=$(id -g)
|
||||
docker run --rm -v "$source_dir":/src --user $L_UID:$L_GID \
|
||||
kasmvnc_apkbuilder_${os}:${os_codename} /bin/bash -c \
|
||||
'/src/builder/build-apk-inside-docker'
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
os=alpine
|
||||
os_codename=$(cat /etc/os-release | awk '/VERSION_ID/' | grep -o '[[:digit:]]' | tr -d '\n' | head -c 3)
|
||||
|
||||
mkdir -p /src/builder/build/${os}_${os_codename}
|
||||
mv \
|
||||
/src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \
|
||||
/src/builder/build/${os}_${os_codename}/kasmvnc.${os}_${os_codename}_$(uname -m).tgz
|
||||
@@ -10,8 +10,6 @@ detect_package_format() {
|
||||
package_format=rpm
|
||||
if ls builder/dockerfile*"$os"* | grep -q .deb.build; then
|
||||
package_format=deb
|
||||
elif ls builder/dockerfile*"$os"* | grep -q .apk.build; then
|
||||
package_format=apk
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ prepare_build_env() {
|
||||
}
|
||||
|
||||
copy_spec_and_tar_with_binaries() {
|
||||
cp /tmp/*.spec ~/rpmbuild/SPECS/
|
||||
cp /tmp/kasmvncserver.spec ~/rpmbuild/SPECS/
|
||||
cp /src/builder/build/kasmvnc.${os}_${os_codename}.tar.gz \
|
||||
~/rpmbuild/SOURCES/
|
||||
}
|
||||
@@ -30,6 +30,6 @@ fi
|
||||
os_dir="build/${os}_${os_codename}"
|
||||
|
||||
prepare_build_env
|
||||
rpmbuild -ba ~/rpmbuild/SPECS/*.spec
|
||||
rpmbuild -ba ~/rpmbuild/SPECS/kasmvncserver.spec
|
||||
copy_rpm_to_build_dir
|
||||
rpmlint "$os_dir"/*.rpm || true
|
||||
|
||||
@@ -40,14 +40,14 @@ EOF
|
||||
#sudo apt-get install cmake git libjpeg-dev libgnutls-dev
|
||||
|
||||
# Gcc12 builds fail due to bug
|
||||
#fail_on_gcc_12
|
||||
fail_on_gcc_12
|
||||
|
||||
# Ubuntu applies a million patches, but here we use upstream to simplify matters
|
||||
cd /tmp
|
||||
# default to the version of x in Ubuntu 18.04, otherwise caller will need to specify
|
||||
XORG_VER=${XORG_VER:-"1.19.6"}
|
||||
XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##')
|
||||
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.gz
|
||||
wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.bz2
|
||||
|
||||
#git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git
|
||||
#cd kasmvnc
|
||||
@@ -64,10 +64,9 @@ cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo . -DBUILD_VIEWER:BOOL=OFF \
|
||||
-DENABLE_GNUTLS:BOOL=OFF
|
||||
make -j5
|
||||
|
||||
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.gz --strip-components=1
|
||||
tar -C unix/xserver -xf /tmp/xorg-server-${XORG_VER}.tar.bz2 --strip-components=1
|
||||
|
||||
cd unix/xserver
|
||||
# Apply patches
|
||||
patch -Np1 -i ../xserver${XORG_PATCH}.patch
|
||||
case "$XORG_VER" in
|
||||
1.20.*)
|
||||
@@ -86,42 +85,22 @@ autoreconf -i
|
||||
# everything after that is based on BUILDING.txt to remove unneeded
|
||||
# components.
|
||||
ensure_crashpad_can_fetch_line_number_by_address
|
||||
# Centos7 is too old for dri3
|
||||
if [ ! "${KASMVNC_BUILD_OS}" == "centos" ]; then
|
||||
CONFIG_OPTIONS="--enable-dri3"
|
||||
fi
|
||||
# remove gl check for opensuse
|
||||
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ] || ([ "${KASMVNC_BUILD_OS}" == "oracle" ] && [ "${KASMVNC_BUILD_OS_CODENAME}" == 9 ]); then
|
||||
if [ "${KASMVNC_BUILD_OS}" == "opensuse" ]; then
|
||||
sed -i 's/LIBGL="gl >= 7.1.0"/LIBGL="gl >= 1.1"/g' configure
|
||||
fi
|
||||
|
||||
# build X11
|
||||
./configure \
|
||||
--disable-config-hal \
|
||||
--disable-config-udev \
|
||||
--disable-dmx \
|
||||
--disable-dri \
|
||||
--disable-dri2 \
|
||||
--disable-kdrive \
|
||||
--disable-static \
|
||||
--disable-xephyr \
|
||||
--disable-xinerama \
|
||||
--disable-xnest \
|
||||
--disable-xorg \
|
||||
--disable-xvfb \
|
||||
--disable-xwayland \
|
||||
--disable-xwin \
|
||||
--enable-glx \
|
||||
--prefix=/opt/kasmweb \
|
||||
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
||||
--without-dtrace \
|
||||
--with-sha1=libcrypto \
|
||||
--with-xkb-bin-directory=/usr/bin \
|
||||
--with-xkb-output=/var/lib/xkb \
|
||||
--with-xkb-path=/usr/share/X11/xkb ${CONFIG_OPTIONS}
|
||||
|
||||
# remove array bounds errors for new versions of GCC
|
||||
find . -name "Makefile" -exec sed -i 's/-Werror=array-bounds//g' {} \;
|
||||
./configure --prefix=/opt/kasmweb \
|
||||
--with-xkb-path=/usr/share/X11/xkb \
|
||||
--with-xkb-output=/var/lib/xkb \
|
||||
--with-xkb-bin-directory=/usr/bin \
|
||||
--with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,built-ins" \
|
||||
--with-sha1=libcrypto \
|
||||
--without-dtrace --disable-dri \
|
||||
--disable-static \
|
||||
--disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \
|
||||
--disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \
|
||||
--disable-config-hal --disable-config-udev \
|
||||
--disable-dri2 --enable-glx --disable-xwayland --disable-dri3
|
||||
make -j5
|
||||
|
||||
# modifications for the servertarball
|
||||
@@ -139,8 +118,6 @@ 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
|
||||
elif [ -d /usr/lib/xorg/modules/dri ]; then
|
||||
ln -s /usr/lib/xorg/modules/dri dri
|
||||
else
|
||||
ln -s /usr/lib64/dri dri
|
||||
fi
|
||||
|
||||
@@ -15,4 +15,3 @@ cd /build
|
||||
rm *.md
|
||||
rm AUTHORS
|
||||
rm vnc.html
|
||||
ln -s index.html vnc.html
|
||||
|
||||
@@ -15,11 +15,6 @@ bump_deb() {
|
||||
builder/bump-package-version-deb "$new_version"
|
||||
}
|
||||
|
||||
bump_xvnc_binary() {
|
||||
local cmd="s/#define XVNCVERSION.\+$/#define XVNCVERSION \"KasmVNC $new_version\"/"
|
||||
sed -i -e "$cmd" unix/xserver/hw/vnc/xvnc.c
|
||||
}
|
||||
|
||||
new_version="$1"
|
||||
|
||||
if [[ -z "$new_version" ]]; then
|
||||
@@ -30,6 +25,5 @@ fi
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
update_version_to_meet_packaging_standards
|
||||
bump_xvnc_binary
|
||||
bump_rpm
|
||||
bump_deb
|
||||
|
||||
@@ -3,13 +3,9 @@
|
||||
set -eo pipefail
|
||||
|
||||
new_version="$1"
|
||||
spec_dirs=(centos oracle opensuse fedora)
|
||||
|
||||
spec_files() {
|
||||
for d in "${spec_dirs[@]}"; do
|
||||
ls "$d"/*.spec
|
||||
done
|
||||
}
|
||||
specs="centos/kasmvncserver.spec
|
||||
oracle/kasmvncserver.spec
|
||||
opensuse/kasmvncserver.spec"
|
||||
|
||||
bump_version() {
|
||||
sed -i "s/^Version:.\+/Version: $new_version/" "$1"
|
||||
@@ -29,7 +25,8 @@ bump_changelog() {
|
||||
sed -i -e "s/%changelog/%changelog\n$new_changelog_entry/" "$1"
|
||||
}
|
||||
|
||||
for spec_file in $(spec_files); do
|
||||
IFS=$'\n'
|
||||
for spec_file in $specs; do
|
||||
bump_version $spec_file
|
||||
bump_changelog $spec_file
|
||||
done
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
FROM alpine:3.17
|
||||
|
||||
RUN apk add shadow bash
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||
|
||||
USER docker
|
||||
@@ -1,82 +0,0 @@
|
||||
FROM alpine:3.17
|
||||
|
||||
ENV KASMVNC_BUILD_OS alpine
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 317
|
||||
ENV XORG_VER 1.20.14
|
||||
|
||||
RUN \
|
||||
echo "**** install build deps ****" && \
|
||||
apk add \
|
||||
alpine-release \
|
||||
alpine-sdk \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
coreutils \
|
||||
curl \
|
||||
eudev-dev \
|
||||
font-cursor-misc \
|
||||
font-misc-misc \
|
||||
font-util-dev \
|
||||
git \
|
||||
grep \
|
||||
jq \
|
||||
libdrm-dev \
|
||||
libepoxy-dev \
|
||||
libjpeg-turbo-dev \
|
||||
libjpeg-turbo-static \
|
||||
libpciaccess-dev \
|
||||
libtool \
|
||||
libwebp-dev \
|
||||
libx11-dev \
|
||||
libxau-dev \
|
||||
libxcb-dev \
|
||||
libxcursor-dev \
|
||||
libxcvt-dev \
|
||||
libxdmcp-dev \
|
||||
libxext-dev \
|
||||
libxfont2-dev \
|
||||
libxkbfile-dev \
|
||||
libxrandr-dev \
|
||||
libxshmfence-dev \
|
||||
libxtst-dev \
|
||||
mesa-dev \
|
||||
mesa-dri-gallium \
|
||||
meson \
|
||||
nettle-dev \
|
||||
openssl-dev \
|
||||
pixman-dev \
|
||||
procps \
|
||||
shadow \
|
||||
tar \
|
||||
tzdata \
|
||||
wayland-dev \
|
||||
wayland-protocols \
|
||||
xcb-util-dev \
|
||||
xcb-util-image-dev \
|
||||
xcb-util-keysyms-dev \
|
||||
xcb-util-renderutil-dev \
|
||||
xcb-util-wm-dev \
|
||||
xinit \
|
||||
xkbcomp \
|
||||
xkbcomp-dev \
|
||||
xkeyboard-config \
|
||||
xorgproto \
|
||||
xorg-server-common \
|
||||
xorg-server-dev \
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -1,7 +0,0 @@
|
||||
FROM alpine:3.18
|
||||
|
||||
RUN apk add shadow bash
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||
|
||||
USER docker
|
||||
@@ -1,82 +0,0 @@
|
||||
FROM alpine:3.18
|
||||
|
||||
ENV KASMVNC_BUILD_OS alpine
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 318
|
||||
ENV XORG_VER 1.20.14
|
||||
|
||||
RUN \
|
||||
echo "**** install build deps ****" && \
|
||||
apk add \
|
||||
alpine-release \
|
||||
alpine-sdk \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
coreutils \
|
||||
curl \
|
||||
eudev-dev \
|
||||
font-cursor-misc \
|
||||
font-misc-misc \
|
||||
font-util-dev \
|
||||
git \
|
||||
grep \
|
||||
jq \
|
||||
libdrm-dev \
|
||||
libepoxy-dev \
|
||||
libjpeg-turbo-dev \
|
||||
libjpeg-turbo-static \
|
||||
libpciaccess-dev \
|
||||
libtool \
|
||||
libwebp-dev \
|
||||
libx11-dev \
|
||||
libxau-dev \
|
||||
libxcb-dev \
|
||||
libxcursor-dev \
|
||||
libxcvt-dev \
|
||||
libxdmcp-dev \
|
||||
libxext-dev \
|
||||
libxfont2-dev \
|
||||
libxkbfile-dev \
|
||||
libxrandr-dev \
|
||||
libxshmfence-dev \
|
||||
libxtst-dev \
|
||||
mesa-dev \
|
||||
mesa-dri-gallium \
|
||||
meson \
|
||||
nettle-dev \
|
||||
openssl-dev \
|
||||
pixman-dev \
|
||||
procps \
|
||||
shadow \
|
||||
tar \
|
||||
tzdata \
|
||||
wayland-dev \
|
||||
wayland-protocols \
|
||||
xcb-util-dev \
|
||||
xcb-util-image-dev \
|
||||
xcb-util-keysyms-dev \
|
||||
xcb-util-renderutil-dev \
|
||||
xcb-util-wm-dev \
|
||||
xinit \
|
||||
xkbcomp \
|
||||
xkbcomp-dev \
|
||||
xkeyboard-config \
|
||||
xorgproto \
|
||||
xorg-server-common \
|
||||
xorg-server-dev \
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -5,11 +5,11 @@ ENV KASMVNC_BUILD_OS_CODENAME core
|
||||
|
||||
RUN yum install -y ca-certificates
|
||||
RUN yum install -y build-dep xorg-server libxfont-dev sudo
|
||||
RUN yum install -y gcc cmake git libgnutls28-dev vim wget tightvncserver
|
||||
RUN yum install -y libpng-dev libtiff-dev libgif-dev libavcodec-dev openssl-devel
|
||||
RUN yum install -y gcc cmake git libjpeg-dev 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 make
|
||||
RUN yum group install -y "Development Tools"
|
||||
RUN yum install -y xorg-x11-server-devel zlib-devel
|
||||
RUN yum install -y xorg-x11-server-devel zlib-devel libjpeg-turbo-devel
|
||||
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 \
|
||||
gnutls-devel libX11-devel libXtst-devel libXcursor-devel
|
||||
@@ -23,10 +23,6 @@ RUN cd /tmp/libwebp-1.0.2 && \
|
||||
./configure --enable-static --disable-shared && \
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
ENV KASMVNC_BUILD_OS debian
|
||||
ENV KASMVNC_BUILD_OS_CODENAME bookworm
|
||||
ENV XORG_VER 1.20.10
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
RUN \
|
||||
echo "**** add all sources ****" && \
|
||||
echo "deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
|
||||
echo "deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb http://security.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
echo "deb-src http://security.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
|
||||
rm -f /etc/apt/sources.list.d/debian.sources
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install sudo
|
||||
|
||||
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 cmake 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
|
||||
|
||||
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 && adduser docker sudo
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -12,13 +12,15 @@ 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 cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||
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 libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 && adduser docker sudo
|
||||
|
||||
|
||||
@@ -12,13 +12,15 @@ 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 cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||
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 libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 && adduser docker sudo
|
||||
|
||||
|
||||
@@ -34,6 +34,14 @@ 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 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 mkdir -p $STARTUPDIR
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
FROM fedora:38
|
||||
|
||||
ENV KASMVNC_BUILD_OS fedora
|
||||
ENV KASMVNC_BUILD_OS_CODENAME thirtyeight
|
||||
ENV XORG_VER 1.20.14
|
||||
|
||||
RUN \
|
||||
echo "**** install build deps ****" && \
|
||||
dnf group install -y \
|
||||
"C Development Tools and Libraries" \
|
||||
"Development Tools" && \
|
||||
dnf install -y \
|
||||
autoconf \
|
||||
automake \
|
||||
bison \
|
||||
byacc \
|
||||
bzip2 \
|
||||
cmake \
|
||||
diffutils \
|
||||
doxygen \
|
||||
file \
|
||||
flex \
|
||||
fop \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
git \
|
||||
glibc-devel \
|
||||
libdrm-devel \
|
||||
libepoxy-devel \
|
||||
libmd-devel \
|
||||
libpciaccess-devel \
|
||||
libtool \
|
||||
libwebp-devel \
|
||||
libX11-devel \
|
||||
libXau-devel \
|
||||
libxcb-devel \
|
||||
libXcursor-devel \
|
||||
libxcvt-devel \
|
||||
libXdmcp-devel \
|
||||
libXext-devel \
|
||||
libXfont2-devel \
|
||||
libxkbfile-devel \
|
||||
libXrandr-devel \
|
||||
libxshmfence-devel \
|
||||
libXtst-devel \
|
||||
mesa-libEGL-devel \
|
||||
mesa-libgbm-devel \
|
||||
mesa-libGL-devel \
|
||||
meson \
|
||||
mingw64-binutils \
|
||||
mt-st \
|
||||
nettle-devel \
|
||||
openssl-devel \
|
||||
patch \
|
||||
pixman-devel \
|
||||
wayland-devel \
|
||||
wget \
|
||||
which \
|
||||
xcb-util-devel \
|
||||
xcb-util-image-devel \
|
||||
xcb-util-keysyms-devel \
|
||||
xcb-util-renderutil-devel \
|
||||
xcb-util-wm-devel \
|
||||
xinit \
|
||||
xkbcomp \
|
||||
xkbcomp-devel \
|
||||
xkeyboard-config \
|
||||
xmlto \
|
||||
xorg-x11-font-utils \
|
||||
xorg-x11-proto-devel \
|
||||
xorg-x11-server-common \
|
||||
xorg-x11-server-devel \
|
||||
xorg-x11-xtrans-devel \
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -1,13 +0,0 @@
|
||||
FROM fedora:38
|
||||
|
||||
RUN dnf install -y fedora-packager fedora-review
|
||||
RUN dnf install -y tree vim less
|
||||
RUN dnf install -y redhat-lsb-core
|
||||
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
|
||||
|
||||
USER docker
|
||||
@@ -1,19 +0,0 @@
|
||||
FROM fedora:37
|
||||
|
||||
ENV STARTUPDIR=/dockerstartup
|
||||
|
||||
RUN dnf install -y xterm
|
||||
RUN dnf install -y vim less
|
||||
RUN yum install -y redhat-lsb-core
|
||||
|
||||
ARG KASMVNC_PACKAGE_DIR
|
||||
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
||||
RUN dnf localinstall -y /tmp/*.rpm
|
||||
|
||||
RUN mkdir -p $STARTUPDIR
|
||||
COPY startup/vnc_startup_barebones.sh $STARTUPDIR
|
||||
|
||||
RUN useradd -m foo
|
||||
USER foo:kasmvnc-cert
|
||||
|
||||
ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
|
||||
@@ -1,86 +0,0 @@
|
||||
FROM fedora:37
|
||||
|
||||
ENV KASMVNC_BUILD_OS fedora
|
||||
ENV KASMVNC_BUILD_OS_CODENAME thirtyseven
|
||||
ENV XORG_VER 1.20.14
|
||||
|
||||
RUN \
|
||||
echo "**** install build deps ****" && \
|
||||
dnf group install -y \
|
||||
"C Development Tools and Libraries" \
|
||||
"Development Tools" && \
|
||||
dnf install -y \
|
||||
autoconf \
|
||||
automake \
|
||||
bison \
|
||||
byacc \
|
||||
bzip2 \
|
||||
cmake \
|
||||
diffutils \
|
||||
doxygen \
|
||||
file \
|
||||
flex \
|
||||
fop \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
git \
|
||||
glibc-devel \
|
||||
libdrm-devel \
|
||||
libepoxy-devel \
|
||||
libmd-devel \
|
||||
libpciaccess-devel \
|
||||
libtool \
|
||||
libwebp-devel \
|
||||
libX11-devel \
|
||||
libXau-devel \
|
||||
libxcb-devel \
|
||||
libXcursor-devel \
|
||||
libxcvt-devel \
|
||||
libXdmcp-devel \
|
||||
libXext-devel \
|
||||
libXfont2-devel \
|
||||
libxkbfile-devel \
|
||||
libXrandr-devel \
|
||||
libxshmfence-devel \
|
||||
libXtst-devel \
|
||||
mesa-libEGL-devel \
|
||||
mesa-libgbm-devel \
|
||||
mesa-libGL-devel \
|
||||
meson \
|
||||
mingw64-binutils \
|
||||
mt-st \
|
||||
nettle-devel \
|
||||
openssl-devel \
|
||||
patch \
|
||||
pixman-devel \
|
||||
wayland-devel \
|
||||
wget \
|
||||
which \
|
||||
xcb-util-devel \
|
||||
xcb-util-image-devel \
|
||||
xcb-util-keysyms-devel \
|
||||
xcb-util-renderutil-devel \
|
||||
xcb-util-wm-devel \
|
||||
xinit \
|
||||
xkbcomp \
|
||||
xkbcomp-devel \
|
||||
xkeyboard-config \
|
||||
xmlto \
|
||||
xorg-x11-font-utils \
|
||||
xorg-x11-proto-devel \
|
||||
xorg-x11-server-common \
|
||||
xorg-x11-server-devel \
|
||||
xorg-x11-xtrans-devel \
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -1,62 +0,0 @@
|
||||
FROM fedora:37
|
||||
|
||||
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=/usr/local/lib/ \
|
||||
OMP_WAIT_POLICY=PASSIVE \
|
||||
SHELL=/bin/bash \
|
||||
SINGLE_APPLICATION=0 \
|
||||
KASMVNC_BUILD_OS=fedora \
|
||||
KASMVNC_BUILD_OS_CODENAME=thirtythree
|
||||
|
||||
EXPOSE $VNC_PORT
|
||||
|
||||
WORKDIR $HOME
|
||||
|
||||
### REQUIRED STUFF ###
|
||||
|
||||
RUN dnf install -y openssl xterm gettext wget
|
||||
RUN dnf install -y nss_wrapper
|
||||
RUN dnf install -y xorg-x11-xauth xkeyboard-config
|
||||
# xorg-x11-server-Xorg
|
||||
# RUN dnf install -y @xfce-desktop-environment
|
||||
RUN dnf erase -y pm-utils xscreensaver*
|
||||
RUN dnf install -y redhat-lsb-core
|
||||
RUN dnf install -y vim less
|
||||
RUN dnf install -y @xfce-desktop-environment
|
||||
|
||||
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 ./fedora/kasmvncserver.spec /tmp
|
||||
|
||||
ARG KASMVNC_PACKAGE_DIR
|
||||
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
||||
# RUN dnf remove -y tigervnc-server-minimal
|
||||
RUN /tmp/scripts/install_kasmvncserver_package
|
||||
|
||||
### END CUSTOM STUFF ###
|
||||
|
||||
RUN chown -R 1000:0 $HOME
|
||||
USER 1000:kasmvnc-cert
|
||||
WORKDIR $HOME
|
||||
|
||||
ENTRYPOINT [ "/dockerstartup/vnc_startup.sh" ]
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM fedora:38
|
||||
FROM fedora:33
|
||||
|
||||
ENV STARTUPDIR=/dockerstartup
|
||||
|
||||
38
builder/dockerfile.fedora_thirtythree.build
Normal file
38
builder/dockerfile.fedora_thirtythree.build
Normal file
@@ -0,0 +1,38 @@
|
||||
FROM fedora:33
|
||||
|
||||
ENV KASMVNC_BUILD_OS fedora
|
||||
ENV KASMVNC_BUILD_OS_CODENAME thirtythree
|
||||
ENV XORG_VER 1.20.10
|
||||
|
||||
# RUN dnf install -y build-dep xorg-server libxfont-dev sudo
|
||||
RUN dnf install -y gcc cmake git gnutls-devel vim wget
|
||||
#tightvncserver
|
||||
RUN dnf install -y libjpeg-turbo-devel libpng-devel libtiff-devel giflib-devel openssl-devel
|
||||
|
||||
#libavcodec-dev
|
||||
RUN dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
|
||||
RUN dnf -y install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||||
RUN dnf -y install ffmpeg-devel
|
||||
|
||||
RUN dnf install -y make
|
||||
RUN dnf group install -y "Development Tools"
|
||||
RUN dnf install -y xorg-x11-server-devel zlib-devel libjpeg-turbo-devel
|
||||
RUN dnf install -y libxkbfile-devel libXfont2-devel xorg-x11-font-utils \
|
||||
xorg-x11-xtrans-devel xorg-x11-xkb-utils-devel libXrandr-devel libXtst-devel \
|
||||
libXcursor-devel
|
||||
RUN dnf install -y mesa-dri-drivers
|
||||
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 -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"]
|
||||
@@ -1,11 +1,11 @@
|
||||
FROM fedora:37
|
||||
FROM fedora:33
|
||||
|
||||
RUN dnf install -y fedora-packager fedora-review
|
||||
RUN dnf install -y tree vim less
|
||||
RUN dnf install -y redhat-lsb-core
|
||||
RUN dnf install -y dnf-plugins-core
|
||||
|
||||
COPY fedora/*.spec /tmp
|
||||
COPY centos/*.spec /tmp
|
||||
RUN dnf builddep -y /tmp/*.spec
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM fedora:38
|
||||
FROM fedora:33
|
||||
|
||||
ENV DISPLAY=:1 \
|
||||
VNC_PORT=8443 \
|
||||
@@ -31,7 +31,8 @@ WORKDIR $HOME
|
||||
|
||||
RUN dnf install -y openssl xterm gettext wget
|
||||
RUN dnf install -y nss_wrapper
|
||||
RUN dnf install -y xorg-x11-xauth xkeyboard-config
|
||||
RUN dnf install -y xorg-x11-xauth xorg-x11-xkb-utils \
|
||||
xkeyboard-config xorg-x11-server-utils
|
||||
# xorg-x11-server-Xorg
|
||||
# RUN dnf install -y @xfce-desktop-environment
|
||||
RUN dnf erase -y pm-utils xscreensaver*
|
||||
@@ -46,7 +47,7 @@ COPY builder/startup/ $STARTUPDIR
|
||||
|
||||
### START CUSTOM STUFF ####
|
||||
COPY ./builder/scripts/ /tmp/scripts/
|
||||
COPY ./fedora/kasmvncserver.spec /tmp
|
||||
COPY ./centos/kasmvncserver.spec /tmp
|
||||
|
||||
ARG KASMVNC_PACKAGE_DIR
|
||||
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp/
|
||||
@@ -14,14 +14,16 @@ 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-11 g++-11 curl
|
||||
RUN apt-get update && apt-get -y install cmake git libgnutls28-dev vim wget tightvncserver
|
||||
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 libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 -j$(nproc) && make install
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM opensuse/leap:15.5
|
||||
FROM opensuse/leap:15.3
|
||||
|
||||
ENV STARTUPDIR=/dockerstartup
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM opensuse/leap:15.5
|
||||
FROM opensuse/leap:15.3
|
||||
|
||||
ENV KASMVNC_BUILD_OS opensuse
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 15
|
||||
@@ -9,7 +9,6 @@ RUN zypper install -ny \
|
||||
bdftopcf \
|
||||
bigreqsproto-devel \
|
||||
cmake \
|
||||
curl \
|
||||
ffmpeg-4-libavcodec-devel \
|
||||
fonttosfnt \
|
||||
font-util \
|
||||
@@ -20,17 +19,14 @@ RUN zypper install -ny \
|
||||
gzip \
|
||||
lbzip2 \
|
||||
libbz2-devel \
|
||||
libgbm-devel \
|
||||
libGLw-devel \
|
||||
libgnutls-devel \
|
||||
libjpeg8-devel \
|
||||
libopenssl-devel \
|
||||
libpng16-devel \
|
||||
libpnglite0 \
|
||||
png++-devel \
|
||||
libtiff-devel \
|
||||
libXfont2-devel \
|
||||
libxkbcommon-x11-devel \
|
||||
libxshmfence-devel \
|
||||
make \
|
||||
Mesa-dri \
|
||||
Mesa-libglapi-devel \
|
||||
@@ -45,10 +41,12 @@ RUN zypper install -ny \
|
||||
xorg-x11-util-devel \
|
||||
zlib-devel
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 -u 1000 docker && \
|
||||
groupadd -g 1000 docker && \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM opensuse/leap:15.5
|
||||
FROM opensuse/leap:15.3
|
||||
|
||||
ENV KASMVNC_BUILD_OS opensuse
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 15
|
||||
|
||||
@@ -5,31 +5,27 @@ ENV KASMVNC_BUILD_OS_CODENAME 8
|
||||
ENV XORG_VER 1.20.10
|
||||
|
||||
# Install from stock repos
|
||||
RUN \
|
||||
dnf install -y 'dnf-command(config-manager)' && \
|
||||
dnf config-manager --set-enabled ol8_codeready_builder && \
|
||||
dnf install -y \
|
||||
bzip2-devel \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
dnf-plugins-core \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
git \
|
||||
gnutls-devel \
|
||||
libjpeg-turbo-devel \
|
||||
libpng-devel \
|
||||
libtiff-devel \
|
||||
libxshmfence-devel \
|
||||
make \
|
||||
mesa-dri-drivers \
|
||||
mesa-libgbm-devel \
|
||||
openssl-devel \
|
||||
patch \
|
||||
tigervnc-server \
|
||||
wget \
|
||||
xorg-x11-font-utils \
|
||||
zlib-devel
|
||||
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
|
||||
@@ -50,10 +46,12 @@ RUN dnf install -y \
|
||||
libXtst-devel \
|
||||
libXcursor-devel
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ RUN dnf install -y \
|
||||
tree \
|
||||
vim
|
||||
|
||||
COPY oracle/kasmvncserver.spec /tmp
|
||||
COPY oracle/*.spec /tmp
|
||||
RUN dnf builddep -y /tmp/*.spec
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
FROM oraclelinux:9
|
||||
|
||||
ENV STARTUPDIR=/dockerstartup
|
||||
|
||||
RUN dnf install -y \
|
||||
less \
|
||||
vim \
|
||||
xterm
|
||||
RUN dnf config-manager --set-enabled ol9_codeready_builder
|
||||
RUN dnf install -y oracle-epel-release-el9
|
||||
|
||||
ARG KASMVNC_PACKAGE_DIR
|
||||
COPY $KASMVNC_PACKAGE_DIR/*.rpm /tmp
|
||||
RUN dnf localinstall -y /tmp/*.rpm
|
||||
|
||||
RUN dnf install -y crypto-policies-scripts
|
||||
RUN update-crypto-policies --set FIPS:SHA1
|
||||
|
||||
RUN mkdir -p $STARTUPDIR
|
||||
COPY startup/vnc_startup_barebones.sh $STARTUPDIR
|
||||
|
||||
RUN useradd -m foo
|
||||
USER foo:kasmvnc-cert
|
||||
|
||||
ENTRYPOINT "/$STARTUPDIR/vnc_startup_barebones.sh"
|
||||
@@ -1,63 +0,0 @@
|
||||
FROM oraclelinux:9
|
||||
|
||||
ENV KASMVNC_BUILD_OS oracle
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 9
|
||||
ENV XORG_VER 1.20.10
|
||||
|
||||
# Install from stock repos
|
||||
RUN \
|
||||
dnf config-manager --set-enabled ol9_codeready_builder && \
|
||||
dnf config-manager --set-enabled ol9_distro_builder && \
|
||||
dnf install -y \
|
||||
bzip2-devel \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
dnf-plugins-core \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
git \
|
||||
gnutls-devel \
|
||||
libjpeg-turbo-devel \
|
||||
libpng-devel \
|
||||
libtiff-devel \
|
||||
libxshmfence-devel \
|
||||
make \
|
||||
mesa-dri-drivers \
|
||||
mesa-libGL-devel \
|
||||
mesa-libgbm-devel \
|
||||
openssl-devel \
|
||||
openssl-devel \
|
||||
patch \
|
||||
tigervnc-server \
|
||||
wget \
|
||||
xorg-x11-font-utils \
|
||||
zlib-devel
|
||||
|
||||
# Enable additional repos (epel, powertools, and fusion)
|
||||
RUN dnf install -y oracle-epel-release-el9
|
||||
RUN dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
|
||||
|
||||
# Install from new repos
|
||||
RUN dnf install -y \
|
||||
giflib-devel \
|
||||
lbzip2 \
|
||||
libXfont2-devel \
|
||||
libxkbfile-devel \
|
||||
xorg-x11-server-devel \
|
||||
xorg-x11-xtrans-devel \
|
||||
libXrandr-devel \
|
||||
libXtst-devel \
|
||||
libXcursor-devel
|
||||
|
||||
|
||||
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
|
||||
|
||||
COPY --chown=docker:docker . /src/
|
||||
|
||||
USER docker
|
||||
ENTRYPOINT ["/src/builder/build.sh"]
|
||||
@@ -1,23 +0,0 @@
|
||||
FROM oraclelinux:9
|
||||
|
||||
ENV KASMVNC_BUILD_OS oracle
|
||||
ENV KASMVNC_BUILD_OS_CODENAME 9
|
||||
|
||||
RUN dnf config-manager --set-enabled ol9_codeready_builder
|
||||
RUN dnf config-manager --set-enabled ol9_distro_builder
|
||||
RUN dnf install -y \
|
||||
gpg* \
|
||||
less \
|
||||
redhat-lsb-core \
|
||||
rng-tools \
|
||||
rpm* \
|
||||
rpmlint \
|
||||
rsync \
|
||||
tree \
|
||||
vim
|
||||
|
||||
COPY oracle/kasmvncserver9.spec /tmp
|
||||
|
||||
RUN useradd -m docker && echo "docker:docker" | chpasswd
|
||||
|
||||
USER docker
|
||||
21
builder/dockerfile.ubuntu1604.build
Normal file
21
builder/dockerfile.ubuntu1604.build
Normal file
@@ -0,0 +1,21 @@
|
||||
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"]
|
||||
39
builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build
Normal file
39
builder/dockerfile.ubuntu_bionic+libjpeg-turbo_latest.build
Normal file
@@ -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 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"]
|
||||
@@ -1,14 +1,18 @@
|
||||
FROM debian:bookworm
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
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; \
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM debian:bookworm-slim
|
||||
FROM ubuntu:bionic
|
||||
|
||||
ENV DISPLAY=:1 \
|
||||
VNC_PORT=8443 \
|
||||
@@ -16,12 +16,12 @@ ENV DISPLAY=:1 \
|
||||
VNC_PW=vncpassword \
|
||||
VNC_USER=user \
|
||||
VNC_VIEW_ONLY_PW=vncviewonlypassword \
|
||||
LD_LIBRARY_PATH=/usr/local/lib/ \
|
||||
LD_LIBRARY_PATH=/opt/libjpeg-turbo/lib64/:/usr/local/lib/ \
|
||||
OMP_WAIT_POLICY=PASSIVE \
|
||||
SHELL=/bin/bash \
|
||||
SINGLE_APPLICATION=0 \
|
||||
KASMVNC_BUILD_OS=debian \
|
||||
KASMVNC_BUILD_OS_CODENAME=buster
|
||||
KASMVNC_BUILD_OS=ubuntu \
|
||||
KASMVNC_BUILD_OS_CODENAME=bionic
|
||||
|
||||
EXPOSE $VNC_PORT
|
||||
|
||||
@@ -29,7 +29,7 @@ WORKDIR $HOME
|
||||
|
||||
### REQUIRED STUFF ###
|
||||
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal dbus-x11 xterm libnss-wrapper gettext 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 update && apt-get install -y vim less
|
||||
RUN apt-get update && apt-get -y install lsb-release
|
||||
@@ -40,13 +40,16 @@ 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/kasmvncserver_*.deb /tmp/
|
||||
RUN /tmp/scripts/install_kasmvncserver_package
|
||||
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 ###
|
||||
|
||||
@@ -10,13 +10,15 @@ 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 curl
|
||||
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 libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 && \
|
||||
|
||||
@@ -29,7 +29,7 @@ WORKDIR $HOME
|
||||
|
||||
### REQUIRED STUFF ###
|
||||
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
||||
RUN apt-get purge -y pm-utils xscreensaver*
|
||||
|
||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||
|
||||
@@ -2,13 +2,9 @@ FROM ubuntu:focal
|
||||
|
||||
ENV STARTUPDIR=/dockerstartup
|
||||
|
||||
COPY ./builder/scripts/ /tmp/scripts/
|
||||
COPY ./debian/changelog /tmp
|
||||
|
||||
ARG KASMVNC_PACKAGE_DIR
|
||||
COPY $KASMVNC_PACKAGE_DIR/kasmvncserver_*.deb /tmp/
|
||||
RUN /tmp/scripts/install_kasmvncserver_package
|
||||
|
||||
RUN rm -f /tmp/kasmvncserver_*+*.deb; apt-get update && dpkg -i /tmp/*.deb; apt-get -yf install
|
||||
RUN apt-get update && apt-get -y install xterm lsb-release
|
||||
|
||||
RUN mkdir -p $STARTUPDIR
|
||||
|
||||
@@ -12,13 +12,15 @@ 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 cmake git vim wget curl
|
||||
RUN apt-get update && apt-get -y install cmake git libjpeg-dev vim wget
|
||||
RUN apt-get update && apt-get -y install libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 && adduser docker sudo
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ WORKDIR $HOME
|
||||
|
||||
### REQUIRED STUFF ###
|
||||
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
||||
RUN apt-get purge -y pm-utils xscreensaver*
|
||||
|
||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||
|
||||
@@ -58,8 +58,7 @@ RUN echo 'alias tv="./run-specs spec/vncserver_yaml_validation_spec.py"' >> ~/.b
|
||||
RUN echo 'alias ty="./run-specs spec/vncserver_*spec.py"' >> ~/.bashrc
|
||||
RUN echo 'alias ta="./run-specs"' >> ~/.bashrc
|
||||
RUN echo 'alias vd="vncserver -dry-run"' >> ~/.bashrc
|
||||
RUN echo 'alias ss="sp; vncserver -select-de xfce"' >> ~/.bashrc
|
||||
ENV SET_PASSWORD_FUNC 'sp() { echo -e "$VNC_PW\\n$VNC_PW\\n" | kasmvncpasswd -w -u $VNC_USER $HOME/.kasmpasswd; }'
|
||||
ENV SET_PASSWORD_FUNC 'sp() { echo -e "$VNC_PW\\n$VNC_PW\\n" | kasmvncpasswd -w -u $USER $HOME/.kasmpasswd; }'
|
||||
RUN echo $SET_PASSWORD_FUNC >> ~/.bashrc
|
||||
|
||||
ENV LC_ALL=C.UTF-8
|
||||
|
||||
@@ -12,13 +12,15 @@ 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 cmake git libgnutls28-dev vim wget tightvncserver curl
|
||||
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 libpng-dev libtiff-dev libgif-dev libavcodec-dev libssl-dev libxrandr-dev libxcursor-dev
|
||||
|
||||
ENV SCRIPTS_DIR=/tmp/scripts
|
||||
COPY builder/scripts $SCRIPTS_DIR
|
||||
RUN $SCRIPTS_DIR/build-webp
|
||||
RUN $SCRIPTS_DIR/build-libjpeg-turbo
|
||||
# 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 && adduser docker sudo
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ WORKDIR $HOME
|
||||
|
||||
### REQUIRED STUFF ###
|
||||
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext wget
|
||||
RUN apt-get update && apt-get install -y supervisor xfce4 xfce4-terminal xterm libnss-wrapper gettext libjpeg-dev wget
|
||||
RUN apt-get purge -y pm-utils xscreensaver*
|
||||
|
||||
RUN echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
default_os=${default_os:-ubuntu}
|
||||
default_os_codename=${default_os_codename:-bionic}
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
#!/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
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/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() {
|
||||
export JPEG_TURBO_RELEASE=$(curl -sX GET "https://api.github.com/repos/libjpeg-turbo/libjpeg-turbo/releases/latest" \
|
||||
| awk '/tag_name/{print $4;exit}' FS='[""]')
|
||||
mkdir libjpeg-turbo
|
||||
curl -Ls "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_TURBO_RELEASE}.tar.gz" | \
|
||||
tar xzvf - -C libjpeg-turbo/ --strip-components=1
|
||||
cd libjpeg-turbo
|
||||
}
|
||||
|
||||
source_dir=$(dirname "$0")
|
||||
. "$source_dir/common.sh"
|
||||
|
||||
install_build_dependencies
|
||||
prepare_libjpeg_source
|
||||
build_and_install
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
webp_tar_url=https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.2.4.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
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/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
|
||||
@@ -3,7 +3,6 @@
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
. ./builder/process_test_options.sh
|
||||
. ./builder/os_ver_cli.sh
|
||||
. ./builder/common.sh
|
||||
|
||||
@@ -12,11 +11,8 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
|
||||
--build-arg BUILD_DEBIAN_REVISION="$build_debian_revision" \
|
||||
-t "$tester_image" \
|
||||
-f "builder/dockerfile.${os}_${os_codename}${build_tag}.deb.test" .
|
||||
|
||||
docker run -it -p "443:$VNC_PORT" --rm \
|
||||
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
||||
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||
-e "VNC_PORT=$VNC_PORT" \
|
||||
$entrypoint_executable \
|
||||
"$tester_image" \
|
||||
$entrypoint_args
|
||||
"$tester_image"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
. ./builder/process_test_options.sh
|
||||
. ./builder/common.sh
|
||||
os="${1:-debian}"
|
||||
os_codename="${2:-buster}"
|
||||
@@ -14,6 +13,4 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="builder/build/${os_codename}" \
|
||||
echo
|
||||
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||
-e "VNC_PORT=$VNC_PORT" \
|
||||
$entrypoint_executable \
|
||||
kasmvnctester_barebones_${os}:$os_codename \
|
||||
$entrypoint_args
|
||||
kasmvnctester_barebones_${os}:$os_codename
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
. ./builder/process_test_options.sh
|
||||
. ./builder/os_ver_cli.sh
|
||||
. ./builder/common.sh
|
||||
|
||||
@@ -17,6 +16,4 @@ docker run -it -p "443:$VNC_PORT" --rm \
|
||||
-e KASMVNC_VERBOSE_LOGGING=$KASMVNC_VERBOSE_LOGGING \
|
||||
-e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||
-e "VNC_PORT=$VNC_PORT" \
|
||||
$entrypoint_executable \
|
||||
kasmvnctester_${os}:$os_codename \
|
||||
$entrypoint_args
|
||||
kasmvnctester_${os}:$os_codename
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
. ./process_test_options.sh
|
||||
. ./common.sh
|
||||
os="${1:-centos}"
|
||||
os_codename="${2:-core}"
|
||||
@@ -13,6 +12,4 @@ docker build --build-arg KASMVNC_PACKAGE_DIR="build/${os}_${os_codename}" \
|
||||
-f dockerfile.${os}_${os_codename}.barebones.rpm.test .
|
||||
docker run -it -p "443:$VNC_PORT" --rm -e "VNC_USER=foo" -e "VNC_PW=foobar" \
|
||||
-e "VNC_PORT=$VNC_PORT" \
|
||||
$entrypoint_executable \
|
||||
kasmvnctester_barebones_${os}:$os_codename \
|
||||
$entrypoint_args
|
||||
kasmvnctester_barebones_${os}:$os_codename
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name: kasmvncserver
|
||||
Version: 1.2.1
|
||||
Version: 1.0.1
|
||||
Release: 1%{?dist}
|
||||
Summary: VNC server accessible from a web browser
|
||||
|
||||
@@ -7,18 +7,18 @@ 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, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny, perl-DateTime-TimeZone
|
||||
Requires: xorg-x11-xauth, xorg-x11-xkb-utils, xkeyboard-config, xorg-x11-server-utils, openssl, perl, perl-Switch, perl-YAML-Tiny, perl-Hash-Merge-Simple, perl-Scalar-List-Utils, perl-List-MoreUtils, perl-Try-Tiny
|
||||
Conflicts: tigervnc-server, tigervnc-server-minimal
|
||||
|
||||
%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
|
||||
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
|
||||
specification which defines VNC, in order to support modern technologies
|
||||
and increase security. KasmVNC is accessed by users from any modern
|
||||
browser and does not support legacy VNC viewer applications. KasmVNC
|
||||
uses a modern YAML based configuration at the server and user level,
|
||||
allowing for ease of management. KasmVNC is maintained by Kasm
|
||||
KasmVNC provides remote web-based access to a Desktop or application.
|
||||
While VNC is in the name, KasmVNC differs from other VNC variants such
|
||||
as TigerVNC, RealVNC, and TurboVNC. KasmVNC has broken from the RFB
|
||||
specification which defines VNC, in order to support modern technologies
|
||||
and increase security. KasmVNC is accessed by users from any modern
|
||||
browser and does not support legacy VNC viewer applications. KasmVNC
|
||||
uses a modern YAML based configuration at the server and user level,
|
||||
allowing for ease of management. KasmVNC is maintained by Kasm
|
||||
Technologies Corp, www.kasmweb.com.
|
||||
|
||||
WARNING: this package requires EPEL.
|
||||
@@ -52,7 +52,7 @@ cp $SRC_BIN/kasmxproxy $DESTDIR/usr/bin;
|
||||
cp -r $SRC/lib/kasmvnc/ $DESTDIR/usr/lib/kasmvncserver
|
||||
cd $DESTDIR/usr/bin && ln -s kasmvncpasswd vncpasswd;
|
||||
cp -r $SRC/share/doc/kasmvnc*/* $DESTDIR/usr/share/doc/kasmvncserver/
|
||||
rsync -r --links --safe-links --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||
--exclude www/utils/ --exclude .eslintrc --exclude configure \
|
||||
$SRC/share/kasmvnc $DESTDIR/usr/share
|
||||
|
||||
@@ -83,22 +83,8 @@ cd $DST_MAN && ln -s vncpasswd.1 kasmvncpasswd.1;
|
||||
%doc /usr/share/doc/kasmvncserver/README.md
|
||||
|
||||
%changelog
|
||||
* Tue Mar 12 2024 KasmTech <info@kasmweb.com> - 1.2.1-1
|
||||
- Fix exception with Firefox 124 and later
|
||||
- Fix bug with watermarking on odd resolutions
|
||||
* Fri Aug 25 2023 KasmTech <info@kasmweb.com> - 1.2.0-1
|
||||
- Add support for Unix relays for bidirectional communication between noVNC
|
||||
and containerized applications.
|
||||
- Text based watermark overlays with date and time support.
|
||||
- New builds for Bookworm, Alpine 3.18, and Fedora 38.
|
||||
- Multi-language support.
|
||||
- Add support for rendering pixmaps via DRI3 GPU acceleration allowing
|
||||
compositing and other 3d accelerated workloads in a KasmVNC session.
|
||||
- Fix crash that can occur.
|
||||
- Fixed tearing when compositing is enabled with DRI3 hardware acceleration.
|
||||
- Fix stuck command key on MacOS clients.
|
||||
* Wed Apr 05 2023 KasmTech <info@kasmweb.com> - 1.1.0-1
|
||||
- Upstream release
|
||||
* Thu Dec 01 2022 KasmTech <info@kasmweb.com> - 1.0.1-1
|
||||
- Bug fix for extreme video quality using high bandwidth with poor quality
|
||||
* Tue Nov 29 2022 KasmTech <info@kasmweb.com> - 1.0.0-1
|
||||
- WebRTC UDP transit support with support of STUN servers
|
||||
- Lossless compression using multi-threaded WASM QOI decoder client side
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
# - Find freetype
|
||||
# Find the freetype libraries
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# FREETYPE_FOUND - True if freetype is found
|
||||
# FREETYPE_INCLUDE_DIRS - include directories
|
||||
#
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_FREETYPE freetype2)
|
||||
find_path(FREETYPE_INCLUDE_DIRS NAMES ft2build.h HINTS ${PC_FREETYPE_INCLUDE_DIRS})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
set(FPHSA_NAME_MISMATCHED 1)
|
||||
find_package_handle_standard_args(freetype DEFAULT_MSG FREETYPE_INCLUDE_DIRS)
|
||||
unset(FPHSA_NAME_MISMATCHED)
|
||||
mark_as_advanced(FREETYPE_INCLUDE_DIRS)
|
||||
@@ -66,7 +66,6 @@ namespace network {
|
||||
void netResetFrameStatsCall();
|
||||
uint8_t netServerFrameStatsReady();
|
||||
void netUdpUpgrade(void *client, uint32_t ip);
|
||||
void netClearClipboard();
|
||||
|
||||
enum USER_ACTION {
|
||||
NONE,
|
||||
@@ -74,8 +73,7 @@ namespace network {
|
||||
WANT_FRAME_STATS_ALL,
|
||||
WANT_FRAME_STATS_OWNER,
|
||||
WANT_FRAME_STATS_SPECIFIC,
|
||||
UDP_UPGRADE,
|
||||
CLEAR_CLIPBOARD,
|
||||
UDP_UPGRADE
|
||||
};
|
||||
|
||||
uint8_t netRequestFrameStats(USER_ACTION what, const char *client);
|
||||
|
||||
@@ -806,16 +806,3 @@ void GetAPIMessager::netUdpUpgrade(void *client, uint32_t ip) {
|
||||
|
||||
pthread_mutex_unlock(&userMutex);
|
||||
}
|
||||
|
||||
void GetAPIMessager::netClearClipboard() {
|
||||
action_data act;
|
||||
act.action = CLEAR_CLIPBOARD;
|
||||
|
||||
// Send it in
|
||||
if (pthread_mutex_lock(&userMutex))
|
||||
return;
|
||||
|
||||
actionQueue.push_back(act);
|
||||
|
||||
pthread_mutex_unlock(&userMutex);
|
||||
}
|
||||
|
||||
@@ -545,12 +545,6 @@ static uint8_t serverFrameStatsReadyCb(void *messager)
|
||||
return msgr->netServerFrameStatsReady();
|
||||
}
|
||||
|
||||
static void clearClipboardCb(void *messager)
|
||||
{
|
||||
GetAPIMessager *msgr = (GetAPIMessager *) messager;
|
||||
msgr->netClearClipboard();
|
||||
}
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x1010000f
|
||||
|
||||
static pthread_mutex_t *sslmutex;
|
||||
@@ -699,8 +693,6 @@ WebsocketListener::WebsocketListener(const struct sockaddr *listenaddr,
|
||||
settings.getClientFrameStatsNumCb = getClientFrameStatsNumCb;
|
||||
settings.serverFrameStatsReadyCb = serverFrameStatsReadyCb;
|
||||
|
||||
settings.clearClipboardCb = clearClipboardCb;
|
||||
|
||||
openssl_threads();
|
||||
|
||||
pthread_t tid;
|
||||
|
||||
@@ -1596,22 +1596,6 @@ static uint8_t ownerapi(ws_ctx_t *ws_ctx, const char *in, const char * const use
|
||||
ws_send(ws_ctx, buf, strlen(buf));
|
||||
weblog(200, wsthread_handler_id, 0, origip, ip, user, 1, origpath, strlen(buf));
|
||||
|
||||
ret = 1;
|
||||
} else entry("/api/clear_clipboard") {
|
||||
settings.clearClipboardCb(settings.messager);
|
||||
write(wakeuppipe[1], "", 1);
|
||||
|
||||
sprintf(buf, "HTTP/1.1 200 OK\r\n"
|
||||
"Server: KasmVNC/4.0\r\n"
|
||||
"Connection: close\r\n"
|
||||
"Content-type: text/plain\r\n"
|
||||
"Content-length: 6\r\n"
|
||||
"%s"
|
||||
"\r\n"
|
||||
"200 OK", extra_headers ? extra_headers : "");
|
||||
ws_send(ws_ctx, buf, strlen(buf));
|
||||
weblog(200, wsthread_handler_id, 0, origip, ip, user, 1, origpath, strlen(buf));
|
||||
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,8 +105,6 @@ typedef struct {
|
||||
void (*getUsersCb)(void *messager, const char **buf);
|
||||
uint8_t (*getClientFrameStatsNumCb)(void *messager);
|
||||
uint8_t (*serverFrameStatsReadyCb)(void *messager);
|
||||
|
||||
void (*clearClipboardCb)(void *messager);
|
||||
} settings_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
include_directories(${CMAKE_SOURCE_DIR}/common ${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR}
|
||||
include_directories(${CMAKE_SOURCE_DIR}/common ${JPEG_INCLUDE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/unix/kasmvncpasswd)
|
||||
|
||||
set(RFB_SOURCES
|
||||
@@ -65,7 +65,6 @@ set(RFB_SOURCES
|
||||
VNCServerST.cxx
|
||||
ZRLEEncoder.cxx
|
||||
ZRLEDecoder.cxx
|
||||
Watermark.cxx
|
||||
cpuid.cxx
|
||||
encodings.cxx
|
||||
util.cxx
|
||||
@@ -80,7 +79,7 @@ if(WIN32)
|
||||
set(RFB_SOURCES ${RFB_SOURCES} WinPasswdValidator.cxx)
|
||||
endif(WIN32)
|
||||
|
||||
set(RFB_LIBRARIES ${JPEG_LIBRARIES} ${PNG_LIBRARIES} os rdr Xregion)
|
||||
set(RFB_LIBRARIES ${JPEG_LIBRARIES} os rdr Xregion)
|
||||
|
||||
if(HAVE_PAM)
|
||||
set(RFB_SOURCES ${RFB_SOURCES} UnixPasswordValidator.cxx
|
||||
|
||||
@@ -285,8 +285,6 @@ void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
|
||||
// QOI-specific overrides
|
||||
if (supportsQOI)
|
||||
useCopyRect = false;
|
||||
if (Server::DLP_WatermarkImage[0])
|
||||
useCopyRect = false;
|
||||
}
|
||||
|
||||
void ConnParams::setLEDState(unsigned int state)
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include <rfb/UpdateTracker.h>
|
||||
#include <rfb/LogWriter.h>
|
||||
#include <rfb/Exception.h>
|
||||
#include <rfb/Watermark.h>
|
||||
|
||||
#include <rfb/RawEncoder.h>
|
||||
#include <rfb/RREEncoder.h>
|
||||
@@ -163,7 +162,6 @@ static void updateMaxVideoRes(uint16_t *x, uint16_t *y) {
|
||||
EncodeManager::EncodeManager(SConnection* conn_, EncCache *encCache_) : conn(conn_),
|
||||
dynamicQualityMin(-1), dynamicQualityOff(-1),
|
||||
areaCur(0), videoDetected(false), videoTimer(this),
|
||||
watermarkStats(0),
|
||||
maxEncodingTime(0), framesSinceEncPrint(0),
|
||||
encCache(encCache_)
|
||||
{
|
||||
@@ -301,11 +299,6 @@ void EncodeManager::logStats()
|
||||
vlog.info(" Total: %s, %s", a, b);
|
||||
iecPrefix(bytes, "B", a, sizeof(a));
|
||||
vlog.info(" %s (1:%g ratio)", a, ratio);
|
||||
|
||||
if (watermarkData) {
|
||||
siPrefix(watermarkStats, "B", a, sizeof(a));
|
||||
vlog.info(" Watermark data sent: %s", a);
|
||||
}
|
||||
}
|
||||
|
||||
bool EncodeManager::supported(int encoding)
|
||||
@@ -415,14 +408,8 @@ void EncodeManager::doUpdate(bool allowLossy, const Region& changed_,
|
||||
nRects += copypassed.size();
|
||||
nRects += computeNumRects(changed);
|
||||
nRects += computeNumRects(cursorRegion);
|
||||
|
||||
if (watermarkData)
|
||||
nRects++;
|
||||
}
|
||||
|
||||
if (watermarkData)
|
||||
packWatermark(changed);
|
||||
|
||||
conn->writer()->writeFramebufferUpdateStart(nRects);
|
||||
|
||||
writeCopyRects(copied, copyDelta);
|
||||
@@ -440,23 +427,6 @@ void EncodeManager::doUpdate(bool allowLossy, const Region& changed_,
|
||||
if (!videoDetected) // In case detection happened between the calls
|
||||
writeRects(cursorRegion, renderedCursor);
|
||||
|
||||
if (watermarkData) {
|
||||
beforeLength = conn->getOutStream(conn->cp.supportsUdp)->length();
|
||||
|
||||
const Rect rect(0, 0, pb->width(), pb->height());
|
||||
TightEncoder *encoder = ((TightEncoder *) encoders[encoderTight]);
|
||||
|
||||
conn->writer()->startRect(rect, encoder->encoding);
|
||||
encoder->writeWatermarkRect(watermarkData, watermarkDataLen,
|
||||
watermarkInfo.r,
|
||||
watermarkInfo.g,
|
||||
watermarkInfo.b,
|
||||
watermarkInfo.a);
|
||||
conn->writer()->endRect();
|
||||
|
||||
watermarkStats += conn->getOutStream(conn->cp.supportsUdp)->length() - beforeLength;
|
||||
}
|
||||
|
||||
updateQualities();
|
||||
|
||||
conn->writer()->writeFramebufferUpdateEnd();
|
||||
|
||||
@@ -193,7 +193,6 @@ namespace rfb {
|
||||
unsigned updates;
|
||||
EncoderStats copyStats;
|
||||
StatsVector stats;
|
||||
unsigned long long watermarkStats;
|
||||
int activeType;
|
||||
int beforeLength;
|
||||
size_t curMaxUpdateSize;
|
||||
|
||||
@@ -239,8 +239,3 @@ void rfb::Region::debug_print(const char* prefix) const
|
||||
xrgn->rects[i].y2-xrgn->rects[i].y1);
|
||||
}
|
||||
}
|
||||
|
||||
bool rfb::Region::contains(int x, int y) const
|
||||
{
|
||||
return XPointInRegion(xrgn, x, y);
|
||||
}
|
||||
|
||||
@@ -73,8 +73,6 @@ namespace rfb {
|
||||
|
||||
void debug_print(const char *prefix) const;
|
||||
|
||||
bool contains(int x, int y) const;
|
||||
|
||||
protected:
|
||||
|
||||
struct _XRegion* xrgn;
|
||||
|
||||
@@ -86,11 +86,6 @@ namespace rfb {
|
||||
virtual void handleClipboardAnnounceBinary(const unsigned __unused_attr num,
|
||||
const char __unused_attr mimes[][32]) {}
|
||||
|
||||
virtual void clearLocalClipboards() {}
|
||||
|
||||
virtual void receivedUnixRelayData(const char name[], const unsigned char *buf,
|
||||
const unsigned len) {}
|
||||
|
||||
protected:
|
||||
virtual ~SDesktop() {}
|
||||
};
|
||||
|
||||
@@ -98,9 +98,6 @@ namespace rfb {
|
||||
virtual void udpUpgrade(const char *resp) = 0;
|
||||
virtual void udpDowngrade(const bool) = 0;
|
||||
|
||||
virtual void subscribeUnixRelay(const char *name) = 0;
|
||||
virtual void unixRelay(const char *name, const rdr::U8 *buf, const unsigned len) = 0;
|
||||
|
||||
ConnParams cp;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -100,12 +100,6 @@ void SMsgReader::readMsg()
|
||||
case msgTypeUpgradeToUdp:
|
||||
readUpgradeToUdp();
|
||||
break;
|
||||
case msgTypeSubscribeUnixRelay:
|
||||
readSubscribeUnixRelay();
|
||||
break;
|
||||
case msgTypeUnixRelay:
|
||||
readUnixRelay();
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "unknown message type %d\n", msgType);
|
||||
throw Exception("unknown message type");
|
||||
@@ -363,42 +357,3 @@ void SMsgReader::readUpgradeToUdp()
|
||||
|
||||
handler->udpUpgrade(resp);
|
||||
}
|
||||
|
||||
void SMsgReader::readSubscribeUnixRelay()
|
||||
{
|
||||
const rdr::U8 namelen = is->readU8();
|
||||
char name[64];
|
||||
if (namelen >= sizeof(name)) {
|
||||
vlog.error("Ignoring subscribe with too large name");
|
||||
is->skip(namelen);
|
||||
return;
|
||||
}
|
||||
is->readBytes(name, namelen);
|
||||
name[namelen] = '\0';
|
||||
|
||||
handler->subscribeUnixRelay(name);
|
||||
}
|
||||
|
||||
void SMsgReader::readUnixRelay()
|
||||
{
|
||||
const rdr::U8 namelen = is->readU8();
|
||||
char name[64];
|
||||
if (namelen >= sizeof(name)) {
|
||||
vlog.error("Ignoring relay packet with too large name");
|
||||
is->skip(namelen);
|
||||
return;
|
||||
}
|
||||
is->readBytes(name, namelen);
|
||||
name[namelen] = '\0';
|
||||
|
||||
const rdr::U32 len = is->readU32();
|
||||
rdr::U8 buf[1024 * 1024];
|
||||
if (len >= sizeof(buf)) {
|
||||
vlog.error("Ignoring relay packet with too large data");
|
||||
is->skip(len);
|
||||
return ;
|
||||
}
|
||||
is->readBytes(buf, len);
|
||||
|
||||
handler->unixRelay(name, buf, len);
|
||||
}
|
||||
|
||||
@@ -65,9 +65,6 @@ namespace rfb {
|
||||
|
||||
void readUpgradeToUdp();
|
||||
|
||||
void readSubscribeUnixRelay();
|
||||
void readUnixRelay();
|
||||
|
||||
SMsgHandler* handler;
|
||||
rdr::InStream* is;
|
||||
};
|
||||
|
||||
@@ -749,29 +749,3 @@ void SMsgWriter::writeUdpUpgrade(const char *resp)
|
||||
|
||||
endMsg();
|
||||
}
|
||||
|
||||
void SMsgWriter::writeSubscribeUnixRelay(const bool success, const char *msg)
|
||||
{
|
||||
startMsg(msgTypeSubscribeUnixRelay);
|
||||
|
||||
const rdr::U8 len = strlen(msg);
|
||||
os->writeU8(success);
|
||||
os->writeU8(len);
|
||||
os->writeBytes(msg, len);
|
||||
|
||||
endMsg();
|
||||
}
|
||||
|
||||
void SMsgWriter::writeUnixRelay(const char *name, const rdr::U8 *buf, const unsigned len)
|
||||
{
|
||||
startMsg(msgTypeUnixRelay);
|
||||
|
||||
const rdr::U8 namelen = strlen(name);
|
||||
os->writeU8(namelen);
|
||||
os->writeBytes(name, namelen);
|
||||
|
||||
os->writeU32(len);
|
||||
os->writeBytes(buf, len);
|
||||
|
||||
endMsg();
|
||||
}
|
||||
|
||||
@@ -129,9 +129,6 @@ namespace rfb {
|
||||
|
||||
void writeUdpUpgrade(const char *resp);
|
||||
|
||||
void writeSubscribeUnixRelay(const bool success, const char *msg);
|
||||
void writeUnixRelay(const char *name, const rdr::U8 *buf, const unsigned len);
|
||||
|
||||
protected:
|
||||
void startMsg(int type);
|
||||
void endMsg();
|
||||
|
||||
@@ -185,43 +185,6 @@ rfb::BoolParameter rfb::Server::DLP_RegionAllowRelease
|
||||
"Allow click releases inside the blacked-out region",
|
||||
true);
|
||||
|
||||
rfb::IntParameter rfb::Server::DLP_WatermarkRepeatSpace
|
||||
("DLP_WatermarkRepeatSpace",
|
||||
"Number of pixels between repeats of the watermark",
|
||||
0, 0, 4096);
|
||||
rfb::IntParameter rfb::Server::DLP_WatermarkFontSize
|
||||
("DLP_WatermarkFontSize",
|
||||
"Font size for -DLP_WatermarkText",
|
||||
48, 8, 256);
|
||||
rfb::IntParameter rfb::Server::DLP_WatermarkTimeOffset
|
||||
("DLP_WatermarkTimeOffset",
|
||||
"Offset from UTC for -DLP_WatermarkText",
|
||||
0, -24, 24);
|
||||
rfb::IntParameter rfb::Server::DLP_WatermarkTimeOffsetMinutes
|
||||
("DLP_WatermarkTimeOffsetMinutes",
|
||||
"Offset from UTC for -DLP_WatermarkText, minutes",
|
||||
0, -24 * 60, 24 * 60);
|
||||
rfb::StringParameter rfb::Server::DLP_WatermarkImage
|
||||
("DLP_WatermarkImage",
|
||||
"PNG file to use as a watermark",
|
||||
"");
|
||||
rfb::StringParameter rfb::Server::DLP_WatermarkLocation
|
||||
("DLP_WatermarkLocation",
|
||||
"Place the watermark at this position from the corner.",
|
||||
"");
|
||||
rfb::StringParameter rfb::Server::DLP_WatermarkTint
|
||||
("DLP_WatermarkTint",
|
||||
"Tint the greyscale watermark by this color.",
|
||||
"255,255,255,255");
|
||||
rfb::StringParameter rfb::Server::DLP_WatermarkText
|
||||
("DLP_WatermarkText",
|
||||
"Use this text instead of an image for the watermark, with strftime time formatting",
|
||||
"");
|
||||
rfb::StringParameter rfb::Server::DLP_WatermarkFont
|
||||
("DLP_WatermarkFont",
|
||||
"Use this font for -DLP_WatermarkText instead of the bundled one",
|
||||
"");
|
||||
|
||||
rfb::StringParameter rfb::Server::maxVideoResolution
|
||||
("MaxVideoResolution",
|
||||
"When in video mode, downscale the screen to max this size.",
|
||||
|
||||
@@ -48,18 +48,9 @@ namespace rfb {
|
||||
static IntParameter DLP_ClipAcceptMax;
|
||||
static IntParameter DLP_ClipDelay;
|
||||
static IntParameter DLP_KeyRateLimit;
|
||||
static IntParameter DLP_WatermarkRepeatSpace;
|
||||
static IntParameter DLP_WatermarkFontSize;
|
||||
static IntParameter DLP_WatermarkTimeOffset;
|
||||
static IntParameter DLP_WatermarkTimeOffsetMinutes;
|
||||
static StringParameter DLP_ClipLog;
|
||||
static StringParameter DLP_Region;
|
||||
static StringParameter DLP_Clip_Types;
|
||||
static StringParameter DLP_WatermarkImage;
|
||||
static StringParameter DLP_WatermarkLocation;
|
||||
static StringParameter DLP_WatermarkTint;
|
||||
static StringParameter DLP_WatermarkText;
|
||||
static StringParameter DLP_WatermarkFont;
|
||||
static BoolParameter DLP_RegionAllowClick;
|
||||
static BoolParameter DLP_RegionAllowRelease;
|
||||
static IntParameter jpegVideoQuality;
|
||||
|
||||
@@ -25,8 +25,7 @@ namespace rfb {
|
||||
const unsigned int tightPng = 0x0a;
|
||||
const unsigned int tightWebp = 0x0b;
|
||||
const unsigned int tightQoi = 0x0c;
|
||||
const unsigned int tightIT = 0x0d;
|
||||
const unsigned int tightMaxSubencoding = 0x0d;
|
||||
const unsigned int tightMaxSubencoding = 0x0c;
|
||||
|
||||
// Filters to improve compression efficiency
|
||||
const unsigned int tightFilterCopy = 0x00;
|
||||
|
||||
@@ -277,28 +277,6 @@ void TightEncoder::resetZlib()
|
||||
zlibNeedsReset = true;
|
||||
}
|
||||
|
||||
void TightEncoder::writeWatermarkRect(const rdr::U8 *data, const unsigned len,
|
||||
const rdr::U8 r,
|
||||
const rdr::U8 g,
|
||||
const rdr::U8 b,
|
||||
const rdr::U8 a)
|
||||
{
|
||||
rdr::OutStream* os;
|
||||
|
||||
os = conn->getOutStream(conn->cp.supportsUdp);
|
||||
|
||||
os->writeU8(tightIT << 4);
|
||||
|
||||
writeCompact(os, len + 4);
|
||||
|
||||
os->writeU8(r);
|
||||
os->writeU8(g);
|
||||
os->writeU8(b);
|
||||
os->writeU8(a);
|
||||
|
||||
os->writeBytes(data, len);
|
||||
}
|
||||
|
||||
//
|
||||
// Including BPP-dependent implementation of the encoder.
|
||||
//
|
||||
|
||||
@@ -39,11 +39,6 @@ namespace rfb {
|
||||
virtual void writeSolidRect(int width, int height,
|
||||
const PixelFormat& pf,
|
||||
const rdr::U8* colour);
|
||||
void writeWatermarkRect(const rdr::U8 *data, const unsigned len,
|
||||
const rdr::U8 r,
|
||||
const rdr::U8 g,
|
||||
const rdr::U8 b,
|
||||
const rdr::U8 a);
|
||||
void resetZlib();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -51,8 +51,6 @@ static Cursor emptyCursor(0, 0, Point(0, 0), NULL);
|
||||
|
||||
extern rfb::BoolParameter disablebasicauth;
|
||||
|
||||
extern "C" char unixrelaynames[MAX_UNIX_RELAYS][MAX_UNIX_RELAY_NAME_LEN];
|
||||
|
||||
VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
|
||||
bool reverse)
|
||||
: upgradingToUdp(false), sock(s), reverseConnection(reverse),
|
||||
@@ -66,7 +64,7 @@ VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
|
||||
needsPermCheck(false), pointerEventTime(0),
|
||||
clientHasCursor(false),
|
||||
accessRights(AccessDefault), startTime(time(0)), frameTracking(false),
|
||||
udpFramesSinceFull(0), complainedAboutNoViewRights(false)
|
||||
udpFramesSinceFull(0)
|
||||
{
|
||||
setStreams(&sock->inStream(), &sock->outStream());
|
||||
peerEndpoint.buf = sock->getPeerEndpoint();
|
||||
@@ -75,10 +73,6 @@ VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s,
|
||||
memset(bstats_total, 0, sizeof(bstats_total));
|
||||
gettimeofday(&connStart, NULL);
|
||||
|
||||
unsigned i;
|
||||
for (i = 0; i < MAX_UNIX_RELAYS; i++)
|
||||
unixRelaySubscriptions[i][0] = '\0';
|
||||
|
||||
// Check their permissions, if applicable
|
||||
kasmpasswdpath[0] = '\0';
|
||||
wordexp_t wexp;
|
||||
@@ -1314,14 +1308,8 @@ void VNCSConnectionST::writeFramebufferUpdate()
|
||||
}
|
||||
}
|
||||
|
||||
if (!(accessRights & AccessView)) {
|
||||
if (!complainedAboutNoViewRights) {
|
||||
complainedAboutNoViewRights = true;
|
||||
vlog.error("User %s has no read permissions. If this is not intended, grant them permissions with kasmvncpasswd or via the API",
|
||||
user);
|
||||
}
|
||||
if (!(accessRights & AccessView))
|
||||
return;
|
||||
}
|
||||
|
||||
// Updates often consists of many small writes, and in continuous
|
||||
// mode, we will also have small fence messages around the update. We
|
||||
@@ -1789,60 +1777,6 @@ void VNCSConnectionST::udpDowngrade(const bool byServer)
|
||||
cp.useCopyRect = true;
|
||||
encodeManager.resetZlib();
|
||||
|
||||
if (Server::DLP_WatermarkImage[0])
|
||||
cp.useCopyRect = false;
|
||||
|
||||
vlog.info("Client %s downgrading from udp by %s", sock->getPeerAddress(),
|
||||
byServer ? "the server" : "its own request");
|
||||
}
|
||||
|
||||
void VNCSConnectionST::subscribeUnixRelay(const char *name)
|
||||
{
|
||||
bool read, write, owner;
|
||||
if (!getPerms(read, write, owner) || !write) {
|
||||
// Need write permissions to subscribe
|
||||
writer()->writeSubscribeUnixRelay(false, "No permissions");
|
||||
vlog.info("Client tried to subscribe to unix channel %s without permissions", name);
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned i;
|
||||
bool found = false;
|
||||
for (i = 0; i < MAX_UNIX_RELAYS; i++) {
|
||||
if (!strcmp(name, unixrelaynames[i])) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
writer()->writeSubscribeUnixRelay(false, "No such unix channel");
|
||||
vlog.info("Client tried to subscribe to nonexistent unix channel %s", name);
|
||||
return;
|
||||
}
|
||||
|
||||
writer()->writeSubscribeUnixRelay(true, "Ok");
|
||||
for (i = 0; i < MAX_UNIX_RELAYS; i++) {
|
||||
if (!unixRelaySubscriptions[i][0]) {
|
||||
strcpy(unixRelaySubscriptions[i], name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VNCSConnectionST::unixRelay(const char *name, const rdr::U8 *buf, const unsigned len)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < MAX_UNIX_RELAYS; i++) {
|
||||
if (!strcmp(unixRelaySubscriptions[i], name)) {
|
||||
server->desktop->receivedUnixRelayData(name, buf, len);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VNCSConnectionST::sendUnixRelayData(const char name[], const unsigned char *buf,
|
||||
const unsigned len)
|
||||
{
|
||||
writer()->writeUnixRelay(name, buf, len);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include <rfb/EncodeManager.h>
|
||||
#include <rfb/SConnection.h>
|
||||
#include <rfb/Timer.h>
|
||||
#include <rfb/unixRelayLimits.h>
|
||||
|
||||
namespace rfb {
|
||||
class VNCServerST;
|
||||
@@ -201,18 +200,6 @@ namespace rfb {
|
||||
|
||||
bool upgradingToUdp;
|
||||
|
||||
bool isSubscribedToUnixRelay(const char *name) const {
|
||||
unsigned i;
|
||||
for (i = 0; i < MAX_UNIX_RELAYS; i++) {
|
||||
if (!strcmp(unixRelaySubscriptions[i], name))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void sendUnixRelayData(const char name[], const unsigned char *buf,
|
||||
const unsigned len);
|
||||
|
||||
private:
|
||||
// SConnection callbacks
|
||||
|
||||
@@ -235,8 +222,6 @@ namespace rfb {
|
||||
virtual void handleClipboardAnnounce(bool available);
|
||||
virtual void handleClipboardAnnounceBinary(const unsigned num, const char mimes[][32]);
|
||||
virtual void udpUpgrade(const char *resp);
|
||||
virtual void subscribeUnixRelay(const char *name);
|
||||
virtual void unixRelay(const char *name, const rdr::U8 *buf, const unsigned len);
|
||||
virtual void supportsLocalCursor();
|
||||
virtual void supportsFence();
|
||||
virtual void supportsContinuousUpdates();
|
||||
@@ -339,9 +324,6 @@ namespace rfb {
|
||||
|
||||
bool frameTracking;
|
||||
uint32_t udpFramesSinceFull;
|
||||
|
||||
char unixRelaySubscriptions[MAX_UNIX_RELAYS][MAX_UNIX_RELAY_NAME_LEN];
|
||||
bool complainedAboutNoViewRights;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -62,7 +62,6 @@
|
||||
#include <rfb/ServerCore.h>
|
||||
#include <rfb/VNCServerST.h>
|
||||
#include <rfb/VNCSConnectionST.h>
|
||||
#include <rfb/Watermark.h>
|
||||
#include <rfb/util.h>
|
||||
#include <rfb/ledStates.h>
|
||||
|
||||
@@ -833,8 +832,9 @@ static void upgradeClientToUdp(const network::GetAPIMessager::action_data &act,
|
||||
}
|
||||
}
|
||||
|
||||
void VNCServerST::checkAPIMessages(network::GetAPIMessager *apimessager,
|
||||
rdr::U8 &trackingFrameStats, char trackingClient[])
|
||||
static void checkAPIMessages(network::GetAPIMessager *apimessager,
|
||||
rdr::U8 &trackingFrameStats, char trackingClient[],
|
||||
std::list<VNCSConnectionST*> &clients)
|
||||
{
|
||||
if (pthread_mutex_lock(&apimessager->userMutex))
|
||||
return;
|
||||
@@ -866,15 +866,6 @@ void VNCServerST::checkAPIMessages(network::GetAPIMessager *apimessager,
|
||||
case network::GetAPIMessager::UDP_UPGRADE:
|
||||
upgradeClientToUdp(act, clients);
|
||||
break;
|
||||
case network::GetAPIMessager::CLEAR_CLIPBOARD:
|
||||
clearBinaryClipboardData();
|
||||
clipboardClient = NULL;
|
||||
desktop->handleClipboardAnnounceBinary(0, NULL);
|
||||
|
||||
sendBinaryClipboardData("text/plain", NULL, 0);
|
||||
|
||||
desktop->clearLocalClipboards();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -974,11 +965,6 @@ void VNCServerST::writeUpdate()
|
||||
blackOut();
|
||||
}
|
||||
|
||||
if (watermarkData && Server::DLP_WatermarkText[0] && watermarkTextNeedsUpdate(true)) {
|
||||
// If using a text watermark, we have to mark everything as changed...
|
||||
refreshClients();
|
||||
}
|
||||
|
||||
comparer->getUpdateInfo(&ui, pb->getRect());
|
||||
toCheck = ui.changed.union_(ui.copied);
|
||||
|
||||
@@ -1045,7 +1031,7 @@ void VNCServerST::writeUpdate()
|
||||
shottime = msSince(&shotstart);
|
||||
|
||||
trackingFrameStats = 0;
|
||||
checkAPIMessages(apimessager, trackingFrameStats, trackingClient);
|
||||
checkAPIMessages(apimessager, trackingFrameStats, trackingClient, clients);
|
||||
}
|
||||
const rdr::U8 origtrackingFrameStats = trackingFrameStats;
|
||||
|
||||
@@ -1054,9 +1040,6 @@ void VNCServerST::writeUpdate()
|
||||
memset(&jpegstats, 0, sizeof(EncodeManager::codecstats_t));
|
||||
memset(&webpstats, 0, sizeof(EncodeManager::codecstats_t));
|
||||
|
||||
if (watermarkData)
|
||||
updateWatermark();
|
||||
|
||||
for (ci = clients.begin(); ci != clients.end(); ci = ci_next) {
|
||||
ci_next = ci; ci_next++;
|
||||
|
||||
@@ -1253,15 +1236,3 @@ void VNCServerST::refreshClients()
|
||||
(*i)->add_changed_all();
|
||||
}
|
||||
}
|
||||
|
||||
void VNCServerST::sendUnixRelayData(const char name[],
|
||||
const unsigned char *buf, const unsigned len)
|
||||
{
|
||||
// For each client subscribed to this channel, send the data to them
|
||||
std::list<VNCSConnectionST*>::iterator i;
|
||||
for (i = clients.begin(); i != clients.end(); i++) {
|
||||
if ((*i)->isSubscribedToUnixRelay(name)) {
|
||||
(*i)->sendUnixRelayData(name, buf, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,6 @@ namespace rfb {
|
||||
const char mimes[][32]);
|
||||
|
||||
void refreshClients();
|
||||
void sendUnixRelayData(const char name[], const unsigned char *buf, const unsigned len);
|
||||
|
||||
protected:
|
||||
|
||||
@@ -257,8 +256,6 @@ namespace rfb {
|
||||
|
||||
bool getComparerState();
|
||||
|
||||
void updateWatermark();
|
||||
|
||||
QueryConnectionHandler* queryConnectionHandler;
|
||||
KeyRemapper* keyRemapper;
|
||||
|
||||
@@ -287,9 +284,6 @@ namespace rfb {
|
||||
void translateDLPRegion(rdr::U16 &x1, rdr::U16 &y1, rdr::U16 &x2, rdr::U16 &y2) const;
|
||||
|
||||
rdr::U32 clipboardId;
|
||||
|
||||
void checkAPIMessages(network::GetAPIMessager *apimessager,
|
||||
rdr::U8 &trackingFrameStats, char trackingClient[]);
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -1,416 +0,0 @@
|
||||
/* Copyright (C) 2023 Kasm
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
#include <png.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <zlib.h>
|
||||
#include <rfb/LogWriter.h>
|
||||
#include <rfb/ServerCore.h>
|
||||
#include <rfb/VNCServerST.h>
|
||||
#include "font.h"
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#include "Watermark.h"
|
||||
|
||||
using namespace rfb;
|
||||
|
||||
static LogWriter vlog("watermark");
|
||||
|
||||
watermarkInfo_t watermarkInfo;
|
||||
|
||||
uint8_t *watermarkData, *watermarkUnpacked, *watermarkTmp;
|
||||
uint32_t watermarkDataLen;
|
||||
static uint16_t rw, rh;
|
||||
static time_t lastUpdate;
|
||||
|
||||
static FT_Library ft = NULL;
|
||||
static FT_Face face;
|
||||
|
||||
#define MAXW 4096
|
||||
#define MAXH 4096
|
||||
|
||||
static bool loadimage(const char path[]) {
|
||||
|
||||
FILE *f = fopen(path, "r");
|
||||
if (!f) {
|
||||
vlog.error("Can't open %s", path);
|
||||
return false;
|
||||
}
|
||||
|
||||
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
|
||||
if (!png_ptr) return false;
|
||||
png_infop info = png_create_info_struct(png_ptr);
|
||||
if (!info) return false;
|
||||
if (setjmp(png_jmpbuf(png_ptr))) return false;
|
||||
|
||||
png_init_io(png_ptr, f);
|
||||
png_read_png(png_ptr, info,
|
||||
PNG_TRANSFORM_PACKING |
|
||||
PNG_TRANSFORM_STRIP_16 |
|
||||
PNG_TRANSFORM_STRIP_ALPHA |
|
||||
PNG_TRANSFORM_EXPAND, NULL);
|
||||
|
||||
uint8_t **rows = png_get_rows(png_ptr, info);
|
||||
const unsigned imgw = png_get_image_width(png_ptr, info);
|
||||
const unsigned imgh = png_get_image_height(png_ptr, info);
|
||||
|
||||
watermarkInfo.w = imgw;
|
||||
watermarkInfo.h = imgh;
|
||||
watermarkInfo.src = (uint8_t *) calloc(imgw, imgh);
|
||||
|
||||
unsigned x, y;
|
||||
for (y = 0; y < imgh; y++) {
|
||||
for (x = 0; x < imgw; x++) {
|
||||
const uint8_t r = rows[y][x * 3 + 0];
|
||||
const uint8_t g = rows[y][x * 3 + 1];
|
||||
const uint8_t b = rows[y][x * 3 + 2];
|
||||
|
||||
const uint8_t grey = r * .2126f +
|
||||
g * .7152f +
|
||||
b * .0722f;
|
||||
|
||||
const uint8_t out = (grey + 8) >> 4;
|
||||
watermarkInfo.src[y * imgw + x] = out < 16 ? out : 15;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
png_destroy_info_struct(png_ptr, &info);
|
||||
png_destroy_read_struct(&png_ptr, NULL, NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Note: w and h are absolute
|
||||
static void str(uint8_t *buf, const char *txt, const uint32_t x_, const uint32_t y_,
|
||||
const uint32_t w, const uint32_t h,
|
||||
const uint32_t stride) {
|
||||
|
||||
unsigned ucs[256], i, ucslen;
|
||||
unsigned len = strlen(txt);
|
||||
i = 0;
|
||||
ucslen = 0;
|
||||
while (len > 0 && txt[i]) {
|
||||
size_t ret = rfb::utf8ToUCS4(&txt[i], len, &ucs[ucslen]);
|
||||
i += ret;
|
||||
len -= ret;
|
||||
ucslen++;
|
||||
}
|
||||
|
||||
uint32_t x, y;
|
||||
|
||||
x = x_;
|
||||
y = y_;
|
||||
for (i = 0; i < ucslen; i++) {
|
||||
if (FT_Load_Char(face, ucs[i], FT_LOAD_RENDER))
|
||||
continue;
|
||||
const FT_Bitmap * const map = &(face->glyph->bitmap);
|
||||
|
||||
if (FT_HAS_KERNING(face) && i) {
|
||||
FT_Vector delta;
|
||||
FT_Get_Kerning(face, ucs[i - 1], ucs[i], ft_kerning_default, &delta);
|
||||
x += delta.x >> 6;
|
||||
}
|
||||
|
||||
uint32_t row, col;
|
||||
for (row = 0; row < (uint32_t) map->rows; row++) {
|
||||
int ny = row + y - face->glyph->bitmap_top;
|
||||
if (ny < 0)
|
||||
continue;
|
||||
if ((unsigned) ny >= h)
|
||||
continue;
|
||||
|
||||
uint8_t *dst = (uint8_t *) buf;
|
||||
dst += ny * stride + x;
|
||||
|
||||
const uint8_t *src = map->buffer + map->pitch * row;
|
||||
for (col = 0; col < (uint32_t) map->width; col++) {
|
||||
if (col + x >= w)
|
||||
continue;
|
||||
const uint8_t out = (src[col] + 8) >> 4;
|
||||
dst[col] = out < 16 ? out : 15;
|
||||
}
|
||||
}
|
||||
|
||||
x += face->glyph->advance.x >> 6;
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t drawnwidth(const char *txt) {
|
||||
|
||||
unsigned ucs[256], i, ucslen;
|
||||
unsigned len = strlen(txt);
|
||||
i = 0;
|
||||
ucslen = 0;
|
||||
while (len > 0 && txt[i]) {
|
||||
size_t ret = rfb::utf8ToUCS4(&txt[i], len, &ucs[ucslen]);
|
||||
i += ret;
|
||||
len -= ret;
|
||||
ucslen++;
|
||||
}
|
||||
|
||||
uint32_t x;
|
||||
|
||||
x = 0;
|
||||
for (i = 0; i < ucslen; i++) {
|
||||
if (FT_Load_Char(face, ucs[i], FT_LOAD_DEFAULT))
|
||||
continue;
|
||||
|
||||
if (FT_HAS_KERNING(face) && i) {
|
||||
FT_Vector delta;
|
||||
FT_Get_Kerning(face, ucs[i - 1], ucs[i], ft_kerning_default, &delta);
|
||||
x += delta.x >> 6;
|
||||
}
|
||||
|
||||
x += face->glyph->advance.x >> 6;
|
||||
}
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
static bool drawtext(const char fmt[], const int16_t utcOff, const char fontpath[],
|
||||
const uint8_t fontsize) {
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (!ft) {
|
||||
if (FT_Init_FreeType(&ft))
|
||||
abort();
|
||||
if (fontpath[0]) {
|
||||
if (FT_New_Face(ft, fontpath, 0, &face))
|
||||
abort();
|
||||
} else {
|
||||
if (FT_New_Memory_Face(ft, font_otf, sizeof(font_otf), 0, &face))
|
||||
abort();
|
||||
}
|
||||
FT_Set_Pixel_Sizes(face, fontsize, fontsize);
|
||||
}
|
||||
|
||||
time_t now = lastUpdate = time(NULL);
|
||||
now += utcOff * 60;
|
||||
|
||||
struct tm *tm = gmtime(&now);
|
||||
size_t len = strftime(buf, PATH_MAX, fmt, tm);
|
||||
if (!len)
|
||||
return false;
|
||||
|
||||
free(watermarkInfo.src);
|
||||
const uint32_t h = fontsize + 4;
|
||||
const uint32_t w = drawnwidth(buf);
|
||||
|
||||
watermarkInfo.w = w;
|
||||
watermarkInfo.h = h;
|
||||
watermarkInfo.src = (uint8_t *) calloc(w, h);
|
||||
|
||||
str(watermarkInfo.src, buf, 0, fontsize, w, h, w);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool watermarkInit() {
|
||||
memset(&watermarkInfo, 0, sizeof(watermarkInfo_t));
|
||||
watermarkData = watermarkUnpacked = watermarkTmp = NULL;
|
||||
rw = rh = 0;
|
||||
|
||||
if (!Server::DLP_WatermarkImage[0] && !Server::DLP_WatermarkText[0])
|
||||
return true;
|
||||
|
||||
if (Server::DLP_WatermarkImage[0] && Server::DLP_WatermarkText[0]) {
|
||||
vlog.error("WatermarkImage and WatermarkText can't be used together");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Server::DLP_WatermarkImage[0] && !loadimage(Server::DLP_WatermarkImage))
|
||||
return false;
|
||||
|
||||
if (Server::DLP_WatermarkText[0] &&
|
||||
!drawtext(Server::DLP_WatermarkText,
|
||||
Server::DLP_WatermarkTimeOffset * 60 + Server::DLP_WatermarkTimeOffsetMinutes,
|
||||
Server::DLP_WatermarkFont, Server::DLP_WatermarkFontSize))
|
||||
return false;
|
||||
|
||||
if (Server::DLP_WatermarkRepeatSpace && Server::DLP_WatermarkLocation[0]) {
|
||||
vlog.error("Repeat and location can't be used together");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sscanf(Server::DLP_WatermarkTint, "%hhu,%hhu,%hhu,%hhu",
|
||||
&watermarkInfo.r,
|
||||
&watermarkInfo.g,
|
||||
&watermarkInfo.b,
|
||||
&watermarkInfo.a) != 4) {
|
||||
vlog.error("Invalid tint");
|
||||
return false;
|
||||
}
|
||||
|
||||
watermarkInfo.repeat = Server::DLP_WatermarkRepeatSpace;
|
||||
|
||||
if (Server::DLP_WatermarkLocation[0]) {
|
||||
if (sscanf(Server::DLP_WatermarkLocation, "%hd,%hd",
|
||||
&watermarkInfo.x,
|
||||
&watermarkInfo.y) != 2) {
|
||||
vlog.error("Invalid location");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
watermarkUnpacked = (uint8_t *) calloc(MAXW, MAXH);
|
||||
watermarkTmp = (uint8_t *) calloc(MAXW, MAXH / 2);
|
||||
watermarkData = (uint8_t *) calloc(MAXW, MAXH / 2);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// update the screen-size rendered watermark whenever the screen is resized
|
||||
// or if using text, every frame
|
||||
void VNCServerST::updateWatermark() {
|
||||
if (rw == pb->width() &&
|
||||
rh == pb->height()) {
|
||||
|
||||
if (Server::DLP_WatermarkImage[0])
|
||||
return;
|
||||
if (!watermarkTextNeedsUpdate(false))
|
||||
return;
|
||||
}
|
||||
|
||||
if (Server::DLP_WatermarkText[0] && watermarkTextNeedsUpdate(false)) {
|
||||
drawtext(Server::DLP_WatermarkText,
|
||||
Server::DLP_WatermarkTimeOffset * 60 + Server::DLP_WatermarkTimeOffsetMinutes,
|
||||
Server::DLP_WatermarkFont, Server::DLP_WatermarkFontSize);
|
||||
}
|
||||
|
||||
rw = pb->width();
|
||||
rh = pb->height();
|
||||
|
||||
memset(watermarkUnpacked, 0, rw * rh);
|
||||
|
||||
uint16_t x, y, srcy;
|
||||
|
||||
if (watermarkInfo.repeat) {
|
||||
for (y = 0, srcy = 0; y < rh; y++) {
|
||||
for (x = 0; x < rw;) {
|
||||
if (x + watermarkInfo.w < rw)
|
||||
memcpy(&watermarkUnpacked[y * rw + x],
|
||||
&watermarkInfo.src[srcy * watermarkInfo.w],
|
||||
watermarkInfo.w);
|
||||
else
|
||||
memcpy(&watermarkUnpacked[y * rw + x],
|
||||
&watermarkInfo.src[srcy * watermarkInfo.w],
|
||||
rw - x);
|
||||
|
||||
x += watermarkInfo.w + watermarkInfo.repeat;
|
||||
}
|
||||
|
||||
srcy++;
|
||||
if (srcy == watermarkInfo.h) {
|
||||
srcy = 0;
|
||||
y += watermarkInfo.repeat;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int16_t sx, sy;
|
||||
|
||||
if (!watermarkInfo.x)
|
||||
sx = (rw - watermarkInfo.w) / 2;
|
||||
else if (watermarkInfo.x > 0)
|
||||
sx = watermarkInfo.x;
|
||||
else
|
||||
sx = rw - watermarkInfo.w + watermarkInfo.x;
|
||||
|
||||
if (sx < 0)
|
||||
sx = 0;
|
||||
|
||||
if (!watermarkInfo.y)
|
||||
sy = (rh - watermarkInfo.h) / 2;
|
||||
else if (watermarkInfo.y > 0)
|
||||
sy = watermarkInfo.y;
|
||||
else
|
||||
sy = rh - watermarkInfo.h + watermarkInfo.y;
|
||||
|
||||
if (sy < 0)
|
||||
sy = 0;
|
||||
|
||||
for (y = 0; y < watermarkInfo.h; y++) {
|
||||
if (sx + watermarkInfo.w < rw)
|
||||
memcpy(&watermarkUnpacked[(sy + y) * rw + sx],
|
||||
&watermarkInfo.src[y * watermarkInfo.w],
|
||||
watermarkInfo.w);
|
||||
else
|
||||
memcpy(&watermarkUnpacked[(sy + y) * rw + sx],
|
||||
&watermarkInfo.src[y * watermarkInfo.w],
|
||||
rw - sx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void packWatermark(const Region &changed) {
|
||||
// Take the expanded 4-bit data, filter it by the changed rects, pack
|
||||
// to shared bytes, and compress with zlib
|
||||
|
||||
uint16_t x, y;
|
||||
uint8_t pix[2], cur = 0;
|
||||
uint8_t *dst = watermarkTmp;
|
||||
|
||||
const Rect &bounding = changed.get_bounding_rect();
|
||||
|
||||
for (y = 0; y < rh; y++) {
|
||||
// Is the entire line outside the changed area?
|
||||
if (bounding.tl.y > y || bounding.br.y < y) {
|
||||
for (x = 0; x < rw; x++) {
|
||||
pix[cur] = 0;
|
||||
|
||||
if (cur || (y == rh - 1 && x == rw - 1))
|
||||
*dst++ = pix[0] | (pix[1] << 4);
|
||||
|
||||
cur ^= 1;
|
||||
}
|
||||
} else {
|
||||
for (x = 0; x < rw; x++) {
|
||||
pix[cur] = 0;
|
||||
if (bounding.contains(Point(x, y)) && changed.contains(x, y))
|
||||
pix[cur] = watermarkUnpacked[y * rw + x];
|
||||
|
||||
if (cur || (y == rh - 1 && x == rw - 1))
|
||||
*dst++ = pix[0] | (pix[1] << 4);
|
||||
|
||||
cur ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uLong destLen = MAXW * MAXH / 2;
|
||||
if (compress2(watermarkData, &destLen, watermarkTmp, rw * rh / 2 + 1, 1) != Z_OK)
|
||||
vlog.error("Zlib compression error");
|
||||
|
||||
watermarkDataLen = destLen;
|
||||
}
|
||||
|
||||
// Limit changes to once per second
|
||||
bool watermarkTextNeedsUpdate(const bool early) {
|
||||
static time_t now;
|
||||
|
||||
// We're called a couple times per frame, only grab the
|
||||
// time on the first time so it doesn't change inside a frame
|
||||
if (early)
|
||||
now = time(NULL);
|
||||
|
||||
return now != lastUpdate;
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
/* Copyright (C) 2023 Kasm
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
#ifndef WATERMARK_H
|
||||
#define WATERMARK_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <rfb/Region.h>
|
||||
|
||||
struct watermarkInfo_t {
|
||||
uint8_t *src;
|
||||
uint16_t w, h;
|
||||
|
||||
int16_t x, y;
|
||||
uint16_t repeat;
|
||||
|
||||
uint8_t r, g, b, a;
|
||||
};
|
||||
|
||||
extern watermarkInfo_t watermarkInfo;
|
||||
|
||||
bool watermarkInit();
|
||||
void packWatermark(const rfb::Region &changed); // filter and pack the watermark for sending
|
||||
bool watermarkTextNeedsUpdate(const bool early);
|
||||
|
||||
extern uint8_t *watermarkData;
|
||||
extern uint32_t watermarkDataLen;
|
||||
|
||||
#endif
|
||||
3107
common/rfb/font.h
3107
common/rfb/font.h
File diff suppressed because it is too large
Load Diff
@@ -33,8 +33,6 @@ namespace rfb {
|
||||
const int msgTypeRequestFrameStats = 179;
|
||||
const int msgTypeBinaryClipboard = 180;
|
||||
const int msgTypeUpgradeToUdp = 181;
|
||||
const int msgTypeSubscribeUnixRelay = 182;
|
||||
const int msgTypeUnixRelay = 183;
|
||||
|
||||
const int msgTypeServerFence = 248;
|
||||
|
||||
@@ -56,8 +54,6 @@ namespace rfb {
|
||||
// same as the other direction
|
||||
//const int msgTypeBinaryClipboard = 180;
|
||||
//const int msgTypeUpgradeToUdp = 181;
|
||||
//const int msgTypeSubscribeUnixRelay = 182;
|
||||
//const int msgTypeUnixRelay = 183;
|
||||
|
||||
const int msgTypeClientFence = 248;
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#ifndef UNIX_RELAY_LIMITS_H
|
||||
#define UNIX_RELAY_LIMITS_H
|
||||
|
||||
#define MAX_UNIX_RELAYS 4
|
||||
#define MAX_UNIX_RELAY_NAME_LEN 64
|
||||
|
||||
#endif
|
||||
4
debian/Makefile.to_fakebuild_tar_package
vendored
4
debian/Makefile.to_fakebuild_tar_package
vendored
@@ -22,8 +22,8 @@ install: unpack_tarball
|
||||
cp $(SRC_BIN)/kasmxproxy $(DESTDIR)/usr/bin/
|
||||
cp -r $(SRC)/lib/kasmvnc/ $(DESTDIR)/usr/lib/kasmvncserver
|
||||
cp -r $(SRC)/share/doc/kasmvnc*/* $(DESTDIR)/usr/share/doc/kasmvncserver/
|
||||
rsync -r --links --safe-links --exclude '.git*' --exclude po2js \
|
||||
--exclude xgettext-html --exclude www/utils/ --exclude .eslintrc \
|
||||
rsync -r --exclude '.git*' --exclude po2js --exclude xgettext-html \
|
||||
--exclude www/utils/ --exclude .eslintrc \
|
||||
$(SRC)/share/kasmvnc $(DESTDIR)/usr/share
|
||||
sed -e 's/^\([^#]\)/# \1/' $(SRC)/share/kasmvnc/kasmvnc_defaults.yaml > \
|
||||
$(DESTDIR)/etc/kasmvnc/kasmvnc.yaml
|
||||
|
||||
28
debian/changelog
vendored
28
debian/changelog
vendored
@@ -1,30 +1,8 @@
|
||||
kasmvnc (1.2.1-1) unstable; urgency=medium
|
||||
kasmvnc (1.0.1-1) unstable; urgency=medium
|
||||
|
||||
* Fix exception with Firefox 124 and later
|
||||
* Fix bug with watermarking on odd resolutions
|
||||
* Bug fix for extreme video quality using high bandwidth with poor quality
|
||||
|
||||
-- Kasm Technologies LLC <info@kasmweb.com> Tue, 12 Mar 2023 11:38:00 +0000
|
||||
|
||||
kasmvnc (1.2.0-1) unstable; urgency=medium
|
||||
|
||||
* Add support for Unix relays for bidirectional communication between noVNC
|
||||
and containerized applications.
|
||||
* Text based watermark overlays with date and time support.
|
||||
* New builds for Bookworm, Alpine 3.18, and Fedora 38.
|
||||
* Multi-language support.
|
||||
* Add support for rendering pixmaps via DRI3 GPU acceleration allowing
|
||||
compositing and other 3d accelerated workloads in a KasmVNC session.
|
||||
* Fix crash that can occur.
|
||||
* Fixed tearing when compositing is enabled with DRI3 hardware acceleration.
|
||||
* Fix stuck command key on MacOS clients.
|
||||
|
||||
-- Kasm Technologies LLC <info@kasmweb.com> Fri, 25 Aug 2023 05:23:19 +0000
|
||||
|
||||
kasmvnc (1.1.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Kasm Technologies LLC <info@kasmweb.com> Tue, 04 Apr 2023 13:52:14 +0000
|
||||
-- Kasm Technologies LLC <info@kasmweb.com> Thu, 01 Dec 2022 16:03:18 +0000
|
||||
|
||||
kasmvnc (1.0.0-1) unstable; urgency=medium
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user