diff --git a/Jenkinsfile b/Jenkinsfile index 08c453d6f71fe60be244269e1a8a1798af4ee730..8494fcf02d2f6d804e9a26b5b649237821e57445 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,46 +3,100 @@ // Note: To work on this script without having to push a commit each // time, use the jenkins-cli command (see: // https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Usage_CLI_de_Jenkins). +// +// Requirements: +// 1. gerrit-trigger plugin +// 2. ws-cleanup plugin +// 3. ansicolor plugin + +// Configuration globals. +def SUBMODULES = ['daemon', 'lrc', 'client-gnome', 'client-qt'] +def TARGETS = [:] +def SSH_PRIVATE_KEY = '/var/lib/jenkins/.ssh/gplpriv' +def REMOTE_HOST = env.SSH_HOST_DL_RING_CX +def REMOTE_BASE_DIR = '/srv/repository/ring' +def RING_PUBLIC_KEY_FINGERPRINT = 'A295D773307D25A33AE72F2F64CD5FA175348F84' +def SNAPCRAFT_KEY = '/var/lib/jenkins/.snap/key' + pipeline { agent { label 'guix' } + triggers { + gerrit customUrl: '', + gerritProjects: [ + [branches: [[compareType: 'PLAIN', pattern: 'master']], + compareType: 'PLAIN', + disableStrictForbiddenFileVerification: false, + pattern: 'ring-project']], + triggerOnEvents: [ + commentAddedContains('!build'), + patchsetCreated(excludeDrafts: true, excludeNoCodeChange: true, + excludeTrivialRebase: true)] + } + + options { + ansiColor('xterm') + } + parameters { string(name: 'GERRIT_REFSPEC', defaultValue: 'refs/heads/master', description: 'The Gerrit refspec to fetch.') - - booleanParam(name: 'BUILD_OWN_QT', + booleanParam(name: 'WITH_MANUAL_SUBMODULES', defaultValue: false, - description: 'Whether to build our own Qt packages.') + description: 'Checkout the ' + SUBMODULES.join(', ') + + ' submodules at their Git-recorded commit. When left ' + + 'unticked (the default), checkout the submodules at ' + + 'their latest commit from their main remote branch.') booleanParam(name: 'BUILD_ARM', defaultValue: false, description: 'Whether to build ARM packages.') + booleanParam(name: 'DEPLOY', + defaultValue: false, + description: 'Whether and where to deploy packages.') + choice(name: 'CHANNEL', + choices: 'internal\nnightly\nstable', + description: 'The repository channel to deploy to. ' + + 'Defaults to "internal".') + string(name: 'PACKAGING_TARGETS', + defaultValue: '', + description: 'A whitespace-separated list of packaging ' + + 'targets, e.g. "debian_10 snap". ' + + 'When left unspecified, all the packaging targets are built.') } environment { - TARBALLS = '/opt/ring-contrib' // set the cache directory - } - - options { - ansiColor('xterm') + TARBALLS = '/var/cache/jami' // set the cache directory } stages { stage('Check configuration') { - when { not { expression { fileExists TARBALLS } } } steps { - error "The ${TARBALLS} directory does not exist. \ + script { + if (!fileExists(TARBALLS)) { + error "The ${TARBALLS} directory does not exist. \ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration" + } + + mountType = sh(script: "findmnt ${TARBALLS} -o fstype -n", + returnStdout: true) + if (!(mountType =~ /^nfs/)) { + error "The ${TARBALLS} directory is not mounted on NFS storage. \ +See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client_NFS" + } + } } } stage('Fetch submodules') { steps { - echo 'Updating relevant submodules to their latest commit' - sh 'git submodule update --init --recursive --remote ' + - 'daemon lrc client-gnome client-qt' + echo 'Initializing submodules ' + SUBMODULES.join(', ') + + (params.WITH_MANUAL_SUBMODULES ? '.' : ' to their latest commit.') + sh 'git submodule update --init --recursive' + + (params.WITH_MANUAL_SUBMODULES ? ' ' : ' --remote ') + + SUBMODULES.join(' ') } } @@ -62,36 +116,41 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration" stage('Build packages') { environment { DISABLE_CONTRIB_DOWNLOADS = 'TRUE' - // The following password is used to register with the - // RHEL subscription-manager tool, required to build on RHEL. - PASS = credentials('developers-redhat-com') } steps { script { - def targetsText = sh(script: 'make -s list-package-targets', - returnStdout: true) - def targets = targetsText.split('\n') - if (!params.BUILD_OWN_QT) { - targets = targets.findAll { !it.endsWith('_qt') } + def targetsText = params.PACKAGING_TARGETS.trim() + if (!targetsText) { + targetsText = sh(script: 'make -s list-package-targets', + returnStdout: true).trim() } + + TARGETS = targetsText.split(/\s/) if (!params.BUILD_ARM) { - targets = targets.findAll { !(it =~ /_(armhf|arm64)$/) } + TARGETS = TARGETS.findAll { !(it =~ /_(armhf|arm64)$/) } } + def stages = [:] - targets.each { target -> + TARGETS.each { target -> // Note: The stage calls are wrapped in closures, to // delay their execution. - stages["${target}"] = { - stage("${target}") { + stages[target] = { + stage(target) { // Offload builds to different agents. node('linux-builder') { cleanWs() unstash 'release-tarball' - sh """ - tar xf *.tar.gz --strip-components=1 - make ${target} - """ + catchError(buildResult: 'FAILURE', + stageResult: 'FAILURE') { + sh """ + echo Building on node \$NODE_NAME + tar xf *.tar.gz --strip-components=1 + make ${target} + """ + stash(includes: 'packages/**', + name: target) + } } } } @@ -100,5 +159,38 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration" } } } + stage('Sign & deploy packages') { + agent { + label 'ring-buildmachine-02.mtl.sfl' + } + + when { + expression { + params.DEPLOY + } + } + + steps { + script { + TARGETS.each { target -> + try { + unstash target + } catch (err) { + echo "Failed to unstash ${target}, skipping..." + return + } + echo "Deploying packages for ${target}..." + sh """scripts/deploy-packages.sh \ + --distribution=${target} \ + --keyid="${RING_PUBLIC_KEY_FINGERPRINT}" \ + --snapcraft-login="${SNAPCRAFT_KEY}" \ + --remote-ssh-identity-file="${SSH_PRIVATE_KEY}" \ + --remote-repository-location="${REMOTE_HOST}:${REMOTE_BASE_DIR}/${params.CHANNEL}" \ + --remote-manual-download-location="${REMOTE_HOST}:${REMOTE_BASE_DIR}/manual-${params.CHANNEL}" +""" + } + } + } + } } } diff --git a/Makefile b/Makefile index d44c594058eb35b5b16c99c83419805972cafa0a..5e8cee2a09554c23a64a12892f66d1d1e8898e5e 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,9 @@ # .DEFAULT_GOAL := package-all +# Default caching directory +export TARBALLS ?= /var/cache/jami + ############################## ## Version number variables ## ############################## @@ -46,13 +49,13 @@ DEBIAN_VERSION:=$(RELEASE_VERSION)~dfsg1-1 DEBIAN_DSC_FILENAME:=jami_$(DEBIAN_VERSION).dsc # Qt versions -QT_MAJOR:=5 -QT_MINOR:=15 -QT_PATCH:=2 -QT_TARBALL_CHECKSUM:="3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240" -DEBIAN_QT_VERSION:=$(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1 -DEBIAN_QT_DSC_FILENAME:=libqt-jami_$(DEBIAN_QT_VERSION).dsc -QT_JAMI_PREFIX:="/usr/lib/libqt-jami" +QT_MAJOR := 5 +QT_MINOR := 15 +QT_PATCH := 2 +QT_TARBALL_CHECKSUM := 3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240 +DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1 +DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc +QT_JAMI_PREFIX := /usr/lib/libqt-jami ##################### ## Other variables ## @@ -65,6 +68,12 @@ CURRENT_GID:=$(shell id -g) ## Release tarball targets ## ############################# .PHONY: release-tarball purge-release-tarballs portable-release-tarball +# See: https://reproducible-builds.org/docs/archives/ +TAR_REPRODUCIBILITY_OPTIONS = \ + --format=gnu \ + --mtime=@1 \ + --owner=root:0 \ + --group=root:0 # This file can be used when not wanting to invoke the tarball # producing machinery (which depends on the Git checkout), nor its @@ -91,7 +100,7 @@ portable-release-tarball: guix environment --container --network \ --preserve=TARBALLS $(guix-share-tarball-arg) \ --expose=/usr/bin/env \ - --expose=$$SSL_CERT_FILE \ + --expose=$$SSL_CERT_DIR=/etc/ssl/certs \ --manifest=$(CURDIR)/guix/minimal-manifest.scm \ -- $(MAKE) release-tarball @@ -122,13 +131,15 @@ $(RELEASE_TARBALL_FILENAME): tarballs.manifest | tar xf - -C $(TMPDIR)/ring-project); \ done # Create the base archive. - tar --create --file $(TMPDIR)/ring-project.tar $(TMPDIR)/ring-project \ - --transform 's,.*/ring-project,ring-project,' + tar -cf $(TMPDIR)/ring-project.tar $(TMPDIR)/ring-project \ + --transform 's,.*/ring-project,ring-project,' \ + $(TAR_REPRODUCIBILITY_OPTIONS) # Append the cached tarballs listed in the manifest. tar --append --file $(TMPDIR)/ring-project.tar \ - --files-from $< \ - --transform 's,^.*/,ring-project/daemon/contrib/tarballs/,' - gzip $(TMPDIR)/ring-project.tar + --files-from $< \ + --transform 's,^.*/,ring-project/daemon/contrib/tarballs/,' \ + $(TAR_REPRODUCIBILITY_OPTIONS) + gzip --no-name $(TMPDIR)/ring-project.tar mv $(TMPDIR)/ring-project.tar.gz "$@" rm -rf $(TMPDIR) else @@ -141,10 +152,87 @@ endif ## Packaging targets ## ####################### -# Append the output of make-packaging-target to this Makefile -# see Makefile.packaging.distro_targets -$(shell scripts/make-packaging-target.py --generate-all > Makefile.packaging.distro_targets) -include Makefile.packaging.distro_targets + +# +# Traditionally built packages (in Docker containers). +# +DISTRIBUTIONS := \ + debian_10 \ + debian_11 \ + debian_testing \ + debian_unstable \ + raspbian_10_armhf \ + ubuntu_18.04 \ + ubuntu_20.04 \ + ubuntu_21.04 \ + fedora_33 \ + fedora_34 \ + opensuse-leap_15.2 \ + opensuse-leap_15.3 \ + opensuse-tumbleweed \ + snap + +IS_SHELL_INTERACTIVE := $(shell [ -t 0 ] && echo yes) + +# The following Make variable can be used to provide extra arguments +# used with the 'docker run' commands invoked to build the packages. +DOCKER_RUN_EXTRA_ARGS = + +# This function is used to produce the rules of the packaging targets +# that rely on Docker. +# Arg1: The name-version string of the distribution (e.g., ubuntu-18.04). +# Arg2: Extra arguments to pass to 'docker build'. +# Arg3: Extra arguments to pass to 'docker run'. +define make-docker-package-target +$(1)-docker-image-name := jami-packaging-$(1) +$(1)-docker-image-file := .docker-image-$$($(1)-docker-image-name) +$(1)-docker-run-command := docker run \ + --rm --privileged --security-opt apparmor=docker-default \ + -e RELEASE_VERSION="$(RELEASE_VERSION)" \ + -e RELEASE_TARBALL_FILENAME="$(RELEASE_TARBALL_FILENAME)" \ + -e DEBIAN_VERSION="$(DEBIAN_VERSION)" \ + -e DEBIAN_QT_VERSION="$(DEBIAN_QT_VERSION)" \ + -e CURRENT_UID="$(CURRENT_UID)" \ + -e CURRENT_GID="$(CURRENT_GID)" \ + -e DISTRIBUTION="$(1)" \ + -e QT_JAMI_PREFIX="$(QT_JAMI_PREFIX)" \ + -e QT_MAJOR="$(QT_MAJOR)" \ + -e QT_MINOR="$(QT_MINOR)" \ + -e QT_PATCH="$(QT_PATCH)" \ + -e QT_TARBALL_CHECKSUM="$(QT_TARBALL_CHECKSUM)" \ + -e FORCE_REBUILD_QT="$(FORCE_REBUILD_QT)" \ + -e SNAP_PKG_NAME="$(or $(SNAP_PKG_NAME),jami)" \ + -e TARBALLS="$(TARBALLS)" \ + -v '$(TARBALLS)':'$(TARBALLS)' \ + -v '$(CURDIR)/$(RELEASE_TARBALL_FILENAME)':'/src/$(RELEASE_TARBALL_FILENAME)' \ + -v '$(CURDIR)/packages/$(1)':/opt/output \ + -t $(and $(IS_SHELL_INTERACTIVE),-i) \ + $(3) \ + "$$($(1)-docker-image-name)" + +$$($(1)-docker-image-file): docker/Dockerfile_$(1) + docker build \ + -t $$($(1)-docker-image-name) \ + -f docker/Dockerfile_$(1) $(2) $(CURDIR) && \ + touch "$$@" + +packages/$(1)/.packages-built: $(RELEASE_TARBALL_FILENAME) $$($(1)-docker-image-file) + mkdir -p "$$$$(dirname "$$@")" && \ + $$($(1)-docker-run-command) && \ + touch "$$@" + +.PHONY: $(1) +$(1): packages/$(1)/.packages-built +PACKAGE-TARGETS += $(1) + +.PHONY: $(1)-interactive +$(1)-interactive: $(RELEASE_TARBALL_FILENAME) $$($(1)-docker-image-file) + $$($(1)-docker-run-command) bash + +endef + +$(foreach target,$(DISTRIBUTIONS),\ + $(eval $(call make-docker-package-target,$(target)))) package-all: $(PACKAGE-TARGETS) diff --git a/build.py b/build.py index d05a7298408dd3713f2962793e8e48b369de12ba..f0adde1d1733c348abd18fd8568c37275bf3d5a9 100755 --- a/build.py +++ b/build.py @@ -469,17 +469,17 @@ def run_run(args): 'LD_LIBRARY_PATH', '') + ":install/lrc/lib" try: - dring_log = open("daemon.log", 'a') - dring_log.write('=== Starting daemon (%s) ===' % + jamid_log = open("daemon.log", 'a') + jamid_log.write('=== Starting daemon (%s) ===' % time.strftime("%d/%m/%Y %H:%M:%S")) - dring_process = subprocess.Popen( - ["./install/daemon/lib/ring/dring", "-c", "-d"], - stdout=dring_log, - stderr=dring_log + jamid_process = subprocess.Popen( + ["./install/daemon/libexec/jamid", "-c", "-d"], + stdout=jamid_log, + stderr=jamid_log ) with open('daemon.pid', 'w') as f: - f.write(str(dring_process.pid)+'\n') + f.write(str(jamid_process.pid)+'\n') client_suffix = "" if args.qt is not None: @@ -501,10 +501,10 @@ def run_run(args): f.write(str(client_process.pid)+'\n') if args.debug: - subprocess.call(['gdb', './install/daemon/lib/ring/dring']) + subprocess.call(['gdb', './install/daemon/libexec/jamid']) if not args.background: - dring_process.wait() + jamid_process.wait() client_process.wait() except KeyboardInterrupt: @@ -516,9 +516,9 @@ def run_run(args): # Only kill the processes if they are running, as they could # have been closed by the user. print("Killing processes...") - dring_log.close() - if dring_process.poll() is None: - dring_process.kill() + jamid_log.close() + if jamid_process.poll() is None: + jamid_process.kill() client_log.close() if client_process.poll() is None: client_process.kill() diff --git a/client-android b/client-android index 195212d0b3a9351a7ca9808cf0ec987c22d8f96f..0ba9cfd7f836af17ca6872e9e689b58b472b8427 160000 --- a/client-android +++ b/client-android @@ -1 +1 @@ -Subproject commit 195212d0b3a9351a7ca9808cf0ec987c22d8f96f +Subproject commit 0ba9cfd7f836af17ca6872e9e689b58b472b8427 diff --git a/client-gnome b/client-gnome index a3ae9fd07f296b282abdbaf5338750af583675a8..6dcd20b4489d303e8fcae996a4d83ab7c2e5d875 160000 --- a/client-gnome +++ b/client-gnome @@ -1 +1 @@ -Subproject commit a3ae9fd07f296b282abdbaf5338750af583675a8 +Subproject commit 6dcd20b4489d303e8fcae996a4d83ab7c2e5d875 diff --git a/client-ios b/client-ios index a68931d4c1281c74c86d43a60714fc06a87fb010..ba96ab4f0d1529ad5386f8542d3d20f2ba0ea98a 160000 --- a/client-ios +++ b/client-ios @@ -1 +1 @@ -Subproject commit a68931d4c1281c74c86d43a60714fc06a87fb010 +Subproject commit ba96ab4f0d1529ad5386f8542d3d20f2ba0ea98a diff --git a/client-macosx b/client-macosx index 812d5506c3bcae5b9d184ead81e707bf97dc1268..c35095bb31662e5655e591f31ce1c85bb9ba29c2 160000 --- a/client-macosx +++ b/client-macosx @@ -1 +1 @@ -Subproject commit 812d5506c3bcae5b9d184ead81e707bf97dc1268 +Subproject commit c35095bb31662e5655e591f31ce1c85bb9ba29c2 diff --git a/client-qt b/client-qt index 1f91576a0bf33c9d632595cf433d547d1f1d1e06..1ab4edb6cc510ce15d7965823ecc5b879d946a96 160000 --- a/client-qt +++ b/client-qt @@ -1 +1 @@ -Subproject commit 1f91576a0bf33c9d632595cf433d547d1f1d1e06 +Subproject commit 1ab4edb6cc510ce15d7965823ecc5b879d946a96 diff --git a/client-uwp b/client-uwp index f15a1224786a83b507cbcab624fc41e9ea1bfb67..4b639e9a903931bab09292b4d93a4de6d531ae4c 160000 --- a/client-uwp +++ b/client-uwp @@ -1 +1 @@ -Subproject commit f15a1224786a83b507cbcab624fc41e9ea1bfb67 +Subproject commit 4b639e9a903931bab09292b4d93a4de6d531ae4c diff --git a/daemon b/daemon index 9ff4cf0b9ccc9e044ece2d6796612ef5eed53c5d..e8dbf2af93be10869bbc2688ccd09ef3f927f430 160000 --- a/daemon +++ b/daemon @@ -1 +1 @@ -Subproject commit 9ff4cf0b9ccc9e044ece2d6796612ef5eed53c5d +Subproject commit e8dbf2af93be10869bbc2688ccd09ef3f927f430 diff --git a/docker/Dockerfile_debian_10 b/docker/Dockerfile_debian_10 index a96b009b769197a95e448747843ed1ac50c7cfe1..558458dd8630924a592ad5227396e5096f4df045 100644 --- a/docker/Dockerfile_debian_10 +++ b/docker/Dockerfile_debian_10 @@ -5,29 +5,17 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ - gnupg \ + equivs \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_10_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_debian_10_qt b/docker/Dockerfile_debian_10_qt deleted file mode 100644 index 54e6b082072c2728eb26050b2bfe4118f6036f68..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_debian_10_qt +++ /dev/null @@ -1,26 +0,0 @@ -FROM debian:buster - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_debian_11 b/docker/Dockerfile_debian_11 new file mode 100644 index 0000000000000000000000000000000000000000..2169be2c718b67ca8c2c54ff01866eace85be7af --- /dev/null +++ b/docker/Dockerfile_debian_11 @@ -0,0 +1,21 @@ +FROM debian:bullseye + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get clean +RUN apt-get update && \ + apt-get install -y -o Acquire::Retries=10 \ + devscripts \ + equivs \ + wget + +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh + +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps + +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps + +ADD scripts/build-package-debian.sh /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_debian_testing b/docker/Dockerfile_debian_testing index 9ddb8efed616babe032b1ff5055bdfed0e8a4325..f051e12f82908803b98b7573ca5514f66267d866 100644 --- a/docker/Dockerfile_debian_testing +++ b/docker/Dockerfile_debian_testing @@ -5,29 +5,17 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ - gnupg \ + equivs \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_testing_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_debian_testing_qt b/docker/Dockerfile_debian_testing_qt deleted file mode 100644 index e06d03da21c636e75f39d0fc5dab3f6dd7426fa2..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_debian_testing_qt +++ /dev/null @@ -1,26 +0,0 @@ -FROM debian:testing - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_debian_unstable b/docker/Dockerfile_debian_unstable index d7c23b4c701be3a2856abf8a3cbc1b427f913fff..766e6bb2cc0e06b40b74867b20f66a7a61214576 100644 --- a/docker/Dockerfile_debian_unstable +++ b/docker/Dockerfile_debian_unstable @@ -5,29 +5,17 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ - gnupg \ + equivs \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_unstable_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_debian_unstable_qt b/docker/Dockerfile_debian_unstable_qt deleted file mode 100644 index 0412961dc4ecf8efd4362f3409f2ff478c589f10..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_debian_unstable_qt +++ /dev/null @@ -1,26 +0,0 @@ -FROM debian:unstable - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_fedora_32 b/docker/Dockerfile_fedora_32 deleted file mode 100644 index 14435f3ec9bc62da5ed9b928f793cabf97d8022e..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_fedora_32 +++ /dev/null @@ -1,79 +0,0 @@ -FROM fedora:32 - -RUN dnf clean all - -RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \ - dnf install -y mock - -RUN dnf install -y \ - git \ - rpm-build \ - tar \ - make \ - autoconf \ - automake \ - nasm \ - cmake \ - speexdsp-devel \ - pulseaudio-libs-devel \ - libcanberra-devel \ - libcurl-devel \ - libtool \ - mesa-libgbm-devel \ - mesa-dri-drivers \ - dbus-devel \ - expat-devel \ - pcre-devel \ - yaml-cpp-devel \ - dbus-c++-devel \ - dbus-devel \ - libXext-devel \ - libXfixes-devel \ - yasm \ - speex-devel \ - gsm-devel \ - chrpath \ - check \ - astyle \ - uuid-c++-devel \ - gettext-devel \ - gcc-c++ \ - which \ - alsa-lib-devel \ - systemd-devel \ - libuuid-devel \ - uuid-devel \ - gnutls-devel \ - nettle-devel \ - opus-devel \ - patch \ - jsoncpp-devel \ - libnatpmp-devel \ - webkitgtk4-devel \ - cryptopp-devel \ - libva-devel \ - libvdpau-devel \ - msgpack-devel \ - NetworkManager-libnm-devel \ - openssl-devel \ - openssl-static \ - clutter-devel \ - clutter-gtk-devel \ - libappindicator-gtk3-devel \ - libnotify-devel \ - libupnp-devel \ - qrencode-devel \ - qt5-qtbase-devel \ - qt5-qttools-devel \ - qt5-qtdeclarative-devel \ - qt5-qtquickcontrols \ - qt5-qtquickcontrols2-devel \ - qt5-qtmultimedia-devel \ - qt5-qtsvg-devel \ - qt5-qtwebengine-devel \ - libargon2-devel \ - sqlite-devel - -ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh - -CMD /opt/build-package-rpm.sh diff --git a/docker/Dockerfile_fedora_33 b/docker/Dockerfile_fedora_33 index d207e97c1f44b7f13c43c89a0bae62b966fb582d..6a918fc21958507d09d7ff961dc7ba08e766e2c6 100644 --- a/docker/Dockerfile_fedora_33 +++ b/docker/Dockerfile_fedora_33 @@ -5,6 +5,8 @@ RUN dnf clean all RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \ dnf install -y mock +RUN dnf groupinstall -y "X Software Development" + RUN dnf install -y \ git \ rpm-build \ @@ -63,17 +65,29 @@ RUN dnf install -y \ libnotify-devel \ libupnp-devel \ qrencode-devel \ - qt5-qtbase-devel \ - qt5-qttools-devel \ - qt5-qtdeclarative-devel \ - qt5-qtquickcontrols \ - qt5-qtquickcontrols2-devel \ - qt5-qtmultimedia-devel \ - qt5-qtsvg-devel \ - qt5-qtwebengine-devel \ libargon2-devel \ + libsndfile-devel \ + libdrm \ + gperf \ + clang \ + clang-devel \ + nodejs \ + bison \ + flex \ + nss-devel \ + libxcb* \ + libxkb* \ + libXrender-devel \ + xcb-util-* \ + libX11-devel \ + python2.7 \ + xz \ + xkeyboard-config \ + libnotify \ + wget \ + libstdc++-static \ sqlite-devel ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh -CMD /opt/build-package-rpm.sh +CMD ["/opt/build-package-rpm.sh"] diff --git a/docker/Dockerfile_fedora_34 b/docker/Dockerfile_fedora_34 index 6a3fc2e520848b933011d32575a9b9c29d723980..b2529035d591bf5f300a1a416c0b050903046e9d 100644 --- a/docker/Dockerfile_fedora_34 +++ b/docker/Dockerfile_fedora_34 @@ -5,6 +5,8 @@ RUN dnf clean all RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \ dnf install -y mock +RUN dnf groupinstall -y "X Software Development" + RUN dnf install -y \ git \ rpm-build \ @@ -63,17 +65,29 @@ RUN dnf install -y \ libnotify-devel \ libupnp-devel \ qrencode-devel \ - qt5-qtbase-devel \ - qt5-qttools-devel \ - qt5-qtdeclarative-devel \ - qt5-qtquickcontrols \ - qt5-qtquickcontrols2-devel \ - qt5-qtmultimedia-devel \ - qt5-qtsvg-devel \ - qt5-qtwebengine-devel \ libargon2-devel \ + libsndfile-devel \ + libdrm \ + gperf \ + bison \ + clang \ + clang-devel \ + nodejs \ + flex \ + nss-devel \ + libxcb* \ + libxkb* \ + libX11-devel \ + libXrender-devel \ + xcb-util-* \ + python2.7 \ + xz \ + xkeyboard-config \ + libnotify \ + wget \ + libstdc++-static \ sqlite-devel ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh -CMD /opt/build-package-rpm.sh +CMD ["/opt/build-package-rpm.sh"] diff --git a/docker/Dockerfile_opensuse-leap_15.2 b/docker/Dockerfile_opensuse-leap_15.2 index a97e217003349f1138e245956e0bad67f776e42d..a334372a2c4d1d4b4ef34d4f2fc348ac7b0d8f52 100644 --- a/docker/Dockerfile_opensuse-leap_15.2 +++ b/docker/Dockerfile_opensuse-leap_15.2 @@ -96,4 +96,4 @@ RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh -CMD /opt/build-package-rpm.sh +CMD ["/opt/build-package-rpm.sh"] diff --git a/docker/Dockerfile_opensuse-leap_15.3 b/docker/Dockerfile_opensuse-leap_15.3 new file mode 100644 index 0000000000000000000000000000000000000000..ca5bd38a407f5695794e1230e5f6260f8f08478b --- /dev/null +++ b/docker/Dockerfile_opensuse-leap_15.3 @@ -0,0 +1,99 @@ +FROM opensuse/leap:15.3 + +RUN zypper --non-interactive install -y \ + dnf \ + dnf-command\(builddep\) \ + rpmdevtools \ + Mesa-dri-devel Mesa-dri \ + git \ + gcc8 \ + gcc8-c++ \ + rpm-build \ + tar \ + make \ + autoconf \ + automake \ + cmake \ + nasm \ + speexdsp-devel \ + libpulse-devel \ + libcanberra-devel \ + libcurl-devel \ + libtool \ + pcre-devel \ + yaml-cpp-devel \ + libdbus-c++-devel \ + libXext-devel \ + libXfixes-devel \ + yasm \ + speex-devel \ + libgsm-devel \ + chrpath \ + check \ + astyle \ + gettext-devel \ + gcc-c++ \ + which \ + alsa-lib-devel \ + systemd-devel \ + libuuid-devel \ + uuid-devel \ + gnutls-devel \ + libopus-devel \ + patch \ + jsoncpp-devel \ + webkit2gtk3-devel \ + libcryptopp-devel \ + libva-devel \ + libvdpau-devel \ + msgpack-devel \ + clutter-devel \ + openssl-devel \ + clutter-gtk-devel \ + libnma-devel \ + libcryptopp-devel \ + libdbus-c++-devel \ + libexpat-devel \ + gnome-icon-theme-symbolic \ + libgsm-devel \ + gtk3-devel \ + libappindicator-devel \ + sqlite-devel \ + ffmpeg-4-libavutil-devel \ + gtk3-devel\ + qrencode-devel \ + python3-python-dateutil \ + libsndfile-devel \ + libdrm \ + gperf \ + bison \ + flex \ + nodejs12 \ + mozilla-nss-devel \ + python-xml \ + libxcb* \ + libxkb* \ + libX11-devel \ + libXrender-devel \ + libfreetype6 \ + xcb-util-image-devel \ + xcb-util-keysyms-devel \ + xcb-util-renderutil-devel \ + xcb-util-wm-devel \ + xorg-x11-devel \ + xz \ + xkeyboard-config \ + libnotify \ + libQt5Sql-devel \ + libQt5Gui-devel \ + libqt5-qtbase-devel \ + libqt5-qttools \ + argon2-devel \ + wget + +RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 + +ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh + +CMD ["/opt/build-package-rpm.sh"] diff --git a/docker/Dockerfile_opensuse-tumbleweed b/docker/Dockerfile_opensuse-tumbleweed index 606511f7a2283a5a85f657e73a1a1262938980d7..52a3b332d300a0eebf3b9a09331af5bb44b42832 100644 --- a/docker/Dockerfile_opensuse-tumbleweed +++ b/docker/Dockerfile_opensuse-tumbleweed @@ -101,4 +101,4 @@ RUN zypper --non-interactive install -y \ ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh -CMD /opt/build-package-rpm.sh +CMD ["/opt/build-package-rpm.sh"] diff --git a/docker/Dockerfile_raspbian_10_armhf b/docker/Dockerfile_raspbian_10_armhf index 44a6e26c16d92261b4583c7770e381b254b13325..b0cb8cf903f72fa69afd896504a0bdcb61b2b18a 100644 --- a/docker/Dockerfile_raspbian_10_armhf +++ b/docker/Dockerfile_raspbian_10_armhf @@ -79,4 +79,4 @@ RUN apt update && \ ADD scripts/build-package-debian.sh /opt/build-package-debian.sh -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_rhel_8 b/docker/Dockerfile_rhel_8 deleted file mode 100644 index db5566d84f99d7bd179923630654b33a9f0a3928..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_rhel_8 +++ /dev/null @@ -1,85 +0,0 @@ -FROM docker.io/roboxes/rhel8 - -ARG PASS -ENV PASS=$PASS - -RUN subscription-manager register --username=jamisfl --password=$PASS -RUN subscription-manager attach --auto -RUN subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms - -RUN dnf clean all -RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \ - dnf install -y mock - -RUN dnf install -y \ - git \ - rpm-build \ - tar \ - make \ - autoconf \ - automake \ - nasm \ - cmake \ - speexdsp-devel \ - pulseaudio-libs-devel \ - libcanberra-devel \ - libcurl-devel \ - libtool \ - mesa-libgbm-devel \ - mesa-dri-drivers \ - dbus-devel \ - expat-devel \ - pcre-devel \ - yaml-cpp-devel \ - dbus-c++-devel \ - dbus-devel \ - libXext-devel \ - libXfixes-devel \ - yasm \ - speex-devel \ - gsm-devel \ - chrpath \ - check \ - astyle \ - gettext-devel \ - gcc-c++ \ - libstdc++-static \ - which \ - alsa-lib-devel \ - systemd-devel \ - libuuid-devel \ - uuid-devel \ - gnutls-devel \ - nettle-devel \ - opus-devel \ - patch \ - jsoncpp-devel \ - libnatpmp-devel \ - webkitgtk4-devel \ - cryptopp-devel \ - libva-devel \ - libvdpau-devel \ - msgpack-devel \ - NetworkManager-libnm-devel \ - openssl-devel \ - clutter-devel \ - clutter-gtk-devel \ - libappindicator-gtk3-devel \ - libnotify-devel \ - libupnp-devel \ - qrencode-devel \ - sqlite-devel \ - libdrm \ - gperf \ - bison \ - flex \ - nodejs \ - nss-devel \ - kernel-headers \ - python2 \ - libargon2-devel \ - wget - -ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh - -CMD /opt/build-package-rpm.sh \ No newline at end of file diff --git a/docker/Dockerfile_ubuntu_18.04 b/docker/Dockerfile_ubuntu_18.04 index b7d2ede170ebb5bb412f38ef92da6d13d77b9f6a..7eaec5585fa128a3237eea546233940041f9d0cf 100644 --- a/docker/Dockerfile_ubuntu_18.04 +++ b/docker/Dockerfile_ubuntu_18.04 @@ -5,35 +5,22 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ equivs \ gcc-8 \ g++-8 \ - gnupg \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_18.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_ubuntu_18.04_qt b/docker/Dockerfile_ubuntu_18.04_qt deleted file mode 100644 index 774f56f3afb4efe02501d98c272cf9c6b599e49c..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_ubuntu_18.04_qt +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu:18.04 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - equivs \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_ubuntu_20.04 b/docker/Dockerfile_ubuntu_20.04 index e3adb9b7453b5b021ef81a9e86c9bda7a863a13c..a53807113e56104760a08582c71893f7033db88e 100644 --- a/docker/Dockerfile_ubuntu_20.04 +++ b/docker/Dockerfile_ubuntu_20.04 @@ -5,30 +5,17 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ equivs \ - gnupg \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_20.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_ubuntu_20.04_qt b/docker/Dockerfile_ubuntu_20.04_qt deleted file mode 100644 index 12b5fc510b7ddce6ec9a88935e65ae886e4d0957..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_ubuntu_20.04_qt +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu:20.04 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - equivs \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_ubuntu_20.10 b/docker/Dockerfile_ubuntu_20.10 deleted file mode 100644 index db33b2937fb360396723c762a46e338b4a4f8270..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_ubuntu_20.10 +++ /dev/null @@ -1,34 +0,0 @@ -FROM ubuntu:20.10 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ - devscripts \ - dirmngr \ - equivs \ - gnupg \ - wget - -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_20.10_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" - -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update - -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh diff --git a/docker/Dockerfile_ubuntu_20.10_qt b/docker/Dockerfile_ubuntu_20.10_qt deleted file mode 100644 index 46adee1df9f87226dfc5723b0cfd31a10cd12cf5..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_ubuntu_20.10_qt +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu:20.10 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - equivs \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/Dockerfile_ubuntu_21.04 b/docker/Dockerfile_ubuntu_21.04 index cf604f3cd5702ca18a0ad47f9b19f44ba3bd2624..00615d45626deb0c9319e3dc059f9d3f961f5b1b 100644 --- a/docker/Dockerfile_ubuntu_21.04 +++ b/docker/Dockerfile_ubuntu_21.04 @@ -5,30 +5,17 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get clean RUN apt-get update && \ apt-get install -y -o Acquire::Retries=10 \ - ca-certificates \ devscripts \ - dirmngr \ equivs \ - gnupg \ wget -RUN wget -O - https://dl.jami.net/public-key.gpg | \ - tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null -RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_21.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list" +ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh -# add deb-src entries (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list -RUN apt-get clean && apt-get update +COPY packaging/rules/debian-qt/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh qt-deps -COPY packaging/rules/debian/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps +COPY packaging/rules/debian/control /tmp/builddeps/debian/control +RUN /opt/prebuild-package-debian.sh jami-deps ADD scripts/build-package-debian.sh /opt/build-package-debian.sh - -CMD /opt/build-package-debian.sh \ No newline at end of file +CMD ["/opt/build-package-debian.sh"] diff --git a/docker/Dockerfile_ubuntu_21.04_qt b/docker/Dockerfile_ubuntu_21.04_qt deleted file mode 100644 index 0ea99c89f26cf15874dca2239ddfc3b108d11cfa..0000000000000000000000000000000000000000 --- a/docker/Dockerfile_ubuntu_21.04_qt +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu:21.04 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN apt-get clean -RUN apt-get update && \ - apt-get install -y -o Acquire::Retries=10 \ - devscripts \ - equivs \ - wget - -# add/enable src repos (needed for next step) -RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list - -RUN apt-get clean && apt-get update -COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/ -RUN cd /tmp/builddeps && \ - apt-get update; \ - mk-build-deps \ - --remove --install \ - --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ - "debian/control"; \ - cd / && rm -rf /tmp/builddeps - -ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh - -CMD /opt/build-package-debian-qt.sh diff --git a/docker/profile-seccomp-fedora_28.json b/docker/profile-seccomp-fedora_28.json deleted file mode 100644 index 3eee93129b1ecb61330e3ef9529cb1b101f1bf49..0000000000000000000000000000000000000000 --- a/docker/profile-seccomp-fedora_28.json +++ /dev/null @@ -1,751 +0,0 @@ -{ - "defaultAction": "SCMP_ACT_ERRNO", - "archMap": [ - { - "architecture": "SCMP_ARCH_X86_64", - "subArchitectures": [ - "SCMP_ARCH_X86", - "SCMP_ARCH_X32" - ] - }, - { - "architecture": "SCMP_ARCH_AARCH64", - "subArchitectures": [ - "SCMP_ARCH_ARM" - ] - }, - { - "architecture": "SCMP_ARCH_MIPS64", - "subArchitectures": [ - "SCMP_ARCH_MIPS", - "SCMP_ARCH_MIPS64N32" - ] - }, - { - "architecture": "SCMP_ARCH_MIPS64N32", - "subArchitectures": [ - "SCMP_ARCH_MIPS", - "SCMP_ARCH_MIPS64" - ] - }, - { - "architecture": "SCMP_ARCH_MIPSEL64", - "subArchitectures": [ - "SCMP_ARCH_MIPSEL", - "SCMP_ARCH_MIPSEL64N32" - ] - }, - { - "architecture": "SCMP_ARCH_MIPSEL64N32", - "subArchitectures": [ - "SCMP_ARCH_MIPSEL", - "SCMP_ARCH_MIPSEL64" - ] - }, - { - "architecture": "SCMP_ARCH_S390X", - "subArchitectures": [ - "SCMP_ARCH_S390" - ] - } - ], - "syscalls": [ - { - "names": [ - "accept", - "accept4", - "access", - "adjtimex", - "alarm", - "bind", - "brk", - "capget", - "capset", - "chdir", - "chmod", - "chown", - "chown32", - "clock_getres", - "clock_gettime", - "clock_nanosleep", - "close", - "connect", - "copy_file_range", - "creat", - "dup", - "dup2", - "dup3", - "epoll_create", - "epoll_create1", - "epoll_ctl", - "epoll_ctl_old", - "epoll_pwait", - "epoll_wait", - "epoll_wait_old", - "eventfd", - "eventfd2", - "execve", - "execveat", - "exit", - "exit_group", - "faccessat", - "fadvise64", - "fadvise64_64", - "fallocate", - "fanotify_mark", - "fchdir", - "fchmod", - "fchmodat", - "fchown", - "fchown32", - "fchownat", - "fcntl", - "fcntl64", - "fdatasync", - "fgetxattr", - "flistxattr", - "flock", - "fork", - "fremovexattr", - "fsetxattr", - "fstat", - "fstat64", - "fstatat64", - "fstatfs", - "fstatfs64", - "fsync", - "ftruncate", - "ftruncate64", - "futex", - "futimesat", - "getcpu", - "getcwd", - "getdents", - "getdents64", - "getegid", - "getegid32", - "geteuid", - "geteuid32", - "getgid", - "getgid32", - "getgroups", - "getgroups32", - "getitimer", - "getpeername", - "getpgid", - "getpgrp", - "getpid", - "getppid", - "getpriority", - "getrandom", - "getresgid", - "getresgid32", - "getresuid", - "getresuid32", - "getrlimit", - "get_robust_list", - "getrusage", - "getsid", - "getsockname", - "getsockopt", - "get_thread_area", - "gettid", - "gettimeofday", - "getuid", - "getuid32", - "getxattr", - "inotify_add_watch", - "inotify_init", - "inotify_init1", - "inotify_rm_watch", - "io_cancel", - "ioctl", - "io_destroy", - "io_getevents", - "ioprio_get", - "ioprio_set", - "io_setup", - "io_submit", - "ipc", - "kill", - "lchown", - "lchown32", - "lgetxattr", - "link", - "linkat", - "listen", - "listxattr", - "llistxattr", - "_llseek", - "lremovexattr", - "lseek", - "lsetxattr", - "lstat", - "lstat64", - "madvise", - "memfd_create", - "mincore", - "mkdir", - "mkdirat", - "mknod", - "mknodat", - "mlock", - "mlock2", - "mlockall", - "mmap", - "mmap2", - "mprotect", - "mq_getsetattr", - "mq_notify", - "mq_open", - "mq_timedreceive", - "mq_timedsend", - "mq_unlink", - "mremap", - "msgctl", - "msgget", - "msgrcv", - "msgsnd", - "msync", - "munlock", - "munlockall", - "munmap", - "nanosleep", - "newfstatat", - "_newselect", - "open", - "openat", - "pause", - "pipe", - "pipe2", - "poll", - "ppoll", - "prctl", - "pread64", - "preadv", - "preadv2", - "prlimit64", - "pselect6", - "pwrite64", - "pwritev", - "pwritev2", - "read", - "readahead", - "readlink", - "readlinkat", - "readv", - "recv", - "recvfrom", - "recvmmsg", - "recvmsg", - "remap_file_pages", - "removexattr", - "rename", - "renameat", - "renameat2", - "restart_syscall", - "rmdir", - "rt_sigaction", - "rt_sigpending", - "rt_sigprocmask", - "rt_sigqueueinfo", - "rt_sigreturn", - "rt_sigsuspend", - "rt_sigtimedwait", - "rt_tgsigqueueinfo", - "sched_getaffinity", - "sched_getattr", - "sched_getparam", - "sched_get_priority_max", - "sched_get_priority_min", - "sched_getscheduler", - "sched_rr_get_interval", - "sched_setaffinity", - "sched_setattr", - "sched_setparam", - "sched_setscheduler", - "sched_yield", - "seccomp", - "select", - "semctl", - "semget", - "semop", - "semtimedop", - "send", - "sendfile", - "sendfile64", - "sendmmsg", - "sendmsg", - "sendto", - "setfsgid", - "setfsgid32", - "setfsuid", - "setfsuid32", - "setgid", - "setgid32", - "setgroups", - "setgroups32", - "setitimer", - "setpgid", - "setpriority", - "setregid", - "setregid32", - "setresgid", - "setresgid32", - "setresuid", - "setresuid32", - "setreuid", - "setreuid32", - "setrlimit", - "set_robust_list", - "setsid", - "setsockopt", - "set_thread_area", - "set_tid_address", - "setuid", - "setuid32", - "setxattr", - "shmat", - "shmctl", - "shmdt", - "shmget", - "shutdown", - "sigaltstack", - "signalfd", - "signalfd4", - "sigreturn", - "socket", - "socketcall", - "socketpair", - "splice", - "stat", - "stat64", - "statfs", - "statfs64", - "statx", - "symlink", - "symlinkat", - "sync", - "sync_file_range", - "syncfs", - "sysinfo", - "syslog", - "tee", - "tgkill", - "time", - "timer_create", - "timer_delete", - "timerfd_create", - "timerfd_gettime", - "timerfd_settime", - "timer_getoverrun", - "timer_gettime", - "timer_settime", - "times", - "tkill", - "truncate", - "truncate64", - "ugetrlimit", - "umask", - "uname", - "unlink", - "unlinkat", - "utime", - "utimensat", - "utimes", - "vfork", - "vmsplice", - "wait4", - "waitid", - "waitpid", - "write", - "writev" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "personality" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 0, - "valueTwo": 0, - "op": "SCMP_CMP_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "personality" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 8, - "valueTwo": 0, - "op": "SCMP_CMP_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "personality" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 131072, - "valueTwo": 0, - "op": "SCMP_CMP_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "personality" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 131080, - "valueTwo": 0, - "op": "SCMP_CMP_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "personality" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 4294967295, - "valueTwo": 0, - "op": "SCMP_CMP_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": {} - }, - { - "names": [ - "sync_file_range2" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "arches": [ - "ppc64le" - ] - }, - "excludes": {} - }, - { - "names": [ - "arm_fadvise64_64", - "arm_sync_file_range", - "sync_file_range2", - "breakpoint", - "cacheflush", - "set_tls" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "arches": [ - "arm", - "arm64" - ] - }, - "excludes": {} - }, - { - "names": [ - "arch_prctl" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "arches": [ - "amd64", - "x32" - ] - }, - "excludes": {} - }, - { - "names": [ - "modify_ldt" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "arches": [ - "amd64", - "x32", - "x86" - ] - }, - "excludes": {} - }, - { - "names": [ - "s390_pci_mmio_read", - "s390_pci_mmio_write", - "s390_runtime_instr" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "arches": [ - "s390", - "s390x" - ] - }, - "excludes": {} - }, - { - "names": [ - "open_by_handle_at" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_DAC_READ_SEARCH" - ] - }, - "excludes": {} - }, - { - "names": [ - "bpf", - "clone", - "fanotify_init", - "lookup_dcookie", - "mount", - "name_to_handle_at", - "perf_event_open", - "quotactl", - "setdomainname", - "sethostname", - "setns", - "umount", - "umount2", - "unshare" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_ADMIN" - ] - }, - "excludes": {} - }, - { - "names": [ - "clone" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 0, - "value": 2080505856, - "valueTwo": 0, - "op": "SCMP_CMP_MASKED_EQ" - } - ], - "comment": "", - "includes": {}, - "excludes": { - "caps": [ - "CAP_SYS_ADMIN" - ], - "arches": [ - "s390", - "s390x" - ] - } - }, - { - "names": [ - "clone" - ], - "action": "SCMP_ACT_ALLOW", - "args": [ - { - "index": 1, - "value": 2080505856, - "valueTwo": 0, - "op": "SCMP_CMP_MASKED_EQ" - } - ], - "comment": "s390 parameter ordering for clone is different", - "includes": { - "arches": [ - "s390", - "s390x" - ] - }, - "excludes": { - "caps": [ - "CAP_SYS_ADMIN" - ] - } - }, - { - "names": [ - "reboot" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_BOOT" - ] - }, - "excludes": {} - }, - { - "names": [ - "chroot" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_CHROOT" - ] - }, - "excludes": {} - }, - { - "names": [ - "delete_module", - "init_module", - "finit_module", - "query_module" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_MODULE" - ] - }, - "excludes": {} - }, - { - "names": [ - "acct" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_PACCT" - ] - }, - "excludes": {} - }, - { - "names": [ - "kcmp", - "process_vm_readv", - "process_vm_writev", - "ptrace" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_PTRACE" - ] - }, - "excludes": {} - }, - { - "names": [ - "iopl", - "ioperm" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_RAWIO" - ] - }, - "excludes": {} - }, - { - "names": [ - "settimeofday", - "stime", - "clock_settime" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_TIME" - ] - }, - "excludes": {} - }, - { - "names": [ - "vhangup" - ], - "action": "SCMP_ACT_ALLOW", - "args": [], - "comment": "", - "includes": { - "caps": [ - "CAP_SYS_TTY_CONFIG" - ] - }, - "excludes": {} - } - ] -} diff --git a/docs/source/dev/compiling_and_installing/daemon.rst b/docs/source/dev/compiling_and_installing/daemon.rst index 79548a92ef6c2d0b6854c6d49b0521446884b3cd..2f0e9798e2b6c58d0b281fe0ef18d23f5284814e 100644 --- a/docs/source/dev/compiling_and_installing/daemon.rst +++ b/docs/source/dev/compiling_and_installing/daemon.rst @@ -15,7 +15,7 @@ Linux ../bootstrap make -2. Compiling dring +2. Compiling jamid ------------------ .. code-block:: bash @@ -25,7 +25,7 @@ Linux ./configure make -3. Installing dring +3. Installing jamid ------------------- .. code-block:: bash @@ -96,7 +96,7 @@ Run: ``brew link --force gettext`` to fix it. Clang compatibility (developers only) ------------------------------------- -It is possible to compile dring with Clang by setting CC and CXX variables +It is possible to compile jamid with Clang by setting CC and CXX variables to 'clang' and 'clang++' respectively when calling ./configure. Currently it is not possible to use the DBus interface mechanism, and the diff --git a/guix/manifest.scm b/guix/manifest.scm index 7e66817555c8a3737c1cba0190e18044590a30a3..c20c580a8c87cd739bc08f44f204499c8fb4e36c 100644 --- a/guix/manifest.scm +++ b/guix/manifest.scm @@ -35,6 +35,7 @@ "python" "sed" "tar" + "util-linux" "wget" "xz" @@ -69,6 +70,7 @@ "http-parser" "jsoncpp" "libarchive" + "libgit2" "libnatpmp" "libupnp" "libsecp256k1" diff --git a/guix/minimal-manifest.scm b/guix/minimal-manifest.scm index f9c1f14a26dd6aa067e5f104006b0bcefc8bdd38..c970c696b098c87987f0f0484edb15e9a64a0ff5 100644 --- a/guix/minimal-manifest.scm +++ b/guix/minimal-manifest.scm @@ -10,6 +10,7 @@ (specifications->manifest (list + "bash" "coreutils" "gcc-toolchain" "git-minimal" @@ -21,5 +22,6 @@ "python" "sed" "tar" + "util-linux" "wget" "xz")) diff --git a/lrc b/lrc index 82f8718fd21a7d310ac170f69a7683db74ca9f64..26ad683c133d1604a082c7743a6d7d3b2d20fdff 160000 --- a/lrc +++ b/lrc @@ -1 +1 @@ -Subproject commit 82f8718fd21a7d310ac170f69a7683db74ca9f64 +Subproject commit 26ad683c133d1604a082c7743a6d7d3b2d20fdff diff --git a/packaging/rules/debian-qt/rules b/packaging/rules/debian-qt/rules index 9f76fa9ee5a21df8a58cfcf0048cb788a3d439ab..e4a325860ab322b0e745822281cc7a784db9a292 100755 --- a/packaging/rules/debian-qt/rules +++ b/packaging/rules/debian-qt/rules @@ -3,23 +3,43 @@ # export DH_VERBOSE = 1 -# Number of CPUS -NO_CPUS=$(shell nproc) -ifeq ($(NO_CPUS),0) -NO_CPUS=1 -endif +# Return the minimum value of two integer arguments. +min = $(shell echo $$(( $(1) < $(2) ? $(1) : $(2) ))) +max = $(shell echo $$(( $(1) > $(2) ? $(1) : $(2) ))) + +# Number of CPUs to build Qt. +NO_CPUS := $(call max,$(shell nproc),1) + +# There can be multiple builds of Qt in parallel. The following +# should match the maximum number of per-machine workers used in the +# CI. +MAX_PARALLEL_BUILDS := 4 + +# qtwebengine (aka chromium) takes a ton of memory per build process, +# up to 2.3 GiB. Cap the number of jobs based on the amount of +# available memory to try to guard against OOM build failures. +AVAILABLE_MEMORY := $(shell free -g | grep -E '^Mem:' | awk '{print $$7}') +MEMORY_REQUIRED_PER_CORE := 2 # in GiB +COMPUTED_JOB_COUNT := \ + $(call max,$(shell echo $$(( $(AVAILABLE_MEMORY) \ + / $(MEMORY_REQUIRED_PER_CORE) \ + / $(MAX_PARALLEL_BUILDS) ))),1) +JOB_COUNT = $(call min,$(NO_CPUS),$(COMPUTED_JOB_COUNT)) %: dh $@ override_dh_auto_configure: - MAKEFLAGS="-j$(NO_CPUS) V=1" \ - ./configure \ - -opensource \ - -confirm-license \ - -nomake examples \ - -nomake tests \ - -prefix "${QT_JAMI_PREFIX}" + ./configure \ + -opensource \ + -confirm-license \ + -nomake examples \ + -nomake tests \ + -prefix "${QT_JAMI_PREFIX}" + +override_dh_auto_build: + @echo Building Qt using $(JOB_COUNT) parallel jobs + $(MAKE) -j$(JOB_COUNT) V=1 NINJAFLAGS="-j$(JOB_COUNT)" override_dh_auto_install: dh_auto_install -Smakefile -- INSTALL_ROOT=$(CURDIR)/debian/tmp/ diff --git a/packaging/rules/debian/control b/packaging/rules/debian/control index 43a666c2b14f288f50eaae244aad3b06033765e1..a3d4a4b713f8dc3acff64e6f528ebc0c02ef069b 100644 --- a/packaging/rules/debian/control +++ b/packaging/rules/debian/control @@ -139,4 +139,4 @@ Description: Secure and distributed voice, video and chat platform - daemon platform that requires no centralized server and leaves the power of privacy in the hands of the user. . - This package contains the Jami daemon: dring. + This package contains the Jami daemon: jamid. diff --git a/packaging/rules/debian/copyright b/packaging/rules/debian/copyright index 094997c7e3fd10e3d5d2803e224535aeacabb2d2..43aecf3bf04aeadd7029b9333a86a23ddfc58815 100644 --- a/packaging/rules/debian/copyright +++ b/packaging/rules/debian/copyright @@ -73,8 +73,8 @@ Copyright: 2008 Benjamin Kosnik <bkoz@redhat.com> 2007-2010 Josh Triplett <josh@joshtriplett.org> License: GNUAllPermissive -Files: daemon/tools/dringctrl/sippwrap.py - daemon/tools/dringctrl/test_dring_dbus_interface.py +Files: daemon/tools/jamidctrl/sippwrap.py + daemon/tools/jamidctrl/test_jamid_dbus_interface.py Copyright: 2012 Free Software Foundation, Inc. License: GPL-2+ diff --git a/packaging/rules/debian/jami-all.manpages b/packaging/rules/debian/jami-all.manpages index 5e0fefce5bde9b8f11ae15738a73d25d271474c0..a2e889dda716131b3ec84970ca47088c617614f1 100644 --- a/packaging/rules/debian/jami-all.manpages +++ b/packaging/rules/debian/jami-all.manpages @@ -1,2 +1,2 @@ client-gnome/doc/jami-gnome.1 -daemon/dring.1 +daemon/jamid.1 diff --git a/packaging/rules/debian/jami-all.postinst b/packaging/rules/debian/jami-all.postinst index dfdd0902c9849aaf217af8dd672a0578eb28725d..31ad8b6ecf96b4b34121abbb71b7f4f47cd4be84 100755 --- a/packaging/rules/debian/jami-all.postinst +++ b/packaging/rules/debian/jami-all.postinst @@ -94,16 +94,16 @@ if [ -f /etc/os-release ]; then . /etc/os-release # Set-up Jami repository end tag - if [ "${DEBIAN_CODENAME}" = "buster" ] || [ "${ID}_${VERSION_ID}" = "debian_10" ]; then + if [ "${VERSION_CODENAME}" = "buster" ] || [ "${ID}_${VERSION_ID}" = "debian_10" ]; then ENDTAG="debian_10" + elif [ "${VERSION_CODENAME}" = "bullseye" ] || [ "${ID}_${VERSION_ID}" = "debian_11" ]; then + ENDTAG="debian_11" elif [ "${ID}_${VERSION_ID}" = "trisquel_9.0" ]; then ENDTAG="ubuntu_18.04" elif [ "${UBUNTU_CODENAME}" = "bionic" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_18.04" ]; then ENDTAG="ubuntu_18.04" elif [ "${UBUNTU_CODENAME}" = "focal" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_20.04" ]; then ENDTAG="ubuntu_20.04" - elif [ "${UBUNTU_CODENAME}" = "groovy" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_20.10" ]; then - ENDTAG="ubuntu_20.10" elif [ "${UBUNTU_CODENAME}" = "hirsute" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_21.04" ]; then ENDTAG="ubuntu_21.04" elif [ "${ID}" = "debian" ] && \ diff --git a/packaging/rules/debian/jami-daemon.manpages b/packaging/rules/debian/jami-daemon.manpages index 69e23e278d06cdced40aa35501275873cf7d1dcf..857be47ff4fcc76d264fb29fb67ea607b54b8013 100644 --- a/packaging/rules/debian/jami-daemon.manpages +++ b/packaging/rules/debian/jami-daemon.manpages @@ -1 +1 @@ -daemon/dring.1 +daemon/jamid.1 diff --git a/packaging/rules/debian/rules b/packaging/rules/debian/rules index b0b992106a508af3ce5fb31493a66edb738e3b98..276f2f875260797c86d9245e408f91794c0a2ad5 100755 --- a/packaging/rules/debian/rules +++ b/packaging/rules/debian/rules @@ -6,6 +6,15 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk +# Ubuntu defaults to use -Bsymbolic-functions, which breaks linking +# shared objects with static FFmpeg archives (see: +# https://bugs.launchpad.net/ubuntu/+source/ffmpeg/+bug/1942352). +ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes) +ifneq (,$(LDFLAGS)) + LDFLAGS := $(filter-out %-Bsymbolic-functions,$(LDFLAGS)) +endif +endif + # Number of CPUS NO_CPUS=$(shell nproc) ifeq ($(NO_CPUS),0) @@ -26,14 +35,10 @@ ifeq (raspbian_10_armhf,$(findstring raspbian_10_armhf, $(DISTRIBUTION))) BUNDLED_PKGS="--enable-ffmpeg --enable-yaml-cpp" # Add host environment variables CMAKE_OPTIONS=-DCHOST=${HOST_ARCH} \ - -DCMAKE_C_COMPILER=${HOST_ARCH}-gcc \ - -DCMAKE_CXX_COMPILER=${HOST_ARCH}-g++ \ - -DCMAKE_FIND_ROOT_PATH=/usr/${HOST_ARCH} \ - -DPKG_CONFIG_EXECUTABLE=/usr/bin/${HOST_ARCH}-pkg-config -else -ifneq (ubuntu_21.04,$(findstring ubuntu_21.04, $(DISTRIBUTION))) -BUNDLED_PKGS="--enable-ffmpeg" # For ubuntu 21.04 it seems there is massive issues with linking for swscale -endif + -DCMAKE_C_COMPILER=${HOST_ARCH}-gcc \ + -DCMAKE_CXX_COMPILER=${HOST_ARCH}-g++ \ + -DCMAKE_FIND_ROOT_PATH=/usr/${HOST_ARCH} \ + -DPKG_CONFIG_EXECUTABLE=/usr/bin/${HOST_ARCH}-pkg-config endif # Qt-related variables @@ -56,40 +61,40 @@ override_dh_auto_configure: mkdir -p daemon/contrib/native cd daemon/contrib/native && \ ../bootstrap \ - --host=${HOST_ARCH} \ - --disable-downloads \ - --no-checksums \ - --disable-ogg \ - --disable-flac \ - --disable-vorbis \ - --disable-vorbisenc \ - --disable-speex \ - --disable-sndfile \ - --disable-gsm \ - --disable-speexdsp \ - --disable-natpmp \ - --enable-gnutls $(BUNDLED_PKGS) && \ - make list && \ - make -j$(NO_CPUS) V=1 + --host=${HOST_ARCH} \ + --disable-downloads \ + --no-checksums \ + --disable-ogg \ + --disable-flac \ + --disable-vorbis \ + --disable-vorbisenc \ + --disable-speex \ + --disable-sndfile \ + --disable-gsm \ + --disable-speexdsp \ + --disable-natpmp \ + --enable-gnutls $(BUNDLED_PKGS) && \ + make list && \ + make -j$(NO_CPUS) V=1 cd daemon && \ - ./autogen.sh && \ - ./configure \ - --prefix=/usr \ - --disable-shared \ - --host=${HOST_ARCH} + ./autogen.sh && \ + ./configure \ + --disable-shared \ + --prefix=/usr \ + --host=${HOST_ARCH} ############################# ## libringclient configure ## ############################# cd lrc && \ - mkdir build && \ - cd build && \ - cmake \ - -DRING_BUILD_DIR=$(CURDIR)/daemon/src \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - $(CMAKE_OPTIONS) \ - .. + mkdir build && \ + cd build && \ + cmake \ + -DRING_BUILD_DIR=$(CURDIR)/daemon/src \ + -DENABLE_LIBWRAP=false \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + $(CMAKE_OPTIONS) .. ############################ ## gnome client configure ## @@ -117,7 +122,7 @@ override_dh_auto_build: ## Daemon build ## ####################### make -C daemon -j$(NO_CPUS) V=1 - pod2man daemon/man/dring.pod > daemon/dring.1 + pod2man daemon/man/jamid.pod > daemon/jamid.1 ######################### ## libringclient build ## @@ -133,49 +138,49 @@ override_dh_auto_build: ## qt client configure and build ## ################################### cd client-qt && \ - mkdir build && \ - cd build && \ - cmake \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DLRC=$(CURDIR)/lrc \ - $(CMAKE_OPTIONS) \ - .. + mkdir build && \ + cd build && \ + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLRC=$(CURDIR)/lrc \ + $(CMAKE_OPTIONS) .. make -C client-qt/build -j$(NO_CPUS) V=1 override_dh_auto_clean: ####################### ## Daemon clean ## ####################### - if [ -f daemon/contrib/native/Makefile ]; then make -C daemon/contrib/native distclean; fi + [ -f daemon/contrib/native/Makefile ] && \ + make -C daemon/contrib/native distclean || true rm -rfv daemon/contrib/native - rm -rfv daemon/dring.1 + rm -rfv daemon/jamid.1 ######################### ## libringclient clean ## ######################### # CMake build system has no distclean target, so use clean. - if [ -f lrc/build/Makefile ]; then make -C lrc/build clean; fi + [ -f lrc/build/Makefile ] && make -C lrc/build clean || true rm -rfv lrc/build ######################## ## gnome client clean ## ######################## # CMake build system has no distclean target, so use clean. - if [ -f client-gnome/build/Makefile ]; then make -C client-gnome/build clean; fi + [ -f client-gnome/build/Makefile ] && \ + make -C client-gnome/build clean || true rm -rfv client-gnome/build ##################### ## qt client clean ## ##################### # CMake build system has no distclean target, so use clean. - if [ -f client-qt/build/Makefile ]; then make -C client-qt/build clean; fi + [ -f client-qt/build/Makefile ] && make -C client-qt/build clean || true rm -rfv client-qt/build override_dh_auto_install: ######################### ## Daemon install ## ######################### - cd daemon && make DESTDIR=$(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME) install rm -rfv $(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME)/usr/include rm -rfv $(CURDIR)/debian/$(JAMI_DAEMON_PKG_NAME)/usr/lib/*.a @@ -184,7 +189,6 @@ override_dh_auto_install: ######################### ## Jami client install ## ######################### - ## LibRingClient cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(JAMI_LIB_CLIENT_PKG_NAME) install rm -rfv $(CURDIR)/debian/$(JAMI_LIB_CLIENT_PKG_NAME)/usr/include @@ -202,9 +206,7 @@ override_dh_auto_install: ## Qt client cd client-qt/build && \ - make DESTDIR=$(CURDIR)/debian/$(JAMI_CLIENT_PKG_NAME) install - - ln -sf /usr/bin/jami $(CURDIR)/debian/jami/usr/bin/ring.cx + make DESTDIR=$(CURDIR)/debian/$(JAMI_CLIENT_PKG_NAME) install ## Custom Qt package for Jami (libqt-jami) ## Copy our own Qt library package content into the OCI package. @@ -217,7 +219,6 @@ override_dh_auto_install: ###################### ## Jami AiO install ## ###################### - ## daemon cd daemon && make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install rm -rfv $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/include @@ -236,9 +237,7 @@ override_dh_auto_install: ## Qt client cd client-qt/build && \ - make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install - - ln -sf /usr/bin/jami $(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME)/usr/bin/ring.cx + make DESTDIR=$(CURDIR)/debian/$(JAMI_ALL_IN_ONE_PKG_NAME) install override_dh_shlibdeps: dh_shlibdeps -- -x$(JAMI_ALL_IN_ONE_PKG_NAME) diff --git a/packaging/rules/rpm/jami-all.postinst b/packaging/rules/rpm/jami-all.postinst index 3c6d2d5a414d62b16b75606925591a563caa044e..f1b9dbef2bf351ad9402fa5430e6f1889d56824c 100755 --- a/packaging/rules/rpm/jami-all.postinst +++ b/packaging/rules/rpm/jami-all.postinst @@ -77,68 +77,62 @@ is_distribution_supported() { # This defines variables such as NAME, ID, VERSION_ID, etc. . /etc/os-release - case ${ID}_${VERSION_ID%.*} in - rhel_8|fedora_32|fedora_33|fedora_34|opensuse-leap_15.2|opensuse-tumbleweed) + case ${ID} in + rhel*|fedora*|opensuse*) return 0 esac return 1 } +has_rpm() { + command -v rpm > /dev/null +} + +is_opensuse() { + case ${ID} in + opensuse*) + return 0 + esac + return 1 +} + ############################################################################### # [3] Maintainer script main switch # ############################################################################### -if is_distribution_supported; then - CAN_ADD_REPO_SOURCE=true -else - CAN_ADD_REPO_SOURCE=false -fi +# Exit unless the following conditions are met. +is_distribution_supported && has_rpm || exit 0 + +# Note: the NAME and ID variables are set as a side-effect of sourcing +# the /etc/os-release file in the above is_distribution_supported +# call. -if command -v rpm > /dev/null; then - # RPM is required to add the key. - CAN_ADD_REPO_SOURCE=false +# SUSE specifics. +if is_opensuse; then + REPO_FILE=/etc/zypp/repos.d/jami-main.repo + GPG_FILE="/tmp/RPM-GPG-KEY-JAMI" fi -JAMI_REPO=' -[jami] -name='"${NAME}"' $releasever - $basearch - Jami -baseurl='"${JAMI_REPO_BASE}"/"${ID}"'_$releasever -gpgcheck=1 -gpgkey=https://dl.jami.net/jami.pub.key -enabled=1' +# Add the key to the trusted keyring. +echo "$JAMI_KEY" > "$GPG_FILE" +rm -f /var/lib/rpm/.rpm.lock > /dev/null 2>&1 +rpm --import "$GPG_FILE" > /dev/null 2>&1 + +jami_repo_name="$NAME \$releasever - \$basearch - Jami" +jami_repo_base_url="$JAMI_REPO_BASE/$ID_\$releasever" +# Remove releasever for tumbleweed as it's a rolling release. +if [ "$ID" = "opensuse-tumbleweed" ]; then + jami_repo_name="$NAME \$basearch - Jami" + jami_repo_base_url=$JAMI_REPO_BASE/$ID +fi -# Set-up Jami repository end tag -if [ "${PLATFORM_ID}" = "opensuse-leap:15.2" ]; then - ENDTAG="opensuse-leap_15.2" - REPO_FILE="/etc/zypp/repos.d/jami-main.repo" - GPG_FILE="/tmp/RPM-GPG-KEY-JAMI" -elif [ "${PLATFORM_ID}" = "opensuse-tumbleweed" ]; then - ENDTAG="opensuse-tumbleweed" - REPO_FILE="/etc/zypp/repos.d/jami-main.repo" - GPG_FILE="/tmp/RPM-GPG-KEY-JAMI" - # Remove releasever for tumbleweed as it's a rolling release - JAMI_REPO=' +# Add an entry for the package repository to the trusted package. +cat > "$REPO_FILE" <<EOF [jami] -name='"${NAME}"' $basearch - Jami -baseurl='"${JAMI_REPO_BASE}"/"${ID}"' +name=$jami_repo_name +baseurl=$jami_repo_base_url gpgcheck=1 gpgkey=https://dl.jami.net/jami.pub.key -enabled=1' -fi - -if [ "${CAN_ADD_REPO_SOURCE}" = "true" ]; then - # Add the key to the trusted keyring. - echo "$JAMI_KEY" > "$GPG_FILE" - - rm -f /var/lib/rpm/.rpm.lock > /dev/null 2>&1 - rpm --import "$GPG_FILE" > /dev/null 2>&1 - - # Add an entry for the package repository to the trusted package. - # XXX: The NAME and ID variables are set as a side-effect of - # sourcing the /etc/os-release file in the above - # is_distribution_supported call. - cat > $REPO_FILE <<EOF -$JAMI_REPO +enabled=1 EOF -fi diff --git a/packaging/rules/rpm/jami-daemon.spec b/packaging/rules/rpm/jami-daemon.spec index 634b51dc5859792faacc8eca064a481f775555b1..c7a6a1d5f9f0da176ed7812f464e5d144253dc42 100644 --- a/packaging/rules/rpm/jami-daemon.spec +++ b/packaging/rules/rpm/jami-daemon.spec @@ -90,23 +90,25 @@ cd %{_builddir}/ring-project/daemon && \ # Build the daemon. make -C %{_builddir}/ring-project/daemon %{_smp_mflags} V=1 -pod2man %{_builddir}/ring-project/daemon/man/dring.pod \ - > %{_builddir}/ring-project/daemon/dring.1 +pod2man %{_builddir}/ring-project/daemon/man/jamid.pod \ + > %{_builddir}/ring-project/daemon/jamid.1 %install DESTDIR=%{buildroot} make -C daemon install -cp %{_builddir}/ring-project/daemon/dring.1 \ - %{buildroot}/%{_mandir}/man1/dring.1 +cp %{_builddir}/ring-project/daemon/jamid.1 \ + %{buildroot}/%{_mandir}/man1/jamid.1 rm -rfv %{buildroot}/%{_libdir}/*.a rm -rfv %{buildroot}/%{_libdir}/*.la %files %defattr(-,root,root,-) -%{_libdir}/ring/dring -%{_datadir}/ring/ringtones +# XXX: Use %%{_libexecdir}/jamid after there's no more OpenSUSE Leap +# < 16 (see https://en.opensuse.org/openSUSE:Specfile_guidelines). +/usr/libexec/jamid +%{_datadir}/jami/ringtones %{_datadir}/dbus-1/services/* %{_datadir}/dbus-1/interfaces/* -%doc %{_mandir}/man1/dring* +%doc %{_mandir}/man1/jamid* %package devel Summary: Development files of the Jami daemon @@ -115,7 +117,7 @@ Summary: Development files of the Jami daemon This package contains the header files for using the Jami daemon as a library. %files devel -%{_includedir}/dring +%{_includedir}/jami %{_includedir}/jami_contact.h %post diff --git a/packaging/rules/rpm/jami-gnome.spec b/packaging/rules/rpm/jami-gnome.spec index 170bdd5552e015591ae6a3e8a6aa5f540d03c318..3006b0a5f0e2ecc9f08fbbbb0923709c081a37b6 100644 --- a/packaging/rules/rpm/jami-gnome.spec +++ b/packaging/rules/rpm/jami-gnome.spec @@ -65,7 +65,6 @@ make -C %{_builddir}/ring-project/client-gnome/build \ DESTDIR=%{buildroot} make -C %{_builddir}/ring-project/client-gnome/build install # Only keep /bin/jami-gnome for the GNOME client. rm -rfv %{buildroot}/%{_bindir}/jami -rm -rfv %{buildroot}/%{_bindir}/ring.cx %files %defattr(-,root,root,-) @@ -73,6 +72,7 @@ rm -rfv %{buildroot}/%{_bindir}/ring.cx %{_datadir}/applications/jami-gnome.desktop %{_datadir}/glib-2.0/schemas/net.jami.Jami.gschema.xml %{_datadir}/icons/hicolor/scalable/apps/jami-gnome.svg +%{_datadir}/icons/hicolor/scalable/apps/jami-gnome-new.svg %{_datadir}/jami-gnome %{_datadir}/locale/* %{_datadir}/metainfo/jami-gnome.appdata.xml diff --git a/packaging/rules/rpm/jami-libclient.spec b/packaging/rules/rpm/jami-libclient.spec index aa54c06f25797bbb29cdd514c695213bc1796c98..55556bc31728f93a56deca1e7b75fdbbff9283da 100644 --- a/packaging/rules/rpm/jami-libclient.spec +++ b/packaging/rules/rpm/jami-libclient.spec @@ -20,8 +20,6 @@ BuildRequires: jami-daemon-devel = %{version} BuildRequires: make %if 0%{?fedora} >= 32 BuildRequires: NetworkManager-libnm-devel -BuildRequires: qt5-qtbase-devel -BuildRequires: qt5-qttools-devel %endif %description diff --git a/packaging/rules/rpm/jami-libqt.spec b/packaging/rules/rpm/jami-libqt.spec index f7534b1869c0527081fb90b27cbc6c7f8ae40955..0bd11578e63e7f089d6a10778712228a296b93fe 100644 --- a/packaging/rules/rpm/jami-libqt.spec +++ b/packaging/rules/rpm/jami-libqt.spec @@ -2,6 +2,21 @@ %define version RELEASE_VERSION %define release 0 +# qtwebengine (aka chromium) takes a ton of memory per build process, +# up to 2.3 GiB. Cap the number of jobs based on the amount of +# available memory to try to guard against OOM build failures. +%define min(a,b) %(echo $(( %1 < %2 ? %1 : %2 ))) +%define max(a,b) %(echo $(( %1 > %2 ? %1 : %2 ))) + +%define cpu_count %max %(nproc) 1 +%define available_memory %(free -g | grep -E '^Mem:' | awk '{print $7}') +# Required memory in GiB. +%define max_parallel_builds 4 +%define memory_required_per_core 2 +%define computed_job_count_ %(echo $(( %available_memory / %memory_required_per_core / %max_parallel_builds ))) +%define computed_job_count %max %computed_job_count_ 1 +%define job_count %min %cpu_count %computed_job_count + Name: %{name} Version: %{version} Release: %{release}%{?dist} @@ -31,18 +46,30 @@ This package contains Qt libraries for Jami. %setup -n qt-everywhere-src-%{version} %build - ./configure \ - -opensource \ - -confirm-license \ - -nomake examples \ - -nomake tests \ - -prefix "%{_libdir}/qt-jami" - sed -i 's,bin/python,bin/env python3,g' qtbase/mkspecs/features/uikit/devices.py - make -j8 V=1 +echo "Building Qt using %{job_count} parallel jobs" +# https://bugs.gentoo.org/768261 (Qt 5.15) +sed -i 's,#include "absl/base/internal/spinlock.h"1,#include "absl/base/internal/spinlock.h"1\n#include <limits>,g' qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +sed -i 's,#include <stdint.h>,#include <stdint.h>\n#include <limits>,g' qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/containers/string_pool.h +# https://bugreports.qt.io/browse/QTBUG-93452 (Qt 5.15) +sed -i 's,# include <utility>,# include <utility>\n# include <limits>,g' qtbase/src/corelib/global/qglobal.h +sed -i 's,#include <string.h>,#include <string.h>\n#include <limits>,g' qtbase/src/corelib/global/qendian.h +cat qtbase/src/corelib/global/qendian.h +sed -i 's,#include <string.h>,#include <string.h>\n#include <limits>,g' qtbase/src/corelib/global/qfloat16.h +sed -i 's,#include <QtCore/qbytearray.h>,#include <QtCore/qbytearray.h>\n#include <limits>,g' qtbase/src/corelib/text/qbytearraymatcher.h +./configure \ + -opensource \ + -confirm-license \ + -nomake examples \ + -nomake tests \ + -prefix "%{_libdir}/qt-jami" +sed -i 's,bin/python,bin/env python3,g' qtbase/mkspecs/features/uikit/devices.py + +# Chromium is built using Ninja, which doesn't honor MAKEFLAGS. +make -j%{job_count} V=1 NINJAFLAGS="-j%{job_count}" %install -make -j8 INSTALL_ROOT=%{buildroot} V=1 install +make -j%{job_count} INSTALL_ROOT=%{buildroot} V=1 install %files %defattr(-,root,root,-) -%{_libdir}/qt-jami \ No newline at end of file +%{_libdir}/qt-jami diff --git a/packaging/rules/rpm/jami-qt.spec b/packaging/rules/rpm/jami-qt.spec index 92f5d471873c16bcc3ad76fd97fc447588929a81..d53a29975cb4a450210e884254062b3ed5268212 100644 --- a/packaging/rules/rpm/jami-qt.spec +++ b/packaging/rules/rpm/jami-qt.spec @@ -12,6 +12,9 @@ Vendor: Savoir-faire Linux URL: https://jami.net/ Source: jami_%{version}.tar.gz Requires: jami-libclient = %{version} +%if 0%{?fedora} >= 32 +Requires: jami-libqt +%endif Provides: jami Obsoletes: jami < %{version}-%{release} @@ -22,19 +25,6 @@ BuildRequires: make # Build and runtime dependencies. BuildRequires: qrencode-devel -%if 0%{?fedora} >= 32 -BuildRequires: qt5-qttools-devel -BuildRequires: qt5-qtbase-devel -BuildRequires: qt5-qtdeclarative-devel -BuildRequires: qt5-qtmultimedia-devel -BuildRequires: qt5-qtquickcontrols -BuildRequires: qt5-qtquickcontrols2-devel -BuildRequires: qt5-qtsvg-devel -BuildRequires: qt5-qtwebengine-devel -# Runtime dependencies not automatically registered by RPM. -Requires: qt5-qtquickcontrols -Requires: qt5-qtgraphicaleffects -%endif %description This package contains the Qt desktop client of Jami. Jami is a free diff --git a/patches/docker-snap-build-scripts.patch b/patches/docker-snap-build-scripts.patch index 4dcc0f93e1497bedd8f693b9612c9364e2587cc9..82838f15f9f97ea6426261943b3ef89ae49e8489 100644 --- a/patches/docker-snap-build-scripts.patch +++ b/patches/docker-snap-build-scripts.patch @@ -27,4 +27,4 @@ Author: Amin Bandali <amin.bandali@savoirfairelinux.com> + +ADD scripts/build-package-snap.sh /opt/build-package-snap.sh + -+CMD /opt/build-package-snap.sh ++CMD ["/opt/build-package-snap.sh"] diff --git a/plugins b/plugins index 7bfad26ae4eeb656733d409aa88cf0fcae69d7a5..17c0bc64a374d601012943a0a79ace65734dd922 160000 --- a/plugins +++ b/plugins @@ -1 +1 @@ -Subproject commit 7bfad26ae4eeb656733d409aa88cf0fcae69d7a5 +Subproject commit 17c0bc64a374d601012943a0a79ace65734dd922 diff --git a/scripts/build-package-debian-qt.sh b/scripts/build-package-debian-qt.sh deleted file mode 100755 index 2852cbf74e2952a87405d141b4dc6b24372618f8..0000000000000000000000000000000000000000 --- a/scripts/build-package-debian-qt.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (C) 2021 Savoir-faire Linux Inc. -# -# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> -# -# This program 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 3 of the License, or -# (at your option) any later version. -# -# This program 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 program. If not, see <http://www.gnu.org/licenses/>. -# -# This script is used in the packaging containers to build a snap -# package on an ubuntu base distro. - - -set -e - -PKG_DIR="packaging/rules/debian-qt" - -cache_dir=/opt/ring-contrib -temp_dir=$(mktemp -d) - -mkdir /opt/libqt-jami-build -cd /opt/libqt-jami-build - -qt_version=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH} -tarball_name=qt-everywhere-src-${qt_version}.tar.xz -cached_tarball=$cache_dir/$tarball_name -qt_base_url=https://download.qt.io/archive/qt/${QT_MAJOR}.${QT_MINOR}/${qt_version}/single - -if ! [[ -d $cache_dir && -w $cache_dir ]]; then - echo "error: $cache_dir does not exist or is not writable" - exit 1 -fi - -if ! [ -f "$cached_tarball" ]; then - ( - cd "$temp_dir" - wget "$qt_base_url/$tarball_name" - echo -n "${QT_TARBALL_CHECKSUM} $tarball_name" | sha256sum -c - || \ - (echo "Qt tarball checksum mismatch; quitting" && exit 1) - flock "${cached_tarball}.lock" mv "$tarball_name" "$cached_tarball" - ) - rm -rf "$temp_dir" -fi - -cp "$cached_tarball" libqt-jami_${qt_version}.orig.tar.xz -tar xvf libqt-jami_${qt_version}.orig.tar.xz -mv qt-everywhere-src-${qt_version} libqt-jami-${qt_version} -cd libqt-jami-${qt_version} - -# import the debian folder -cp --verbose -r /opt/ring-project-ro/${PKG_DIR} debian - -# create changelog file -DEBEMAIL="The Jami project <jami@gnu.org>" dch --create --package libqt-jami --newversion ${DEBIAN_VERSION} "New libqt-jami release" -DEBEMAIL="The Jami project <jami@gnu.org>" dch --release --distribution "unstable" debian/changelog - -DPKG_BUILD_OPTIONS="" -# Set the host architecture as armhf and add some specific architecture -# options to the package builder. -if grep -q "raspbian_10_qt_armhf" <<< "${DISTRIBUTION}"; then - echo "Adding armhf as the host architecture." - export HOST_ARCH=arm-linux-gnueabihf - DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf" -fi - -# build and package qt -dpkg-buildpackage -uc -us ${DPKG_BUILD_OPTIONS} - -# move the artifacts to output -cd .. -mv *.orig.tar* *.debian.tar* *deb *changes *dsc /opt/output -chown -R ${CURRENT_UID}:${CURRENT_GID} /opt/output/ diff --git a/scripts/build-package-debian.sh b/scripts/build-package-debian.sh index 71d6fb8acfcac1d7c2326cc3f163c175a8361862..4a0fb62b40e0f66a9716bee2eee97beb66ac481f 100755 --- a/scripts/build-package-debian.sh +++ b/scripts/build-package-debian.sh @@ -3,6 +3,8 @@ # Copyright (C) 2016-2021 Savoir-faire Linux Inc. # # Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com> +# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> +# Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,13 +33,87 @@ if grep -q "raspbian_10_armhf" <<< "${DISTRIBUTION}"; then DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf" fi -# Setup work directory. +cache_packaging=$TARBALLS/$DISTRIBUTION +mkdir -p "$cache_packaging" + +deb_arch=$(dpkg --print-architecture) +qt_deb_name=libqt-jami_${DEBIAN_QT_VERSION}_${deb_arch}.deb +qt_deb_path=${cache_packaging}/${qt_deb_name} + +if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then + ( + flock 9 # block until the lock file is gone + test -f "${qt_deb_path}" && exit 0 # check again + + # Build Qt. + mkdir /opt/libqt-jami-build + cd /opt/libqt-jami-build + + qt_version=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH} + tarball_name=qt-everywhere-src-${qt_version}.tar.xz + cached_tarball=$TARBALLS/$tarball_name + qt_base_url=https://download.qt.io/archive/qt/\ +${QT_MAJOR}.${QT_MINOR}/${qt_version}/single + + if [ ! -d "${TARBALLS}" ] || [ ! -w "${TARBALLS}" ]; then + echo "error: $TARBALLS does not exist or is not writable" + exit 1 + fi + + if [ ! -f "${cached_tarball}" ]; then + ( + flock 8 # block until the lock file is gone + test -f "${cached_tarball}" && exit 0 # check again + + temp_dir=$(mktemp -d) + cd "${temp_dir}" + wget "${qt_base_url}/${tarball_name}" + echo -n "${QT_TARBALL_CHECKSUM} ${tarball_name}" | sha256sum -c - || \ + (echo "Qt tarball checksum mismatch; quitting" && exit 1) + mv "${tarball_name}" "${cached_tarball}" + rm -rf "${temp_dir}" + ) 8>"${cached_tarball}.lock" + + fi + + cp "${cached_tarball}" "libqt-jami_${qt_version}.orig.tar.xz" + tar xvf "libqt-jami_${qt_version}.orig.tar.xz" + mv "qt-everywhere-src-${qt_version}" "libqt-jami-${qt_version}" + cd "libqt-jami-${qt_version}" + + # Extract the debian folder + tar xf "/src/$RELEASE_TARBALL_FILENAME" ring-project/packaging/rules/debian-qt \ + --strip-components=3 && mv debian-qt debian + + # Create the changelog file. + DEBEMAIL="The Jami project <jami@gnu.org>" dch --create \ + --package libqt-jami \ + --newversion "${DEBIAN_QT_VERSION}" "New libqt-jami release" + DEBEMAIL="The Jami project <jami@gnu.org>" dch --release \ + --distribution "unstable" debian/changelog + + # Build and package Qt. + dpkg-buildpackage -uc -us ${DPKG_BUILD_OPTIONS} + + # Cache the built .deb. + mv "../${qt_deb_name}" "${qt_deb_path}" + + ) 9>"${qt_deb_path}.lock" +fi + +# install libqt-jami from cache +apt-get install -y "${qt_deb_path}" + +# copy libqt-jami to output +cp "${qt_deb_path}" /opt/output/ + +# Set up work directory. mkdir -p /jami/work && cd /jami/work # Create a changelog file, required by dpkg-buildpackage. mkdir debian DEBEMAIL="The Jami project <jami@gnu.org>" dch --create --package jami \ - --newversion ${DEBIAN_VERSION} "Automatic nightly release" + --newversion "${DEBIAN_VERSION}" "Automatic nightly release" DEBEMAIL="The Jami project <jami@gnu.org>" dch --release \ --distribution "unstable" debian/changelog @@ -53,5 +129,5 @@ ln -s packaging/rules/debian . dpkg-buildpackage -b -uc -us ${DPKG_BUILD_OPTIONS} # Move the artifacts to the output. -mv ../*.deb /opt/output -chown -R ${CURRENT_UID}:${CURRENT_UID} /opt/output +mv ../*deb /opt/output # .deb and .ddeb packages +chown -R "${CURRENT_UID}:${CURRENT_UID}" /opt/output diff --git a/scripts/build-package-rpm.sh b/scripts/build-package-rpm.sh index ade22271dd42f3ca3066eb03511966026155d10f..fd8226a7c93c29cd925d28fb2b25a4974dd6b274 100755 --- a/scripts/build-package-rpm.sh +++ b/scripts/build-package-rpm.sh @@ -21,20 +21,20 @@ # This script is used in the packaging containers to build packages on # rpm-based distros. # - set -e # Import the spec file. mkdir -p /opt/ring-project cd /opt/ring-project -cp /opt/ring-project-ro/packaging/rules/rpm/* . +tar xf "/src/$RELEASE_TARBALL_FILENAME" ring-project/packaging/rules/rpm \ + --strip-components=3 && mv rpm/* . && rmdir rpm rm jami-libqt.spec # Prepare the build tree. rpmdev-setuptree # Copy the source tarball. -cp /opt/ring-project-ro/jami_*.tar.gz /root/rpmbuild/SOURCES +cp --reflink=auto "/src/$RELEASE_TARBALL_FILENAME" /root/rpmbuild/SOURCES QT_JAMI_PREFIX="/usr/lib64/qt-jami" PATH="${QT_JAMI_PREFIX}/bin:${PATH}" @@ -45,51 +45,82 @@ QT_MAJOR=5 QT_MINOR=15 QT_PATCH=2 -if [[ "${DISTRIBUTION:0:4}" == "rhel" \ - || "${DISTRIBUTION:0:13}" == "opensuse-leap" ]]; then +QT_MAJOR_MINOR=${QT_MAJOR}.${QT_MINOR} +QT_MAJOR_MINOR_PATCH=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH} + +QT_TARBALL_URL=https://download.qt.io/archive/qt/$QT_MAJOR_MINOR/\ +$QT_MAJOR_MINOR_PATCH/single/qt-everywhere-src-$QT_MAJOR_MINOR_PATCH.tar.xz + +QT_TARBALL_SHA256="3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240" +QT_TARBALL_FILE_NAME=$(basename "$QT_TARBALL_URL") +CACHED_QT_TARBALL=$TARBALLS/$QT_TARBALL_FILE_NAME + +if [[ "${DISTRIBUTION}" != "opensuse-tumbleweed" ]]; then - RPM_PATH=/opt/cache-packaging/${DISTRIBUTION}/jami-libqt-${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}-1.x86_64.rpm + mkdir -p "$TARBALLS/$DISTRIBUTION" + RPM_PATH=$TARBALLS/$DISTRIBUTION/jami-libqt-$QT_MAJOR_MINOR_PATCH-1.x86_64.rpm if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then - RPM_PATH=/opt/cache-packaging/${DISTRIBUTION}/jami-libqt-${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}-1.el8.x86_64.rpm + RPM_PATH=$TARBALLS/${DISTRIBUTION}/jami-libqt-$QT_MAJOR_MINOR_PATCH-1.el8.x86_64.rpm fi if [ ! -f "${RPM_PATH}" ]; then - mkdir /opt/qt-jami-build - cd /opt/qt-jami-build - cp /opt/ring-project-ro/packaging/rules/rpm/jami-libqt.spec . - - QT_TARBALL_CHECKSUM="3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240" - wget https://download.qt.io/archive/qt/${QT_MAJOR}.${QT_MINOR}/${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}/single/qt-everywhere-src-${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}.tar.xz - - if ! echo -n ${QT_TARBALL_CHECKSUM} qt-everywhere-src-*.tar.xz | sha256sum -c - - then - echo "qt tarball checksum mismatch; quitting" - exit 1 - fi - - mv qt-everywhere-src-${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}.tar.xz /root/rpmbuild/SOURCES/jami-qtlib_${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}.tar.xz - sed -i "s/RELEASE_VERSION/${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}/g" jami-libqt.spec - rpmdev-bumpspec --comment="Automatic nightly release" \ - --userstring="Jenkins <jami@lists.savoirfairelinux.net>" jami-libqt.spec - - rpmbuild -ba jami-libqt.spec - mkdir -p /opt/cache-packaging/${DISTRIBUTION}/ - - if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then - cp /root/rpmbuild/RPMS/x86_64/jami-libqt-${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}-1.el8.x86_64.rpm ${RPM_PATH} - else - cp /root/rpmbuild/RPMS/x86_64/jami-libqt-*.rpm ${RPM_PATH} - fi + # The following block will only run on one build machine at a + # time, thanks to flock. + ( + flock 9 # block until the lock is available + test -f "$RPM_PATH" && exit 0 # check again + + mkdir /opt/qt-jami-build + cd /opt/qt-jami-build + tar xf "/src/$RELEASE_TARBALL_FILENAME" \ + ring-project/packaging/rules/rpm/jami-libqt.spec \ + --strip-components=4 + + # Fetch and cache the tarball, if not already available. + if [ ! -f "$CACHED_QT_TARBALL" ]; then + ( + flock 8 # block until the lock file is gone + test -f "$CACHED_QT_TARBALL" && exit 0 # check again + + wget "$QT_TARBALL_URL" + if ! echo -n ${QT_TARBALL_SHA256} "$QT_TARBALL_FILE_NAME" | sha256sum -c - + then + echo "qt tarball checksum mismatch; quitting" + exit 1 + fi + mv "$QT_TARBALL_FILE_NAME" "$CACHED_QT_TARBALL" + ) 8>"${CACHED_QT_TARBALL}.lock" + fi + + cp "$CACHED_QT_TARBALL" "/root/rpmbuild/SOURCES/jami-qtlib_$QT_MAJOR_MINOR_PATCH.tar.xz" + sed -i "s/RELEASE_VERSION/$QT_MAJOR_MINOR_PATCH/g" jami-libqt.spec + rpmdev-bumpspec --comment="Automatic nightly release" \ + --userstring="Jenkins <jami@lists.savoirfairelinux.net>" jami-libqt.spec + + rpmbuild -ba jami-libqt.spec + mkdir -p "$TARBALLS/${DISTRIBUTION}" + + # Cache the built Qt RPM package. + if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then + cp "/root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-1.el8.x86_64.rpm" "${RPM_PATH}" + elif [[ "${DISTRIBUTION}" == "fedora_33" ]]; then + cp "/root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-1.fc33.x86_64.rpm" "${RPM_PATH}" + elif [[ "${DISTRIBUTION}" == "fedora_34" ]]; then + cp "/root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-1.fc34.x86_64.rpm" "${RPM_PATH}" + else + cp /root/rpmbuild/RPMS/x86_64/jami-libqt-*.rpm "${RPM_PATH}" + fi + ) 9>"${RPM_PATH}.lock" fi - rpm --install ${RPM_PATH} - cp ${RPM_PATH} /opt/output + rpm --install "${RPM_PATH}" + cp "${RPM_PATH}" /opt/output cd /opt/ring-project fi # Set the version and associated comment. -sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" *.spec +sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" ./*.spec rpmdev-bumpspec --comment="Automatic nightly release" \ - --userstring="Jenkins <jami@lists.savoirfairelinux.net>" *.spec + --userstring="Jenkins <jami@lists.savoirfairelinux.net>" ./*.spec # Build the daemon and install it. rpmbuild -ba jami-daemon.spec @@ -105,7 +136,7 @@ rpmbuild -ba jami-gnome.spec jami-qt.spec # Move the built packages to the output directory. mv /root/rpmbuild/RPMS/*/* /opt/output touch /opt/output/.packages-built -chown -R ${CURRENT_UID}:${CURRENT_UID} /opt/output +chown -R "$CURRENT_UID:$CURRENT_UID" /opt/output # TODO: One click install: create a package that combines the already # built package into one. diff --git a/scripts/build-package-snap.sh b/scripts/build-package-snap.sh index ebad3cb6f728185c3132df7751f9ca6c25294de4..c7035560605432d1e15ea958162d83410677f275 100755 --- a/scripts/build-package-snap.sh +++ b/scripts/build-package-snap.sh @@ -23,7 +23,7 @@ set -e -cp -rp /opt/ring-project-ro /opt/ring-project +tar xf "/src/$RELEASE_TARBALL_FILENAME" -C /opt cd /opt/ring-project/packaging/rules/snap/${SNAP_PKG_NAME}/ # set the version and tarball filename diff --git a/scripts/deploy-packages.sh b/scripts/deploy-packages.sh index ef82d8d82509bf9c10d26a70771bfb4017d8f669..3847840bb097638ea5ae9e4a9b200d4265e0221a 100755 --- a/scripts/deploy-packages.sh +++ b/scripts/deploy-packages.sh @@ -23,6 +23,13 @@ # This script syncs and deploys packages from packages/distro. # It should be run from the project root directory. # +# Requirements +# - createrepo-c +# - dpkg +# - reprepro +# - rpm +# - rsync +# - snapcraft # Exit immediately if a command exits with a non-zero status set -e @@ -31,39 +38,10 @@ set -e ## Debian / Ubuntu packaging ## ############################### -function fetch_qt_deb() -{ - if [ -f "${SSH_IDENTITY_FILE}" ]; - then - export RSYNC_RSH="ssh -i ${SSH_IDENTITY_FILE}" - fi - - echo "#####################" - echo "## fetching qt deb ##" - echo "#####################" - echo "Using RSYNC_RSH='${RSYNC_RSH}'" - rsync --archive --verbose \ - ${REMOTE_REPOSITORY_LOCATION}/${DISTRIBUTION}_qt/pool/main/libq/libqt-jami/*.deb \ - ${DISTRIBUTION_REPOSITORY_FOLDER}_qt/ -} - -# True if $DISTRIBUTION ends by _qt -is_distribution_qt() { - [[ $DISTRIBUTION =~ _qt$ ]] -} - function package_deb() { DISTRIBUTION_REPOSITORY_FOLDER=$(realpath repositories)/${DISTRIBUTION} mkdir -p ${DISTRIBUTION_REPOSITORY_FOLDER} - mkdir -p ${DISTRIBUTION_REPOSITORY_FOLDER}_qt - - ########################################################### - ## fetch qt deb (if not currently building a qt package) ## - ########################################################### - if ! is_distribution_qt; then - fetch_qt_deb - fi ################################################## ## Create local repository for the given distro ## @@ -97,17 +75,17 @@ EOF #################################### ## Add packages to the repository ## #################################### - packages="packages/${DISTRIBUTION}*/*.deb" - if ! is_distribution_qt; then - packages+=" ${DISTRIBUTION_REPOSITORY_FOLDER}_qt/*.deb" - fi - - for package in ${packages}; do - # Sign the deb + # Note: reprepro currently only accepts .deb files as input, but + # Ubuntu generates their debug symbol packages as .ddeb (see: + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=730572). As + # these are just regular Debian packages, simply append the .deb + # extension to their file name to work around this. + find ./packages -type f -name '*.ddeb' -print0 | xargs -0 -I{} mv {} {}.deb + + for package in packages/${DISTRIBUTION}*/*.deb; do echo "## signing: ${package} ##" dpkg-sig -k ${KEYID} --sign builder ${package} - # Include the deb echo "## including ${package} ##" package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}') package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}') @@ -212,7 +190,7 @@ EOF done # Create the repo - createrepo --update ${DISTRIBUTION_REPOSITORY_FOLDER} + createrepo_c --update ${DISTRIBUTION_REPOSITORY_FOLDER} ####################################### ## create the manual download folder ## diff --git a/scripts/install.sh b/scripts/install.sh index 0481ac9e8af6f91ef668302e9c202bb917f4033e..5c2b8020986f8d431ee45711a946ad8b8d1b9223 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -183,7 +183,7 @@ else else client_cmake_flags+=( -DCMAKE_INSTALL_PREFIX="${INSTALL}/${client}" - -DRINGTONE_DIR="${INSTALL}/daemon/share/ring/ringtones" + -DRINGTONE_DIR="${INSTALL}/daemon/share/jami/ringtones" -DLibRingClient_DIR="${INSTALL}/lrc/lib/cmake/LibRingClient") fi fi diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py deleted file mode 100755 index 60a3f136cb18d32b0c32805420b12b9f64473c57..0000000000000000000000000000000000000000 --- a/scripts/make-packaging-target.py +++ /dev/null @@ -1,303 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2016-2021 Savoir-faire Linux Inc. -# -# Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com> -# -# This program 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 3 of the License, or -# (at your option) any later version. -# -# This program 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 program. If not, see <http://www.gnu.org/licenses/>. -# -# Creates packaging targets for a distribution and architecture. -# This helps reduce the length of the top Makefile. -# - -import argparse - -template_header = """\ -# -*- mode: makefile -*- -# This file was auto-generated by: scripts/make-packaging-target.py. -# -# We don't simply use jami-packaging-distro as the docker image name because -# we want to be able to build multiple versions of the same distro at the -# same time and it could result in race conditions on the machine as we would -# overwrite the docker image of other builds. -# -# This does not impact caching as the docker daemon does not care about the image -# names, just about the contents of the Dockerfile. -""" - -target_template = """\ -## -## Distro: %(distribution)s -## - -PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME:=jami-packaging-%(distribution)s$(RING_PACKAGING_IMAGE_SUFFIX) -PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE:=.docker-image-$(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) -DOCKER_EXTRA_ARGS = - - -PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\ - --rm \\ - -e RELEASE_VERSION=$(RELEASE_VERSION) \\ - -e RELEASE_TARBALL_FILENAME=$(RELEASE_TARBALL_FILENAME) \\ - -e DEBIAN_VERSION=%(version)s \\ - -e CURRENT_UID=$(CURRENT_UID) \\ - -e CURRENT_GID=$(CURRENT_GID) \\ - -e DISTRIBUTION=%(distribution)s \\ - -v $(CURDIR)/$(RELEASE_TARBALL_FILENAME):/src/$(RELEASE_TARBALL_FILENAME) \\ - -v $(CURDIR):/opt/ring-project-ro:ro \\ - -v $(CURDIR)/packages/%(distribution)s:/opt/output \\ - -v /opt/cache-packaging:/opt/cache-packaging \\ - -t $(DOCKER_EXTRA_ARGS) %(options)s \\ - $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) - -$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): docker/Dockerfile_%(docker_image)s - docker build \\ - -t $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) \\ - -f docker/Dockerfile_%(docker_image)s %(docker_build_args)s \\ - $(CURDIR) - touch $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE) - -packages/%(distribution)s: - mkdir -p packages/%(distribution)s - -packages/%(distribution)s/%(output_file)s: $(RELEASE_TARBALL_FILENAME) packages/%(distribution)s $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE) - $(PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND) - touch packages/%(distribution)s/* - -.PHONY: package-%(distribution)s -package-%(distribution)s: packages/%(distribution)s/%(output_file)s -PACKAGE-TARGETS += package-%(distribution)s - -.PHONY: package-%(distribution)s-interactive -package-%(distribution)s-interactive: DOCKER_EXTRA_ARGS = -i -package-%(distribution)s-interactive: $(RELEASE_TARBALL_FILENAME) packages/%(distribution)s $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE) - $(PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND) bash -""" - - -RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = ( - '--security-opt seccomp=./docker/profile-seccomp-fedora_28.json ' - '--privileged') - -DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = ( - '-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX) ' - '--privileged ' - '--security-opt apparmor=docker-default ') - -DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT = ( - '-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX) ' - '-e QT_MAJOR=$(QT_MAJOR) ' - '-e QT_MINOR=$(QT_MINOR) ' - '-e QT_PATCH=$(QT_PATCH) ' - '-e QT_TARBALL_CHECKSUM=$(QT_TARBALL_CHECKSUM) ' - '-v /opt/ring-contrib:/opt/ring-contrib ' - '--privileged --security-opt apparmor=docker-default') - - -def generate_target(distribution, output_file, options='', docker_image='', - version='', docker_build_args=''): - if (docker_image == ''): - docker_image = distribution - if (version == ''): - version = "$(DEBIAN_VERSION)" - return target_template % { - "distribution": distribution, - "docker_image": docker_image, - "output_file": output_file, - "options": options, - "version": version, - "docker_build_args": docker_build_args, - } - - -def run_generate(parsed_args): - print(generate_target(parsed_args.distribution, - parsed_args.output_file, - parsed_args.options, - parsed_args.docker_image, - parsed_args.version)) - - -def run_generate_all(parsed_args): - targets = [ - # Debian - { - "distribution": "debian_10", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "debian_10_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - { - "distribution": "debian_testing", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "debian_testing_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - { - "distribution": "debian_unstable", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "debian_unstable_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - # Raspbian - { - "distribution": "raspbian_10_armhf", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": "--privileged --security-opt apparmor=docker-default", - }, - # Ubuntu - { - "distribution": "ubuntu_18.04", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": "-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX)", - }, - { - "distribution": "ubuntu_18.04_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - { - "distribution": "ubuntu_20.04", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "ubuntu_20.04_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - { - "distribution": "ubuntu_20.10", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "ubuntu_20.10_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - { - "distribution": "ubuntu_21.04", - "output_file": "$(DEBIAN_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - }, - { - "distribution": "ubuntu_21.04_qt", - "output_file": "$(DEBIAN_QT_DSC_FILENAME)", - "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT, - "version": "$(DEBIAN_QT_VERSION)", - }, - # Fedora - { - "distribution": "fedora_32", - "output_file": ".packages-built", - "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS - }, - { - "distribution": "fedora_33", - "output_file": ".packages-built", - "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS - }, - { - "distribution": "fedora_34", - "output_file": ".packages-built", - "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS - }, - # Disabled 2021/05/21 because it's broken. - # { - # "distribution": "rhel_8", - # "output_file": ".packages-built", - # "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS, - # "docker_build_args": "--build-arg PASS=$${PASS}" - # }, - # OpenSUSE - { - "distribution": "opensuse-leap_15.2", - "output_file": ".packages-built", - "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS - }, - { - "distribution": "opensuse-tumbleweed", - "output_file": ".packages-built", - "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS - }, - # Snap - { - "distribution": "snap", - "output_file": ".packages-built", - "options": "-e SNAP_PKG_NAME=$(or $(SNAP_PKG_NAME),jami)", - }, - - ] - - for target in targets: - print(generate_target(**target)) - - -def parse_args(): - ap = argparse.ArgumentParser( - description="Packaging targets generation tool" - ) - - ga = ap.add_mutually_exclusive_group(required=True) - - # Action arguments - ga.add_argument('--generate', - action='store_true', - help='Generate a single packaging target') - ga.add_argument('--generate-all', - action='store_true', - help='Generates all packaging targets') - - # Parameters - ap.add_argument('--distribution') - ap.add_argument('--output_file') - ap.add_argument('--options', default='') - ap.add_argument('--docker_image', default='') - ap.add_argument('--version', default='') - - parsed_args = ap.parse_args() - - return parsed_args - - -def main(): - parsed_args = parse_args() - - print(template_header) - if parsed_args.generate: - run_generate(parsed_args) - elif parsed_args.generate_all: - run_generate_all(parsed_args) - -if __name__ == "__main__": - main() diff --git a/scripts/prebuild-package-debian.sh b/scripts/prebuild-package-debian.sh new file mode 100755 index 0000000000000000000000000000000000000000..ba0bce80f1771c875043df1d55fb55800de3e075 --- /dev/null +++ b/scripts/prebuild-package-debian.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2021 Savoir-faire Linux Inc. +# +# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> +# +# This program 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 3 of the License, or +# (at your option) any later version. +# +# This program 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 program. If not, see <http://www.gnu.org/licenses/>. +# +# This script is used in the packaging containers to build packages on +# debian-based distros. + +set -e + +DPKG_BUILD_OPTIONS="" +# Set the host architecture as armhf and add some specific architecture +# options to the package builder. +if grep -q "raspbian_10_armhf" <<< "${DISTRIBUTION}"; then + echo "Adding armhf as the host architecture." + export HOST_ARCH=arm-linux-gnueabihf + DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf" +fi + +install_deps() +{ + apt-get update + mk-build-deps \ + --remove --install \ + --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \ + "debian/control" +} + +install_dummy() +{ + cat <<EOF > dummy-libqt-jami.equivs +Package: libqt-jami +Version: 1.0 +Maintainer: The Jami project <jami@gnu.org> +Architecture: all +Description: Dummy libqt-jami package +EOF + equivs-build dummy-libqt-jami.equivs + dpkg -i libqt-jami_1.0_all.deb +} + +remove_dummy() +{ + dpkg -r libqt-jami +} + +case "$1" in + qt-deps) + ( + cd /tmp/builddeps + install_deps + dpkg -r libqt-jami-build-deps + ) + rm -rf /tmp/builddeps + exit 0 + ;; + jami-deps) + ( + cd /tmp/builddeps + install_dummy + install_deps + dpkg -r jami-build-deps + remove_dummy + ) + rm -rf /tmp/builddeps + exit 0 + ;; + *) + printf "Usage: %s {qt-deps|jami-deps}\n" "$0" + exit 1 + ;; +esac