Installation Nexus

De EjnTricks

Cet article présente l'installation de Nexus sur une machine Ubuntu et en mode autonome.

Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


System-Install-icon.png Installation initiale

Afin de maîtriser l'installation, la version "war" est téléchargée pour une installation dans un Tomcat déjà configuré. Pour cela le fichier téléchargé est <nexus-webapp-1.7.1.war> Cette webapp est ensuite placée au niveau de CATALINA_BASE de Tomcat. Dans le cadre d'une installation par défaut sous Ubuntu, cela correspond à l'emplacement /var/lib/tomcat6.

Le nom du fichier est modifié en nexus.war afin que le nom de la webapp soit plus simple.


Configuration-icon.png 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:

Le fichier servlet-api-2.5-6.1.12.jar, dans le répertoire /var/lib/tomcat6/webapps/nexus/WEB-INF/lib/ est alors renommé en servlet-api-2.5-6.1.12.jar.remove pour qu'il ne soit pas chargé et éviter le conflit avec les librairies de Tomcat. Cependant une erreur persiste dans et le fichier catalina.out indique ceci:

Il semblerait qu'il y a ait une anomalie sur le chargement de la configuration log4j. En ouvrant la log "localhost", par exemple localhost.2010-07-03.log, l'erreur est plus explicite:

Le répertoire /usr/share/tomcat6/sonatype-work/nexus/conf n'existe pas et il est créé avec les commandes:

#sudo mkdir /usr/share/tomcat6/sonatype-work
#sudo mkdir /usr/share/tomcat6/sonatype-work/nexus
#sudo mkdir /usr/share/tomcat6/sonatype-work/nexus/conf

Cependant cela n'est pas suffisant car les droits d'écriture ne sont pas accordées pour le compte démarrant le service. Le compte étant tomcat6, les commanes suivantes ont été exécutées:

#cd /usr/share/tomcat6/sonatype-work/nexus
#sudo chown tomcat6:tomcat6 conf

Des erreurs persistent, en regardant la log catalina.out, le message d'erreur est:

Il apparaît donc nécessaire de mettre à jour les droits d'accès sur le répertoire /usr/share/tomcat6/sonatype-work.

#sudo chown tomcat6:tomcat6 /usr/share/tomcat6/sonatype-work/ /usr/share/tomcat6/sonatype-work/nexus

Enfin, le démarrage de l'application fonctionne et le contenu du catalina.out contient le texte suivant:


Icon-log.png Emplacement des logs

Un fichier de log, nexus.log, est créé dans le répertoire sonatype-work/nexus/logs. Or pour être conforme aux bonnes pratiques de Linux, il faut que ces fichiers se trouvent au niveau de /var/log. L'utilisation de lien symbolique est un moyen simple pour effectuer cette redirection. La mise en place s'effectue avec les commandes suivantes:

#sudo mkdir /var/log/nexus
#sudo chown tomcat6:tomcat6 /var/log/nexus
#sudo ln -s /var/log/nexus /usr/share/tomcat6/sonatype-work/nexus/logs
#sudo chown -h tomcat6:tomcat6 /usr/share/tomcat6/sonatype-work/nexus/logs

L'emplacement de ce fichier de log est configuré dans le fichier /usr/share/tomcat6/sonatype-work/nexus/conf/log4j.properties, dont le contenu est:

# Log4j configuration created by Sonatype Nexus
log4j.rootLogger=INFO, console, logfile, record

##########################
# This is to hide the VERY VERY verbose log messages that restlet is generating
##########################
log4j.logger.org.sonatype.nexus.rest.NexusApplication=ERROR

log4j.logger.org.apache.commons=INFO
log4j.logger.httpclient=INFO
log4j.logger.org.apache.http=INFO
log4j.logger.org.jsecurity=WARN
log4j.logger.org.restlet=WARN

##########################
# This is to hide the exception thrown when there is a
# rememberMe attribute in request, but no actual user remembered
##########################
log4j.logger.org.jsecurity.subject.AbstractRememberMeManager=ERROR

# LOGFILE
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=${plexus.nexus-work}/logs/nexus.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
# Customized Layout, className will be compact
log4j.appender.logfile.layout=org.sonatype.nexus.log4j.ConcisePatternLayout
log4j.appender.logfile.layout.ConversionPattern=%4d{yyyy-MM-dd HH:mm:ss} %-5p [%-15.15t] - %c - %m%n
# CONSOLE
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.sonatype.nexus.log4j.ConcisePatternLayout
log4j.appender.console.layout.ConversionPattern=%4d{yyyy-MM-dd HH:mm:ss} %-5p [%-15.15t] - %c - %m%n

# DO NOT TOUCH!
# This is used by nexus to record all error and warning logs
log4j.appender.record=org.sonatype.nexus.log.ErrorWarningRecordAppender

Delete-file-icon.png Purge des logs

Le précédent paragraphe explique l'emplacement des fichiers de log. L'appender utilisé est DailyRollingFileAppender qui effectue une rotation journalière. Ce qui empèche donc l'utilisation de Logrotate pour purger ces fichiers de log. Il faut donc utiliser un autre moyen pour purger les fichiers de log. L'utilisation de la crontab, ou anacron pour Ubuntu, va permettre de réaliser cette purge.

Pour cela, nous utiliserons la commande find avec l'argument -mtime

find /var/log/nexus/ -name "nexus.log.*" -type f -mtime +7 -exec rm -f {} \;

La commande find est exécutée sur le répertoire /var/log/nexus, pour rechercher les fichiers dont le nom commence par nexus.log., de type fichier et dont la date de modification est de plus de 7 jours par rapport à la date courante. La commande rm -f est exécutée sur chacun des résultats. Pour cela, un script est créé à l'emplacement /var/opt/nexus/nexus_log_purge.sh:

#sudo mkdir /var/opt/nexus
#sudo touch /var/opt/nexus/nexus_log_purge.sh
#sudo vi /var/opt/nexus/nexus_log_purge.sh
#sudo chmod 755 /var/opt/nexus
#sudo chmod 766 /var/opt/nexus/nexus_log_purge.sh
#sudo ln -s /var/opt/nexus/nexus_log_purge.sh /etc/cron.weekly/nexus_log_purge

Il est important de mettre en place les sécurités sur ces scripts. En effet, ceux ci sont exécuté en root. Une modification de ces scripts pourrait être catastrophique, en cas de mise en place de purge.

Le contenu du script est le suivant:

#!/bin/sh
#

test -e /var/log/nexus || exit 0
find /var/log/nexus/ -name "nexus.log.*" -type f -mtime +7 -exec rm -f {} \;

exit 0

La première commande permet de vérifier l’existence du répertoire /var/log/nexus.

Ce principe de purge de fichiers de logs est également mis en place pour les instance de Tomcat, lors de l'installation sur une machine Ubuntu. Un second script peut en être inspiré, donnant le contenu suivant:

#!/bin/sh

# Default for number of days to keep old log files in /var/log/tomcatN/
LOGFILE_DAYS=7

if [ -d /var/log/nexus ]; then
        find /var/log/nexus/ -name "nexus.log.*" -type f -mtime +$LOGFILE_DAYS -print0 \
                | xargs --no-run-if-empty -0 rm --
fi


Puis il faut planifier ce script pour une exécution hebdomadaire, voir Anacron:

#sudo ln -s /var/opt/nexus/nexus_log_purge.sh /etc/cron.weekly/nexus_log_purge

Configuration-icon.png Publication sous Apache

Update icon.png Update

1.7.1 → 1.8.0.1 1.8.0.1 → 1.9.1 1.9.1 → 1.9.2 1.9.2 → 1.9.2.3 1.9.2.3 → 1.9.2.4
1.9.2.4 → 2.0.4-1 2.0.4-1 → 2.0.5 2.0.5 → 2.0.6 2.0.6 → 2.1.1 2.1.1 → 2.1.2
2.1.2 → 2.2 2.2 → 2.3 2.3 → 2.3.1 2.3.1 → 2.4 2.4 → 2.5
2.5 → 2.5.1 2.5.1 → 2.6 2.6 → 2.6.1 2.6.1 → 2.6.2 2.6.2 → 2.6.3
2.6.3 → 2.6.4 2.6.4 → 2.7 2.7 → 2.7.1 2.7.1 → 2.7.2 2.7.2 → 2.8.0
2.8.0 → 2.8.1 2.8.1 → 2.9.0 2.9.0 → 2.9.1 2.9.1 → 2.10.0 2.10.0 → 2.11.1
2.11.1 → 2.11.2 2.11.2 → 2.11.3 2.11.3 → 2.11.4 2.11.4 → 2.12.0 2.12.0 → 2.13.0


System-Install-icon.png Installation service

A partir de la version 2.14, l'installation en service est quasiment obligatoire. Il serait trop ocmpliqué de reproduire les paramétrages de l'application sous Tomcat.

2.13.0 → 2.14.0 2.14.0 → 2.14.1


Scheduled-Tasks-icon.png Service

Logo Nexus3.png Nexus 3

La version 3.0.X ne permettait pas une synchronisation des données depuis une version 2.X. La version 3.1.X a été attendu et installé à l'aide de la procédure suivante.

2.14.1 → 3.1.0


Bug-icon.png Bug démarrage

Dans le cadre de cette installation et après différentes montées de version, Ubuntu 16.04 / Tomcat, le mesage d'erreur suivant était affiché dans la log d'exécution catalina.out de Tomcat, à l'emplacement /var/log/tomcat7/catalina.out.

2016-05-10 17:13:18 INFO  [ost-startStop-1] - org.sonatype.nexus.NxApplication - Activating locally installed plugins...
2016-05-10 17:13:29 WARN  [ost-startStop-1] - Sisu - Problem adding: org.eclipse.sisu.inject.LazyBeanEntry@5db793c9 to:
org.apache.shiro.web.filter.mgt.DefaultFilterChainManager@18137088 via: 
org.sonatype.security.web.guice.SecurityWebModule$FilterChainManagerProvider@5e3e9155
java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
        at org.apache.catalina.core.ApplicationContext.getInitParameterNames(ApplicationContext.java:368) ~[tomcat-catalina-7.0.68.jar:7.0.68]
        at org.apache.catalina.core.ApplicationContextFacade.getInitParameterNames(ApplicationContextFacade.java:367) ~[tomcat-catalina-7.0.68.jar:7.0.68]
        at org.sonatype.security.web.guice.SecurityWebModule$SimpleFilterConfig.getInitParameterNames(SecurityWebModule.java:225) ~[nexus-security-2.12.0-01.jar:2.12.0-01]
        at com.sun.jersey.spi.container.servlet.WebFilterConfig.getInitParameterNames(WebFilterConfig.java:79) ~[na:na]

Le problème provient de la fonction keySet sur la classe ConcurrentHashMap appelée depuis org.apache.catalina.core.ApplicationContext.getInitParameterNames. La signature utilisée est disponible avec la version 1.8 de Java, hors l'instance était sur une 1.7. Il est donc nécessaire d'installer la version 1.8.


Viewer icon.png Voir aussi

Documentation officielle: http://www.sonatype.com/books/nexus-book/reference