Subsonic Installation
Cet article présente l'installation de Subsonic sur une machine Ubuntu.
Sommaire
Votre avis
Current user rating: 95/100 (4 votes)
|
|
Installation initiale
La webapp est installée dans le Tomcat installé à savoir dans le répertoire /var/lib/tomcat6/webapps
. Le serveur est arrêté juste avant l'installation pour éviter de monter l'application dès la copie du fichier. Ceci permet également de modifier les permissions sur le fichier.
#sudo service tomcat6 stop #sudo cp subsonic.war /var/lib/tomcat6/webapps/subsonic.war #sudo chown tomcat6:tomcat6 /var/lib/tomcat6/webapps/subsonic.war #sudo service tomcat6 start
Configuration
Paramètres d'exécution
Lors du premier démarrage de Tomcat, l'erreur suivante est affichée dans la log catalina.out, répertoire /var/lib/tomcat6/logs
, de Tomcat:
INFO: Illegal access: this web application instance has been stopped already. Could not load org.apache.http.impl.io.SocketInputBuffer. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1531) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:99) at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:165) at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:162) at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:123) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:130) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) at net.sourceforge.subsonic.service.NetworkService$URLRedirectionTask.execute(NetworkService.java:250) at net.sourceforge.subsonic.service.NetworkService$Task.run(NetworkService.java:309) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ERROR: The directory /var/subsonic does not exist. Please create it and make it writable. (You can override the directory location by specifying -Dsubsonic.home=... when starting the servlet container.) Failed to write to subsonic.log. java.io.FileNotFoundException: /var/subsonic/subsonic.log (Aucun fichier ou dossier de ce type) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:194) at java.io.FileWriter.<init>(FileWriter.java:90) at net.sourceforge.subsonic.Logger.getPrintWriter(Logger.java:162) at net.sourceforge.subsonic.Logger.add(Logger.java:152) at net.sourceforge.subsonic.Logger.warn(Logger.java:129) at net.sourceforge.subsonic.service.NetworkService$URLRedirectionTask.execute(NetworkService.java:265) at net.sourceforge.subsonic.service.NetworkService$Task.run(NetworkService.java:309) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ERROR: The directory /var/subsonic does not exist. Please create it and make it writable. (You can override the directory location by specifying -Dsubsonic.home=... when starting the servlet container.) Failed to write to subsonic.log. java.io.FileNotFoundException: /var/subsonic/subsonic.log (Aucun fichier ou dossier de ce type) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:194) at java.io.FileWriter.<init>(FileWriter.java:90) at net.sourceforge.subsonic.Logger.getPrintWriter(Logger.java:162) at net.sourceforge.subsonic.Logger.add(Logger.java:152) at net.sourceforge.subsonic.Logger.error(Logger.java:146) at net.sourceforge.subsonic.service.NetworkService$Task.run(NetworkService.java:311) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ERROR: The directory /var/subsonic does not exist. Please create it and make it writable. (You can override the directory location by specifying -Dsubsonic.home=... when starting the servlet container.) Failed to write to subsonic.log. java.io.FileNotFoundException: /var/subsonic/subsonic.log (Aucun fichier ou dossier de ce type) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:194) at java.io.FileWriter.<init>(FileWriter.java:90) at net.sourceforge.subsonic.Logger.getPrintWriter(Logger.java:162) at net.sourceforge.subsonic.Logger.add(Logger.java:152) at net.sourceforge.subsonic.Logger.warn(Logger.java:129) at net.sourceforge.subsonic.service.NetworkService$PortForwardingTask.findRouter(NetworkService.java:193) at net.sourceforge.subsonic.service.NetworkService$PortForwardingTask.execute(NetworkService.java:132) at net.sourceforge.subsonic.service.NetworkService$Task.run(NetworkService.java:309) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ERROR: The directory /var/subsonic does not exist. Please create it and make it writable. (You can override the directory location by specifying -Dsubsonic.home=... when starting the servlet container.) Failed to write to subsonic.log. java.io.FileNotFoundException: /var/subsonic/subsonic.log (Aucun fichier ou dossier de ce type) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:194) at java.io.FileWriter.<init>(FileWriter.java:90) at net.sourceforge.subsonic.Logger.getPrintWriter(Logger.java:162) at net.sourceforge.subsonic.Logger.add(Logger.java:152) at net.sourceforge.subsonic.Logger.error(Logger.java:146) at net.sourceforge.subsonic.service.NetworkService$Task.run(NetworkService.java:311) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
Les messages d'erreur indique l'impossibilité de créer le fichier de log à l'emplacement /var/subsonic/subsonic.log
, et l'absence du répertoire /var/subsonic
. Il est aussi indiqué que ce dernier emplacement peut être spécifié à l'aide de la variable d'environnement subsonic.home
. Cette solution est donc utilisée, afin de maîtriser totalement l'installation.
L'installation étant faite sur un serveur Tomcat, le fichier setenv.sh
est modifié pour positionner cette variable d'environnement, avec la valeur /usr/share/tomcat6/subsonic
, reprenant le principe décrit ici. Ce répertoire est créé au préalable.
#sudo mkdir /usr/share/tomcat6/subsonic #sudo chown tomcat6:tomcat6 /usr/share/tomcat6/subsonic #sudo vi /var/lib/tomcat6/bin/setenv.sh
Puis le fichier setenv.sh
, dans le répertoire /var/lib/tomcat6/bin
est modifié pour spécifier la variable, en la spécifiant dans la variable JAVA_OPTS
.
export JAVA_OPTS="$JAVA_OPTS -Dsubsonic.home=/usr/share/tomcat6/subsonic"
Suite à la mise du serveur Tomcat en version 7, ces paramétrages doivent être repris. Le fichier setenv.sh
est recopié dans /var/lib/tomcat7/bin
avec la modification de l'emplacement.
export JAVA_OPTS="$JAVA_OPTS -Dsubsonic.home=/usr/share/tomcat7/subsonic"
L'installation du paquet tomcat7
a entraîné la mise à jour des permissions sur les fichiers. Le propriétaire est passé automatiquement de tomcat6
à tomcat7
et aucun problème d'accès n'a été constaté. Cependant, il peut être nécessaire d'effectuer manuellement l'opération.
#sudo chown -R tomcat7:tomcat7 /usr/share/tomcat7/subsonic
De la même façon, suite à la mise du serveur Tomcat en version 8, ces paramétrages doivent être repris. Le fichier setenv.sh
est recopié dans /var/lib/tomcat7/bin
avec la modification de l'emplacement.
export JAVA_OPTS="$JAVA_OPTS -Dsubsonic.home=/usr/share/tomcat8/subsonic"
L'installation du paquet tomcat7
a entraîné la mise à jour des permissions sur les fichiers. Le propriétaire est passé automatiquement de tomcat7
à tomcat8
et aucun problème d'accès n'a été constaté. Cependant, il peut être nécessaire d'effectuer manuellement l'opération.
#sudo chown -R tomcat8:tomcat8 /usr/share/tomcat8/subsonic
Emplacement des logs
Comme vu lors de l'installation, un fichier de log est créé dans le répertoire "home" de Subsonic. Du fait de la configuration mise en place, ce fichier se trouve à l'emplacement /usr/share/tomcat6/subsonic/subsonic.log
.