From: Mathieu Baudier Date: Wed, 12 Oct 2011 19:23:16 +0000 (+0000) Subject: RPM packaging of OSGi boot X-Git-Tag: argeo-commons-2.1.30~1110 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=87a5c6c8c109097c8be2412f5a10df2de3a6e0c0;p=lgpl%2Fargeo-commons.git RPM packaging of OSGi boot git-svn-id: https://svn.argeo.org/commons/trunk@4814 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/osgi/dist/osgi-boot/pom.xml b/osgi/dist/osgi-boot/pom.xml new file mode 100644 index 000000000..ffb38c60a --- /dev/null +++ b/osgi/dist/osgi-boot/pom.xml @@ -0,0 +1,131 @@ + + 4.0.0 + + org.argeo.commons.osgi + 0.3.4-SNAPSHOT + dist + .. + + osgi-boot + pom + Commons OSGi Boot Distribution + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + jar + true + ${project.build.directory}/lib + + + + + + org.codehaus.mojo + rpm-maven-plugin + 2.1-alpha-1 + true + + ${project.version} + r${buildNumber}.argeo + 2011 Argeo + argeo + mbaudier@argeo.org + Applications/System + /usr + + + + rpm-sdk + package + + attached-rpm + + + + + /etc/osgiboot + root + root + 644 + true + + + src/main/rpm/etc/osgiboot + + * + + + + + + /usr/sbin + root + root + 755 + + + src/main/rpm/usr/sbin + + * + + + + + + /usr/share/osgiboot/lib + root + root + 644 + false + + + ${project.build.directory}/lib + + *.jar + + + + + + + + java + + + + + + + + + + + org.argeo.commons.osgi + org.argeo.osgi.boot + 0.3.4-SNAPSHOT + + + diff --git a/osgi/dist/osgi-boot/src/main/rpm/etc/osgiboot/osgi-service-settings.sh b/osgi/dist/osgi-boot/src/main/rpm/etc/osgiboot/osgi-service-settings.sh new file mode 100644 index 000000000..f5504f811 --- /dev/null +++ b/osgi/dist/osgi-boot/src/main/rpm/etc/osgiboot/osgi-service-settings.sh @@ -0,0 +1 @@ +#JAVA_OPTS=-Xmx256m \ No newline at end of file diff --git a/osgi/dist/osgi-boot/src/main/rpm/usr/sbin/osgi-service b/osgi/dist/osgi-boot/src/main/rpm/usr/sbin/osgi-service new file mode 100644 index 000000000..cbaecf578 --- /dev/null +++ b/osgi/dist/osgi-boot/src/main/rpm/usr/sbin/osgi-service @@ -0,0 +1,80 @@ +#!/bin/sh + +JVM=java +. /etc/osgiboot/osgi-service-settings.sh + +APP=$1 + +CONF_DIR=/etc/$APP +if [ -f $CONF_DIR/settings.sh ];then + . $CONF_DIR/settings.sh +fi + +LIB_DIR=/usr/share/$APP/lib + +# read/write +EXEC_DIR=/var/lib/$APP +DATA_DIR=$EXEC_DIR/data +CONF_RW=$EXEC_DIR/conf +LOG_FILE=/var/log/$APP.log + +RUN_DIR=/var/run +PID_FILE=$RUN_DIR/$APP.pid +SHUTDOWN_FILE=$RUN_DIR/$APP.shutdown + +OSGI_INSTALL_AREA=/usr/share/osgiboot/lib +OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar + +RETVAL=0 + +start() { + cp $CONF_DIR/config.ini $CONF_RW/config.ini + touch $SHUTDOWN_FILE + cd $EXEC_DIR && $JVM \ + -Dosgi.bundles="org.argeo.osgi.boot.jar@start" \ + -Dargeo.osgi.bundles="$CONF_DIR/modules;in=*,$LIB_DIR;in=*" \ + -Dlog4j.configuration="file:$CONF_DIR/log4j.properties" \ + $JAVA_OPTS -jar $OSGI_FRAMEWORK \ + -configuration "$CONF_RW" \ + -data "$DATA_DIR" \ + &> $LOG_FILE & + PID=$! + echo $PID > $PID_FILE + echo Started $APP with pid $PID + return $RETVAL +} + +stop() { + PID=`cat $PID_FILE` + rm -f $SHUTDOWN_FILE + # TODO wait for process to finish until timeout, then kill + echo Stopped $APP with pid $PID + return $RETVAL +} + +# See how we were called. +case "$2" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + sleep 10 + start + RETVAL=$? + ;; + condrestart) + echo Not implemented + exit 1 + ;; + status) + echo Not implemented + exit 1 + ;; + *) + echo $"Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/osgi/dist/osgi-boot/src/main/scripts/postinstall b/osgi/dist/osgi-boot/src/main/scripts/postinstall new file mode 100644 index 000000000..5254e30af --- /dev/null +++ b/osgi/dist/osgi-boot/src/main/scripts/postinstall @@ -0,0 +1,5 @@ +#rm -f /usr/share/osgiboot/lib/org.eclipse.osgi.jar +#ln -vs `ls /usr/share/osgiboot/lib/org.eclipse.osgi-*.jar` /usr/share/osgiboot/lib/org.eclipse.osgi.jar + +#rm -f /usr/share/osgiboot/lib/org.argeo.osgi.boot.jar +#ln -vs `ls /usr/share/osgiboot/lib/org.argeo.osgi.boot-*.jar` /usr/share/osgiboot/lib/org.argeo.osgi.boot.jar diff --git a/osgi/dist/osgi-boot/src/main/scripts/postremove b/osgi/dist/osgi-boot/src/main/scripts/postremove new file mode 100644 index 000000000..5d0ce3866 --- /dev/null +++ b/osgi/dist/osgi-boot/src/main/scripts/postremove @@ -0,0 +1,3 @@ +if [ $1 = "0" ];then + +fi diff --git a/osgi/dist/osgi-boot/src/main/scripts/preremove b/osgi/dist/osgi-boot/src/main/scripts/preremove new file mode 100644 index 000000000..872f36041 --- /dev/null +++ b/osgi/dist/osgi-boot/src/main/scripts/preremove @@ -0,0 +1,3 @@ +if [ $1 = "0" ];then + +fi diff --git a/osgi/dist/pom.xml b/osgi/dist/pom.xml new file mode 100644 index 000000000..3bc9421ae --- /dev/null +++ b/osgi/dist/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.argeo.commons + 0.3.4-SNAPSHOT + osgi + .. + + org.argeo.commons.osgi + dist + Commons OSGi Distributions + pom + + osgi-boot + + \ No newline at end of file diff --git a/osgi/pom.xml b/osgi/pom.xml index 5fb919ac2..0d511b9a2 100644 --- a/osgi/pom.xml +++ b/osgi/pom.xml @@ -14,5 +14,6 @@ runtime plugins dep + dist \ No newline at end of file diff --git a/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/Activator.java b/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/Activator.java index 9eecf6cbd..1d09d57a0 100644 --- a/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/Activator.java +++ b/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/Activator.java @@ -26,7 +26,12 @@ import org.osgi.framework.BundleContext; */ public class Activator implements BundleActivator { - public void start(BundleContext bundleContext) throws Exception { + public void start(final BundleContext bundleContext) throws Exception { + // admin thread + Thread adminThread = new AdminThread(bundleContext); + adminThread.start(); + + // bootstrap OsgiBoot osgiBoot = new OsgiBoot(bundleContext); osgiBoot.bootstrap(); } diff --git a/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/AdminThread.java b/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/AdminThread.java new file mode 100644 index 000000000..b0144a95c --- /dev/null +++ b/osgi/runtime/org.argeo.osgi.boot/src/main/java/org/argeo/osgi/boot/AdminThread.java @@ -0,0 +1,53 @@ +package org.argeo.osgi.boot; + +import java.io.File; + +import org.osgi.framework.BundleContext; +import org.osgi.framework.launch.Framework; + +/** Monitors the runtime and can shut it down. */ +public class AdminThread extends Thread { + public final static String PROP_ARGEO_OSGI_SHUTDOWN_FILE = "argeo.osgi.shutdownFile"; + private File shutdownFile; + private final BundleContext bundleContext; + + public AdminThread(BundleContext bundleContext) { + super("OSGi Boot Admin"); + this.bundleContext = bundleContext; + if (System.getProperty(PROP_ARGEO_OSGI_SHUTDOWN_FILE) != null) { + shutdownFile = new File( + System.getProperty(PROP_ARGEO_OSGI_SHUTDOWN_FILE)); + if (!shutdownFile.exists()) { + shutdownFile = null; + OsgiBootUtils.warn("Shutdown file " + shutdownFile + + " not found, feature deactivated"); + } + } + } + + public void run() { + if (shutdownFile != null) { + // wait for file to be removed + while (shutdownFile.exists()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + Framework framework = (Framework) bundleContext.getBundle(0); + try { + // shutdown framework + framework.stop(); + // wait 10 mins for shutdown + framework.waitForStop(10 * 60 * 1000); + // close VM + System.exit(0); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + } +}