Commit cd58aca8 authored by Hugo Lefeuvre's avatar Hugo Lefeuvre

packaging: different releases for website

It has been decided that we would have different releases between
website and apt repository. The version from the website would have
debian revision -0 and the one from apt repositories -1.

The main difference resides in the fact that the version from the
website distributes a postinst script which installs key and apt
source.list so that Ring gets automatically updated when installed
via one click install. This is not the case with the one from apt
repos.

Change-Id: I7bbfdfa41b0133ebe93f16bc550aa437c8ddfa6a
parent 7110059f
......@@ -37,6 +37,9 @@ RELEASE_TARBALL_FILENAME:=ring_$(RELEASE_VERSION).tar.gz
# Debian versions
DEBIAN_VERSION:=$(RELEASE_VERSION)~dfsg1-1
DEBIAN_DSC_FILENAME:=ring_$(DEBIAN_VERSION).dsc
DEBIAN_OCI_VERSION:=$(RELEASE_VERSION)~dfsg1-0
DEBIAN_OCI_DSC_FILENAME:=ring_$(DEBIAN_OCI_VERSION).dsc
DEBIAN_OCI_PKG_DIR:="packaging/rules/debian-one-click-install"
#####################
## Other variables ##
......@@ -74,10 +77,16 @@ $(RELEASE_TARBALL_FILENAME):
.PHONY: package-all
package-all: package-debian_9 \
package-debian_9_i386 \
package-debian_9_oci \
package-debian_9_i386_oci \
package-ubuntu_16.04 \
package-ubuntu_16.04_i386 \
package-ubuntu_16.04_oci \
package-ubuntu_16.04_i386_oci \
package-ubuntu_18.04 \
package-ubuntu_18.04_i386 \
package-ubuntu_18.04_oci \
package-ubuntu_18.04_i386_oci \
package-fedora_26 \
package-fedora_26_i386 \
package-fedora_27 \
......
# ring-all package for ring.cx website
This source package provides a single ring-all binary package.
This binary package is the same as the mainline ring-all, apart from
the fact that it installs release keys and ring.cx package repository
as trusted peers so Ring can be updated from ring.cx along with
system updates.
# Notes
## Importing a new version
1- Prepare the new changelog entry mentioning the new version.
(the version on the changelog will be used to determine what to download).
Releases are available here: https://dl.ring.cx/ring-release/tarballs/
2- Run debian/rules get-orig-source
3- Import the tarball with gbp import-orig <tarball>
## tarballs-unpacked
We need those tarballs in tarballs-unpacked.
The rest should be excluded.
- msgpack-c-cpp-1.2.0.tar.gz
- opendht-281b62dfd529a226e94d0da19e01acf07871a797.tar.gz
- pjproject-2.4.5.tar.bz2
Source: ring
Section: comm
Priority: optional
Maintainer: Alexandre Viau <aviau@debian.org>
Build-Depends: debhelper (>= 9),
autoconf,
automake,
cmake,
libtool,
autotools-dev,
# gnome client
libebook1.2-dev,
libclutter-gtk-1.0-dev,
libclutter-1.0-dev,
libglib2.0-dev,
libgtk-3-dev,
libnotify-dev,
qtbase5-dev,
qttools5-dev,
qttools5-dev-tools,
gettext,
libqrencode-dev,
libayatana-appindicator3-dev | libappindicator3-dev,
libnm-dev,
libwebkit2gtk-4.0-dev | libwebkit2gtk-3.0-dev,
# ring-daemon
libdbus-1-dev,
libdbus-c++-dev,
libupnp-dev,
libgnutls28-dev,
libpulse-dev,
libasound2-dev,
libexpat1-dev,
libpcre3-dev,
libyaml-cpp-dev,
libboost-dev,
libxext-dev,
libxfixes-dev,
libspeex-dev,
libspeexdsp-dev,
uuid-dev,
libavcodec-dev,
libavutil-dev,
libavformat-dev,
libswscale-dev,
libavdevice-dev,
libopus-dev,
libudev-dev,
libgsm1-dev,
libjsoncpp-dev,
libnatpmp-dev,
libva-dev,
libcrypto++-dev,
libvdpau-dev,
# other
yasm,
Standards-Version: 4.1.5
Homepage: https://ring.cx
Vcs-Git: https://git.ring.cx/savoirfairelinux/ring-project.git
Vcs-Browser: https://git.ring.cx/savoirfairelinux/ring-project
Package: ring-all
Architecture: any
Depends: libqt5sql5-sqlite,
gnupg,
${shlibs:Depends},
${misc:Depends}
Replaces: ring,
ring-gnome,
ring-daemon
Conflicts: ring,
ring-gnome,
ring-daemon
Description: Secure and distributed voice, video and chat platform - all in one package
Ring (ring.cx) is a secure and distributed voice, video and chat communication
platform that requires no centralized server and leaves the power of privacy
in the hands of the user.
.
This package contains the GNOME desktop client and dring, the Ring daemon.
This diff is collapsed.
# We are shipping a .so, but this isn't a library package
package-name-doesnt-match-sonames
no-symbols-control-file
client-gnome/doc/gnome-ring.1
daemon/dring.1
......@@ -74,7 +74,6 @@ HUFCGSHO3/kzxSlkE1PBUX3IZ8PSFijyopBnWUhlSXuyRjte8OR7Fl/Rlf0IaOD1
# WARNING: When modifying the paths, keep in mind that the corresponding
# postrm paths should be modified as well
APT_FILE="/etc/apt/sources.list.d/ring-main.sources"
APT_PREFS_FILE="/etc/apt/preferences.d/ring-main.pref"
UPDATE_MANAGER_PATH="/etc/update-manager/release-upgrades.d/"
RING_UPDATE_MANAGER_ID="ring-main"
......@@ -141,16 +140,6 @@ Suites: ring
Architectures: i386 amd64
Components: main
Signed-By: $RING_KEY_FINGERPRINT
EOF
# It is recommended to also restrict the range of the newly added
# source.
cat > $APT_PREFS_FILE <<EOF
# forbid upgrading already installed packages from official repositories but
# allow upgrades to be performed for the ring repository
Package: *
Pin: origin dl.ring.cx
Pin-Priority: 100
EOF
# Additionally, if update manager is installed we inform it about
......
#!/usr/bin/make -f
# -*- makefile -*-
# Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
# Number of CPUS
NO_CPUS=$(shell nproc)
ifeq ($(NO_CPUS),0)
NO_CPUS=1
endif
# Binary package names
RING_ALL_IN_ONE_PKG_NAME="ring-all"
%:
dh $@
override_dh_auto_configure:
###############################################
## Re-create tarballs from tarballs-unpacked ##
###############################################
mkdir -p daemon/contrib/tarballs
# Create tarballs
for i in $(CURDIR)/daemon/contrib/tarballs-unpacked/*; do \
projectname=`basename $$i` && \
cd $$i && tar -caf ../../tarballs/$$projectname * && \
echo "Repacked $$projectname"; \
done
###########################
## Ring Daemon configure ##
###########################
mkdir -p daemon/contrib/native
cd daemon/contrib/native && \
../bootstrap \
--disable-downloads \
--no-checksums \
--disable-ogg \
--disable-flac \
--disable-vorbis \
--disable-vorbisenc \
--disable-speex \
--disable-sndfile \
--disable-gsm \
--disable-speexdsp \
--disable-natpmp \
--enable-gnutls && \
make list && \
make -j$(NO_CPUS) V=1
cd daemon && \
./autogen.sh && \
./configure \
--prefix=/usr \
--disable-shared
#############################
## libringclient configure ##
#############################
cd lrc && \
mkdir build && \
cd build && \
cmake \
-DRING_BUILD_DIR=$(CURDIR)/daemon/src \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Debug \
..
############################
## gnome client configure ##
############################
cd client-gnome && \
mkdir build && \
cd build && \
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLibRingClient_PROJECT_DIR=/$(CURDIR)/lrc \
-DGSETTINGS_LOCALCOMPILE=OFF \
..
dh_auto_configure
override_dh_auto_build:
#######################
## Ring Daemon build ##
#######################
make -C daemon -j$(NO_CPUS) V=1
pod2man daemon/man/dring.pod > daemon/dring.1
#########################
## libringclient build ##
#########################
make -C lrc/build -j$(NO_CPUS) V=1
########################
## gnome client build ##
########################
make -C client-gnome/build LDFLAGS="-lpthread" -j$(NO_CPUS) V=1
override_dh_auto_clean:
################################
## Generated contrib tarballs ##
################################
rm -rfv daemon/contrib/tarballs
#######################
## Ring Daemon clean ##
#######################
if [ -f daemon/contrib/native/Makefile ]; then make -C daemon/contrib/native distclean; fi
rm -rfv daemon/contrib/native
rm -rfv daemon/dring.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
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
rm -rfv client-gnome/build
override_dh_clean:
# GNUTLS contains:
# ring-project/daemon/contrib/tarballs-unpacked/gnutls-3.5.10.tar.xz/gnutls-3.5.10/src/certtool-args.c.bak
# ring-project/daemon/contrib/tarballs-unpacked/gnutls-3.5.10.tar.xz/gnutls-3.5.10/doc/doxygen/Doxyfile.orig
dh_clean -X.bak -X.orig
override_dh_auto_install:
######################
## Ring AiO install ##
######################
## daemon
cd daemon && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/include
rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/*.a
rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/*.la
## LibRingClient
cd lrc/build && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/include
# This is a symlink, should be in -dev package
rm -v $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/libringclient.so
# cmake files
rm -rfv $(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME)/usr/lib/cmake
## GNOME client
cd client-gnome/build && make DESTDIR=$(CURDIR)/debian/$(RING_ALL_IN_ONE_PKG_NAME) install
tmpdir:= $(shell mktemp -d)
workdir:= $(shell pwd)
PKD := $(abspath $(dir $(MAKEFILE_LIST)))
version_to_download := $(shell dpkg-parsechangelog -ldebian/changelog | perl -ne 'print $$1 if m{^Version:\s+(?:\d+:)?(\d.*)(?:\~dfsg.+)(?:\-\d+.*)};')
# Repacks the tarball with contrib tarballs unpacked.
get-orig-source:
# Download ring tarball
if [ -n "$$GET_ORIG_SOURCE_OVERRIDE_USCAN_TARBALL" ]; then \
mv $$GET_ORIG_SOURCE_OVERRIDE_USCAN_TARBALL ${tmpdir}; \
else \
uscan --rename --destdir=${tmpdir} --download-version ${version_to_download} ;\
fi
# Unpack ring tarball
tar -C ${tmpdir} -xf ${tmpdir}/*.tar.gz
# Remove original tarball
rm ${tmpdir}/*.tar.gz
# Unpack all of the orig tarballs into tarballs-unpacked
mkdir ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked
for i in `find ${tmpdir}/ring-project/daemon/contrib/tarballs/ -name "*.tar.*"`; do \
projectname=`basename $$i` && \
mkdir ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/$$projectname && \
tar -C ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/$$projectname -xf $$i && \
echo "Unpacked $$projectname"; \
done
###################
## Exclude files ##
###################
# This does not exclude everything that we need to exclude.
# debian/copyright's File-Excluded section also excludes files.
## pjproject
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/g7221 # non-distributable (requires a license from Polycom)
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/ilbc # non distributable (the version included with pjproject)
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/milenage # non distributable
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/BaseClasses # non distributable (?)
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/portaudio # not needed
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/speex # not needed
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/mp3 # not needed
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/gsm # not needed
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/bdsound # not needed
#rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/third_party/srtp # not needed
rm -f ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/pjmedia/src/pjmedia-audiodev/s60_g729_bitstream.h # non distributable
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs-unpacked/pjproject-*/pjproject-*/build/vs # not needed, VisualStudio files.
# Remove all contrib tarballs
rm -rf ${tmpdir}/ring-project/daemon/contrib/tarballs
# Create the new tarball
cd ${tmpdir} && tar -czf ${workdir}/ring_${version_to_download}~dfsg1.orig.tar.gz ring-project
# Clear the temp dir
rm -rf ${tmpdir}
version=3
opts=dversionmangle=s/\~dfsg\d*$// \
https://dl.ring.cx/ring-release/tarballs/ ring_(\d\S*)\.tar\.gz
# Differences and compatibility with official debian.org package
This source package provides binary packages ring, ring-all and ring-daemon.
It differs slightly from the official Debian package (the one from debian.org).
ring & ring-daemon: structurally identical to the Debian package, the only
difference potentially being the shipped version of Ring (the debian.org
package from stable is usually older).
ring-all: all-in-one package, ships both the Ring Daemon and the GNOME client.
This package is not available in the debian.org repositories (not needed in the
Debian case).
ring-all allows
- easy installation of Ring as a single package from ring.cx
- installation of release keys and ring.cx package repository as trusted peers
so Ring can be updated from ring.cx along with system updates
two packages ring and ring-daemon vs. single all package ?
-> One cannot register a repository in source.list.d and directly use it to
fetch the dependencies. That would require something like an apt update in
the maintscripts and we don't want that. So, it is not possible to have a
one-click-install with two packages. That's why we build ring-all for
one-click install.
ring-all conflicts with ring and ring-daemon since they are distributing the
same files.
This source package also provides binary package ring-all. ring-all is an
all-in-one package that is it ships both the Ring Daemon and the GNOME
client. This package is not available in the debian.org repositories (not
needed in the Debian case).
ring-all allows easy installation of Ring as a single package from ring.cx.
The reason is that one cannot register a repository in source.list.d and
directly use it to fetch the dependencies. As a consequence it is not
possible to have a one-click installation with two binary packages. That's
why we build ring-all.
ring-all conflicts with ring and ring-daemon since they are distributing the
same files.
# Notes
......
#!/bin/sh
set -e
###############################################################################
# RING PACKAGE POSTRM #
# #
# If we installed our key and source to trusted stores, remove them. #
# #
# NOTE: We follow https://wiki.debian.org/DebianRepository/UseThirdParty #
###############################################################################
###############################################################################
# [1] Configuration #
###############################################################################
RING_KEY_FINGERPRINT="A295D773307D25A33AE72F2F64CD5FA175348F84"
# System paths and generated variables
APT_FILE="/etc/apt/sources.list.d/ring-main.sources"
APT_PREFS_FILE="/etc/apt/preferences.d/ring-main.pref"
UPDATE_MANAGER_PATH="/etc/update-manager/release-upgrades.d/"
RING_UPDATE_MANAGER_ID="ring-main"
RING_UPDATE_MANAGER_CFG="${RING_UPDATE_MANAGER_ID}.cfg"
UPDATE_MANAGER_CFG_PATH="${UPDATE_MANAGER_PATH}/${RING_UPDATE_MANAGER_CFG}"
###############################################################################
# [2] Maintainer script main switch #
###############################################################################
case "$1" in
purge)
# Remove key from trusted keyring
command -v apt-key > /dev/null && apt-key del "$RING_KEY_FINGERPRINT"
rm -f "$APT_FILE"
rm -f "$APT_PREFS_FILE"
rm -f "$UPDATE_MANAGER_CFG_PATH"
;;
esac
exit 0
......@@ -26,8 +26,15 @@ set -e
cp -r /opt/ring-project-ro /opt/ring-project
cd /opt/ring-project
PKG_DIR="packaging/rules/debian"
if [ -z "${OVERRIDE_PACKAGING_DIR}" ]; then
echo "OVERRIDE_PACKAGING_DIR not set."
else
PKG_DIR="${OVERRIDE_PACKAGING_DIR}"
fi
# import the debian folder and override files if needed
cp -r packaging/rules/debian .
cp -r ${PKG_DIR} debian
if [ -z "${DEBIAN_PACKAGING_OVERRIDE}" ]; then
echo "DEBIAN_PACKAGING_OVERRIDE not set."
else
......
......@@ -43,7 +43,7 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
--rm \\
-e RELEASE_VERSION=$(RELEASE_VERSION) \\
-e RELEASE_TARBALL_FILENAME=$(RELEASE_TARBALL_FILENAME) \\
-e DEBIAN_VERSION=$(DEBIAN_VERSION) \\
-e DEBIAN_VERSION=%(version)s \\
-e DEBIAN_PACKAGING_OVERRIDE=%(debian_packaging_override)s \\
-e CURRENT_UID=$(CURRENT_UID) \\
-e DISTRIBUTION=%(distribution)s \\
......@@ -52,10 +52,10 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
-t $(DOCKER_EXTRA_ARGS) %(options)s \\
$(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME)
$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): docker/Dockerfile_%(distribution)s
$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): docker/Dockerfile_%(docker_image)s
docker build \\
-t $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) \\
-f docker/Dockerfile_%(distribution)s \\
-f docker/Dockerfile_%(docker_image)s \\
$(CURDIR)
touch $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE)
......@@ -76,12 +76,18 @@ package-%(distribution)s-interactive: $(RELEASE_TARBALL_FILENAME) packages/%(dis
"""
def generate_target(distribution, debian_packaging_override, output_file, options=''):
def generate_target(distribution, debian_packaging_override, output_file, options='', docker_image='', version=''):
if (docker_image == ''):
docker_image = distribution
if (version == ''):
version = "$(DEBIAN_VERSION)"
return target_template % {
"distribution": distribution,
"docker_image": docker_image,
"debian_packaging_override": debian_packaging_override,
"output_file": output_file,
"options": options,
"version": version,
}
......@@ -103,6 +109,22 @@ def run_generate_all(parsed_args):
"debian_packaging_override": "",
"output_file": "$(DEBIAN_DSC_FILENAME)",
},
{
"distribution": "debian_9_oci",
"docker_image": "debian_9",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
{
"distribution": "debian_9_i386_oci",
"docker_image": "debian_9_i386",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
# Ubuntu
{
"distribution": "ubuntu_16.04",
......@@ -114,6 +136,22 @@ def run_generate_all(parsed_args):
"debian_packaging_override": "",
"output_file": "$(DEBIAN_DSC_FILENAME)",
},
{
"distribution": "ubuntu_16.04_oci",
"docker_image": "ubuntu_16.04",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
{
"distribution": "ubuntu_16.04_i386_oci",
"docker_image": "ubuntu_16.04_i386",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
{
"distribution": "ubuntu_18.04",
"debian_packaging_override": "",
......@@ -124,6 +162,22 @@ def run_generate_all(parsed_args):
"debian_packaging_override": "",
"output_file": "$(DEBIAN_DSC_FILENAME)",
},
{
"distribution": "ubuntu_18.04_oci",
"docker_image": "ubuntu_18.04",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
{
"distribution": "ubuntu_18.04_i386_oci",
"docker_image": "ubuntu_18.04_i386",
"debian_packaging_override": "",
"output_file": "$(DEBIAN_OCI_DSC_FILENAME)",
"options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
"version": "$(DEBIAN_OCI_VERSION)",
},
# Fedora
{
"distribution": "fedora_26",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment