Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ do_FuncTest=true
do_Fuzzing=true
do_Glitch=true
do_MinBuild=true
do_DebianPackage=true
4 changes: 4 additions & 0 deletions .github/workflows/.jobs_configure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ on:
do_MinBuild:
description: "Whether the current workflow should continue"
value: ${{ jobs.check_disabled_actions.outputs.do_MinBuild }}
do_DebianPackage:
description: "Whether the current workflow should continue"
value: ${{ jobs.check_disabled_actions.outputs.do_DebianPackage }}

jobs:
check_disabled_actions:
Expand All @@ -33,6 +36,7 @@ jobs:
do_Fuzzing: ${{ steps.check_status.outputs.do_Fuzzing }}
do_Glitch: ${{ steps.check_status.outputs.do_Glitch }}
do_MinBuild: ${{ steps.check_status.outputs.do_MinBuild }}
do_DebianPackage: ${{ steps.check_status.outputs.do_DebianPackage }}
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down
78 changes: 77 additions & 1 deletion .github/workflows/rtpproxy_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,81 @@ jobs:
- name: build
run: sh -x ./scripts/do-build.sh cleanbuild

DebianPackage:
name: Debian Package Build
needs: [LoadJobs_conf, FullBuild]
if: needs.LoadJobs_conf.outputs.do_DebianPackage == 'true'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install build tools
run: |
sudo apt-get update
sudo apt-get install -y build-essential devscripts debhelper pkg-config libssl-dev libbcg729-dev libgsm1-dev libsndfile1-dev libunwind-dev libsrtp2-dev libsystemd-dev fakeroot zip
- name: Build Debian package
env:
DEB_BUILD_OPTIONS: nocheck
run: |
dpkg-buildpackage -us -uc -b

- name: Collect Debian packages
run: |
set -euo pipefail
mkdir -p debian-artifacts
shopt -s nullglob
for artifact in ../*.deb ../*.ddeb ../*.buildinfo ../*.changes; do
[ -e "${artifact}" ] || continue
base=$(basename "${artifact}")
mv "${artifact}" "debian-artifacts/${base}"
done

- name: Test install Debian packages
run: |
set -euo pipefail
shopt -s nullglob
pkgs=(./debian-artifacts/*.deb)
if [ "${#pkgs[@]}" -eq 0 ]; then
echo "No Debian packages produced" >&2
exit 1
fi
sudo apt-get install -y "${pkgs[@]}"

- name: Exercise systemd service
run: |
set -euo pipefail
trap 'status=$?; sudo journalctl -xeu rtpproxy.service || true; exit $status' ERR
trap 'sudo systemctl disable --now rtpproxy.socket || true' EXIT
sudo systemctl daemon-reload
sudo systemctl enable --now rtpproxy.socket
sudo systemctl start rtpproxy.service
sudo systemctl status --no-pager rtpproxy.service
sudo systemctl restart rtpproxy.service
sudo systemctl status --no-pager rtpproxy.service
sudo systemctl stop rtpproxy.service
sudo systemctl status --no-pager rtpproxy.service || true

- name: Setup GitHub Actions artifact client
uses: lhotari/gh-actions-artifact-client@v2

- name: Upload Debian artifacts
run: |
set -euo pipefail
shopt -s nullglob
uploaded=0
for file in debian-artifacts/*.deb debian-artifacts/*.ddeb debian-artifacts/*.buildinfo debian-artifacts/*.changes; do
[ -e "$file" ] || continue
uploaded=1
name=$(basename "$file")
echo "Uploading $name, file: $file"
zip - "$file" | gh-actions-artifact-client.js upload "$name" --retentionDays=7
done
if [ "$uploaded" -eq 0 ]; then
echo "No Debian artifacts found for upload" >&2
exit 1
fi

FullBuild:
name: Full Build
needs: [LoadJobs_conf, MinBuild]
Expand Down Expand Up @@ -550,7 +625,8 @@ jobs:
run: sh -x docker/update_description.sh docker/README.md

roll_release:
needs: [LoadJobs_conf, Docker]
name: Roll Release
needs: [LoadJobs_conf, Docker, DebianPackage]
permissions:
contents: write
uses: sippy/cimagic/.github/workflows/RollReleaseDraft.yml@v1
13 changes: 13 additions & 0 deletions debian/README.source
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Building the Debian packaging helpers locally requires the Debian helper tools.

Before invoking commands such as `debian/rules clean` or `dpkg-buildpackage`,
install the packaging toolchain, for example:

```
sudo apt-get update
sudo apt-get install debhelper
```

The packaging workflow in CI already provisions these dependencies. When
working on the packaging locally you need to provision them once per build
environment.
5 changes: 5 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
rtpproxy (3.1+dev1) unstable; urgency=medium

* Initial release of Debian packaging skeleton.

-- Maxim Sobolev <sobomax@sippysoft.com> Wed, 15 May 2024 00:00:00 +0000
48 changes: 48 additions & 0 deletions debian/control
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
Source: rtpproxy
Section: net
Priority: optional
Maintainer: Maxim Sobolev <sobomax@sippysoft.com>
Build-Depends: debhelper-compat (= 13),
pkg-config,
libssl-dev,
libbcg729-dev,
libgsm1-dev,
libsndfile1-dev,
libunwind-dev,
libsrtp2-dev,
libsystemd-dev
Standards-Version: 4.6.2
Homepage: https://github.com/sippy/rtpproxy
Vcs-Git: https://github.com/sippy/rtpproxy.git
Vcs-Browser: https://github.com/sippy/rtpproxy
Rules-Requires-Root: no

Package: rtpproxy
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, adduser
Description: High-performance SIP RTP media proxy
RTPProxy is a high-performance, scalable media relay designed for
SIP-based applications. It supports advanced media handling features
such as secure RTP, codec transcoding modules, and high availability
deployments.

Package: rtpproxy-debug
Section: debug
Architecture: any
Depends: ${misc:Depends}, rtpproxy (= ${binary:Version})
Multi-Arch: same
Description: Debug helpers and modules for RTPProxy
This package provides the debugging-friendly binaries and modules for
RTPProxy, including the rtpproxy_debug control tool, UDP contention
tester, and the *_debug.so plugin variants.

Package: rtpproxy-dev
Section: libdevel
Architecture: any
Depends: ${misc:Depends}, rtpproxy (= ${binary:Version})
Multi-Arch: same
Description: Development files for librtpproxy instrumentation library
librtpproxy exposes the internal RTPProxy engine to external tooling
for instrumentation and advanced control. This development package
ships the static archive and public header needed to link against the
library.
30 changes: 30 additions & 0 deletions debian/copyright
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: rtpproxy
Upstream-Contact: Maxim Sobolev <sobomax@sippysoft.com>
Source: https://github.com/sippy/rtpproxy

Files: *
Copyright: 2004-2006 Maxim Sobolev <sobomax@FreeBSD.org>
2006-2025 Sippy Software, Inc. <https://www.sippysoft.com/>
License: BSD-2-Clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
.
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
2 changes: 2 additions & 0 deletions debian/dirs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
etc/sysconfig
var/lib/rtpproxy
7 changes: 7 additions & 0 deletions debian/rtpproxy-debug.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
usr/bin/rtpproxy_debug
usr/bin/udp_contention
usr/lib/*/rtpproxy/rtpp_acct_csv_debug.so
usr/lib/*/rtpproxy/rtpp_acct_rtcp_hep_debug.so
usr/lib/*/rtpproxy/rtpp_catch_dtmf_debug.so
usr/lib/*/rtpproxy/rtpp_dtls_gw_debug.so
usr/lib/*/rtpproxy/rtpp_ice_lite_debug.so
2 changes: 2 additions & 0 deletions debian/rtpproxy-dev.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
usr/include/librtpproxy.h
usr/lib/*/librtpproxy.a
1 change: 1 addition & 0 deletions debian/rtpproxy.examples
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
doc/rtpproxy.conf.sample
10 changes: 10 additions & 0 deletions debian/rtpproxy.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
usr/bin/makeann
usr/bin/extractaudio
usr/bin/rtpproxy
usr/lib/*/rtpproxy/rtpp_acct_csv.so
usr/lib/*/rtpproxy/rtpp_acct_rtcp_hep.so
usr/lib/*/rtpproxy/rtpp_catch_dtmf.so
usr/lib/*/rtpproxy/rtpp_dtls_gw.so
usr/lib/*/rtpproxy/rtpp_ice_lite.so
rpm/rtpproxy.service usr/lib/systemd/system/
rpm/rtpproxy.socket usr/lib/systemd/system/
1 change: 1 addition & 0 deletions debian/rtpproxy.manpages
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rtpproxy.8
19 changes: 19 additions & 0 deletions debian/rtpproxy.postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/sh
set -e

case "$1" in
configure)
if ! getent group rtpproxy >/dev/null; then
addgroup --system rtpproxy
fi
if ! getent passwd rtpproxy >/dev/null; then
adduser --system --ingroup rtpproxy --home /var/lib/rtpproxy \
--shell /usr/sbin/nologin --no-create-home rtpproxy
fi
install -d -o rtpproxy -g rtpproxy -m 0750 /var/lib/rtpproxy
;;
esac

#DEBHELPER#

exit 0
17 changes: 17 additions & 0 deletions debian/rtpproxy.postrm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/sh
set -e

case "$1" in
purge)
if command -v deluser >/dev/null 2>&1; then
deluser --system --quiet rtpproxy || true
fi
if command -v delgroup >/dev/null 2>&1; then
delgroup --quiet rtpproxy || true
fi
;;
esac

#DEBHELPER#

exit 0
28 changes: 28 additions & 0 deletions debian/rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/make -f

export DEB_CFLAGS_MAINT_APPEND = -ffat-lto-objects
export DEB_CXXFLAGS_MAINT_APPEND = -ffat-lto-objects

%:
dh $@

override_dh_auto_configure:
dh_auto_configure -- --enable-librtpproxy --enable-systemd --enable-lto=yes

override_dh_update_autotools_config:
@echo "Skipping autotools config update"

override_dh_autoreconf:
@echo "Skipping autoreconf; using bundled configure script"

override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

execute_after_dh_auto_install:
install -D -m 0644 rpm/rtpproxy.sysconfig debian/rtpproxy/etc/sysconfig/rtpproxy
rm -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/rtpproxy/*.la
rm -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/librtpproxy.la
rm -f debian/tmp/usr/share/man/man8/rtpproxy.8

override_dh_auto_test:
@echo "Skipping upstream tests for package build"
1 change: 1 addition & 0 deletions debian/source/format
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.0 (native)
3 changes: 3 additions & 0 deletions debian/watch
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
version=4
opts=filenamemangle=s/.+\/v?(\d[^/]+)\.tar\.gz/rtpproxy-$1\.tar.gz/ \
https://github.com/sippy/rtpproxy/releases .*/archive/refs/tags/v?(\d[^/]+)\.tar\.gz
18 changes: 18 additions & 0 deletions doc/rtpproxy.conf.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Example rtpproxy configuration file in UCL format.
#
# Enable accounting modules shipped with the Debian rtpproxy package.
# Comment or remove any modules you do not plan to use. The runtime will
# automatically load the shared object that matches each module name.
modules {
acct_csv {
logfile = /var/log/rtpproxy/rtpproxy.csv
}

# Forward RTCP reports to a HEP collector.
acct_rtcp_hep {
capt_host = 127.0.0.1
capt_port = 9060
capt_ptype = udp
capt_id = 101
}
}
17 changes: 12 additions & 5 deletions rpm/rtpproxy.service
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
[Unit]
Description=A symmetric RTP proxy
After=network.target
Description=RTPProxy media relay
Documentation=man:rtpproxy(8)
Requires=rtpproxy.socket
After=network.target rtpproxy.socket

[Service]
Type=notify
User=rtpproxy
Group=rtpproxy
EnvironmentFile=/etc/sysconfig/rtpproxy
PIDFile=/var/run/rtpproxy/rtpproxy.pid
ExecStart=/usr/bin/rtpproxy -f -p /var/run/rtpproxy/rtpproxy.pid $OPTIONS
EnvironmentFile=-/etc/sysconfig/rtpproxy
Sockets=rtpproxy.socket
PIDFile=/run/rtpproxy/rtpproxy.pid
RuntimeDirectory=rtpproxy
RuntimeDirectoryMode=0755
ExecStart=/usr/bin/rtpproxy -f -s systemd: -p /run/rtpproxy/rtpproxy.pid $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
Also=rtpproxy.socket
Expand Down
2 changes: 1 addition & 1 deletion rpm/rtpproxy.socket
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Description=RTPproxy controlling socket

[Socket]
ListenStream=127.0.0.1:22222
ListenStream=/run/rtpproxy.sock
Accept=false

[Install]
Expand Down
11 changes: 10 additions & 1 deletion rpm/rtpproxy.sysconfig
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
OPTIONS=""
# Command-line options passed to rtpproxy by the systemd unit.
#
# The service already enables foreground operation and manages the runtime
# directory, so typically only the control socket and advertised addresses
# need to be provided here. For example:
# OPTIONS="-s udp:127.0.0.1:7722 -l 203.0.113.10/198.51.100.10"
#
# Leave the value empty to accept the built-in defaults.
# The packaged default listens on all available addresses.
OPTIONS="-l *"
Loading