Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2025-09-22 23:53:30 +01:00
parent 248432b132
commit e41e8c2078
38 changed files with 453 additions and 1718 deletions

View File

@@ -0,0 +1,47 @@
{ pkgs, ... }:
let
entrypoint = pkgs.writeTextFile {
name = "entrypoint";
executable = true;
destination = "/bin/entrypoint";
text = builtins.readFile ./entrypoint.sh;
};
in
pkgs.dockerTools.buildImage {
name = "plex";
fromImage = pkgs.docker-image-base;
copyToRoot = pkgs.buildEnv {
name = "root";
paths = with pkgs; [
entrypoint
util-linux
plex
xmlstarlet
curl
jq
sqlite
];
pathsToLink = [
"/bin"
"/lib"
"/var"
"/usr"
];
};
config = {
Entrypoint = [ "entrypoint" ];
ExposedPorts = {
"32400/tcp" = { };
};
WorkingDir = "/var/lib/plex";
Volumes = {
"/var/lib/plex" = { };
};
Env = [
"LD_LIBRARY_PATH=/run/opengl-driver/lib"
"PLEX_DATADIR=/var/lib/plex"
];
};
}

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env sh
set -o errexit
set -o nounset
PREFERENCES="/var/lib/plex/Plex Media Server/Preferences.xml"
TEMPLATE_PREFERENCES="/etc/plex/Preferences.xml"
getPref() {
xmlstarlet sel -t -v "/Preferences/@$1" "$PREFERENCES" 2>/dev/null || true
}
setPref() {
name="$1"
value="$2"
xmlstarlet ed --inplace \
-d "/Preferences/@${name}" \
-i "/Preferences" -t attr -n "${name}" -v "${value}" \
"$PREFERENCES"
}
mkdir -p "$(dirname "$PREFERENCES")"
if [ ! -f "$PREFERENCES" ]; then
echo '<?xml version="1.0" encoding="utf-8"?><Preferences/>' > "$PREFERENCES"
fi
if [ -f "$TEMPLATE_PREFERENCES" ]; then
ATTRS="$(xmlstarlet sel -t -m "/Preferences/@*" -v "concat(name(),'=',.)" -n "$TEMPLATE_PREFERENCES")"
if [ -n "$ATTRS" ]; then
set --
while IFS='=' read -r name value; do
[ -z "$name" ] && continue
set -- "$@" -d "/Preferences/@${name}"
set -- "$@" -i "/Preferences" -t attr -n "${name}" -v "${value}"
done <<EOF
$ATTRS
EOF
if [ "$#" -gt 0 ]; then
xmlstarlet ed --inplace "$@" "$PREFERENCES"
fi
fi
fi
rm -f "/var/lib/plex/Plex Media Server/plexmediaserver.pid"
plexmediaserver &
PID="$!"
if [ -f /etc/plex/post-start.sh ]; then
# shellcheck disable=SC1091
. /etc/plex/post-start.sh
fi
trap 'kill -QUIT "$PID"' INT TERM
wait "$PID"
exit $?