Вендоринг исходников nextcloud-talk-recording в opt/f7cloud-talk-recording-src и уточнение apt-установки
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
|
||||
OS_VERSION ?= $(shell . /etc/os-release 2> /dev/null && echo $$ID$$VERSION_ID)
|
||||
RELEASE ?= 1
|
||||
DEBIAN_VERSION ?= $(RELEASE)~$(OS_VERSION)
|
||||
|
||||
BUILD_DIR ?= build/$(OS_VERSION)
|
||||
|
||||
NEXTCLOUD_TALK_RECORDING_VERSION := $(shell cd ../src && python3 -c "from nextcloud.talk.recording import __version__; print(__version__)")
|
||||
|
||||
PULSECTL_VERSION := 22.3.2
|
||||
PYVIRTUALDISPLAY_VERSION := 3.0
|
||||
REQUESTS_VERSION := 2.32.4
|
||||
SELENIUM_VERSION := 4.14.0
|
||||
|
||||
CHARSET_NORMALIZER_VERSION := 3.4.4
|
||||
|
||||
CERTIFI_VERSION := 2024.7.4
|
||||
TRIO_VERSION := 0.21.0
|
||||
TRIO_WEBSOCKET_VERSION := 0.9.2
|
||||
URLLIB3_VERSION := 1.26.19
|
||||
|
||||
timestamp-from-git = git log -1 --pretty=%ct $(1)
|
||||
|
||||
timestamp-from-source-python-package = tar --list --verbose --full-time --gzip --file $(1) | head --lines 1 | sed 's/ \+/ /g' | cut --delimiter " " --fields 4-5 | date --file - +%s
|
||||
|
||||
build-source-python-package = python3 -m build --sdist --outdir $(1) $(2)
|
||||
|
||||
download-source-python-package = python3 -m pip download --dest $(BUILD_DIR) --no-binary :all: --no-deps "$(1) == $(2)"
|
||||
|
||||
extract-source-python-package = cd $(BUILD_DIR) && tar --extract --gzip --file $(1)-$(2).tar.gz
|
||||
|
||||
# Since the 60.0.0 release, Setuptools includes a local, vendored copy of
|
||||
# distutils; this copy does not seem to work with stdeb, so it needs to be
|
||||
# disabled with "SETUPTOOLS_USE_DISTUTILS=stdlib".
|
||||
build-deb-package = cd $(BUILD_DIR)/$(1)-$(2)/ && SOURCE_DATE_EPOCH=$(3) SETUPTOOLS_USE_DISTUTILS=stdlib python3 setup.py --command-packages=stdeb.command sdist_dsc --debian-version $(DEBIAN_VERSION) bdist_deb
|
||||
|
||||
copy-binary-deb-package = cp $(BUILD_DIR)/$(1)-$(2)/deb_dist/$(3)_$(2)-$(DEBIAN_VERSION)_all.deb $(BUILD_DIR)/deb/
|
||||
|
||||
define build-deb-python-package-full
|
||||
$(call download-source-python-package,$(1),$(2))
|
||||
$(call extract-source-python-package,$(1),$(2))
|
||||
$(call build-deb-package,$(1),$(2),$$($(call timestamp-from-source-python-package,../$(1)-$(2).tar.gz)))
|
||||
$(call copy-binary-deb-package,$(1),$(2),python3-$(3))
|
||||
endef
|
||||
|
||||
build-packages-deb: build-packages-deb-nextcloud-talk-recording build-packages-deb-nextcloud-talk-recording-dependencies
|
||||
|
||||
$(BUILD_DIR)/deb:
|
||||
mkdir --parents $(BUILD_DIR)/deb
|
||||
|
||||
build-packages-deb-nextcloud-talk-recording: $(BUILD_DIR)/deb/nextcloud-talk-recording_$(NEXTCLOUD_TALK_RECORDING_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/nextcloud-talk-recording_$(NEXTCLOUD_TALK_RECORDING_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-source-python-package,$(BUILD_DIR),../)
|
||||
|
||||
# Starting with setup tools 69.3 the name of the generated Python source
|
||||
# package is canonicalized based on PEP 625, so it becomes
|
||||
# "nextcloud_talk_recording". The name of the Debian binary package is
|
||||
# not affected, so it is still matches the project name,
|
||||
# "nextcloud-talk-recording".
|
||||
|
||||
$(call extract-source-python-package,nextcloud_talk_recording,$(NEXTCLOUD_TALK_RECORDING_VERSION))
|
||||
|
||||
# Add extra files needed to create Debian packages:
|
||||
# - debian/py3dist-overrides: Python dependencies to Debian dependencies for
|
||||
# dh_python3 (also needed in the regenerated Python package, as it is
|
||||
# needed in the Debian package).
|
||||
# - MANIFEST.in: the source package is regenerated to include the extra
|
||||
# files needed for the Debian package; MANIFEST.in explicitly adds those
|
||||
# files not included by default in a Python package (so setup.py does not
|
||||
# need to be included in MANIFEST.in, but debian/py3dist-overrides does).
|
||||
# - setup.py: legacy setup file needed for stdeb (also needed in the
|
||||
# regenerated Python package, as stdeb is invoked through it to create the
|
||||
# source Debian package).
|
||||
# - stdeb.cfg: additional configuration for stdeb (not needed in the
|
||||
# regenerated Python package, as stdeb loads it before changing to the
|
||||
# uncompressed source Python package).
|
||||
cp --recursive nextcloud-talk-recording/. $(BUILD_DIR)/nextcloud_talk_recording-$(NEXTCLOUD_TALK_RECORDING_VERSION)/
|
||||
cp ../server.conf.in $(BUILD_DIR)/nextcloud_talk_recording-$(NEXTCLOUD_TALK_RECORDING_VERSION)/
|
||||
|
||||
# Build a source Debian package (with the systemd addon for dh) and then,
|
||||
# from it, a binary Debian package.
|
||||
cd $(BUILD_DIR)/nextcloud_talk_recording-$(NEXTCLOUD_TALK_RECORDING_VERSION)/ && SOURCE_DATE_EPOCH=$$($(call timestamp-from-git,../../../../)) SETUPTOOLS_USE_DISTUTILS=stdlib python3 setup.py --command-packages=stdeb.command sdist_dsc --with-dh-systemd --debian-version $(DEBIAN_VERSION) bdist_deb
|
||||
|
||||
$(call copy-binary-deb-package,nextcloud_talk_recording,$(NEXTCLOUD_TALK_RECORDING_VERSION),nextcloud-talk-recording)
|
||||
|
||||
# Builds the Python dependencies that are not included in at least one of the
|
||||
# Ubuntu supported releases:
|
||||
# - Debian 11 (bullseye): pulsectl, pyvirtualdisplay >= 2.0, selenium >= 4.11.0
|
||||
# - Ubuntu 20.04 (focal): pulsectl, pyvirtualdisplay >= 2.0, requests >= 2.25, selenium >= 4.11.0
|
||||
# - Ubuntu 22.04 (jammy): pulsectl, selenium >= 4.11.0
|
||||
#
|
||||
# requests < 2.25 is not compatible with urllib3 >= 1.26, which is required by
|
||||
# selenium.
|
||||
build-packages-deb-nextcloud-talk-recording-dependencies: build-packages-deb-nextcloud-talk-recording-dependencies-$(OS_VERSION)
|
||||
|
||||
build-packages-deb-nextcloud-talk-recording-dependencies-debian11: build-packages-deb-pulsectl build-packages-deb-pyvirtualdisplay build-packages-deb-selenium build-packages-deb-selenium-dependencies
|
||||
build-packages-deb-nextcloud-talk-recording-dependencies-ubuntu20.04: build-packages-deb-pulsectl build-packages-deb-pyvirtualdisplay build-packages-deb-requests build-packages-deb-requests-dependencies build-packages-deb-selenium build-packages-deb-selenium-dependencies
|
||||
build-packages-deb-nextcloud-talk-recording-dependencies-ubuntu22.04: build-packages-deb-pulsectl build-packages-deb-selenium build-packages-deb-selenium-dependencies
|
||||
|
||||
build-packages-deb-pulsectl: $(BUILD_DIR)/deb/python3-pulsectl_$(PULSECTL_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-pulsectl_$(PULSECTL_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,pulsectl,$(PULSECTL_VERSION),pulsectl)
|
||||
|
||||
build-packages-deb-pyvirtualdisplay: $(BUILD_DIR)/deb/python3-pyvirtualdisplay_$(PYVIRTUALDISPLAY_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-pyvirtualdisplay_$(PYVIRTUALDISPLAY_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,PyVirtualDisplay,$(PYVIRTUALDISPLAY_VERSION),pyvirtualdisplay)
|
||||
|
||||
build-packages-deb-requests: $(BUILD_DIR)/deb/python3-requests_$(REQUESTS_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-requests_$(REQUESTS_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call download-source-python-package,requests,$(REQUESTS_VERSION))
|
||||
|
||||
$(call extract-source-python-package,requests,$(REQUESTS_VERSION))
|
||||
|
||||
# The Python dependencies are added automatically to the .deb
|
||||
# dependencies, but they do not include those for which a package does
|
||||
# not exist, like "charset_normalizer". Due to that
|
||||
# "debian/py3dist-overrides" is used to explicitly set the dependencies.
|
||||
cp --recursive requests/debian $(BUILD_DIR)/requests-$(REQUESTS_VERSION)/
|
||||
# The package provides its own MANIFEST.in, so the contents need to be
|
||||
# appended rather than just copied.
|
||||
cat requests/MANIFEST.in >> $(BUILD_DIR)/requests-$(REQUESTS_VERSION)/MANIFEST.in
|
||||
|
||||
$(call build-deb-package,requests,$(REQUESTS_VERSION),$$($(call timestamp-from-source-python-package,../requests-$(REQUESTS_VERSION).tar.gz)))
|
||||
|
||||
$(call copy-binary-deb-package,requests,$(REQUESTS_VERSION),python3-requests)
|
||||
|
||||
# Builds the Python dependencies that are not included in at least one of the
|
||||
# Ubuntu supported releases:
|
||||
# - Debian 11 (bullseye): unneeded, uses requests package from distribution
|
||||
# - Ubuntu 20.04 (focal): charset-normalizer >= 2, < 4
|
||||
# - Ubuntu 22.04 (jammy): unneeded, uses requests package from distribution
|
||||
build-packages-deb-requests-dependencies: build-packages-deb-requests-dependencies-$(OS_VERSION)
|
||||
|
||||
build-packages-deb-requests-dependencies-debian11:
|
||||
build-packages-deb-requests-dependencies-ubuntu20.04: build-packages-deb-charset-normalizer
|
||||
build-packages-deb-requests-dependencies-ubuntu22.04:
|
||||
|
||||
build-packages-deb-charset-normalizer: $(BUILD_DIR)/deb/python3-charset-normalizer_$(CHARSET_NORMALIZER_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-charset-normalizer_$(CHARSET_NORMALIZER_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,charset_normalizer,$(CHARSET_NORMALIZER_VERSION),charset-normalizer)
|
||||
|
||||
build-packages-deb-selenium: $(BUILD_DIR)/deb/python3-selenium_$(SELENIUM_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-selenium_$(SELENIUM_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call download-source-python-package,selenium,$(SELENIUM_VERSION))
|
||||
|
||||
$(call extract-source-python-package,selenium,$(SELENIUM_VERSION))
|
||||
|
||||
# The Python dependencies are added automatically to the .deb dependencies,
|
||||
# but they do not include the version. The supported distributions provide
|
||||
# an incompatible version for some of the dependencies, so
|
||||
# "debian/py3dist-overrides" is used to explicitly set the version in the
|
||||
# .deb packages and ensure that the right dependency is installed.
|
||||
cp --recursive selenium/debian $(BUILD_DIR)/selenium-$(SELENIUM_VERSION)/
|
||||
# The package provides its own MANIFEST.in, so the contents need to be
|
||||
# appended rather than just copied.
|
||||
cat selenium/MANIFEST.in >> $(BUILD_DIR)/selenium-$(SELENIUM_VERSION)/MANIFEST.in
|
||||
|
||||
# The source Python package includes a pre-built Selenium manager, but
|
||||
# without execute permissions, so they need to be explicitly set.
|
||||
chmod a+x $(BUILD_DIR)/selenium-$(SELENIUM_VERSION)/selenium/webdriver/common/linux/selenium-manager
|
||||
|
||||
$(call build-deb-package,selenium,$(SELENIUM_VERSION),$$($(call timestamp-from-source-python-package,../selenium-$(SELENIUM_VERSION).tar.gz)))
|
||||
|
||||
$(call copy-binary-deb-package,selenium,$(SELENIUM_VERSION),python3-selenium)
|
||||
|
||||
# Builds the Python dependencies that are not included in at least one of the
|
||||
# Ubuntu supported releases:
|
||||
# - Debian 11 (bullseye): python3-certifi >= 2021.10.8, python3-trio ~= 0.17, python3-trio-websocket ~= 0.9
|
||||
# - Ubuntu 20.04 (focal): python3-certifi >= 2021.10.8, python3-trio ~= 0.17, python3-trio-websocket ~= 0.9, python3-urllib3 >= 1.26, < 3
|
||||
# - Ubuntu 22.04 (jammy): python3-certifi >= 2021.10.8, python3-trio-websocket ~= 0.9
|
||||
build-packages-deb-selenium-dependencies: build-packages-deb-selenium-dependencies-$(OS_VERSION)
|
||||
|
||||
build-packages-deb-selenium-dependencies-debian11: build-packages-deb-certifi build-packages-deb-trio build-packages-deb-trio-websocket
|
||||
build-packages-deb-selenium-dependencies-ubuntu20.04: build-packages-deb-certifi build-packages-deb-trio build-packages-deb-trio-websocket build-packages-deb-urllib
|
||||
build-packages-deb-selenium-dependencies-ubuntu22.04: build-packages-deb-certifi build-packages-deb-trio-websocket
|
||||
|
||||
build-packages-deb-certifi: $(BUILD_DIR)/deb/python3-certifi_$(CERTIFI_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-certifi_$(CERTIFI_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,certifi,$(CERTIFI_VERSION),certifi)
|
||||
|
||||
build-packages-deb-trio: $(BUILD_DIR)/deb/python3-trio_$(TRIO_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-trio_$(TRIO_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,trio,$(TRIO_VERSION),trio)
|
||||
|
||||
build-packages-deb-trio-websocket: $(BUILD_DIR)/deb/python3-trio-websocket_$(TRIO_WEBSOCKET_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-trio-websocket_$(TRIO_WEBSOCKET_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,trio-websocket,$(TRIO_WEBSOCKET_VERSION),trio-websocket)
|
||||
|
||||
build-packages-deb-urllib: $(BUILD_DIR)/deb/python3-urllib3_$(URLLIB3_VERSION)-$(DEBIAN_VERSION)_all.deb
|
||||
$(BUILD_DIR)/deb/python3-urllib3_$(URLLIB3_VERSION)-$(DEBIAN_VERSION)_all.deb: | $(BUILD_DIR)/deb
|
||||
$(call build-deb-python-package-full,urllib3,$(URLLIB3_VERSION),urllib3)
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# Helper script to build the recording backend packages for Nextcloud Talk.
|
||||
#
|
||||
# This script creates containers with the supported operating systems, installs
|
||||
# all the needed dependencies in them and builds the packages for the recording
|
||||
# backend inside the container. If the container exists already the previous
|
||||
# container will be reused and this script will simply build the recording
|
||||
# backend in it. The packages will be created in the
|
||||
# "build/{DISTRIBUTION-ID}/{PACKAGE-FORMAT}/" directory under "packaging" with
|
||||
# the same user that owns the "packaging" directory.
|
||||
#
|
||||
# Due to that the Docker container will not be stopped nor removed when the
|
||||
# script exits (except when the container was created but it could not be
|
||||
# started); that must be explicitly done once the container is no longer needed.
|
||||
#
|
||||
#
|
||||
#
|
||||
# DOCKER AND PERMISSIONS
|
||||
#
|
||||
# To perform its job, this script requires the "docker" command to be available.
|
||||
#
|
||||
# The Docker Command Line Interface (the "docker" command) requires special
|
||||
# permissions to talk to the Docker daemon, and those permissions are typically
|
||||
# available only to the root user. Please see the Docker documentation to find
|
||||
# out how to give access to a regular user to the Docker daemon:
|
||||
# https://docs.docker.com/engine/installation/linux/linux-postinstall/
|
||||
#
|
||||
# Note, however, that being able to communicate with the Docker daemon is the
|
||||
# same as being able to get root privileges for the system. Therefore, you must
|
||||
# give access to the Docker daemon (and thus run this script as) ONLY to trusted
|
||||
# and secure users:
|
||||
# https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
|
||||
|
||||
# Sets the variables that abstract the differences in command names and options
|
||||
# between operating systems.
|
||||
#
|
||||
# Switches between timeout on GNU/Linux and gtimeout on macOS (same for mktemp
|
||||
# and gmktemp).
|
||||
function setOperatingSystemAbstractionVariables() {
|
||||
case "$OSTYPE" in
|
||||
darwin*)
|
||||
if [ "$(which gtimeout)" == "" ]; then
|
||||
echo "Please install coreutils (brew install coreutils)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MKTEMP=gmktemp
|
||||
TIMEOUT=gtimeout
|
||||
DOCKER_OPTIONS="-e no_proxy=localhost "
|
||||
;;
|
||||
linux*)
|
||||
MKTEMP=mktemp
|
||||
TIMEOUT=timeout
|
||||
DOCKER_OPTIONS=" "
|
||||
;;
|
||||
*)
|
||||
echo "Operating system ($OSTYPE) not supported"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Removes Docker container if it was created but failed to start.
|
||||
function cleanUp() {
|
||||
# Disable (yes, "+" disables) exiting immediately on errors to ensure that
|
||||
# all the cleanup commands are executed (well, no errors should occur during
|
||||
# the cleanup anyway, but just in case).
|
||||
set +o errexit
|
||||
|
||||
# The name filter must be specified as "^/XXX$" to get an exact match; using
|
||||
# just "XXX" would match every name that contained "XXX".
|
||||
if [ -n "$(docker ps --all --quiet --filter status=created --filter name="^/$CONTAINER-debian11$")" ]; then
|
||||
echo "Removing Docker container $CONTAINER-debian11"
|
||||
docker rm --volumes --force $CONTAINER-debian11
|
||||
fi
|
||||
if [ -n "$(docker ps --all --quiet --filter status=created --filter name="^/$CONTAINER-ubuntu20.04$")" ]; then
|
||||
echo "Removing Docker container $CONTAINER-ubuntu20.04"
|
||||
docker rm --volumes --force $CONTAINER-ubuntu20.04
|
||||
fi
|
||||
if [ -n "$(docker ps --all --quiet --filter status=created --filter name="^/$CONTAINER-ubuntu22.04$")" ]; then
|
||||
echo "Removing Docker container $CONTAINER-ubuntu22.04"
|
||||
docker rm --volumes --force $CONTAINER-ubuntu22.04
|
||||
fi
|
||||
}
|
||||
|
||||
# Exit immediately on errors.
|
||||
set -o errexit
|
||||
|
||||
# Execute cleanUp when the script exits, either normally or due to an error.
|
||||
trap cleanUp EXIT
|
||||
|
||||
# Ensure working directory is script directory, as some actions (like mounting
|
||||
# the volumes in the container) expect that.
|
||||
cd "$(dirname $0)"
|
||||
|
||||
HELP="Usage: $(basename $0) [OPTION]...
|
||||
|
||||
Options (all options can be omitted, but when present they must appear in the
|
||||
following order):
|
||||
--help prints this help and exits.
|
||||
--container CONTAINER_NAME the name (prefix) to assign to the containers.
|
||||
Defaults to nextcloud-talk-recording-packages-builder."
|
||||
if [ "$1" = "--help" ]; then
|
||||
echo "$HELP"
|
||||
|
||||
exit 0
|
||||
fi
|
||||
|
||||
CONTAINER="nextcloud-talk-recording-packages-builder"
|
||||
if [ "$1" = "--container" ]; then
|
||||
CONTAINER="$2"
|
||||
|
||||
shift 2
|
||||
fi
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
echo "Invalid option (or at invalid position): $1
|
||||
|
||||
$HELP"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
setOperatingSystemAbstractionVariables
|
||||
|
||||
# If the containers are not found new ones are prepared. Otherwise the existing
|
||||
# containers are used.
|
||||
#
|
||||
# The name filter must be specified as "^/XXX$" to get an exact match; using
|
||||
# just "XXX" would match every name that contained "XXX".
|
||||
if [ -z "$(docker ps --all --quiet --filter name="^/$CONTAINER-debian11$")" ]; then
|
||||
echo "Creating Nextcloud Talk recording packages builder container for Debian 11"
|
||||
docker run --detach --tty --volume "$(realpath ../)":/nextcloud-talk-recording/ --name=$CONTAINER-debian11 $DOCKER_OPTIONS debian:11 bash
|
||||
|
||||
echo "Installing required build dependencies"
|
||||
# "noninteractive" is used to provide default settings instead of asking for
|
||||
# them (for example, for tzdata).
|
||||
docker exec $CONTAINER-debian11 bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes make python3 python3-pip python3-venv python3-all debhelper dh-python git dh-exec"
|
||||
docker exec $CONTAINER-debian11 bash -c "python3 -m pip install 'stdeb < 0.11.0' build 'setuptools >= 61.0'"
|
||||
fi
|
||||
if [ -z "$(docker ps --all --quiet --filter name="^/$CONTAINER-ubuntu20.04$")" ]; then
|
||||
echo "Creating Nextcloud Talk recording packages builder container for Ubuntu 20.04"
|
||||
docker run --detach --tty --volume "$(realpath ../)":/nextcloud-talk-recording/ --name=$CONTAINER-ubuntu20.04 $DOCKER_OPTIONS ubuntu:20.04 bash
|
||||
|
||||
echo "Installing required build dependencies"
|
||||
# "noninteractive" is used to provide default settings instead of asking for
|
||||
# them (for example, for tzdata).
|
||||
docker exec $CONTAINER-ubuntu20.04 bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes make python3 python3-pip python3-venv python3-all debhelper dh-python git dh-exec"
|
||||
docker exec $CONTAINER-ubuntu20.04 bash -c "python3 -m pip install 'stdeb < 0.11.0' build 'setuptools >= 61.0'"
|
||||
fi
|
||||
if [ -z "$(docker ps --all --quiet --filter name="^/$CONTAINER-ubuntu22.04$")" ]; then
|
||||
echo "Creating Nextcloud Talk recording packages builder container for Ubuntu 22.04"
|
||||
docker run --detach --tty --volume "$(realpath ../)":/nextcloud-talk-recording/ --name=$CONTAINER-ubuntu22.04 $DOCKER_OPTIONS ubuntu:22.04 bash
|
||||
|
||||
echo "Installing required build dependencies"
|
||||
# "noninteractive" is used to provide default settings instead of asking for
|
||||
# them (for example, for tzdata).
|
||||
# Due to a bug in python3-build in Ubuntu 22.04 python3-virtualenv needs to
|
||||
# be used instead of python3-venv:
|
||||
# https://bugs.launchpad.net/ubuntu/+source/python-build/+bug/1992108
|
||||
# Even with virtualenv there is no proper virtual environment, so the build
|
||||
# dependencies specified in pyproject.toml need to be installed system wide.
|
||||
# setuptools >= 71.0.0 prefers installed dependencies over vendored ones,
|
||||
# but as it requires packaging >= 22 and the installed python3-packaging is
|
||||
# 21.3 it can not be used.
|
||||
# https://github.com/pypa/setuptools/issues/4483
|
||||
docker exec $CONTAINER-ubuntu22.04 bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes make python3 python3-pip python3-virtualenv python3-build python3-stdeb python3-all debhelper dh-python git dh-exec"
|
||||
docker exec $CONTAINER-ubuntu22.04 bash -c "python3 -m pip install 'setuptools >= 69.3, < 71.0.0'"
|
||||
# Some packages need to be installed so the unit tests can be run in the
|
||||
# packages being built.
|
||||
docker exec $CONTAINER-ubuntu22.04 bash -c "apt-get install --assume-yes pulseaudio python3-async-generator python3-trio python3-wsproto"
|
||||
fi
|
||||
|
||||
# Start existing containers if they are stopped.
|
||||
if [ -n "$(docker ps --all --quiet --filter status=exited --filter name="^/$CONTAINER-debian11$")" ]; then
|
||||
echo "Starting Talk recording packages builder container for Debian 11"
|
||||
docker start $CONTAINER-debian11
|
||||
fi
|
||||
if [ -n "$(docker ps --all --quiet --filter status=exited --filter name="^/$CONTAINER-ubuntu20.04$")" ]; then
|
||||
echo "Starting Talk recording packages builder container for Ubuntu 20.04"
|
||||
docker start $CONTAINER-ubuntu20.04
|
||||
fi
|
||||
if [ -n "$(docker ps --all --quiet --filter status=exited --filter name="^/$CONTAINER-ubuntu22.04$")" ]; then
|
||||
echo "Starting Talk recording packages builder container for Ubuntu 22.04"
|
||||
docker start $CONTAINER-ubuntu22.04
|
||||
fi
|
||||
|
||||
USER=$(ls -l --numeric-uid-gid --directory . | sed 's/ \+/ /g' | cut --delimiter " " --fields 3)
|
||||
|
||||
echo "Building recording backend packages for Debian 11"
|
||||
docker exec --tty --interactive --user $USER --workdir /nextcloud-talk-recording/packaging $CONTAINER-debian11 make
|
||||
|
||||
echo "Building recording backend packages for Ubuntu 20.04"
|
||||
docker exec --tty --interactive --user $USER --workdir /nextcloud-talk-recording/packaging $CONTAINER-ubuntu20.04 make
|
||||
|
||||
echo "Building recording backend packages for Ubuntu 22.04"
|
||||
docker exec --tty --interactive --user $USER --workdir /nextcloud-talk-recording/packaging $CONTAINER-ubuntu22.04 make
|
||||
@@ -0,0 +1,2 @@
|
||||
graft debian
|
||||
include server.conf.in
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/dh-exec
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
server.conf.in => /etc/nextcloud-talk-recording/server.conf
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
set -e
|
||||
|
||||
# The user running nextcloud-talk-recording needs a home directory for
|
||||
# geckodriver and PulseAudio related files.
|
||||
# The user will not be automatically removed if the package is uninstalled or
|
||||
# purged to avoid leaving behind files owned by the user/group.
|
||||
adduser --system nextcloud-talk-recording
|
||||
|
||||
#DEBHELPER#
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
[Unit]
|
||||
Description=Recording server for Nextcloud Talk
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=nextcloud-talk-recording
|
||||
WorkingDirectory=~
|
||||
ExecStart=/usr/bin/nextcloud-talk-recording --config /etc/nextcloud-talk-recording/server.conf
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
pulsectl python3-pulsectl
|
||||
pyvirtualdisplay python3-pyvirtualdisplay (>= 2.0)
|
||||
selenium python3-selenium (>= 4.11.0)
|
||||
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
# Dummy setup.py file to be used by stdeb; setuptools >= 61.0 must be used to
|
||||
# get the proper configuration from the pyproject.toml file.
|
||||
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
# pyproject.toml uses different keywords that are not properly converted to
|
||||
# the old ones, so they need to be explicitly set here to be used by stdeb.
|
||||
# "author" can not be set without "author_email". Moreover, if the email was
|
||||
# also set in pyproject.toml it could not be set here either, as due to how
|
||||
# the parameters are internally handled by stdeb it would end mixing the
|
||||
# author set here with the author and email set in pyproject.toml.
|
||||
url = "https://github.com/nextcloud/nextcloud-talk-recording",
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
[DEFAULT]
|
||||
Package3: nextcloud-talk-recording
|
||||
Build-Depends: dh-exec
|
||||
Depends3: adduser, ffmpeg, firefox, firefox-geckodriver, pulseaudio, xvfb
|
||||
@@ -0,0 +1 @@
|
||||
graft debian
|
||||
@@ -0,0 +1,4 @@
|
||||
certifi python3-certifi (>=2017.4.17)
|
||||
charset_normalizer python3-charset-normalizer (>=2), python3-charset-normalizer (<<4)
|
||||
idna python3-idna (>=2.5), python3-idna (<<4)
|
||||
urllib3 python3-urllib3 (>=1.21.1), python3-urllib3 (<<3)
|
||||
@@ -0,0 +1,3 @@
|
||||
graft debian
|
||||
include selenium/types.py
|
||||
include selenium/webdriver/common/linux/selenium-manager
|
||||
@@ -0,0 +1,4 @@
|
||||
urllib3 python3-urllib3 (>=1.26), python3-urllib3 (<<2.0)
|
||||
trio python3-trio (>=0.17), python3-trio (<<1.0)
|
||||
trio-websocket python3-trio-websocket (>=0.9), python3-trio-websocket (<<1.0)
|
||||
certifi python3-certifi (>=2021.10.8)
|
||||
Reference in New Issue
Block a user