Seit einiger Zeit arbeite ich nun mit Maven, einem hervorragenden Tool zur Unterstützung des Entwicklungsprozesses. Die meisten Abhängigkeiten wie etwa Hibernate oder log4j können aus den zentralen Repositories bezogen werden. Leider sind diese zum einen relativ langsam und zum anderen sind doch nicht alle Dependencies dort vorhanden. Genau für diesen Anwendungsfall gibt es Proxies, die die verwendeten Abhängigkeiten zwischenspeichern und eigene Abhängigkeiten bereitstellen können. Im Folgenden soll nun die Einrichtung von Nexus unter Gentoo (geht aber auch bestimmt unter anderen OS) gezeigt werden.

2167-nexus-01
Es geht los mit der Installation von einer Java VM. Mittels:

java -version

wird dann überprüft, welche Version installiert wurde. Ich habe derzeit 1.6.0_11 installiert, wie man auch im Bild erkennen kann.

Weiter geht es mit dem Download  und Entpacken von Nexus, derzeit in der Version 1.3.1.1:

1
2
3
4
cd /usr/local/
wget http://nexus.sonatype.org/downloads/nexus-webapp-1.3.1.1-bundle.tar.gz
tar xfvz nexus-webapp-1.3.1.1-bundle.tar.gz
ln -s nexus-webapp-1.3.1.1 nexus

Der letzte Symlink dient für das einfache updaten der Applikation und solle unbedingt so gemacht werden.

Jetzt brauchen wir noch das Init-Script für den Start des Servers:

1
2
cp /usr/local/nexus/bin/jsw/linux-x86-32/nexus /etc/init.d/
chmod 755 /etc/init.d/nexus

Dieses Skript muss man noch ein wenig editieren, unten findet sich ein Komplettbeispiel:

  • Füge eine Variable namens NEXUS_HOME ein, welche auf das Nexus-Installationsverzeichnis zeigt
  • Füge eine Variable namens PLATFORM welche entweder linux-x86-32, linux-x86-64, oder linux-ppc-64 als Inhalt hat.
  • Ändere WRAPPER_CMD auf: ${NEXUS_HOME}/bin/jsw/${PLATFORM}/wrapper
  • Ändere WRAPPER_CONF auf ${NEXUS_HOME}/conf/wrapper.conf
  • Ändere PIDDIR auf /var/run
  • Sofern nicht vorhanden, füge eine Variable JAVA_HOME in der Datei hinzu, die auf die lokale Java-Installation zeigt. Ob diese vorhanden ist, lässt sich in der Kommandozeile mittels echo $JAVA_HOME herausfinden.
  • Füge ${JAVA_HOME}/bin zur Umgebungsvariable PATH hinzu
  • Optional: RUN_AS_USER auf “nexus” setzen, den Nutzer nexus im System anlegen und die Nexus-verzeichnisse entsprechend chownen

Beispiel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
DEF_APP_NAME="testwrapper"
DEF_APP_LONG_NAME="Test Wrapper Sample Application"
APP_NAME="nexus-webapp"
APP_LONG_NAME="Sonatype Nexus Repository Manager"
PATH=${PATH}:${JAVA_HOME}/bin
NEXUS_HOME="/usr/local/nexus"
PLATFORM="linux-x86-32"
WRAPPER_CMD="${NEXUS_HOME}/bin/jsw/${PLATFORM}/wrapper"
WRAPPER_CONF="${NEXUS_HOME}/conf/wrapper.conf"
PRIORITY=
PIDDIR="/var/run/"

Unter Gentoo fügt man Nexus nun zum Startvorgang so hinzu:

1
rc-update add nexus default

Ein paar Settings (z.B. Port) kann man hier noch ändern:

1
nano /usr/local/nexus/conf/plexus.properties

Meine plexus.properties sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
application-port=8081
application-host=127.0.0.1
runtime=${basedir}/runtime
apps=${runtime}/apps
nexus-work=${basedir}/../sonatype-work/nexus
webapp=${runtime}/apps/nexus/webapp
webapp-context-path=/
security-xml-file=${nexus-work}/conf/security.xml
application-conf=${nexus-work}/conf

# If this file is present, it will be used to configure Jetty.
jetty.xml=${basedir}/conf/jetty.xml

Dabei habe ich application-host auf “127.0.0.1” geändert, damit dieser nur lokal erreichbar ist und den webapp-context-path auf “/”, damit Nexus ohne “/nexus/” in der URL erreichbar ist.

Damit ich jedoch nicht den hässlichen Port 8081 an die Öffentlichkeit herausgeben muss, habe ich mich entschlossen Nexus per Apache Proxy durchzuschleusen.

Daher wird nun der Apache konfiguriert. Als zusätzliche APACHE_MODULES benötigen wir “proxy” und “proxy_http” in “/etc/make.conf”. Anschließend muss der Apache gegebenenfalls neu emerged werden.

Kommen wir zur Vhost-Konfiguration, die unter “/etc/apache2/vhosts.d/98_nexus.conf” abgelegt wird und wie folgt aussieht:

1
2
3
4
5
6
7
8
ProxyRequests Off
ProxyPreserveHost On

 ServerName YOURDOMAINNAME.TLD
 ProxyPass / http://127.0.0.1:8081/
 ProxyPassReverse / http://127.0.0.1:8081/
 ErrorLog "/var/log/nexus/nexus-error.log"
 CustomLog "/var/log/nexus/nexus-access.log" combined

Wobei YOURDOMAINNAME.TLD für die (sub)domain steht, unter der Nexus erreichbar sein soll. Wenn man oben in der plexus.properties den Port geändert hat, muss man diesen natürlich hier auch anpassen.

2167-nexus-2

Jetzt starten wir mal Nexus (/etc/init.d/nexus start)und Apache und loggen uns auf YOURDOMAINNAME.TLD in das Repository ein. Oben rechts kann man sich mit den folgenden Defaultdaten einloggen:

User: admin Passwort: admin123

2167-nexus-3

Diese Daten sollte man, da diese per Default bei jeder Installation eingetragen sind, schnellstmöglichst ändern. Gleichzeitig sollte man bei diesem User auch eine gültige Mailadresse eintragen, da dieser sozusagen der “root” für nexus ist und man darüber im Falle des Falles ein neues Passwort anfordern kann (und das möchte man ja erhalten :) ).

2167-nexus-4

Damit kommen wir auch zum nächsten Punkt, den SMTP-Einstellungen, ohne die der Mailversand (nachvollziehbar) nicht funktioniert. Diese sind über “Administration” -> “Server” erreichbar. Stelle sicher, dass die eingetragenen Daten absolut korrekt sind, sonst können keine Passwörter angefordert werden. Den Useragent von Nexus sollte man nicht ändern, da darüber die Remote-Repositories die Zugriffe filtern und priorisieren können.

2167-nexus-5

Nexus kommt von haus aus mit Einträgen für drei zentrale Repositories, die da lauten:

Die Settings für diese Repositories kann man jedoch noch etwas verfeinern.

2167-nexus-6

Um diese durchsuchen zu können, muss die Indizierung dieser Repositories eingeschalten werden. Dazu klickt man auf “Repositories” im Administrationsmenü und auf das entsprechende Repository. Dann geht auf “Repository Config” und schaltet bei den entsprechenden Repositories “Download Remote Indexes” auf “true”. Dann macht man einen Rechtsklick auf den Namen des Repositories und klickt “Re-index”, was dann ein paar Minuten später in einem aufgebauten Index resultieren wird.

2167-nexus-7

Im gleichen Einstellungsdialog kann man auch die “Expiration Settings” für den Proxy ändern. Maven hält jedes Artifact und dessen Metadaten in einem lokalen Cache bereit. Über die “Expiration Settings” kann man nun einstellen, wie lange diese dort gespeichert werden sollen. Nach Ablauf dieser Zeit werden die Artifacte oder Metadaten erneut bei Bedarf aus dem zentralen Repository geholt.

Damit steht Nexus, das Hochladen eigener Artifakte werden in einem neuen Tutorial beschrieben. Die Verwendung von Nexus in der pom.xml von Maven ist in diesem Tutorial beschrieben.