diff --git a/.env.example b/.env.example index 1fa44db..129d179 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,3 @@ NAVIDROME_MUSIC_FOLDER="/opt/navidrome/music" -BIND_ADDRESS="192.168.2.24" +BIND_ADDRESS="0.0.0.0" BIND_PORT="5001" \ No newline at end of file diff --git a/.gitignore b/.gitignore index a9de651..1678ef0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ setup.sh navidrome-upload.service .idea/ .env +/README.md \ No newline at end of file diff --git a/contrib/navidrome-uploader.service b/contrib/navidrome-uploader.service index 034017c..c441c0b 100644 --- a/contrib/navidrome-uploader.service +++ b/contrib/navidrome-uploader.service @@ -20,7 +20,7 @@ AmbientCapabilities= ProtectSystem=strict ProtectHome=yes PrivateTmp=yes -ReadWritePaths=/opt/navidrome-uploader +ReadWritePaths=/opt/navidrome-uploader /opt/navidrome/music InaccessiblePaths=/boot /mnt /media PrivateDevices=yes diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..6a3822e --- /dev/null +++ b/debian/changelog @@ -0,0 +1,6 @@ +navidrome-uploader (0.1.0) unstable; urgency=medium + + * Add Debian packaging with systemd service integration and venv setup. + + -- Arian Nasr Tue, 07 Apr 2026 12:00:00 +0000 + diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..1c96f4b --- /dev/null +++ b/debian/control @@ -0,0 +1,12 @@ +Source: navidrome-uploader +Section: web +Priority: optional +Maintainer: Arian Nasr +Build-Depends: debhelper-compat (= 13) +Standards-Version: 4.7.0 +Rules-Requires-Root: no + +Package: navidrome-uploader +Architecture: all +Depends: ${misc:Depends}, adduser, python3, python3-venv +Description: Navidrome Web Upload Utility \ No newline at end of file diff --git a/debian/navidrome-uploader.dirs b/debian/navidrome-uploader.dirs new file mode 100644 index 0000000..7048a1d --- /dev/null +++ b/debian/navidrome-uploader.dirs @@ -0,0 +1,7 @@ +opt/navidrome-uploader +opt/navidrome-uploader/templates +opt/navidrome-uploader/static +opt/navidrome-uploader/static/css +opt/navidrome-uploader/static/js +etc/default/navidrome-uploader + diff --git a/debian/navidrome-uploader.install b/debian/navidrome-uploader.install new file mode 100644 index 0000000..4697981 --- /dev/null +++ b/debian/navidrome-uploader.install @@ -0,0 +1,9 @@ +main.py opt/navidrome-uploader/ +gunicorn.conf.py opt/navidrome-uploader/ +requirements.txt opt/navidrome-uploader/ +.env.example opt/navidrome-uploader/ +templates/* opt/navidrome-uploader/templates/ +static/css/* opt/navidrome-uploader/static/css/ +static/js/* opt/navidrome-uploader/static/js/ +contrib/navidrome-uploader.service lib/systemd/system/ + diff --git a/debian/navidrome-uploader.postinst b/debian/navidrome-uploader.postinst new file mode 100644 index 0000000..2740e26 --- /dev/null +++ b/debian/navidrome-uploader.postinst @@ -0,0 +1,22 @@ +#!/bin/sh +set -e + +APP_DIR="/opt/navidrome-uploader" +VENV_DIR="${APP_DIR}/venv" + +case "$1" in + configure) + python3 -m venv "${VENV_DIR}" + "${VENV_DIR}/bin/pip" install --no-cache-dir --upgrade pip + "${VENV_DIR}/bin/pip" install --no-cache-dir -r "${APP_DIR}/requirements.txt" + + if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload || true + systemctl enable navidrome-uploader.service || true + systemctl restart navidrome-uploader.service || true + fi + ;; +esac + +exit 0 + diff --git a/debian/navidrome-uploader.postrm b/debian/navidrome-uploader.postrm new file mode 100644 index 0000000..0f2570e --- /dev/null +++ b/debian/navidrome-uploader.postrm @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload || true +fi + +if [ "$1" = "purge" ]; then + rm -rf /etc/default/navidrome-uploader + rm -rf /opt/navidrome-uploader/venv +fi + +exit 0 + diff --git a/debian/navidrome-uploader.preinst b/debian/navidrome-uploader.preinst new file mode 100644 index 0000000..37929b4 --- /dev/null +++ b/debian/navidrome-uploader.preinst @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +if ! getent passwd navidrome-uploader > /dev/null 2>&1; then + printf "Creating navidrome-uploader user\n" + useradd --system --shell /usr/sbin/nologin --user-group navidrome-uploader +fi + +exit 0 + diff --git a/debian/navidrome-uploader.prerm b/debian/navidrome-uploader.prerm new file mode 100644 index 0000000..653d5b6 --- /dev/null +++ b/debian/navidrome-uploader.prerm @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +case "$1" in + remove|deconfigure) + if command -v systemctl > /dev/null 2>&1; then + systemctl stop navidrome-uploader.service || true + systemctl disable navidrome-uploader.service || true + fi + ;; +esac + +exit 0 + diff --git a/debian/rules b/debian/rules new file mode 100644 index 0000000..dedc208 --- /dev/null +++ b/debian/rules @@ -0,0 +1,10 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_install: + dh_install + install -d debian/navidrome-uploader/etc/default/navidrome-uploader + install -m 0640 .env.example debian/navidrome-uploader/etc/default/navidrome-uploader/.env + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..435dd71 --- /dev/null +++ b/debian/source/format @@ -0,0 +1,2 @@ +3.0 (native) + diff --git a/release/build-deb.sh b/release/build-deb.sh new file mode 100644 index 0000000..07ff073 --- /dev/null +++ b/release/build-deb.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eu + +SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +PROJECT_ROOT="$(CDPATH= cd -- "${SCRIPT_DIR}/.." && pwd)" + +cd "${PROJECT_ROOT}" +dpkg-buildpackage -us -uc -b + diff --git a/release/preinstall.sh b/release/preinstall.sh new file mode 100644 index 0000000..232f92c --- /dev/null +++ b/release/preinstall.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +if ! getent passwd navidrome-uploader > /dev/null 2>&1; then + printf "Creating navidrome-uploader user\n" + useradd --system --shell /usr/sbin/nologin --user-group navidrome-uploader +fi \ No newline at end of file