first changes to docker

This commit is contained in:
jt-chris
2026-04-10 02:25:36 +02:00
parent 1c94d0d810
commit 615cf26bdd
114 changed files with 65043 additions and 0 deletions

30
QPKG/shared/docker/Dockerfile Executable file
View File

@@ -0,0 +1,30 @@
FROM debian:12-slim
RUN apt-get update \
&& apt-get -y upgrade \
&& apt-get -y install bash curl bzip2 ffmpeg cifs-utils alsa-utils libicu72
ENV ROON_SERVER_PKG RoonServer_linuxx64.tar.bz2
ENV ROON_SERVER_URL https://download.roonlabs.net/builds/${ROON_SERVER_PKG}
ENV ROON_DATAROOT /data
ENV ROON_ID_DIR /data
ENV ROON_DATAROOT=/Roon/data
ENV ROON_ID_DIR=/Roon/data
COPY entrypoint.sh /entrypoint.sh
# Informational only — requires --net=host for multicast discovery
EXPOSE 9003/udp 9100-9200/tcp 9200-9250/tcp 9330-9339/tcp 55000/tcp
# Healthcheck uses /proc directly instead of pgrep to avoid procps dependency
HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \
CMD grep -ql '[R]oonServer.dll' /proc/[0-9]*/cmdline 2>/dev/null || exit 1
STOPSIGNAL SIGTERM
# entrypoint.sh downloads RoonServer on first run (to /Roon/app), then
# exec's into Server/RoonServer — the stock bash launcher that handles
# .NET runtime discovery, ulimit, self-update swap, and restart (exit 122).
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -0,0 +1,21 @@
services:
qnap-roonserver:
#image: ghcr.io/roonlabs/roonserver:latest
build: .
container_name: qnap-roonserver
network_mode: host
environment:
- TZ=${TZ:-UTC}
stop_grace_period: 45s
restart: unless-stopped
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
devices:
- /dev/snd:/dev/snd
- /dev/bus/usb:/dev/bus/usb
- /dev/dri:/dev/dri
group_add:
- audio
logging:
driver: local

View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -euo pipefail
ROON_APP_DIR="/Roon/app"
ROON_INSTALLED="${ROON_APP_DIR}/.installed"
ROON_DOWNLOAD_URL="${ROON_DOWNLOAD_URL:-https://download.roonlabs.net/builds/RoonServer_linuxx64.tar.bz2}"
# Download and install RoonServer on first run
if [ ! -f "$ROON_INSTALLED" ]; then
echo "RoonServer not found — downloading..."
mkdir -p "$ROON_APP_DIR"
curl -fL --progress-bar -o /tmp/RoonServer.tar.bz2 "$ROON_DOWNLOAD_URL"
echo "Extracting..."
tar xjf /tmp/RoonServer.tar.bz2 -C "$ROON_APP_DIR"
rm -f /tmp/RoonServer.tar.bz2
# libharfbuzz.so links against libfreetype.so.6 but bundled lib has no soname suffix
ln -sf "${ROON_APP_DIR}/RoonServer/Appliance/libfreetype.so" \
"${ROON_APP_DIR}/RoonServer/Appliance/libfreetype.so.6"
# Record the installed Roon version from the tarball's VERSION file
if [ -f "${ROON_APP_DIR}/RoonServer/VERSION" ]; then
cp "${ROON_APP_DIR}/RoonServer/VERSION" "$ROON_INSTALLED"
else
echo "unknown" > "$ROON_INSTALLED"
fi
echo "RoonServer installed successfully."
fi
# Log versions at startup
echo "Image: $(cat /etc/roon-image-version 2>/dev/null || echo 'unknown')"
echo "Roon: $(sed -n '2p' "$ROON_INSTALLED" 2>/dev/null || echo 'unknown')"
# start.sh handles restart-on-exit-122 without a full container restart
exec "${ROON_APP_DIR}/RoonServer/start.sh"

3
QPKG/shared/docker/get_hwsn.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
echo $QNAP_SERIAL
echo "get_hwsn $@" >> /Roon/data/args.txt

7
QPKG/shared/docker/getcfg.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
case "$1" in
"RoonServer") echo $ROONMNT_DIR
;;
"system") echo $QNAP_QTS_VER
;;
esac

View File

@@ -0,0 +1,2 @@
#!/bin/sh
echo $QNAP_MODEL

21
QPKG/shared/docker/qnap.yml Executable file
View File

@@ -0,0 +1,21 @@
services:
qnap-roonserver:
environment:
- "QNAP_MODEL=${QNAP_MODEL:-Docker}"
- "QNAP_SERIAL=${QNAP_SERIAL:-NoSerial}"
- "QNAP_QTS_VER=${QNAP_QTS_VER:-System}"
- "ROONMNT_DIR=/Roon"
volumes:
# mount all disks and shared folder as read-only
- /share:/share:ro
# mount database folder
- ${ROON_DATAROOT:-/dev/null}:/Roon/data
# mount qnap configfiles
- /etc/config/qpkg.conf:/etc/config/qpkg.conf:ro
- /etc/os-release:/etc/os-release:ro
# fake qnap binaries
- ./getcfg.sh:/sbin/getcfg:ro
- ./getsysinfo.sh:/sbin/getsysinfo
- ./get_hwsn.sh:/sbin/get_hwsn