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
9 changes: 7 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,17 @@ jobs:
name: binaries
path: binaries

- run: bash debian/package.sh "${GITHUB_REF_NAME#v}" "${{ matrix.arch }}"
- run: |
mkdir -p packages
bash debian/package.sh "${GITHUB_REF_NAME#v}" "${{ matrix.arch }}"
mv dist/*.deb packages/
bash debian/package.sh "${GITHUB_REF_NAME#v}" "${{ matrix.arch }}" rpi
mv dist/*.deb packages/

- uses: actions/upload-artifact@v7
with:
name: packages-${{ matrix.arch }}
path: dist/*.deb
path: packages/*.deb

github_release:
needs: packages
Expand Down
12 changes: 12 additions & 0 deletions debian/mediamtx-rpi.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[Unit]
Description=MediaMTX Service
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=30
ExecStart=/usr/local/bin/mediamtx /etc/mediamtx/mediamtx-rpi.yml

[Install]
WantedBy=multi-user.target
86 changes: 68 additions & 18 deletions debian/package.sh
Original file line number Diff line number Diff line change
@@ -1,32 +1,64 @@
#!/bin/bash

set -e
set -euo pipefail

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"

VERSION="$1"
ARCH="$2"
VERSION="${1:-}"
ARCH="${2:-}"
VARIANT="${3:-standard}"

if [ -z "$VERSION" ] || [ -z "$ARCH" ]; then
echo "Usage: $0 <version> <arch>"
echo "Usage: $0 <version> <arch> [standard|rpi]"
exit 1
fi

ARCHIVE="binaries/mediamtx_v${VERSION}_linux_${ARCH}.tar.gz"
PACKAGE_NAME="mediamtx"
CONFIG_SOURCE="$REPO_ROOT/mediamtx.yml"
SERVICE_SOURCE="$REPO_ROOT/debian/mediamtx.service"
SERVICE_NAME="mediamtx.service"

case "$VARIANT" in
standard|"")
;;
rpi|mediamtx-rpi)
PACKAGE_NAME="mediamtx-rpi"
CONFIG_SOURCE="$REPO_ROOT/mediamtx-rpi.yml"
SERVICE_SOURCE="$REPO_ROOT/debian/mediamtx-rpi.service"
SERVICE_NAME="mediamtx-rpi.service"
;;
*)
echo "Invalid variant: $VARIANT"
echo "Usage: $0 <version> <arch> [standard|rpi]"
exit 1
;;
esac

ARCHIVE="$REPO_ROOT/binaries/mediamtx_v${VERSION}_linux_${ARCH}.tar.gz"
if [ ! -f "$ARCHIVE" ]; then
echo "Archive not found: $ARCHIVE"
exit 1
fi

PACKAGE_ROOT="dist"
if [ ! -f "$CONFIG_SOURCE" ]; then
echo "Config source not found: $CONFIG_SOURCE"
exit 1
fi

if [ ! -f "$SERVICE_SOURCE" ]; then
echo "Service source not found: $SERVICE_SOURCE"
exit 1
fi

PACKAGE_ROOT="$REPO_ROOT/dist"
DEBIAN_DIR="$PACKAGE_ROOT/DEBIAN"
BINARY_DIR="$PACKAGE_ROOT/usr/local/bin"
CONFIG_DIR="$PACKAGE_ROOT/etc/mediamtx"
SERVICE_DIR="$PACKAGE_ROOT/lib/systemd/system"

rm -rf "$PACKAGE_ROOT"
mkdir -p "$DEBIAN_DIR"
mkdir -p "$BINARY_DIR"
mkdir -p "$CONFIG_DIR"
mkdir -p "$SERVICE_DIR"
mkdir -p "$DEBIAN_DIR" "$BINARY_DIR" "$CONFIG_DIR" "$SERVICE_DIR"

TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT
Expand All @@ -39,22 +71,40 @@ if [ ! -f "$TMP_DIR/mediamtx" ]; then
fi

cp "$TMP_DIR/mediamtx" "$BINARY_DIR/mediamtx"
cp "$TMP_DIR/mediamtx.yml" "$CONFIG_DIR/mediamtx.yml"
cp "$CONFIG_SOURCE" "$CONFIG_DIR/mediamtx.yml"
chmod 755 "$BINARY_DIR/mediamtx"

cp "$SERVICE_SOURCE" "$SERVICE_DIR/$SERVICE_NAME"

chmod 755 "$BINARY_DIR"/*
if [ "$VARIANT" = "rpi" ] || [ "$VARIANT" = "mediamtx-rpi" ]; then
cat > "$BINARY_DIR/init-mediamtx-rpi.sh" <<'EOF'
#!/bin/sh
set -e

cp debian/mediamtx.service "$SERVICE_DIR"
sed -ri 's/camera_auto_detect=1/camera_auto_detect=0/g' /boot/firmware/config.txt
echo dtoverlay=imx708,cam0 | tee -a /boot/firmware/config.txt
echo dtoverlay=imx708,cam1 | tee -a /boot/firmware/config.txt
systemctl enable mediamtx-rpi.service

reboot

exit 0
EOF

chmod 755 "$BINARY_DIR/init-mediamtx-rpi.sh"
fi

cat > "$DEBIAN_DIR/control" <<EOF
Package: mediamtx
Package: $PACKAGE_NAME
Version: $VERSION
Section: base
Priority: optional
Architecture: ${ARCH}
Architecture: $ARCH
Maintainer: Effective Range <info@effective-range.com>
Description: MediaMTX is a ready-to-use and zero-dependency live media server and media proxy. It has been conceived as a "media router" that routes media streams from one end to the other, with a focus on efficiency and portability.
EOF

cd "$PACKAGE_ROOT"

dpkg-deb --build . "mediamtx_${VERSION}_${ARCH}.deb"
(
cd "$PACKAGE_ROOT"
dpkg-deb --build . "${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
)
Loading