Nexus on FreeBSD

Sonatype/Nexus est un logiciel écrit en JAVA permettant d’offrir une puissance interface de gestion à vos développeurs JAVA pour gérer leurs repositories au format Maven. Sonatype fournit des packages permettant d’installer une version embarquée de nexus utilisant Jetty pour Linux, Solaris, Windows et Mac OSX, mais pas FreeBSD. Il n’est pas non plus disponible dans l’arbre de ports.

Préparation de l’OS

Nous allons utiliser la couche d’emulation Linux 32bits afin de pouvoir lancer le wrapper linux de nexus, en espérant une version native FreeBSD un jour. Dans un premier temps on charge le module de compatibilité linux et on l’active au démarrage

kldload linux
sysrc linux_enable=YES

Puis on déclare utiliser un kernel 2.6.32

sysctl compat.linux.osrelease=2.6.32
echo "compat.linux.osrelease=2.6.32" > /etc/sysctl.conf

Enfin on installe le port de compatiblité centos6

cd /usr/ports/emulator/linux_base-c6
make install

ou encore au format binaire

pkg install linux_base-c6

Téléchargement et extraction

Téléchargez la dernière version de nexus présente ici.

fetch http://download.sonatype.com/nexus/oss/nexus-2.11.1-01-bundle.tar.gz

On va maintenant créer le répertoire d’installation de nexus

mkdir -p /usr/local/sonatype /usr/local/sonatype-work

Et enfin on extrait l’archive

tar xvzf nexus-2.11.1-01-bundle.tar.gz -C /usr/local/sonatype

Droits

Afin de lancer proprement nexus, nous allons utiliser l’utilisateur www et le groupe www. On applique les droits sur les répertoires dans lesquels nexus a besoin d’écrire

chown -R www:www /usr/local/sonatype/nexus-2.11.1-01/logs
chown -R www:www /usr/local/sonatype/nexus-2.11.1-01/tmp
chown -R www:www /usr/local/sonatype/sonatype-work

Tricher avec le lanceur

On va faire croire au lanceur que notre version de FreeBSD est en fait un Linux 32 bits afin de pouvoir utiliser le wrapper et la couche d’émulation Linux 32 bits.

ln -s /usr/local/sonatype/nexus-2.11.1-01/bin/jsw/linux-x86-32/ /usr/local/sonatype/nexus-2.11.1-01/bin/jsw/freebsd-x86_64

Enfin on créer un fichier de PID qu’on va attribuer à l’utilisateur www /usr/local/sonatype/nexus-2.11.1-01/bin/../bin/jsw/freebsd-x86-64/nexus.pid

touch /usr/local/sonatype/nexus-2.11.1-01/bin/../bin/jsw/freebsd-x86-64/nexus.pid
chown www:www /usr/local/sonatype/nexus-2.11.1-01/bin/../bin/jsw/freebsd-x86-64/nexus.pid

Lanceur FreeBSD

Pour finir on créée un fichier de démarrage /usr/local/etc/rc.d/nexusd

#!/bin/sh
#

# PROVIDE: nexusd
# REQUIRE: LOGIN
# BEFORE:  securelevel
# KEYWORD: shutdown

# Add the following lines to /etc/rc.conf to enable `nexusd':
#
# nexusd_enable="YES"
#

. /etc/rc.subr

name="nexusd"
rcvar=nexusd_enable

command="/usr/local/sonatype/nexus-2.11.1-01/bin/nexus"
mypidfile="/usr/local/sonatype/nexus-2.11.1-01/bin/jsw/freebsd-x86-64/nexus.pid"
nexusd_user="www"

start_precmd="nexus_precmd"
start_arg=$1

# read configuration and set defaults
load_rc_config "$name"
: ${nexusd_enable="NO"}

nexus_precmd()
{
    touch $mypidfile
    chown $nexusd_user $mypidfile
}

if [ "$start_arg" = "quietstart" ]; then
    start_arg="start"
fi

command_args="$start_arg"
run_rc_command "$start_arg"

On lui attribue les droits d’exécution et on peut désormais lancer nexus

chmod +x /usr/local/etc/rc.d/nexusd
sysrc nexusd_enable=YES
service nexusd start

Conclusion

Vous pouvez désormais installer nexus sur vos serveurs FreeBSD. L’installation n’est pas triviale mais cela a le mérite de fonctionner.