Преглед изворни кода

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
Joshua M. Boniface пре 6 година
родитељ
комит
a73d255f51
8 измењених фајлова са 22 додато и 18 уклоњено
  1. 4 4
      Dockerfile.debian_package
  2. 1 5
      debian/conf/jellyfin
  3. 4 3
      debian/control
  4. 6 2
      debian/jellyfin.init
  5. 1 1
      debian/jellyfin.service
  6. 1 1
      debian/jellyfin.upstart
  7. 3 0
      debian/postinst
  8. 2 2
      debian/rules

+ 4 - 4
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
 

+ 1 - 5
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"

+ 4 - 3
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.

+ 6 - 2
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

+ 1 - 1
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
 

+ 1 - 1
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

+ 3 - 0
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)
     ;;

+ 2 - 2
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'