eg-blog

Feed Rss

Archive for September, 2012

Thanks to MoBos hint I made a new package for those of you who aren’t able to install Java 7 and wanted to install Madevils MashupMod.

I also uploaded a new ARM version to the Dropbox folder, because the latest version of MashupMod is now included. But I will not update the repository for this little change.

For the Atom users: The update button in your Package center will appear soon. If it doesn’t work at the first start, wait two minutes, stop Subsonic, reboot and restart Subsonic again.

 

There are just changes at the MashupMod  version, If you aren’t using it, you don’t have to install this update!

Finally…

The second major release for the time I am working on these packages is out.

What is new?

From the package site I only added an own install/start/stop log to the package center, but Subsonic itself has many new features (Change log here). It now scans my library with about 45k songs in under 10 minutes and has the MiniSub html5 interface on board (in Subsonic go to More -> MiniSub). You can still have direct Access to it with adding /mini after your Subsonic URL or Add an icon to your DSM during update process. Also Madevil has finished his MashupMod so i included this again.

What do I have to consider?

As far as my testing went today I can say that the library of 4.6 and 4.7 are incompatible so you will loose all your settings. (It isn’t that bad because file searching is now about 10 times faster than in 4.6). If you want to backup and restore your users read this article in the Subsonic Forum (thanks to MoBO).

With installing the MashupMod version you will get many benefits but you can not register your Subsonic to get the <name>.subsonic.org address.

Also MashupMod requires Java 7 wich hasn’t been released for Atom based Diskstations, yet. You have to stick to the normal 4.7 version. I disabled the option to install MashupMod on x86 Systems.

As there is no Java package for the new PPC Diskstations DS213+ and DS413 you can not install any Java programs there, including Subsonic.

Now have fun with it the effort of upgrading is totally worth it.

The update button will appear in you package center soon (check my Subsonic install instructions on how to do this). You want to download and install it it manually? Here you go:

https://www.dropbox.com/sh/pylh8ilr0fi80ub/XAixHmKbKd/stable

btw. it runs fine on DSM 4.1…

Scripts:

preinst:

#!/bin/sh

#--------Subsonic preinstall script
#--------package maintained at synology-forum.de

source /etc/profile

########################################
#check if Java is installed

if [ -z ${JAVA_HOME} ]; then
	echo &quot;Java is not installed or not properly configured. JAVA_HOME is not defined. &quot; &gt; $SYNOPKG_TEMP_LOGFILE
        echo &quot;Download and install the Java Synology package from http://wp.me/pVshC-z5&quot; &gt;&gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Download and install the Java Synology package from http://wp.me/pVshC-z5&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	exit 1
fi

if [ ! -f ${JAVA_HOME}/bin/java ]; then
	echo &quot;Java is not installed or not properly configured. The Java binary could not be located. &quot; &gt; $SYNOPKG_TEMP_LOGFILE
        echo &quot;Download and install the Java Synology package from http://wp.me/pVshC-z5&quot; &gt;&gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Download and install the Java Synology package from http://wp.me/pVshC-z5&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	exit 1
fi

#########################################
#check if Subsonic folder is in public folder wehn restore is selected
if [ ! -z ${install_restore} ]; then
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`

	if [ ! -d $PUBLIC/Subsonic ]; then
		echo &quot;Can't find a folder named 'Subsonic' in your public folder. &quot; &gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Can't find a folder named 'Subsonic' in your public folder. &quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		echo &quot;Please check your public folder and make sure there is a folder called Subsonic (with Capital S) in it. Or select 'No' if you don't want to restore anything and just install Subsonic normally&quot; &gt;&gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Please check your public folder and make sure there is a folder called Subsonic (with Capital S) in it. Or select 'No' if you don't want to restore anything and just install Subsonic normally&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		exit 1
	fi
fi

exit 0

postinst

#!/bin/sh

#--------SUBSONIC postinstall script
#--------package maintained at eg-blog.de

#variable for process ID
PID=&quot;&quot;

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

####################################
##subsonic user settings

#create subsonic daemon user
synouser --add subsonic `${SYNOPKG_PKGDEST}/Subsonic/passgen 1 20` &quot;Subsonic daemon user&quot; 0 &quot;&quot; &quot;&quot;
echo &quot;$(date +%m%d%y%H%M%S): create subsonic daemon user&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

#determine the subsonic user homedir and save that variable in the user's profile
#this is needed because librtmp needs to write a file called ~/.swfinfo
#and new users seem to inherit a HOME value of /root which they have no permissions for
SUBSONIC_HOMEDIR=`cat /etc/passwd | sed -r '/Subsonic daemon user/!d;s/^.*:Subsonic daemon user:(.*):.*$/\1/'`
su - subsonic -s /bin/sh -c &quot;echo export HOME=${SUBSONIC_HOMEDIR} &gt;&gt; .profile&quot;

#set ownership of Subsonic folder tree
chown -R subsonic ${SYNOPKG_PKGDEST}
echo &quot;$(date +%m%d%y%H%M%S): set ownership of Subsonic folder tree&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

#####################################
##other stuff

#select the right mods / version to download/install
if [ ! -z ${mashupmod_install} ]; then
	#download and install MashupMod
	echo &quot;$(date +%m%d%y%H%M%S): download and install MashupMod&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	wget https://dl.dropbox.com/u/33279357/synology_packages/addons/MashupMod_4.7B3125SE.tgz --no-check-certificate --output-document=${SYNOPKG_PKGDEST}/MashupMod.tgz
	if [ -f ${SYNOPKG_PKGDEST}/MashupMod.tgz ]; then
		tar xzf ${SYNOPKG_PKGDEST}/MashupMod.tgz -C ${SYNOPKG_PKGDEST}
		echo &quot;$(date +%m%d%y%H%M%S): extracted MashupMod&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	else
		echo &quot;Error: MashupMod could not be downloaded&quot; &gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Please check the internet connection of your Diskstation&quot; &gt;&gt; $SYNOPKG_TEMP_LOGFILE
		exit 1
	fi
	cp -r ${SYNOPKG_PKGDEST}/MashupMod/* ${SYNOPKG_PKGDEST}/Subsonic
	rm -r ${SYNOPKG_PKGDEST}/MashupMod
	rm ${SYNOPKG_PKGDEST}/MashupMod.tgz
	echo &quot;$(date +%m%d%y%H%M%S): copied Mashupmod and deleted downloaded files&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

else
	#install standard Subsonic
	cp -r ${SYNOPKG_PKGDEST}/install_standard/* ${SYNOPKG_PKGDEST}/Subsonic
	echo &quot;$(date +%m%d%y%H%M%S): copied standard Subsonic files&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
fi

rm -r ${SYNOPKG_PKGDEST}/install_standard

#make the Subsonic start script executable
chmod +x ${SYNOPKG_PKGDEST}/Subsonic/subsonic.sh

#####################################
##start Subsonic
echo &quot;$(date +%m%d%y%H%M%S): start Subsonic for first initialisation&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

#set up symlink for the DSM GUI
ln -s ${SYNOPKG_PKGDEST}/Subsonic /usr/syno/synoman/webman/3rdparty/Subsonic

#create custom temp folder so temp files can be bigger
if [ ! -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	mkdir ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	chown -R subsonic ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi
#create symlink to the created directory
if [ ! -L /tmp/subsonic ]; then
	ln -s ${SYNOPKG_PKGDEST}/../../@tmp/subsonic /tmp/
fi

#start subsonic as subsonic user
su - subsonic -s /bin/sh -c /usr/syno/synoman/webman/3rdparty/Subsonic/subsonic.sh

sleep 5

subsonic_get_pid

if [ ! -z $PID ]; then
	echo &quot;$(date +%m%d%y%H%M%S): started Subsonic successfully. PID is: $PID&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
else
	echo &quot;Error: Can not start Subsonic during install&quot; &gt; $SYNOPKG_TEMP_LOGFILE
	echo &quot;$(date +%m%d%y%H%M%S): Error: Can not start Subsonic during install&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	exit 1
fi

#give it some time to start up
sleep 90

#stop subsonic

kill $PID
sleep 5
echo &quot;$(date +%m%d%y%H%M%S): Stopped Subsonic&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

####################################
##download and install additional features
echo &quot;$(date +%m%d%y%H%M%S): Download and install additional Features&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
#Subtunes
if [ ! -z ${subtunes_install} ]; then
	wget https://dl.dropbox.com/u/33279357/synology_packages/addons/Subtunes_0.9.4b.tgz --no-check-certificate --output-document=${SYNOPKG_PKGDEST}/Subtunes.tgz
	if [ -f ${SYNOPKG_PKGDEST}/Subtunes.tgz ]; then
		echo &quot;$(date +%m%d%y%H%M%S): Downloaded Subtunes&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		tar xzf ${SYNOPKG_PKGDEST}/Subtunes.tgz -C ${SYNOPKG_PKGDEST}
		echo &quot;$(date +%m%d%y%H%M%S): extracted Subtunes&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	else
		echo &quot;$(date +%m%d%y%H%M%S): Error: Subtunes could not be downloaded&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		echo &quot;$(date +%m%d%y%H%M%S): Please check the internet connection of your Diskstation&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		echo &quot;Error: Subtunes could not be downloaded&quot; &gt; $SYNOPKG_TEMP_LOGFILE
		echo &quot;Please check the internet connection of your Diskstation&quot; &gt;&gt; $SYNOPKG_TEMP_LOGFILE
		exit 1
	fi

	cp -r ${SYNOPKG_PKGDEST}/Subtunes /usr/syno/synoman/webman/3rdparty/Subsonic/jetty/*/webapp/
	rm -r ${SYNOPKG_PKGDEST}/Subtunes
	rm ${SYNOPKG_PKGDEST}/Subtunes.tgz
	echo &quot;$(date +%m%d%y%H%M%S): copied Subtunes and deleted downloaded files&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
fi

#MiniSub Link
if [ ! -z ${minisub_link} ]; then
	echo &quot;$(date +%m%d%y%H%M%S): create MiniSub DSM link&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	if [ -f ${SYNOPKG_PKGDEST}/Subsonic/MiniSublink/config ]; then
		cp ${SYNOPKG_PKGDEST}/Subsonic/MiniSublink/config /usr/syno/synoman/webman/3rdparty/Subsonic/jetty/*/webapp/mini/
		cp -r ${SYNOPKG_PKGDEST}/Subsonic/images/* /usr/syno/synoman/webman/3rdparty/Subsonic/jetty/*/webapp/mini/
	fi
fi
rm -r ${SYNOPKG_PKGDEST}/Subsonic/MiniSublink

chown -R subsonic ${SYNOPKG_PKGDEST}/

####################################

#delete symlink
rm /usr/syno/synoman/webman/3rdparty/Subsonic
#delete temp files
if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi

#########################################
#install user backup from public folder

if [ ! -z ${install_restore} ]; then
	echo &quot;$(date +%m%d%y%H%M%S): restore previously made backup fron public folder&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`
	#copy files
	cp -r $PUBLIC/Subsonic/* ${SYNOPKG_PKGDEST}/Subsonic

	#new files might not be owned by subsonic user
	chown -R subsonic ${SYNOPKG_PKGDEST}/

	#make the Subsonic start script executable
	chmod +x ${SYNOPKG_PKGDEST}/Subsonic/subsonic.sh
fi
echo &quot;$(date +%m%d%y%H%M%S): ----installation complete----&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
exit 0

preupgrade:

#!/bin/sh

#--------Subsonic preupgrade script
#--------package maintained at eg-blog.de

#variable for process ID
PID=&quot;&quot;

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
   PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

###########################
#stop Subsonic if it is runing

subsonic_get_pid

if [ ! -z $PID ]; then
	echo &quot;$(date +%m%d%y%H%M%S): stopping subsonic&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	kill $PID
	sleep 2
fi

if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi

###########################
#backup subsonic.properties and db Folder

if [ -z ${install_restore} ]; then
	echo &quot;$(date +%m%d%y%H%M%S): create backup of Subsonic db in temporary backup dir&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	if [ ! -d ${SYNOPKG_PKGDEST}/../subsonic_update_backup ]; then
		mkdir ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp ${SYNOPKG_PKGDEST}/Subsonic/subsonic.properties ${SYNOPKG_PKGDEST}/Subsonic/*.index ${SYNOPKG_PKGDEST}/../subsonic_update_backup/
		cp -r ${SYNOPKG_PKGDEST}/Subsonic/db ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp -r ${SYNOPKG_PKGDEST}/Subsonic/lucene ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp -r ${SYNOPKG_PKGDEST}/Subsonic/thumbs ${SYNOPKG_PKGDEST}/../subsonic_update_backup
	fi
fi

exit 0

postupgrade:

#!/bin/sh

#--------SUBSONIC postupgrade script
#--------package maintained at eg-blog.de

###############################
#restore subsonic db index and settings
if [ ! -z ${install_update} ]; then
	echo &quot;$(date +%m%d%y%H%M%S): restore from temporary backup dir&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	cp -r ${SYNOPKG_PKGDEST}/../subsonic_update_backup/* ${SYNOPKG_PKGDEST}/Subsonic/
fi

#remove backup folder
#remove the next lines to keep a backup in the @appstore folder
if [ -d ${SYNOPKG_PKGDEST}/../subsonic_update_backup ]; then
	echo &quot;$(date +%m%d%y%H%M%S): remove temporary backup dir&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	rm -r ${SYNOPKG_PKGDEST}/../subsonic_update_backup
fi

#subsonic may not own all new files
chown -R subsonic ${SYNOPKG_PKGDEST}/

#make the Subsonic start script executable
chmod +x ${SYNOPKG_PKGDEST}/Subsonic/subsonic.sh

echo &quot;$(date +%m%d%y%H%M%S): ----update complete----&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

exit 0

preuninst:

#!/bin/sh

#--------SUBSONIC preuninstall script
#--------package maintained at eg-blog.de

###############################################
##stop Subsonic if it is running

PID=`ps | grep java | grep subsonic | awk '{print $1}'`
if [ -z $PID ]; then
	sleep 1
else
	echo &quot;$(date +%m%d%y%H%M%S): stopping Subsonic&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	kill $PID
	sleep 2
	if [ -d /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic
	fi

	if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	fi
fi

################################################
#create a backup in public folder in public folder
if [ ! -z ${uninstall_backup} ]; then
	echo &quot;$(date +%m%d%y%H%M%S): Create a backup of Subsonic in public folder&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`
	if [ ! -d $PUBLIC/Subsonic ]; then
		mkdir $PUBLIC/Subsonic
	fi

	cp ${SYNOPKG_PKGDEST}/Subsonic/subsonic.properties *.index $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/Subsonic/db $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/Subsonic/lucene $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/Subsonic/thumbs $PUBLIC/Subsonic
fi

exit 0

postuninst:

#!/bin/sh

#--------SUBSONIC postuninstall script
#--------package maintained at eg-blog.de

#remove subsonic daemon user
echo &quot;$(date +%m%d%y%H%M%S): remove Subsonic user&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
synouser --del subsonic

#remove DSM icon symlink
if [ -L /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
	rm /usr/syno/synoman/webman/3rdparty/Subsonic
fi

#remove temp symlink
rm /tmp/subsonic

echo &quot;$(date +%m%d%y%H%M%S): ----uninstall complete----&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

exit 0

start-stop-status:

#!/bin/sh

#--------Subsonic start-stop-status script
#--------package maintained at eg-blog.de

#variable for process ID
PID=&quot;&quot;

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}
get_time()
{
	TIME=$(date +%m%d%y%H%M%S)
}

case &quot;$1&quot; in
   start)
	  ###---copied from patters start-stop-status.sh of his crashplan proe package---
	  DAEMON_ID=&quot;${SYNOPKG_PKGNAME} daemon user&quot;
	  DAEMON_HOME=&quot;`cat /etc/passwd | grep &quot;${DAEMON_ID}&quot; | cut -f6 -d':'`&quot;

	  #set the current timezone for Java so that log timestamps are accurate
	  #we need to use the modern timezone names so that Java can figure out DST
	  SYNO_TZ=`cat /etc/synoinfo.conf | grep timezone | cut -f2 -d'&quot;'`
	  SYNO_TZ=`grep &quot;^${SYNO_TZ}&quot; /usr/share/zoneinfo/Timezone/tzname | sed -e &quot;s/^.*= //&quot;`
	  grep &quot;^export TZ&quot; ${DAEMON_HOME}/.profile &gt; /dev/null \
	  &amp;&amp; sed -i &quot;s%^export TZ=.*$%export TZ='${SYNO_TZ}'%&quot; ${DAEMON_HOME}/.profile \
	  ###---end of copy---------------------------------------------------------------

	  #set up symlinks for the DSM GUI icon
	  #Subsonic main
	  if [ -d /usr/syno/synoman/webman/3rdparty ]; then
		ln -s ${SYNOPKG_PKGDEST}/Subsonic/ /usr/syno/synoman/webman/3rdparty/Subsonic
		echo &quot;$(date +%m%d%y%H%M%S): Subsonic DSM link created&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

		#MiniSub
		if [ -d ${SYNOPKG_PKGDEST}/Subsonic/jetty/*/webapp/mini ]; then
			ln -s ${SYNOPKG_PKGDEST}/Subsonic/jetty/*/webapp/mini /usr/syno/synoman/webman/3rdparty/Subsonic_MiniSub
			echo &quot;$(date +%m%d%y%H%M%S): MiniSub DSM link created&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		fi
		#Subtunes
		if [ -d ${SYNOPKG_PKGDEST}/Subsonic/jetty/*/webapp/Subtunes ]; then
			ln -s ${SYNOPKG_PKGDEST}/Subsonic/jetty/*/webapp/Subtunes /usr/syno/synoman/webman/3rdparty/Subsonic_Subtunes
			echo &quot;$(date +%m%d%y%H%M%S): Subtunes DSM link created&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
		fi
	  else
		echo &quot;$(date +%m%d%y%H%M%S) : Error: Directory for Subsonic DSM link was not found&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
      #create custom temp folder so temp files can be bigger
	  if [ ! -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		mkdir ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		chown -R subsonic ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		echo &quot;$(date +%m%d%y%H%M%S): Temp directory created&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  #create symlink to the created directory
	  if [ ! -L /tmp/subsonic ]; then
		ln -s ${SYNOPKG_PKGDEST}/../../@tmp/subsonic /tmp/
		echo &quot;$(date +%m%d%y%H%M%S): Temp directory link created&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  # starting subsonic as subsonic daemon user
	  echo &quot;$(date +%m%d%y%H%M%S): starting Subsonic as subsonic daemon user&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
      su - subsonic -s /bin/sh -c /usr/syno/synoman/webman/3rdparty/Subsonic/subsonic.sh
      sleep 10
	  echo &quot;$(date +%m%d%y%H%M%S): started Subsonic as subsonic daemon user&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  subsonic_get_pid
	  echo &quot;$(date +%m%d%y%H%M%S): PID is: $PID&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  echo &quot;$(date +%m%d%y%H%M%S): ----subsonic is running----&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log

	  exit 0
   ;;
   stop)
      #stop subsonic
	  subsonic_get_pid
      kill $PID
	  echo &quot;$(date +%m%d%y%H%M%S) : killed Subsonic PID: $PID&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
      sleep 2
	  #delete Symlinks and DSM icon
	  if [ -L /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic
		echo &quot;$(date +%m%d%y%H%M%S): Subsonic DSM link deleted&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  if [ -L /usr/syno/synoman/webman/3rdparty/Subsonic_MiniSub ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic_MiniSub
		echo &quot;$(date +%m%d%y%H%M%S): MiniSub DSM link deleted&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  if [ -L /usr/syno/synoman/webman/3rdparty/Subsonic_Subtunes ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic_Subtunes
		echo &quot;$(date +%m%d%y%H%M%S): Subtunes DSM link deleted&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		echo &quot;$(date +%m%d%y%H%M%S): Temp files deleted&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  if [ -L /tmp/subsonic ]; then
		rm /tmp/subsonic
		echo &quot;$(date +%m%d%y%H%M%S): Temp link deleted&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  fi
	  echo &quot;$(date +%m%d%y%H%M%S): ----subsonic is stopped----&quot; &gt;&gt; ${SYNOPKG_PKGDEST}/subsonic_package.log
	  exit 0
   ;;
   status)
      subsonic_get_pid
      if [ -z  $PID ]; then
	  #Subsonic is not running
		exit 1
	  else
	  #subsonic is running
		exit 0
      fi
   ;;
   log)
	  echo &quot;${SYNOPKG_PKGDEST}/subsonic_package.log&quot;
	  exit 0
   ;;
esac

install_uifile:

[{
	&quot;step_title&quot;: &quot;Restore Backup&quot;,
	&quot;items&quot;:
	[{
		&quot;type&quot;: &quot;singleselect&quot;,
		&quot;desc&quot;: &quot;Would you like to restore a backup of Subsonic?
Create a folder with all relevant files in it,
name it Subsonic (with capital S)and
place it into your public folder&quot;,
		&quot;subitems&quot;:
		[{
			&quot;key&quot;: &quot;No&quot;,
			&quot;desc&quot;: &quot;No&quot;
		 },
		 {
			&quot;key&quot;: &quot;install_restore&quot;,
			&quot;desc&quot;: &quot;Yes&quot;
		}]
	}]
},
{
	&quot;step_title&quot;: &quot;Add-ons / Mods&quot;,
	&quot;items&quot;:
	[{
		&quot;type&quot;: &quot;multiselect&quot;,
		&quot;desc&quot;: &quot;Which mods or additional features would you like to download and install?
Requires internet connection of your Diskstation&quot;,
		&quot;subitems&quot;:
		[{
			&quot;key&quot;: &quot;subtunes_install&quot;,
			&quot;desc&quot;: &quot;Subtunes html5 web interface (3,8 MB)&quot;
		},
		{
			&quot;key&quot;: &quot;mashupmod_install&quot;,
			&quot;desc&quot;: &quot;Mashupmod (30MB) (it is not beta anymore but be aware of what you are doing: check eg-blog.de!)&quot;
		},
		{
			&quot;key&quot;: &quot;minisub_link&quot;,
			&quot;desc&quot;: &quot;Create a link in DSM to MiniSub. MiniSub is a html5 based webinterface included in Subsonic&quot;
		}]
	}]
}]

upgrade_uifile

[{
	&quot;step_title&quot;: &quot;Choose update mode&quot;,
	&quot;items&quot;:
	[{
		&quot;type&quot;: &quot;singleselect&quot;,
		&quot;desc&quot;: &quot;A previously installed version of Subsonic has been detected.
Which update mode would you like to perform?&quot;,
		&quot;subitems&quot;:
		[{
			&quot;key&quot;: &quot;install_update&quot;,
			&quot;desc&quot;: &quot;Just update normally (library will be kept)&quot;
		 },
		 {
			&quot;key&quot;: &quot;install_restore&quot;,
			&quot;desc&quot;: &quot;Restore a previously made backup from /public/Subsonic folder&quot;
		 },
		 {
			&quot;key&quot;: &quot;install_fresh&quot;,
			&quot;desc&quot;: &quot;Preform a fresh install. All previously created files of Subsonic will be deleted!&quot;
		}]
	}]
},
{
	&quot;step_title&quot;: &quot;Add-ons / Mods&quot;,
	&quot;items&quot;:
	[{
		&quot;type&quot;: &quot;multiselect&quot;,
		&quot;desc&quot;: &quot;Which mods or additional features would you like to download and install?
Requires internet connection of your Diskstation&quot;,
		&quot;subitems&quot;:
		[{
			&quot;key&quot;: &quot;subtunes_install&quot;,
			&quot;desc&quot;: &quot;Subtunes html5 web interface (3,8 MB)&quot;
		},
		{
			&quot;key&quot;: &quot;mashupmod_install&quot;,
			&quot;desc&quot;: &quot;Mashupmod (30MB)
It is not beta anymore but be aware of what you are doing: check eg-blog.de!&quot;
		},
		{
			&quot;key&quot;: &quot;minisub_link&quot;,
			&quot;desc&quot;: &quot;Create a link in DSM to MiniSub.
MiniSub is a html5 based webinterface included in Subsonic&quot;
		}]
	}]
}]

uninstall_uifile:

[{
	&quot;step_title&quot;: &quot;Create Backup&quot;,
	&quot;items&quot;:
	[{
		&quot;type&quot;: &quot;singleselect&quot;,
		&quot;desc&quot;: &quot;Would you like to create a backup of Subsonic in the public folder?&quot;,
		&quot;subitems&quot;:
		[{
			&quot;key&quot;: &quot;no&quot;,
			&quot;desc&quot;: &quot;No&quot;
		},
		{
			&quot;key&quot;: &quot;uninstall_backup&quot;,
			&quot;desc&quot;: &quot;Yes&quot;
		}]
	}]
}]

INFO

package=&quot;Subsonic&quot;
version=&quot;4.7-026&quot;
description=&quot;Subsonic is a free, web-based media streamer, providing ubiquitous access to your music.&quot;
maintainer=&quot;Subsonic is developed by Sindre Mehus (subsonic.org), MiniSub is developed by tsquillario (forum.subsonic.org), Subtunes is develpoed by mattgoldspink1 (code.google.com/p/subtunes/), MashupMod is developed by MadEvil (forum.subsonic.org), Synology package is maintained at eg-blog.de&quot;
arch=&quot;88f6281 88f6282&quot;
adminport=&quot;4040&quot;
adminurl=&quot;/&quot;
firmware=&quot;3.1-1594&quot;
helpurl=&quot;http://eg-blog.de&quot;
report_url=&quot;http://eg-blog.de&quot;
package_icon=&quot;base 64 code, too long to post it here&quot;
install_reboot=&quot;yes&quot;

Config (Subsonic):

{
	&quot;.url&quot;: {
		&quot;de.eg-blog.subsonic&quot;: {
			&quot;type&quot;: &quot;url&quot;,
			&quot;allUsers&quot;: true,
			&quot;title&quot;: &quot;Subsonic&quot;,
			&quot;desc&quot;: &quot;Subsonic Music Streamer&quot;,
			&quot;icon&quot;: &quot;images/icon_48.png&quot;,
			&quot;protocol&quot;: &quot;http&quot;,
			&quot;url&quot;: &quot;/&quot;,
			&quot;port&quot;: &quot;4040&quot;
		}
	}
}

Config (MiniSub):

{
	&quot;.url&quot;: {
		&quot;de.eg-blog.subsonic.MiniSub&quot;: {
			&quot;type&quot;: &quot;url&quot;,
			&quot;allUsers&quot;: true,
			&quot;title&quot;: &quot;MiniSub&quot;,
			&quot;desc&quot;: &quot;Subsonic Music Streamer - MiniSub html5 interface&quot;,
			&quot;icon&quot;: &quot;icon_48.png&quot;,
			&quot;protocol&quot;: &quot;http&quot;,
			&quot;url&quot;: &quot;/mini/&quot;,
			&quot;port&quot;: &quot;4040&quot;
		}
	}
}

Config (Subtunes):

{
	&quot;.url&quot;: {
		&quot;de.eg-blog.subsonic.Subtunes&quot;: {
			&quot;type&quot;: &quot;url&quot;,
			&quot;allUsers&quot;: true,
			&quot;title&quot;: &quot;Subtunes&quot;,
			&quot;desc&quot;: &quot;Subsonic Music Streamer - Subtunes html5 interface&quot;,
			&quot;icon&quot;: &quot;icons/icon_48.png&quot;,
			&quot;protocol&quot;: &quot;http&quot;,
			&quot;url&quot;: &quot;/Subtunes/&quot;,
			&quot;port&quot;: &quot;4040&quot;
		}
	}
}

subsonic.sh (changed)

#!/bin/sh

###################################################################################
# Shell script for starting Subsonic.  See http://subsonic.org.
#
# Author: Sindre Mehus
###################################################################################

###added by gigon, see eg-blog.de for details---------------------------
RAM=$((`free | grep Mem: | sed -e &quot;s/^ *Mem: *\([0-9]*\).*$/\1/&quot;`/1024))
if [ $RAM -le 128 ]; then
    SUBSONIC_MAX_MEMORY=80
elif [ $RAM -le 256 ]; then
    SUBSONIC_MAX_MEMORY=192
elif [ $RAM -gt 256 ]; then
	SUBSONIC_MAX_MEMORY=384
fi
###---------------------------------------------------------------------

SUBSONIC_HOME=/usr/syno/synoman/webman/3rdparty/Subsonic
SUBSONIC_HOST=0.0.0.0
SUBSONIC_PORT=4040
SUBSONIC_HTTPS_PORT=4041
SUBSONIC_CONTEXT_PATH=/

#remove the # in the next line if you want to set the max memory manually
#SUBSONIC_MAX_MEMORY=100

SUBSONIC_PIDFILE=
SUBSONIC_DEFAULT_MUSIC_FOLDER=/volume1/music
SUBSONIC_DEFAULT_PODCAST_FOLDER=/volume1/music/Podcast
SUBSONIC_DEFAULT_PLAYLIST_FOLDER=/volume1/music/playlists

quiet=0

usage() {
    echo &quot;Usage: subsonic.sh [options]&quot;
    echo &quot;  --help               This small usage guide.&quot;
    echo &quot;  --home=DIR           The directory where Subsonic will create files.&quot;
    echo &quot;                       Make sure it is writable. Default: /var/subsonic&quot;
    echo &quot;  --host=HOST          The host name or IP address on which to bind Subsonic.&quot;
    echo &quot;                       Only relevant if you have multiple network interfaces and want&quot;
    echo &quot;                       to make Subsonic available on only one of them. The default value&quot;
    echo &quot;                       will bind Subsonic to all available network interfaces. Default: 0.0.0.0&quot;
    echo &quot;  --port=PORT          The port on which Subsonic will listen for&quot;
    echo &quot;                       incoming HTTP traffic. Default: 4040&quot;
    echo &quot;  --https-port=PORT    The port on which Subsonic will listen for&quot;
    echo &quot;                       incoming HTTPS traffic. Default: 0 (disabled)&quot;
    echo &quot;  --context-path=PATH  The context path, i.e., the last part of the Subsonic&quot;
    echo &quot;                       URL. Typically '/' or '/subsonic'. Default '/'&quot;
    echo &quot;  --max-memory=MB      The memory limit (max Java heap size) in megabytes.&quot;
    echo &quot;                       Default: 100&quot;
    echo &quot;  --pidfile=PIDFILE    Write PID to this file. Default not created.&quot;
    echo &quot;  --quiet              Don't print anything to standard out. Default false.&quot;
    echo &quot;  --default-music-folder=DIR    Configure Subsonic to use this folder for music.  This option &quot;
    echo &quot;                                only has effect the first time Subsonic is started. Default '/var/music'&quot;
    echo &quot;  --default-podcast-folder=DIR  Configure Subsonic to use this folder for Podcasts.  This option &quot;
    echo &quot;                                only has effect the first time Subsonic is started. Default '/var/music/Podcast'&quot;
    echo &quot;  --default-playlist-folder=DIR Configure Subsonic to use this folder for playlists.  This option &quot;
    echo &quot;                                only has effect the first time Subsonic is started. Default '/var/playlists'&quot;
    exit 1
}

# Parse arguments.
while [ $# -ge 1 ]; do
    case $1 in
        --help)
            usage
            ;;
        --home=?*)
            SUBSONIC_HOME=${1#--home=}
            ;;
        --host=?*)
            SUBSONIC_HOST=${1#--host=}
            ;;
        --port=?*)
            SUBSONIC_PORT=${1#--port=}
            ;;
        --https-port=?*)
            SUBSONIC_HTTPS_PORT=${1#--https-port=}
            ;;
        --context-path=?*)
            SUBSONIC_CONTEXT_PATH=${1#--context-path=}
            ;;
        --max-memory=?*)
            SUBSONIC_MAX_MEMORY=${1#--max-memory=}
            ;;
        --pidfile=?*)
            SUBSONIC_PIDFILE=${1#--pidfile=}
            ;;
        --quiet)
            quiet=1
            ;;
        --default-music-folder=?*)
            SUBSONIC_DEFAULT_MUSIC_FOLDER=${1#--default-music-folder=}
            ;;
        --default-podcast-folder=?*)
            SUBSONIC_DEFAULT_PODCAST_FOLDER=${1#--default-podcast-folder=}
            ;;
        --default-playlist-folder=?*)
            SUBSONIC_DEFAULT_PLAYLIST_FOLDER=${1#--default-playlist-folder=}
            ;;
        *)
            usage
            ;;
    esac
    shift
done

# Use JAVA_HOME if set, otherwise assume java is in the path.
JAVA=java
if [ -e &quot;${JAVA_HOME}&quot; ]
    then
    JAVA=${JAVA_HOME}/bin/java
fi

# Create Subsonic home directory.
mkdir -p ${SUBSONIC_HOME}
LOG=${SUBSONIC_HOME}/subsonic_sh.log
rm -f ${LOG}

cd $(dirname $0)
if [ -L $0 ] &amp;&amp; ([ -e /bin/readlink ] || [ -e /usr/bin/readlink ]); then
    cd $(dirname $(readlink $0))
fi

${JAVA} -Xmx${SUBSONIC_MAX_MEMORY}m \
  -Dsubsonic.home=${SUBSONIC_HOME} \
  -Dsubsonic.host=${SUBSONIC_HOST} \
  -Dsubsonic.port=${SUBSONIC_PORT} \
  -Dsubsonic.httpsPort=${SUBSONIC_HTTPS_PORT} \
  -Dsubsonic.contextPath=${SUBSONIC_CONTEXT_PATH} \
  -Dsubsonic.defaultMusicFolder=${SUBSONIC_DEFAULT_MUSIC_FOLDER} \
  -Dsubsonic.defaultPodcastFolder=${SUBSONIC_DEFAULT_PODCAST_FOLDER} \
  -Dsubsonic.defaultPlaylistFolder=${SUBSONIC_DEFAULT_PLAYLIST_FOLDER} \
  -Djava.awt.headless=true \
  -verbose:gc \
  -jar subsonic-booter-jar-with-dependencies.jar &gt; ${LOG} 2&gt;&amp;1 &amp;

# Write pid to pidfile if it is defined.
if [ $SUBSONIC_PIDFILE ]; then
    echo $! &gt; ${SUBSONIC_PIDFILE}
fi

if [ $quiet = 0 ]; then
    echo Started Subsonic [PID $!, ${LOG}]
fi

Subsonic 4.7 came out on Wednesday, but I am busy till Friday next Week (09-21-2012). I am afraid to tell you that you can’t expect the new package before this date. As Subsonic is a (java based) program and not just a bunch of web sides like ownCloud it requires some more work. This also is a major release and I don’t want to cause any installation bugs, so I will keep testing it a few days and install, update and deinstall it many times in every possible way, which takes a lot of time (and patience). So relax another Week, 4.7 will definitely come out in September.

btw: DSM 4.1 is running fine on my system.

Hi,

I’m back in town and got the new package running:

The update button will appear in your package center soon.

There are no special features in this one just the updated version of ownCloud.

Manual download from my Dropbox folder here:

https://www.dropbox.com/sh/4i5mjlhlnoe1qg4/B-SLEOoZH2?%20m

E