first changes to docker
This commit is contained in:
30
QPKG/shared/docker/Dockerfile
Executable file
30
QPKG/shared/docker/Dockerfile
Executable 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"]
|
||||
21
QPKG/shared/docker/docker-compose.yml
Executable file
21
QPKG/shared/docker/docker-compose.yml
Executable 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
|
||||
35
QPKG/shared/docker/entrypoint.sh
Executable file
35
QPKG/shared/docker/entrypoint.sh
Executable 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
3
QPKG/shared/docker/get_hwsn.sh
Executable 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
7
QPKG/shared/docker/getcfg.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
case "$1" in
|
||||
"RoonServer") echo $ROONMNT_DIR
|
||||
;;
|
||||
"system") echo $QNAP_QTS_VER
|
||||
;;
|
||||
esac
|
||||
2
QPKG/shared/docker/getsysinfo.sh
Executable file
2
QPKG/shared/docker/getsysinfo.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
echo $QNAP_MODEL
|
||||
21
QPKG/shared/docker/qnap.yml
Executable file
21
QPKG/shared/docker/qnap.yml
Executable 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
|
||||
Reference in New Issue
Block a user