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

@@ -4,7 +4,7 @@ set -o errexit
set -o nounset
atticd "$@" &
PID=$!
PID="$!"
if [ -f /etc/attic/post-start.sh ]; then
# shellcheck disable=SC1091

View File

@@ -1,77 +0,0 @@
{ pkgs, ... }:
let
jellyfin = pkgs.jellyfin.overrideAttrs (_: {
makeWrapperArgs = [
"--add-flags"
"--ffmpeg=${pkgs.jellyfin-ffmpeg}/bin/ffmpeg"
];
});
jellyfin-web = pkgs.runCommandLocal "jellyfin-web" { } ''
mkdir -p $out/var/www
cp -r ${pkgs.jellyfin-web}/share/jellyfin-web $out/var/www/jellyfin
'';
entrypoint = pkgs.writeTextFile {
name = "entrypoint";
executable = true;
destination = "/bin/entrypoint";
text = builtins.readFile ./entrypoint.sh;
};
in
pkgs.dockerTools.buildImage {
name = "jellyfin";
fromImage = pkgs.docker-image-base;
copyToRoot = pkgs.buildEnv {
name = "root";
paths =
with pkgs;
[
entrypoint
jellyfin
jellyfin-web
jellyfin-ffmpeg
curl
jq
]
++ (with jellyfinPlugins; [
bookshelf
intro-skipper
javascript-injector
opensubtitles
playbackreporting
reports
sso
subtitleextract
tmdbboxsets
tvdb
]);
pathsToLink = [
"/bin"
"/lib"
"/var"
];
};
config = {
Entrypoint = [ "entrypoint" ];
ExposedPorts = {
"8096/tcp" = { };
};
WorkingDir = "/var/lib/jellyfin";
Volumes = {
"/etc/jellyfin" = { };
"/var/lib/jellyfin/data" = { };
"/var/lib/jellyfin/metadata" = { };
"/var/lib/jellyfin/root" = { };
"/var/log/jellyfin" = { };
"/tmp/jellyfin" = { };
};
Env = [
# FIXME: https://github.com/NixOS/nixpkgs/issues/176081
"FONTCONFIG_FILE=${pkgs.fontconfig.out}/etc/fonts/fonts.conf"
"FONTCONFIG_PATH=${pkgs.fontconfig.out}/etc/fonts/"
];
};
}

View File

@@ -1,31 +0,0 @@
#!/usr/bin/env sh
set -o errexit
set -o nounset
start() {
jellyfin \
-w /var/www/jellyfin \
-c /etc/jellyfin \
-d /var/lib/jellyfin \
-l /var/log/jellyfin \
-C /tmp/jellyfin \
"$@" &
PID=$!
}
start "$@"
if [ -f /etc/jellyfin/setup.sh ]; then
# shellcheck disable=SC1091
. /etc/jellyfin/setup.sh
kill "$PID"
wait "$PID" 2>/dev/null || true
start "$@"
fi
trap 'kill -INT "$PID"' INT TERM
wait "$PID"
exit $?

View File

@@ -34,6 +34,6 @@ fi
trap 'kill -QUIT "$PID"' INT TERM
mariadbd --user=root --datadir="$DATADIR" "$@" &
PID=$!
PID="$!"
wait "$PID"
exit $?

View File

@@ -34,6 +34,6 @@ fi
trap 'kill -QUIT "$PID"' INT TERM
mysqld --user=root --datadir="$DATADIR" "$@" &
PID=$!
PID="$!"
wait "$PID"
exit $?

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 $?

View File

@@ -32,7 +32,7 @@ set_config_value "InstanceName" "${INSTANCE_NAME:-Prowlarr}"
set_config_value "AnalyticsEnabled" "False"
Prowlarr -data=/var/lib/prowlarr -nobrowser "$@" &
PID=$!
PID="$!"
if [ -f /etc/prowlarr/post-start.sh ]; then
# shellcheck disable=SC1091

View File

@@ -32,7 +32,7 @@ set_config_value "InstanceName" "${INSTANCE_NAME:-Radarr}"
set_config_value "AnalyticsEnabled" "False"
Radarr -data=/var/lib/radarr -nobrowser "$@" &
PID=$!
PID="$!"
if [ -f /etc/radarr/post-start.sh ]; then
# shellcheck disable=SC1091

View File

@@ -32,7 +32,7 @@ set_config_value "InstanceName" "${INSTANCE_NAME:-Sonarr}"
set_config_value "AnalyticsEnabled" "False"
Sonarr -data=/var/lib/sonarr -nobrowser "$@" &
PID=$!
PID="$!"
if [ -f /etc/sonarr/post-start.sh ]; then
# shellcheck disable=SC1091

View File

@@ -68,7 +68,7 @@ transmission-daemon -f \
--bind-address-ipv4 "$BIND_IP" \
--bind-address-ipv6 "::1" \
"$@" > "$PIPE" 2>&1 &
PID=$!
PID="$!"
CAT_PIPE=$(mktemp -u)
GREP_PIPE=$(mktemp -u)
@@ -108,7 +108,7 @@ rpc_url="http://127.0.0.1:9091${rpc_path}rpc/"
sleep 45
done
) &
NATPMP_PID=$!
NATPMP_PID="$!"
# shellcheck disable=SC2317
cleanup() {