aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua M. Boniface <joshua@boniface.me>2018-12-14 21:21:48 -0500
committerAndrew Rabert <6550543+nvllsvm@users.noreply.github.com>2018-12-14 21:21:48 -0500
commita73d255f51f135adbc2c352fef79f776ce9fcb02 (patch)
treedd6a198e3c104ebc732a615153c4bb5514e25660
parent72f7e7b9541310e4b49f4fc324eab482c8d97dcf (diff)
Enable self-contained binary mode (#160)
* Build self-contained Debian linux-x64 binary * Update initscripts to use self-contained binary The binary is declared in the units intentionally rather than using the variable extrapolation from before, to avoid confusion since these can't really be moved reasonably. * With combined binary name, use pgrep instead * Remove dotnet-runtime dependency * Move the compiled scb to usr/bin * Update binary location for upstart/systemd * Move binary path; fix pidfile handling * Entirely remove the temporary usr/ dir * Don't move the compiled binary * Create /usr/bin symlink * Use the variable here * Update architecture to any * Add libcurl4-openssl build dependency * Update the build Dockerfile to install builddeps
-rw-r--r--Dockerfile.debian_package8
-rw-r--r--debian/conf/jellyfin6
-rw-r--r--debian/control7
-rw-r--r--debian/jellyfin.init8
-rw-r--r--debian/jellyfin.service2
-rw-r--r--debian/jellyfin.upstart2
-rw-r--r--debian/postinst3
-rwxr-xr-xdebian/rules4
8 files changed, 22 insertions, 18 deletions
diff --git a/Dockerfile.debian_package b/Dockerfile.debian_package
index 31505b978..c5c631b71 100644
--- a/Dockerfile.debian_package
+++ b/Dockerfile.debian_package
@@ -2,20 +2,20 @@ FROM debian:9
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts \
&& wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \
&& mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \
&& wget -q https://packages.microsoft.com/config/debian/9/prod.list \
&& mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \
&& chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \
&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list \
- && apt-get update \
- && apt-get install -y dotnet-sdk-2.2
+ && apt-get update
WORKDIR /repo
COPY . .
-RUN dpkg-buildpackage -us -uc \
+RUN yes|mk-build-deps -i \
+ && dpkg-buildpackage -us -uc \
&& mkdir /dist \
&& mv /jellyfin*deb /dist
diff --git a/debian/conf/jellyfin b/debian/conf/jellyfin
index 5c26d12c3..fb00e7f65 100644
--- a/debian/conf/jellyfin
+++ b/debian/conf/jellyfin
@@ -15,8 +15,6 @@
# General options
#
-# Path to the jellyfin.dll executable
-JELLYFIN_EXE="/usr/lib/jellyfin/bin/jellyfin.dll"
# Data directory
JELLYFIN_DATA="/var/lib/jellyfin"
# Restart script for in-app server control
@@ -30,7 +28,5 @@ JELLYFIN_ADD_OPTS=""
# Application username
JELLYFIN_USER="jellyfin"
-# .NET Core runtime binary
-JELLYFIN_DOTNET="/usr/bin/dotnet"
# Full application command
-JELLYFIN_COMMAND="$JELLYFIN_EXE -programdata $JELLYFIN_DATA -restartpath $JELLYFIN_RESTART_SCRIPT $JELLYFIN_ADD_OPTS"
+JELLYFIN_ARGS="-programdata $JELLYFIN_DATA -restartpath $JELLYFIN_RESTART_SCRIPT $JELLYFIN_ADD_OPTS"
diff --git a/debian/control b/debian/control
index bc5e05daa..c00988f3e 100644
--- a/debian/control
+++ b/debian/control
@@ -4,14 +4,15 @@ Priority: optional
Maintainer: Vasily <just.one.man@yandex.ru>
Build-Depends: debhelper (>= 9),
dotnet-sdk-2.2,
- libc6-dev
+ libc6-dev,
+ libcurl4-openssl-dev
Standards-Version: 3.9.4
Package: jellyfin
Replaces: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
Breaks: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
-Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, at, libsqlite3-0, dotnet-runtime-2.2, ffmpeg
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, at, libsqlite3-0, ffmpeg
Description: Jellyfin is a home media server.
It is built on top of other popular open source technologies such as Service Stack, jQuery, jQuery mobile, and Mono. It features a REST-based api with built-in documentation to facilitate client development. We also have client libraries for our api to enable rapid development.
diff --git a/debian/jellyfin.init b/debian/jellyfin.init
index 18c7d02a1..d103fb0f1 100644
--- a/debian/jellyfin.init
+++ b/debian/jellyfin.init
@@ -9,14 +9,17 @@
### END INIT INFO
# Carry out specific functions when asked to by the system
-pid=`ps -fA|grep dotnet|grep jellyfin|awk '{print $2}'| tr -d '\n'`
+
+pidfile="/var/run/jellyfin.pid"
+pid=`cat $pidfile`
case "$1" in
start)
if [ "$pid" == "" ]; then
echo "Starting Jellyfin..."
. /etc/default/jellyfin
- nohup su -u $JELLYFIN_USER -c $JELLYFIN_DOTNET $JELLYFIN_COMMAND
+ nohup su -u $JELLYFIN_USER -c /usr/bin/jellyfin $JELLYFIN_ARGS
+ echo ?? > $pidfile
else
echo "Jellyfin already running"
fi
@@ -26,6 +29,7 @@ case "$1" in
echo "Stopping Jellyfin..."
kill $pid
sleep 2
+ rm -f $pidfile
else
echo "Jellyfin not running"
fi
diff --git a/debian/jellyfin.service b/debian/jellyfin.service
index 982608a7e..d5a999cf5 100644
--- a/debian/jellyfin.service
+++ b/debian/jellyfin.service
@@ -6,7 +6,7 @@ After = network.target
Type = simple
EnvironmentFile = /etc/default/jellyfin
User = jellyfin
-ExecStart = /usr/bin/dotnet ${JELLYFIN_EXE} -programdata ${JELLYFIN_DATA} -restartpath ${JELLYFIN_RESTART_SCRIPT} ${JELLYFIN_ADD_OPTS}
+ExecStart = /usr/bin/jellyfin -programdata ${JELLYFIN_DATA} -restartpath ${JELLYFIN_RESTART_SCRIPT} ${JELLYFIN_ADD_OPTS}
Restart = on-abort
TimeoutSec = 20
diff --git a/debian/jellyfin.upstart b/debian/jellyfin.upstart
index ebbceaf57..ef5bc9bca 100644
--- a/debian/jellyfin.upstart
+++ b/debian/jellyfin.upstart
@@ -16,5 +16,5 @@ script
# Log file
logger -t "$0" "DEBUG: `set`"
. /etc/default/jellyfin
- exec su -u $JELLYFIN_USER -c $JELLYFIN_DOTNET $JELLYFIN_COMMAND
+ exec su -u $JELLYFIN_USER -c /usr/bin/jellyfin $JELLYFIN_ARGS
end script
diff --git a/debian/postinst b/debian/postinst
index ad7363db4..502bba342 100644
--- a/debian/postinst
+++ b/debian/postinst
@@ -37,6 +37,9 @@ case "$1" in
chmod +x ${JELLYFIN_DIR}/restart.sh > /dev/null 2>&1 || true
+ # Install jellyfin symlink into /usr/bin
+ ln -sf /usr/lib/jellyfin/bin/jellyfin /usr/bin/jellyfin
+
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
diff --git a/debian/rules b/debian/rules
index 17e7d506c..0b790f2e4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -15,8 +15,8 @@ override_dh_auto_test:
override_dh_clistrip:
override_dh_auto_build:
- dotnet publish --configuration $(CONFIG) $(CURDIR)/MediaBrowser.sln --output='$(CURDIR)/usr/lib/jellyfin/bin'
+ dotnet publish --configuration $(CONFIG) $(CURDIR)/MediaBrowser.sln --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime linux-x64
override_dh_auto_clean:
dotnet clean -maxcpucount:1 --configuration $(CONFIG) $(CURDIR)/MediaBrowser.sln || true
- rm -rf '$(CURDIR)/usr/lib/jellyfin'
+ rm -rf '$(CURDIR)/usr'