added build as debian package
This commit is contained in:
parent
98f988fdc1
commit
c5895208fa
4
.gitignore
vendored
4
.gitignore
vendored
@ -3,3 +3,7 @@ backend/generated
|
|||||||
backend/web/dist
|
backend/web/dist
|
||||||
backend/data/pending-autostart/__global__.json
|
backend/data/pending-autostart/__global__.json
|
||||||
backend/.gocache
|
backend/.gocache
|
||||||
|
backend/.gocache-build
|
||||||
|
backend/.gocache-linux
|
||||||
|
backend/.deb-build
|
||||||
|
backend/dist
|
||||||
|
|||||||
@ -45,6 +45,7 @@ echo.
|
|||||||
echo Build erfolgreich.
|
echo Build erfolgreich.
|
||||||
echo Windows: nsfwapp.exe
|
echo Windows: nsfwapp.exe
|
||||||
echo Debian: nsfwapp-linux-amd64
|
echo Debian: nsfwapp-linux-amd64
|
||||||
|
echo Debian-Paket: build_deb.bat
|
||||||
goto end
|
goto end
|
||||||
|
|
||||||
:error
|
:error
|
||||||
|
|||||||
43
backend/build_deb.bat
Normal file
43
backend/build_deb.bat
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
echo Baue Debian Application Package via WSL...
|
||||||
|
|
||||||
|
where wsl >nul 2>nul
|
||||||
|
if errorlevel 1 goto wsl_missing
|
||||||
|
|
||||||
|
set "WSL_CWD="
|
||||||
|
for /f "delims=" %%i in ('wsl wslpath -a "%CD%" 2^>nul') do set "WSL_CWD=%%i"
|
||||||
|
if "%WSL_CWD%"=="" goto wsl_path_error
|
||||||
|
if not "%WSL_CWD:~0,1%"=="/" goto wsl_missing
|
||||||
|
|
||||||
|
wsl bash -lc "cd ""%WSL_CWD%"" && bash ./build_deb.sh"
|
||||||
|
if errorlevel 1 goto error
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Debian-Paket erfolgreich gebaut.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:wsl_missing
|
||||||
|
echo.
|
||||||
|
echo Debian-Paket-Build braucht eine installierte WSL-Linux-Distribution.
|
||||||
|
echo Einmalig installieren, z.B.:
|
||||||
|
echo wsl --install -d Debian
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:wsl_path_error
|
||||||
|
echo.
|
||||||
|
echo WSL-Pfad konnte nicht aus dem Windows-Pfad erzeugt werden:
|
||||||
|
echo %CD%
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:error
|
||||||
|
echo.
|
||||||
|
echo Debian-Paket-Build fehlgeschlagen.
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:end
|
||||||
|
endlocal
|
||||||
|
exit /b 0
|
||||||
173
backend/build_deb.sh
Normal file
173
backend/build_deb.sh
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PACKAGE_NAME="${DEB_PACKAGE_NAME:-nsfwapp}"
|
||||||
|
APP_TITLE="${DEB_APP_TITLE:-NSFW App}"
|
||||||
|
VERSION="${DEB_VERSION:-0.1.0}"
|
||||||
|
ARCH="${DEB_ARCH:-amd64}"
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
BIN_PATH="$SCRIPT_DIR/nsfwapp-linux-amd64"
|
||||||
|
BUILD_DIR="$SCRIPT_DIR/.deb-build"
|
||||||
|
PKG_ROOT="$BUILD_DIR/root"
|
||||||
|
OUT_DIR="$SCRIPT_DIR/dist"
|
||||||
|
OUT_FILE="$OUT_DIR/${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "Fehler: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v dpkg-deb >/dev/null 2>&1 || fail "dpkg-deb fehlt. Installiere es mit: sudo apt install -y dpkg-dev"
|
||||||
|
|
||||||
|
if [ ! -f "$BIN_PATH" ] || [ "${DEB_SKIP_REBUILD:-0}" != "1" ]; then
|
||||||
|
command -v go >/dev/null 2>&1 || fail "go fehlt. Installiere Go oder baue zuerst mit build.bat."
|
||||||
|
command -v gcc >/dev/null 2>&1 || fail "gcc fehlt. Installiere: sudo apt install -y build-essential"
|
||||||
|
command -v pkg-config >/dev/null 2>&1 || fail "pkg-config fehlt. Installiere: sudo apt install -y pkg-config"
|
||||||
|
|
||||||
|
echo "Baue Linux-Binary..."
|
||||||
|
mkdir -p "$SCRIPT_DIR/.gocache-linux"
|
||||||
|
(
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 GOCACHE="$SCRIPT_DIR/.gocache-linux" go build -o "$BIN_PATH"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -f "$BIN_PATH" ] || fail "Linux-Binary nicht gefunden: $BIN_PATH"
|
||||||
|
|
||||||
|
rm -rf "$BUILD_DIR"
|
||||||
|
mkdir -p \
|
||||||
|
"$PKG_ROOT/DEBIAN" \
|
||||||
|
"$PKG_ROOT/opt/nsfwapp" \
|
||||||
|
"$PKG_ROOT/usr/bin" \
|
||||||
|
"$PKG_ROOT/usr/share/applications" \
|
||||||
|
"$PKG_ROOT/usr/share/doc/nsfwapp" \
|
||||||
|
"$PKG_ROOT/usr/share/pixmaps"
|
||||||
|
|
||||||
|
install -m 0755 "$BIN_PATH" "$PKG_ROOT/opt/nsfwapp/nsfwapp"
|
||||||
|
if [ -f "$SCRIPT_DIR/assets/img/tray.ico" ]; then
|
||||||
|
install -m 0644 "$SCRIPT_DIR/assets/img/tray.ico" "$PKG_ROOT/usr/share/pixmaps/nsfwapp.ico"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/usr/bin/nsfwapp" <<'EOF'
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
install_dir="/opt/nsfwapp"
|
||||||
|
data_home="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||||
|
app_dir="$data_home/nsfwapp"
|
||||||
|
runtime_bin="$app_dir/nsfwapp"
|
||||||
|
|
||||||
|
mkdir -p "$app_dir"
|
||||||
|
|
||||||
|
if [ ! -f "$runtime_bin" ] || ! cmp -s "$install_dir/nsfwapp" "$runtime_bin"; then
|
||||||
|
tmp="$app_dir/.nsfwapp.tmp.$$"
|
||||||
|
cp "$install_dir/nsfwapp" "$tmp"
|
||||||
|
chmod 0755 "$tmp"
|
||||||
|
mv "$tmp" "$runtime_bin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$app_dir"
|
||||||
|
exec "$runtime_bin" "$@"
|
||||||
|
EOF
|
||||||
|
chmod 0755 "$PKG_ROOT/usr/bin/nsfwapp"
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/usr/bin/nsfwapp-open" <<'EOF'
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
url="${NSFWAPP_URL:-https://localhost:9999}"
|
||||||
|
|
||||||
|
nohup nsfwapp >/dev/null 2>&1 &
|
||||||
|
|
||||||
|
if command -v xdg-open >/dev/null 2>&1; then
|
||||||
|
(
|
||||||
|
sleep 2
|
||||||
|
xdg-open "$url" >/dev/null 2>&1 || true
|
||||||
|
) &
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
chmod 0755 "$PKG_ROOT/usr/bin/nsfwapp-open"
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/usr/share/applications/nsfwapp.desktop" <<EOF
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=$APP_TITLE
|
||||||
|
Comment=Recorder Backend starten
|
||||||
|
Exec=nsfwapp-open
|
||||||
|
Icon=/usr/share/pixmaps/nsfwapp.ico
|
||||||
|
Terminal=false
|
||||||
|
Categories=AudioVideo;Video;
|
||||||
|
StartupNotify=false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/usr/share/doc/nsfwapp/README.Debian" <<'EOF'
|
||||||
|
NSFW App fuer Debian
|
||||||
|
====================
|
||||||
|
|
||||||
|
Start:
|
||||||
|
nsfwapp
|
||||||
|
|
||||||
|
Desktop:
|
||||||
|
Der Launcher "NSFW App" startet das Backend und oeffnet https://localhost:9999.
|
||||||
|
|
||||||
|
User-Daten:
|
||||||
|
Die installierte Binary liegt unter /opt/nsfwapp/nsfwapp.
|
||||||
|
Beim Start wird sie nach ${XDG_DATA_HOME:-$HOME/.local/share}/nsfwapp/nsfwapp kopiert
|
||||||
|
und von dort ausgefuehrt. Dadurch bleiben recorder.log, recorder_settings.json,
|
||||||
|
generated/ und eine optionale externe .env im User-Bereich.
|
||||||
|
|
||||||
|
Optionale Konfiguration:
|
||||||
|
Lege eine .env neben die Runtime-Binary, z.B.:
|
||||||
|
~/.local/share/nsfwapp/.env
|
||||||
|
|
||||||
|
Wichtige Laufzeitprogramme:
|
||||||
|
ffmpeg/ffprobe muessen fuer Recording, Teaser, Analyse und Videofunktionen verfuegbar sein.
|
||||||
|
Der AI-Server braucht Python und die benoetigten Python-Pakete deiner ML-Umgebung.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/DEBIAN/control" <<EOF
|
||||||
|
Package: $PACKAGE_NAME
|
||||||
|
Version: $VERSION
|
||||||
|
Section: video
|
||||||
|
Priority: optional
|
||||||
|
Architecture: $ARCH
|
||||||
|
Maintainer: Local Build <local@example.invalid>
|
||||||
|
Depends: ca-certificates, ffmpeg, python3, xdg-utils, libnotify-bin
|
||||||
|
Description: NSFW recorder backend and web UI
|
||||||
|
Local Debian package for the NSFW recorder backend with embedded web UI and ML assets.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/DEBIAN/postinst" <<'EOF'
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if command -v update-desktop-database >/dev/null 2>&1; then
|
||||||
|
update-desktop-database /usr/share/applications >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
EOF
|
||||||
|
chmod 0755 "$PKG_ROOT/DEBIAN/postinst"
|
||||||
|
|
||||||
|
cat >"$PKG_ROOT/DEBIAN/postrm" <<'EOF'
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if command -v update-desktop-database >/dev/null 2>&1; then
|
||||||
|
update-desktop-database /usr/share/applications >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
EOF
|
||||||
|
chmod 0755 "$PKG_ROOT/DEBIAN/postrm"
|
||||||
|
|
||||||
|
mkdir -p "$OUT_DIR"
|
||||||
|
dpkg-deb --build "$PKG_ROOT" "$OUT_FILE"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Debian-Paket erzeugt:"
|
||||||
|
echo " $OUT_FILE"
|
||||||
|
echo
|
||||||
|
echo "Installieren:"
|
||||||
|
echo " sudo apt install ./dist/$(basename "$OUT_FILE")"
|
||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user