@@ -4,7 +4,7 @@ set -o errexit
|
||||
set -o nounset
|
||||
|
||||
atticd "$@" &
|
||||
PID=$!
|
||||
PID="$!"
|
||||
|
||||
if [ -f /etc/attic/post-start.sh ]; then
|
||||
# shellcheck disable=SC1091
|
||||
|
@@ -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/"
|
||||
];
|
||||
};
|
||||
}
|
@@ -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 $?
|
@@ -34,6 +34,6 @@ fi
|
||||
|
||||
trap 'kill -QUIT "$PID"' INT TERM
|
||||
mariadbd --user=root --datadir="$DATADIR" "$@" &
|
||||
PID=$!
|
||||
PID="$!"
|
||||
wait "$PID"
|
||||
exit $?
|
||||
|
@@ -34,6 +34,6 @@ fi
|
||||
|
||||
trap 'kill -QUIT "$PID"' INT TERM
|
||||
mysqld --user=root --datadir="$DATADIR" "$@" &
|
||||
PID=$!
|
||||
PID="$!"
|
||||
wait "$PID"
|
||||
exit $?
|
||||
|
48
packages/docker/plex/default.nix
Normal file
48
packages/docker/plex/default.nix
Normal file
@@ -0,0 +1,48 @@
|
||||
{ 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
|
||||
];
|
||||
pathsToLink = [
|
||||
"/bin"
|
||||
"/lib"
|
||||
"/var"
|
||||
"/usr"
|
||||
];
|
||||
};
|
||||
|
||||
config = {
|
||||
Entrypoint = [ "entrypoint" ];
|
||||
ExposedPorts = {
|
||||
"32400/tcp" = { };
|
||||
};
|
||||
WorkingDir = "/var/lib/plex";
|
||||
Volumes = {
|
||||
"/var/lib/plex" = { };
|
||||
"/tmp/plex" = { };
|
||||
};
|
||||
Env = [
|
||||
"LD_LIBRARY_PATH=/run/opengl-driver/lib"
|
||||
"PLEX_DATADIR=/var/lib/plex"
|
||||
"PLEX_MEDIA_SERVER_TMPDIR=/tmp/plex"
|
||||
];
|
||||
};
|
||||
}
|
54
packages/docker/plex/entrypoint.sh
Normal file
54
packages/docker/plex/entrypoint.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/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="$!"
|
||||
|
||||
trap 'kill -QUIT "$PID"' INT TERM
|
||||
wait "$PID"
|
||||
exit $?
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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() {
|
||||
|
Reference in New Issue
Block a user