Installation Nexus
Cet article présente l'installation de Nexus sur une machine Ubuntu et en mode autonome.
Sommaire
Votre avis
Nobody voted on this yet
|
|
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
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: Déploiement de l'archive nexus.war de l'application web 3 juil. 2010 19:05:05 org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(/var/lib/tomcat6/webapps/nexus/WEB-INF/lib/servlet-api-2.5-6.1.12.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class log4j:WARN No appenders could be found for logger (org.sonatype.appcontext.AppContext). log4j:WARN Please initialize the log4j system properly. 3 juil. 2010 19:05:10 org.apache.catalina.core.StandardContext start GRAVE: Error listenerStart 3 juil. 2010 19:05:10 org.apache.catalina.core.StandardContext start GRAVE: Erreur de démarrage du contexte [/nexus] suite aux erreurs précédentes 3 juil. 2010 19:05:10 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap GRAVE: A web application created a ThreadLocal with key of type [null] (value [com.google.inject.internal.InjectorImpl$1@fdb413]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@396fce]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed.
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:
3 juil. 2010 19:12:09 org.apache.catalina.startup.HostConfig deployWAR INFO: Déploiement de l'archive nexus.war de l'application web log4j:WARN No appenders could be found for logger (org.sonatype.appcontext.AppContext). log4j:WARN Please initialize the log4j system properly. 3 juil. 2010 19:12:15 org.apache.catalina.core.StandardContext start GRAVE: Error listenerStart 3 juil. 2010 19:12:15 org.apache.catalina.core.StandardContext start GRAVE: Erreur de démarrage du contexte [/nexus] suite aux erreurs précédentes
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:
3 juil. 2010 19:12:10 org.apache.catalina.core.ApplicationContext log INFO: Loading plexus configuration from: 'jndi:/localhost/nexus/WEB-INF/plexus.xml' 3 juil. 2010 19:12:11 org.apache.catalina.core.StandardContext listenerStart GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.sonatype.nexus.web.LogConfigListener java.lang.IllegalStateException: Could not create default log4j.properties into /usr/share/tomcat6/sonatype-work/nexus/conf/log4j.properties at org.sonatype.nexus.web.LogConfigListener.ensureLogConfigLocation(LogConfigListener.java:130) at org.sonatype.nexus.web.LogConfigListener.contextInitialized(LogConfigListener.java:53) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Caused by: java.io.FileNotFoundException: /usr/share/tomcat6/sonatype-work/nexus/conf/log4j.properties (No such file or directory) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:131) at org.codehaus.plexus.util.FileUtils.copyStreamToFile(FileUtils.java:1058) at org.codehaus.plexus.util.FileUtils.copyURLToFile(FileUtils.java:1018) at org.sonatype.nexus.web.LogConfigListener.ensureLogConfigLocation(LogConfigListener.java:126) ... 25 more
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:
log4j:WARN No appenders could be found for logger (org.sonatype.appcontext.AppContext). log4j:WARN Please initialize the log4j system properly. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /usr/share/tomcat6/sonatype-work/nexus/logs/nexus.log (No such file or directory) at java.io.FileOutputStream.openAppend(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:177) at java.io.FileOutputStream.<init>(FileOutputStream.java:102) at org.apache.log4j.FileAppender.setFile(FileAppender.java:289) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:215) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:132) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:316) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:324) at org.sonatype.nexus.web.LogConfigListener.initializeLogConfig(LogConfigListener.java:137) at org.sonatype.nexus.web.LogConfigListener.contextInitialized(LogConfigListener.java:55) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) log4j:ERROR Either File or DatePattern options are not set for appender [logfile]. 2010-07-03 19:45:12 INFO [main ] - o.s.n.t.DefaultNexu~ - Initializing Nexus Timeline... 2010-07-03 19:45:12 INFO [main ] - o.s.t.DefaultTimeli~ - Failed to configure timeline index, trying to repair it. 2010-07-03 19:45:12 ERROR [main ] - o.s.n.t.DefaultNexu~ - Problem starting: org.sonatype.nexus.timeline.DefaultNexusTimeline@1ce64f6 java.lang.IllegalArgumentException: /usr/share/tomcat6/sonatype-work/nexus/timeline/index does not exist at org.codehaus.plexus.util.FileUtils.cleanDirectory(FileUtils.java:1484) at org.sonatype.timeline.DefaultTimeline.repairTimelineIndexer(DefaultTimeline.java:76) at org.sonatype.timeline.DefaultTimeline.configure(DefaultTimeline.java:65) at org.sonatype.nexus.timeline.DefaultNexusTimeline.configure(DefaultNexusTimeline.java:122) at org.sonatype.nexus.timeline.DefaultNexusTimeline.updateConfiguration(DefaultNexusTimeline.java:116) at org.sonatype.nexus.timeline.DefaultNexusTimeline.initialize(DefaultNexusTimeline.java:51) at org.codehaus.plexus.PlexusLifecycleManager.manage(PlexusLifecycleManager.java:162) at org.sonatype.guice.plexus.binders.PlexusBeanBinder.afterInjection(PlexusBeanBinder.java:77) at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:96) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:198) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:833) at org.sonatype.guice.plexus.binders.DeferredProvider.get(DeferredProvider.java:60) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.Scopes$1$1.get(Scopes.java:64) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at org.sonatype.guice.plexus.locators.LazyBean.getValue(LazyBean.java:62) at org.sonatype.guice.plexus.binders.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:207) at org.sonatype.guice.plexus.binders.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:50) at org.sonatype.guice.bean.inject.BeanInjector.injectMembers(BeanInjector.java:54) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:119) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:89) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:198) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:833) at org.sonatype.guice.plexus.binders.DeferredProvider.get(DeferredProvider.java:60) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.Scopes$1$1.get(Scopes.java:64) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at org.sonatype.guice.plexus.locators.LazyBean.getValue(LazyBean.java:62) at org.sonatype.guice.plexus.binders.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:207) at org.sonatype.guice.plexus.binders.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:50) at org.sonatype.guice.bean.inject.BeanInjector.injectMembers(BeanInjector.java:54) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:119) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:89) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:198) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:833) at org.sonatype.guice.plexus.binders.DeferredProvider.get(DeferredProvider.java:60) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.Scopes$1$1.get(Scopes.java:64) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:844) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at org.sonatype.guice.plexus.locators.LazyBean.getValue(LazyBean.java:62) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:191) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:183) at org.sonatype.nexus.web.NexusBooterListener.contextInitialized(NexusBooterListener.java:43) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2010-07-03 19:45:12 INFO [main ] - o.s.n.DefaultNexus - ------------------------------------------------- Initializing Nexus (OSS), Version 1.7.0 ------------------------------------------------- 2010-07-03 19:45:12 INFO [main ] - o.s.n.DefaultNexus - Activating locally installed plugins... 2010-07-03 19:45:13 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus:nexus-indexer-lucene-plugin:1.7.0" was successful. 2010-07-03 19:45:13 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins.ldap:nexus-ldap-realm-plugin:1.7.0" was successful. 2010-07-03 19:45:13 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins:nexus-plugin-console-plugin:1.7.0" was successful. 2010-07-03 19:45:13 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins:nexus-rrb-plugin:1.7.0" was successful. 2010-07-03 19:45:13 INFO [main ] - o.s.p.c.e.DefaultEh~ - Creating and configuring EHCache manager with classpath:/ehcache.xml, using disk store 'none' 2010-07-03 19:45:13 INFO [main ] - o.s.n.c.a.DefaultNe~ - Loading Nexus Configuration... 2010-07-03 19:45:13 INFO [main ] - o.s.n.c.s.StaticCon~ - Configuration loaded succesfully. 2010-07-03 19:45:13 WARN [main ] - o.s.n.c.s.FileConfi~ - No configuration file in place, copying the default one and continuing with it. 2010-07-03 19:45:14 INFO [main ] - o.s.n.c.s.FileConfi~ - Loading Nexus configuration from /usr/share/tomcat6/sonatype-work/nexus/conf/nexus.xml 2010-07-03 19:45:14 INFO [main ] - o.s.n.c.s.FileConfi~ - Configuration loaded succesfully. 2010-07-03 19:45:14 INFO [main ] - o.s.n.c.v.DefaultAp~ - Nexus configuration validated succesfully. 2010-07-03 19:45:15 INFO [main ] - o.s.n.c.a.DefaultNe~ - Applying Nexus Configuration... 2010-07-03 19:45:15 WARN [main ] - o.s.s.c.s.FileSecur~ - No configuration file in place, copying the default one and continuing with it. 2010-07-03 19:45:15 INFO [main ] - o.s.s.c.s.FileSecur~ - Loading Security configuration from /usr/share/tomcat6/sonatype-work/nexus/conf/security-configuration.xml 2010-07-03 19:45:15 INFO [main ] - o.s.n.p.r.DefaultRe~ - Registered default repository types. 2010-07-03 19:45:15 ERROR [main ] - o.s.n.e.IndexingRep~ - Could not maintain indexing contexts! java.io.IOException: Cannot create directory: /usr/share/tomcat6/sonatype-work/nexus/indexer/central-local at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:175) at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:157) at org.sonatype.nexus.index.context.DefaultIndexingContext.<init>(DefaultIndexingContext.java:142) at org.sonatype.nexus.index.DefaultNexusIndexer.addIndexingContextForced(DefaultNexusIndexer.java:96) at org.sonatype.nexus.index.DefaultIndexerManager.addRepositoryIndexContext(DefaultIndexerManager.java:300) at org.sonatype.nexus.events.IndexingRepositoryRegistryRepositoryEventInspector.inspectForIndexerManager(IndexingRepositoryRegistryRepositoryEventInspector.java:111) at org.sonatype.nexus.events.IndexingRepositoryRegistryRepositoryEventInspector.inspect(IndexingRepositoryRegistryRepositoryEventInspector.java:96) at org.sonatype.nexus.events.DefaultEventInspectorHost.processEvent(DefaultEventInspectorHost.java:48) at org.sonatype.nexus.events.DefaultEventInspectorHost.onEvent(DefaultEventInspectorHost.java:62) at org.sonatype.plexus.appevents.AbstractSimpleEventMulticaster.notifyEventListeners(AbstractSimpleEventMulticaster.java:55) at org.sonatype.nexus.proxy.registry.DefaultRepositoryRegistry.insertRepository(DefaultRepositoryRegistry.java:242) at org.sonatype.nexus.proxy.registry.DefaultRepositoryRegistry.addRepository(DefaultRepositoryRegistry.java:77) at org.sonatype.nexus.configuration.application.DefaultNexusConfiguration.instantiateRepository(DefaultNexusConfiguration.java:509) at org.sonatype.nexus.configuration.application.DefaultNexusConfiguration.createRepositories(DefaultNexusConfiguration.java:472) at org.sonatype.nexus.configuration.application.DefaultNexusConfiguration.createInternals(DefaultNexusConfiguration.java:454) at org.sonatype.nexus.DefaultNexus.startService(DefaultNexus.java:685) at org.sonatype.nexus.DefaultNexus.start(DefaultNexus.java:647) at org.codehaus.plexus.PlexusLifecycleManager.manage(PlexusLifecycleManager.java:166) at org.sonatype.guice.plexus.binders.PlexusBeanBinder.afterInjection(PlexusBeanBinder.java:77) at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:96) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:198) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:833) at org.sonatype.guice.plexus.binders.DeferredProvider.get(DeferredProvider.java:60) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:851) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.Scopes$1$1.get(Scopes.java:64) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:798) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:844) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:794) at org.sonatype.guice.plexus.locators.LazyBean.getValue(LazyBean.java:62) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:191) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:183) at org.sonatype.nexus.web.NexusBooterListener.contextInitialized(NexusBooterListener.java:43) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2010-07-03 19:45:15 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='central' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 19:45:15 ERROR [main ] - o.s.n.e.IndexingRep~ - Could not maintain indexing contexts! java.io.IOException: Cannot create directory: /usr/share/tomcat6/sonatype-work/nexus/indexer/google-local at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:175) at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:157) at org.sonatype.nexus.index.context.DefaultIndexingContext.<init>(DefaultIndexingContext.java:142) . . .
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:
INFO: Déploiement de l'archive nexus.war de l'application web log4j:WARN No appenders could be found for logger (org.sonatype.appcontext.AppContext). log4j:WARN Please initialize the log4j system properly. 2010-07-03 20:00:08 INFO [main ] - o.s.n.t.DefaultNexu~ - Initializing Nexus Timeline... 2010-07-03 20:00:08 INFO [main ] - o.s.n.DefaultNexus - ------------------------------------------------- Initializing Nexus (OSS), Version 1.7.0 ------------------------------------------------- 2010-07-03 20:00:08 INFO [main ] - o.s.n.DefaultNexus - Activating locally installed plugins... 2010-07-03 20:00:09 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus:nexus-indexer-lucene-plugin:1.7.0" was successful. 2010-07-03 20:00:09 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins.ldap:nexus-ldap-realm-plugin:1.7.0" was successful. 2010-07-03 20:00:09 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins:nexus-plugin-console-plugin:1.7.0" was successful. 2010-07-03 20:00:09 INFO [main ] - o.s.n.DefaultNexus - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins:nexus-rrb-plugin:1.7.0" was successful. 2010-07-03 20:00:09 INFO [main ] - o.s.p.c.e.DefaultEh~ - Creating and configuring EHCache manager with classpath:/ehcache.xml, using disk store 'none' 2010-07-03 20:00:10 INFO [main ] - o.s.n.c.a.DefaultNe~ - Loading Nexus Configuration... 2010-07-03 20:00:10 INFO [main ] - o.s.n.c.s.StaticCon~ - Configuration loaded succesfully. 2010-07-03 20:00:10 INFO [main ] - o.s.n.c.s.FileConfi~ - Loading Nexus configuration from /usr/share/tomcat6/sonatype-work/nexus/conf/nexus.xml 2010-07-03 20:00:10 INFO [main ] - o.s.n.c.s.FileConfi~ - Configuration loaded succesfully. 2010-07-03 20:00:10 INFO [main ] - o.s.n.c.v.DefaultAp~ - Nexus configuration validated succesfully. 2010-07-03 20:00:11 INFO [main ] - o.s.n.c.a.DefaultNe~ - Applying Nexus Configuration... 2010-07-03 20:00:11 INFO [main ] - o.s.s.c.s.FileSecur~ - Loading Security configuration from /usr/share/tomcat6/sonatype-work/nexus/conf/security-configuration.xml 2010-07-03 20:00:11 INFO [main ] - o.s.n.p.r.DefaultRe~ - Registered default repository types. 2010-07-03 20:00:11 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='central' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='google' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='java.net-m2' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='java.net-m1' (contentClass='maven1', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='apache-snapshots' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='codehaus-snapshots' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenProxyRepository') 2010-07-03 20:00:12 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='releases' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenHostedRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='snapshots' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenHostedRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='thirdparty' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenHostedRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='central-m1' (contentClass='maven1', mainFacet='org.sonatype.nexus.proxy.maven.MavenShadowRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='java.net-m1-m2' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.maven.MavenShadowRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.r.DefaultRe~ - Added repository ID='public' (contentClass='maven2', mainFacet='org.sonatype.nexus.proxy.repository.GroupRepository') 2010-07-03 20:00:13 INFO [main ] - o.s.s.DefaultTaskCo~ - 0 task(s) to load. 2010-07-03 20:00:13 INFO [main ] - o.s.n.DefaultNexus - Nexus Work Directory : /usr/share/tomcat6/sonatype-work/nexus 2010-07-03 20:00:13 INFO [main ] - o.s.n.DefaultNexus - Started Nexus (version 1.7.0 OSS) 2010-07-03 20:00:13 INFO [main ] - o.s.n.p.a.DefaultAt~ - Attribute storage directory does not exists, creating it here: /usr/share/tomcat6/sonatype-work/nexus/proxy/attributes 2010-07-03 20:00:13 INFO [main ] - o.s.s.m.s.FileModel~ - Loading Security configuration from /usr/share/tomcat6/sonatype-work/nexus/conf/security.xml 2010-07-03 20:00:14 INFO [main ] - o.s.s.w.PlexusConfi~ - SecurityManager with role='org.sonatype.security.PlexusSecurityManager' and roleHint='web' found in Plexus.
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
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
Publication sous Apache
Update
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 |
Service
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 | 3.1.0 → 3.2.0 | 3.2.0 → 3.2.1 | 3.2.1 → 3.3.0 | 3.3.0 → 3.3.1 |
3.3.1 → 3.3.2 | 3.3.2 → 3.4.0 | 3.4.0 → 3.5.0 | 3.5.0 → 3.5.1 | 3.5.1 → 3.5.2 |
3.5.2 → 3.6.0 | 3.6.0 → 3.6.1 | 3.6.1 → 3.6.2 | 3.6.2 → 3.7.0 Il est recommandé d'installer la version 3.7.1. |
3.7.0 → 3.7.1 |
3.7.1 → 3.8.0 | 3.8.0 → 3.9.0 Apporte enfin l'upload d'artéfact. |
3.9.0 → 3.10.0 | 3.10.0 → 3.11.0 | 3.11.0 → 3.12.0 Contient un bug critique sur le versement de paquet Maven. |
3.12.0 → 3.12.1 | 3.12.1 → 3.13.0 | 3.13.1 → 3.14.0 |
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.
Voir aussi
Documentation officielle: http://www.sonatype.com/books/nexus-book/reference