Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
Showing
24 changed files
with
225 additions
and
736 deletions
1 | +package org.onlab.onos.cluster; | ||
2 | + | ||
3 | +import org.onlab.onos.net.DeviceId; | ||
4 | +import org.onlab.onos.net.MastershipRole; | ||
5 | + | ||
6 | +/** | ||
7 | + * Service for administering the inventory of device masterships. | ||
8 | + */ | ||
9 | +public interface MastershipAdminService { | ||
10 | + | ||
11 | + /** | ||
12 | + * Applies the current mastership role for the specified device. | ||
13 | + * | ||
14 | + * @param instance controller instance identifier | ||
15 | + * @param deviceId device identifier | ||
16 | + * @param role requested role | ||
17 | + */ | ||
18 | + void setRole(InstanceId instance, DeviceId deviceId, MastershipRole role); | ||
19 | + | ||
20 | +} |
... | @@ -4,7 +4,7 @@ import org.onlab.onos.event.AbstractEvent; | ... | @@ -4,7 +4,7 @@ import org.onlab.onos.event.AbstractEvent; |
4 | import org.onlab.onos.net.DeviceId; | 4 | import org.onlab.onos.net.DeviceId; |
5 | 5 | ||
6 | /** | 6 | /** |
7 | - * Describes infrastructure device event. | 7 | + * Describes a device mastership event. |
8 | */ | 8 | */ |
9 | public class MastershipEvent extends AbstractEvent<MastershipEvent.Type, DeviceId> { | 9 | public class MastershipEvent extends AbstractEvent<MastershipEvent.Type, DeviceId> { |
10 | 10 | ... | ... |
... | @@ -49,6 +49,6 @@ public interface MastershipService { | ... | @@ -49,6 +49,6 @@ public interface MastershipService { |
49 | * | 49 | * |
50 | * @param listener the mastership listener | 50 | * @param listener the mastership listener |
51 | */ | 51 | */ |
52 | - void removeListemer(MastershipListener listener); | 52 | + void removeListener(MastershipListener listener); |
53 | 53 | ||
54 | } | 54 | } | ... | ... |
1 | +package org.onlab.onos.cluster; | ||
2 | + | ||
3 | +import java.util.Set; | ||
4 | + | ||
5 | +import org.onlab.onos.net.DeviceId; | ||
6 | +import org.onlab.onos.net.MastershipRole; | ||
7 | + | ||
8 | +/** | ||
9 | + * Manages inventory of mastership roles for devices, across controller instances. | ||
10 | + */ | ||
11 | +public interface MastershipStore { | ||
12 | + | ||
13 | + // three things to map: InstanceId, DeviceId, MastershipRole | ||
14 | + | ||
15 | + /** | ||
16 | + * Sets a device's role for a specified controller instance. | ||
17 | + * | ||
18 | + * @param instance controller instance identifier | ||
19 | + * @param deviceId device identifier | ||
20 | + * @param role new role | ||
21 | + * @return a mastership event | ||
22 | + */ | ||
23 | + MastershipEvent setRole( | ||
24 | + InstanceId instance, DeviceId deviceId, MastershipRole role); | ||
25 | + | ||
26 | + /** | ||
27 | + * Adds or updates the mastership information for a device. | ||
28 | + * | ||
29 | + * @param instance controller instance identifier | ||
30 | + * @param deviceId device identifier | ||
31 | + * @param role new role | ||
32 | + * @return a mastership event | ||
33 | + */ | ||
34 | + MastershipEvent addOrUpdateDevice( | ||
35 | + InstanceId instance, DeviceId deviceId, MastershipRole role); | ||
36 | + | ||
37 | + /** | ||
38 | + * Returns the master for a device. | ||
39 | + * | ||
40 | + * @param deviceId the device identifier | ||
41 | + * @return the instance identifier of the master | ||
42 | + */ | ||
43 | + InstanceId getMaster(DeviceId deviceId); | ||
44 | + | ||
45 | + /** | ||
46 | + * Returns the devices that a controller instance is master of. | ||
47 | + * | ||
48 | + * @param instanceId the instance identifier | ||
49 | + * @return a set of device identifiers | ||
50 | + */ | ||
51 | + Set<DeviceId> getDevices(InstanceId instanceId); | ||
52 | + | ||
53 | + /** | ||
54 | + * Returns the role of a device for a specific controller instance. | ||
55 | + * | ||
56 | + * @param instanceId the instance identifier | ||
57 | + * @param deviceId the device identifiers | ||
58 | + * @return the role | ||
59 | + */ | ||
60 | + MastershipRole getRole(InstanceId instanceId, DeviceId deviceId); | ||
61 | +} |
... | @@ -13,7 +13,9 @@ public interface DeviceAdminService { | ... | @@ -13,7 +13,9 @@ public interface DeviceAdminService { |
13 | * | 13 | * |
14 | * @param deviceId device identifier | 14 | * @param deviceId device identifier |
15 | * @param role requested role | 15 | * @param role requested role |
16 | + * @deprecated Will be removed in favor of MastershipAdminService.setRole() | ||
16 | */ | 17 | */ |
18 | + @Deprecated | ||
17 | void setRole(DeviceId deviceId, MastershipRole role); | 19 | void setRole(DeviceId deviceId, MastershipRole role); |
18 | 20 | ||
19 | /** | 21 | /** | ... | ... |
1 | package org.onlab.onos.net.device.impl; | 1 | package org.onlab.onos.net.device.impl; |
2 | 2 | ||
3 | +import com.hazelcast.core.HazelcastInstance; | ||
3 | import org.junit.After; | 4 | import org.junit.After; |
4 | import org.junit.Before; | 5 | import org.junit.Before; |
5 | import org.junit.Test; | 6 | import org.junit.Test; |
... | @@ -23,6 +24,7 @@ import org.onlab.onos.net.device.PortDescription; | ... | @@ -23,6 +24,7 @@ import org.onlab.onos.net.device.PortDescription; |
23 | import org.onlab.onos.net.provider.AbstractProvider; | 24 | import org.onlab.onos.net.provider.AbstractProvider; |
24 | import org.onlab.onos.net.provider.ProviderId; | 25 | import org.onlab.onos.net.provider.ProviderId; |
25 | import org.onlab.onos.event.impl.TestEventDispatcher; | 26 | import org.onlab.onos.event.impl.TestEventDispatcher; |
27 | +import org.onlab.onos.store.StoreService; | ||
26 | import org.onlab.onos.store.device.impl.DistributedDeviceStore; | 28 | import org.onlab.onos.store.device.impl.DistributedDeviceStore; |
27 | 29 | ||
28 | import com.google.common.collect.Iterables; | 30 | import com.google.common.collect.Iterables; |
... | @@ -76,7 +78,6 @@ public class DistributedDeviceManagerTest { | ... | @@ -76,7 +78,6 @@ public class DistributedDeviceManagerTest { |
76 | service = mgr; | 78 | service = mgr; |
77 | admin = mgr; | 79 | admin = mgr; |
78 | registry = mgr; | 80 | registry = mgr; |
79 | - dstore = new DistributedDeviceStore(); | ||
80 | // FIXME should be reading the hazelcast.xml | 81 | // FIXME should be reading the hazelcast.xml |
81 | Config config = new Config(); | 82 | Config config = new Config(); |
82 | // avoid accidentally joining other cluster | 83 | // avoid accidentally joining other cluster |
... | @@ -88,7 +89,7 @@ public class DistributedDeviceManagerTest { | ... | @@ -88,7 +89,7 @@ public class DistributedDeviceManagerTest { |
88 | config.getNetworkConfig().getJoin() | 89 | config.getNetworkConfig().getJoin() |
89 | .getMulticastConfig() | 90 | .getMulticastConfig() |
90 | .setEnabled(false); | 91 | .setEnabled(false); |
91 | - dstore.theInstance = Hazelcast.newHazelcastInstance(config); | 92 | + dstore = new TestDistributedDeviceStore(Hazelcast.newHazelcastInstance(config)); |
92 | dstore.activate(); | 93 | dstore.activate(); |
93 | mgr.store = dstore; | 94 | mgr.store = dstore; |
94 | mgr.eventDispatcher = new TestEventDispatcher(); | 95 | mgr.eventDispatcher = new TestEventDispatcher(); |
... | @@ -280,4 +281,14 @@ public class DistributedDeviceManagerTest { | ... | @@ -280,4 +281,14 @@ public class DistributedDeviceManagerTest { |
280 | } | 281 | } |
281 | } | 282 | } |
282 | 283 | ||
284 | + private class TestDistributedDeviceStore extends DistributedDeviceStore { | ||
285 | + public TestDistributedDeviceStore(final HazelcastInstance hazelcastInstance) { | ||
286 | + storeService = new StoreService() { | ||
287 | + @Override | ||
288 | + public HazelcastInstance getHazelcastInstance() { | ||
289 | + return hazelcastInstance; | ||
290 | + } | ||
291 | + }; | ||
292 | + } | ||
293 | + } | ||
283 | } | 294 | } | ... | ... |
1 | +package org.onlab.onos.store; | ||
2 | + | ||
3 | +import com.hazelcast.core.HazelcastInstance; | ||
4 | + | ||
5 | +/** | ||
6 | + * Bootstrap service to get a handle on a share Hazelcast instance. | ||
7 | + */ | ||
8 | +public interface StoreService { | ||
9 | + | ||
10 | + /** | ||
11 | + * Returns the shared Hazelcast instance for use as a distributed store | ||
12 | + * backing. | ||
13 | + * | ||
14 | + * @return shared Hazelcast instance | ||
15 | + */ | ||
16 | + HazelcastInstance getHazelcastInstance(); | ||
17 | + | ||
18 | +} |
... | @@ -40,6 +40,7 @@ import org.onlab.onos.net.device.DeviceEvent; | ... | @@ -40,6 +40,7 @@ import org.onlab.onos.net.device.DeviceEvent; |
40 | import org.onlab.onos.net.device.DeviceStore; | 40 | import org.onlab.onos.net.device.DeviceStore; |
41 | import org.onlab.onos.net.device.PortDescription; | 41 | import org.onlab.onos.net.device.PortDescription; |
42 | import org.onlab.onos.net.provider.ProviderId; | 42 | import org.onlab.onos.net.provider.ProviderId; |
43 | +import org.onlab.onos.store.StoreService; | ||
43 | import org.onlab.util.KryoPool; | 44 | import org.onlab.util.KryoPool; |
44 | import org.slf4j.Logger; | 45 | import org.slf4j.Logger; |
45 | 46 | ||
... | @@ -187,12 +188,15 @@ public class DistributedDeviceStore implements DeviceStore { | ... | @@ -187,12 +188,15 @@ public class DistributedDeviceStore implements DeviceStore { |
187 | 188 | ||
188 | // FIXME change to protected once we remove DistributedDeviceManagerTest. | 189 | // FIXME change to protected once we remove DistributedDeviceManagerTest. |
189 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 190 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
191 | + protected StoreService storeService; | ||
192 | + | ||
190 | /*protected*/public HazelcastInstance theInstance; | 193 | /*protected*/public HazelcastInstance theInstance; |
191 | 194 | ||
192 | 195 | ||
193 | @Activate | 196 | @Activate |
194 | public void activate() { | 197 | public void activate() { |
195 | log.info("Started"); | 198 | log.info("Started"); |
199 | + theInstance = storeService.getHazelcastInstance(); | ||
196 | 200 | ||
197 | // IMap event handler needs value | 201 | // IMap event handler needs value |
198 | final boolean includeValue = true; | 202 | final boolean includeValue = true; | ... | ... |
1 | +package org.onlab.onos.store.impl; | ||
2 | + | ||
3 | +import com.hazelcast.core.Hazelcast; | ||
4 | +import com.hazelcast.core.HazelcastInstance; | ||
5 | +import org.apache.felix.scr.annotations.Activate; | ||
6 | +import org.apache.felix.scr.annotations.Component; | ||
7 | +import org.apache.felix.scr.annotations.Deactivate; | ||
8 | +import org.apache.felix.scr.annotations.Service; | ||
9 | +import org.onlab.onos.store.StoreService; | ||
10 | +import org.slf4j.Logger; | ||
11 | +import org.slf4j.LoggerFactory; | ||
12 | + | ||
13 | +/** | ||
14 | + * Auxiliary bootstrap of distributed store. | ||
15 | + */ | ||
16 | +@Component(immediate = true) | ||
17 | +@Service | ||
18 | +public class StoreManager implements StoreService { | ||
19 | + | ||
20 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
21 | + | ||
22 | + protected HazelcastInstance instance; | ||
23 | + | ||
24 | + @Activate | ||
25 | + public void activate() { | ||
26 | + instance = Hazelcast.newHazelcastInstance(); | ||
27 | + log.info("Started"); | ||
28 | + } | ||
29 | + | ||
30 | + @Deactivate | ||
31 | + public void deactivate() { | ||
32 | + log.info("Stopped"); | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + public HazelcastInstance getHazelcastInstance() { | ||
37 | + return instance; | ||
38 | + } | ||
39 | +} |
... | @@ -10,9 +10,13 @@ | ... | @@ -10,9 +10,13 @@ |
10 | <bundle>mvn:com.google.guava/guava/18.0</bundle> | 10 | <bundle>mvn:com.google.guava/guava/18.0</bundle> |
11 | <bundle>mvn:io.netty/netty/3.9.2.Final</bundle> | 11 | <bundle>mvn:io.netty/netty/3.9.2.Final</bundle> |
12 | 12 | ||
13 | + <bundle>mvn:com.hazelcast/hazelcast/3.3</bundle> | ||
14 | + <bundle>mvn:com.eclipsesource.minimal-json/minimal-json/0.9.1</bundle> | ||
15 | + | ||
13 | <bundle>mvn:com.esotericsoftware.kryo/kryo/2.24.0</bundle> | 16 | <bundle>mvn:com.esotericsoftware.kryo/kryo/2.24.0</bundle> |
14 | <bundle>mvn:com.esotericsoftware/minlog/1.3.0</bundle> | 17 | <bundle>mvn:com.esotericsoftware/minlog/1.3.0</bundle> |
15 | <bundle>mvn:org.objenesis/objenesis/2.1</bundle> | 18 | <bundle>mvn:org.objenesis/objenesis/2.1</bundle> |
19 | + <bundle>mvn:de.javakaffee/kryo-serializers/0.27</bundle> | ||
16 | </feature> | 20 | </feature> |
17 | 21 | ||
18 | <feature name="onos-thirdparty-web" version="1.0.0" | 22 | <feature name="onos-thirdparty-web" version="1.0.0" |
... | @@ -42,6 +46,13 @@ | ... | @@ -42,6 +46,13 @@ |
42 | description="ONOS core components"> | 46 | description="ONOS core components"> |
43 | <feature>onos-api</feature> | 47 | <feature>onos-api</feature> |
44 | <bundle>mvn:org.onlab.onos/onos-core-net/1.0.0-SNAPSHOT</bundle> | 48 | <bundle>mvn:org.onlab.onos/onos-core-net/1.0.0-SNAPSHOT</bundle> |
49 | + <bundle>mvn:org.onlab.onos/onos-core-store/1.0.0-SNAPSHOT</bundle> | ||
50 | + </feature> | ||
51 | + | ||
52 | + <feature name="onos-core-trivial" version="1.0.0" | ||
53 | + description="ONOS core components"> | ||
54 | + <feature>onos-api</feature> | ||
55 | + <bundle>mvn:org.onlab.onos/onos-core-net/1.0.0-SNAPSHOT</bundle> | ||
45 | <bundle>mvn:org.onlab.onos/onos-core-trivial/1.0.0-SNAPSHOT</bundle> | 56 | <bundle>mvn:org.onlab.onos/onos-core-trivial/1.0.0-SNAPSHOT</bundle> |
46 | </feature> | 57 | </feature> |
47 | 58 | ... | ... |
... | @@ -139,6 +139,11 @@ | ... | @@ -139,6 +139,11 @@ |
139 | <version>3.3</version> | 139 | <version>3.3</version> |
140 | </dependency> | 140 | </dependency> |
141 | <dependency> | 141 | <dependency> |
142 | + <groupId>com.eclipsesource.minimal-json</groupId> | ||
143 | + <artifactId>minimal-json</artifactId> | ||
144 | + <version>0.9.1</version> | ||
145 | + </dependency> | ||
146 | + <dependency> | ||
142 | <groupId>com.esotericsoftware.kryo</groupId> | 147 | <groupId>com.esotericsoftware.kryo</groupId> |
143 | <artifactId>kryo</artifactId> | 148 | <artifactId>kryo</artifactId> |
144 | <version>2.24.0</version> | 149 | <version>2.24.0</version> | ... | ... |
... | @@ -26,7 +26,7 @@ mkdir bin | ... | @@ -26,7 +26,7 @@ mkdir bin |
26 | 26 | ||
27 | # Stage the ONOS admin scripts and patch in Karaf service wrapper extras | 27 | # Stage the ONOS admin scripts and patch in Karaf service wrapper extras |
28 | cp -r $ONOS_ROOT/tools/package/bin . | 28 | cp -r $ONOS_ROOT/tools/package/bin . |
29 | -cp -r $ONOS_ROOT/tools/package/wrapper/* $KARAF_DIST | 29 | +cp -r $ONOS_ROOT/tools/package/debian $ONOS_STAGE/debian |
30 | cp -r $ONOS_ROOT/tools/package/etc/* $KARAF_DIST/etc | 30 | cp -r $ONOS_ROOT/tools/package/etc/* $KARAF_DIST/etc |
31 | 31 | ||
32 | # Stage the ONOS bundles | 32 | # Stage the ONOS bundles |
... | @@ -40,7 +40,7 @@ perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.apache.karaf.cellar/apa | ... | @@ -40,7 +40,7 @@ perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.apache.karaf.cellar/apa |
40 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg | 40 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg |
41 | 41 | ||
42 | # Patch the Apache Karaf distribution file to load ONOS features | 42 | # Patch the Apache Karaf distribution file to load ONOS features |
43 | -perl -pi.old -e 's|^(featuresBoot=.*)|\1,wrapper,cellar|' \ | 43 | +perl -pi.old -e 's|^(featuresBoot=.*)|\1,cellar|' \ |
44 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg | 44 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg |
45 | 45 | ||
46 | # ONOS Patching ---------------------------------------------------------------- | 46 | # ONOS Patching ---------------------------------------------------------------- |
... | @@ -49,15 +49,10 @@ perl -pi.old -e 's|^(featuresBoot=.*)|\1,wrapper,cellar|' \ | ... | @@ -49,15 +49,10 @@ perl -pi.old -e 's|^(featuresBoot=.*)|\1,wrapper,cellar|' \ |
49 | perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onlab.onos/onos-features/$ONOS_VERSION/xml/features|" \ | 49 | perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onlab.onos/onos-features/$ONOS_VERSION/xml/features|" \ |
50 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg | 50 | $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg |
51 | 51 | ||
52 | -# Patch the Apache Karaf distribution file to load ONOS features | ||
53 | -#perl -pi.old -e 's|^(featuresBoot=.*)|\1,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-tvue,onos-app-fwd|' \ | ||
54 | -# $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg | ||
55 | - | ||
56 | # Patch the Apache Karaf distribution with ONOS branding bundle | 52 | # Patch the Apache Karaf distribution with ONOS branding bundle |
57 | cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_VERSION/onos-branding-*.jar \ | 53 | cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_VERSION/onos-branding-*.jar \ |
58 | $ONOS_STAGE/$KARAF_DIST/lib | 54 | $ONOS_STAGE/$KARAF_DIST/lib |
59 | 55 | ||
60 | - | ||
61 | # Now package up the ONOS tar file | 56 | # Now package up the ONOS tar file |
62 | cd $ONOS_STAGE_ROOT | 57 | cd $ONOS_STAGE_ROOT |
63 | COPYFILE_DISABLE=1 tar zcf $ONOS_TAR $ONOS_BITS | 58 | COPYFILE_DISABLE=1 tar zcf $ONOS_TAR $ONOS_BITS | ... | ... |
... | @@ -3,7 +3,7 @@ | ... | @@ -3,7 +3,7 @@ |
3 | # ONOS command-line client | 3 | # ONOS command-line client |
4 | #------------------------------------------------------------------------------- | 4 | #------------------------------------------------------------------------------- |
5 | 5 | ||
6 | -export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ | 6 | +export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-7-openjdk-amd64/} |
7 | 7 | ||
8 | cd $(dirname $0)/../apache-karaf-*/bin | 8 | cd $(dirname $0)/../apache-karaf-*/bin |
9 | ./client -h localhost "$@" | 9 | ./client -h localhost "$@" | ... | ... |
... | @@ -3,8 +3,8 @@ | ... | @@ -3,8 +3,8 @@ |
3 | # Starts ONOS Apache Karaf container | 3 | # Starts ONOS Apache Karaf container |
4 | #------------------------------------------------------------------------------- | 4 | #------------------------------------------------------------------------------- |
5 | 5 | ||
6 | -export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ | 6 | +export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-7-openjdk-amd64/} |
7 | 7 | ||
8 | -cd $(dirname $0)/../apache-karaf-*/bin | 8 | +cd /opt/onos |
9 | -./karaf "$@" | 9 | +/opt/onos/apache-karaf-3.0.1/bin/karaf "$@" |
10 | 10 | ... | ... |
tools/package/debian/onos.conf
0 → 100644
1 | +description "Open Networking Operating System" | ||
2 | +author "ON.Lab" | ||
3 | + | ||
4 | +start on (net-device-up | ||
5 | + and local-filesystems | ||
6 | + and runlevel [2345]) | ||
7 | +stop on runlevel [016] | ||
8 | + | ||
9 | +console output | ||
10 | +kill timeout 60 | ||
11 | +respawn | ||
12 | + | ||
13 | +env LANG=en_US.UTF-8 | ||
14 | +env JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 | ||
15 | + | ||
16 | +script | ||
17 | + [ -f /opt/onos/options ] && . /opt/onos/options | ||
18 | + start-stop-daemon --signal INT --start --chuid sdn \ | ||
19 | + --exec /opt/onos/bin/onos-ctl -- $ONOS_OPTS \ | ||
20 | + >/opt/onos/var/stdout.log 2>/opt/onos/var/stderr.log | ||
21 | +end script |
1 | -#! /bin/sh | ||
2 | - | ||
3 | -# ------------------------------------------------------------------------ | ||
4 | -# Licensed to the Apache Software Foundation (ASF) under one or more | ||
5 | -# contributor license agreements. See the NOTICE file distributed with | ||
6 | -# this work for additional information regarding copyright ownership. | ||
7 | -# The ASF licenses this file to You under the Apache License, Version 2.0 | ||
8 | -# (the "License"); you may not use this file except in compliance with | ||
9 | -# the License. You may obtain a copy of the License at | ||
10 | -# | ||
11 | -# http://www.apache.org/licenses/LICENSE-2.0 | ||
12 | -# | ||
13 | -# Unless required by applicable law or agreed to in writing, software | ||
14 | -# distributed under the License is distributed on an "AS IS" BASIS, | ||
15 | -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
16 | -# See the License for the specific language governing permissions and | ||
17 | -# limitations under the License. | ||
18 | -# ------------------------------------------------------------------------ | ||
19 | - | ||
20 | -# If require, set the JAVA_HOME to launch the wrapper | ||
21 | -# | ||
22 | -#JAVA_HOME= | ||
23 | -# | ||
24 | - | ||
25 | -# Application | ||
26 | -APP_NAME="onos" | ||
27 | -APP_LONG_NAME="onos" | ||
28 | - | ||
29 | -# Wrapper | ||
30 | -WRAPPER_CMD="/opt/onos/apache-karaf-3.0.1/bin/${APP_NAME}-wrapper" | ||
31 | -WRAPPER_CONF="/opt/onos/apache-karaf-3.0.1/etc/${APP_NAME}-wrapper.conf" | ||
32 | - | ||
33 | -# Priority at which to run the wrapper. See "man nice" for valid priorities. | ||
34 | -# nice is only used if a priority is specified. | ||
35 | -PRIORITY= | ||
36 | - | ||
37 | -# Location of the data folder. | ||
38 | -DATADIR="/opt/onos/apache-karaf-3.0.1/data" | ||
39 | - | ||
40 | -# Location of the pid file. | ||
41 | -PIDDIR="/opt/onos/apache-karaf-3.0.1/data" | ||
42 | - | ||
43 | -# If uncommented, causes the Wrapper to be shutdown using an anchor file. | ||
44 | -# When launched with the 'start' command, it will also ignore all INT and | ||
45 | -# TERM signals. | ||
46 | -#IGNORE_SIGNALS=true | ||
47 | - | ||
48 | -# If specified, the Wrapper will be run as the specified user. | ||
49 | -# IMPORTANT - Make sure that the user has the required privileges to write | ||
50 | -# the PID file and wrapper.log files. Failure to be able to write the log | ||
51 | -# file will cause the Wrapper to exit without any way to write out an error | ||
52 | -# message. | ||
53 | -# NOTE - This will set the user which is used to run the Wrapper as well as | ||
54 | -# the JVM and is not useful in situations where a privileged resource or | ||
55 | -# port needs to be allocated prior to the user being changed. | ||
56 | -#RUN_AS_USER= | ||
57 | - | ||
58 | -# The following two lines are used by the chkconfig command. Change as is | ||
59 | -# appropriate for your application. They should remain commented. | ||
60 | -# chkconfig: 2345 20 80 | ||
61 | -# description: onos | ||
62 | - | ||
63 | -# Do not modify anything beyond this point | ||
64 | -#----------------------------------------------------------------------------- | ||
65 | - | ||
66 | -# Get the fully qualified path to the script | ||
67 | -case $0 in | ||
68 | - /*) | ||
69 | - SCRIPT="$0" | ||
70 | - ;; | ||
71 | - *) | ||
72 | - PWD=`pwd` | ||
73 | - SCRIPT="$PWD/$0" | ||
74 | - ;; | ||
75 | -esac | ||
76 | - | ||
77 | -# Resolve the true real path without any sym links. | ||
78 | -CHANGED=true | ||
79 | -while [ "X$CHANGED" != "X" ] | ||
80 | -do | ||
81 | - # Change spaces to ":" so the tokens can be parsed. | ||
82 | - SCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'` | ||
83 | - # Get the real path to this script, resolving any symbolic links | ||
84 | - TOKENS=`echo $SCRIPT | sed -e 's;/; ;g'` | ||
85 | - REALPATH= | ||
86 | - for C in $TOKENS; do | ||
87 | - REALPATH="$REALPATH/$C" | ||
88 | - while [ -h "$REALPATH" ] ; do | ||
89 | - LS="`ls -ld "$REALPATH"`" | ||
90 | - LINK="`expr "$LS" : '.*-> \(.*\)$'`" | ||
91 | - if expr "$LINK" : '/.*' > /dev/null; then | ||
92 | - REALPATH="$LINK" | ||
93 | - else | ||
94 | - REALPATH="`dirname "$REALPATH"`""/$LINK" | ||
95 | - fi | ||
96 | - done | ||
97 | - done | ||
98 | - # Change ":" chars back to spaces. | ||
99 | - REALPATH=`echo $REALPATH | sed -e 's;:; ;g'` | ||
100 | - | ||
101 | - if [ "$REALPATH" = "$SCRIPT" ] | ||
102 | - then | ||
103 | - CHANGED="" | ||
104 | - else | ||
105 | - SCRIPT="$REALPATH" | ||
106 | - fi | ||
107 | -done | ||
108 | - | ||
109 | -# Change the current directory to the location of the script | ||
110 | -cd "`dirname "$REALPATH"`" | ||
111 | -REALDIR=`pwd` | ||
112 | - | ||
113 | -# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if | ||
114 | -# the working directory is later changed. | ||
115 | -FIRST_CHAR=`echo $PIDDIR | cut -c1,1` | ||
116 | -if [ "$FIRST_CHAR" != "/" ] | ||
117 | -then | ||
118 | - PIDDIR=$REALDIR/$PIDDIR | ||
119 | -fi | ||
120 | -# Same test for WRAPPER_CMD | ||
121 | -FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1` | ||
122 | -if [ "$FIRST_CHAR" != "/" ] | ||
123 | -then | ||
124 | - WRAPPER_CMD=$REALDIR/$WRAPPER_CMD | ||
125 | -fi | ||
126 | -# Same test for WRAPPER_CONF | ||
127 | -FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1` | ||
128 | -if [ "$FIRST_CHAR" != "/" ] | ||
129 | -then | ||
130 | - WRAPPER_CONF=$REALDIR/$WRAPPER_CONF | ||
131 | -fi | ||
132 | - | ||
133 | -# Process ID | ||
134 | -ANCHORFILE="$PIDDIR/$APP_NAME.anchor" | ||
135 | -PIDFILE="$PIDDIR/$APP_NAME.pid" | ||
136 | -LOCKDIR="/var/lock/subsys" | ||
137 | -LOCKFILE="$LOCKDIR/$APP_NAME" | ||
138 | -pid="" | ||
139 | - | ||
140 | -# Resolve the location of the 'ps' command | ||
141 | -PSEXE="/usr/bin/ps" | ||
142 | -if [ ! -x $PSEXE ] | ||
143 | -then | ||
144 | - PSEXE="/bin/ps" | ||
145 | - if [ ! -x $PSEXE ] | ||
146 | - then | ||
147 | - echo "Unable to locate 'ps'." | ||
148 | - echo "Please report this message along with the location of the command on your system." | ||
149 | - exit 1 | ||
150 | - fi | ||
151 | -fi | ||
152 | - | ||
153 | -# Resolve the os | ||
154 | -DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]` | ||
155 | -case "$DIST_OS" in | ||
156 | - 'sunos') | ||
157 | - DIST_OS="solaris" | ||
158 | - ;; | ||
159 | - 'hp-ux' | 'hp-ux64') | ||
160 | - DIST_OS="hpux" | ||
161 | - ;; | ||
162 | - 'darwin') | ||
163 | - DIST_OS="macosx" | ||
164 | - ;; | ||
165 | - 'unix_sv') | ||
166 | - DIST_OS="unixware" | ||
167 | - ;; | ||
168 | -esac | ||
169 | - | ||
170 | -# Resolve the architecture | ||
171 | -DIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]` | ||
172 | -if [ "$DIST_ARCH" = "unknown" ] | ||
173 | -then | ||
174 | - DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]` | ||
175 | -fi | ||
176 | -case "$DIST_ARCH" in | ||
177 | - 'amd64' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64') | ||
178 | - DIST_ARCH="x86" | ||
179 | - ;; | ||
180 | - 'ip27') | ||
181 | - DIST_ARCH="mips" | ||
182 | - ;; | ||
183 | - 'power' | 'powerpc' | 'power_pc' | 'ppc64') | ||
184 | - DIST_ARCH="ppc" | ||
185 | - ;; | ||
186 | - 'pa_risc' | 'pa-risc') | ||
187 | - DIST_ARCH="parisc" | ||
188 | - ;; | ||
189 | - 'sun4u' | 'sparcv9') | ||
190 | - DIST_ARCH="sparc" | ||
191 | - ;; | ||
192 | - '9000/800') | ||
193 | - DIST_ARCH="parisc" | ||
194 | - ;; | ||
195 | -esac | ||
196 | - | ||
197 | -# Decide on the wrapper binary to use. | ||
198 | -# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit | ||
199 | -# platforms, if the 64-bit binary exists then the distribution most | ||
200 | -# likely wants to use long names. Otherwise, look for the default. | ||
201 | -# For macosx, we also want to look for universal binaries. | ||
202 | -WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" | ||
203 | -if [ -x $WRAPPER_TEST_CMD ] | ||
204 | -then | ||
205 | - WRAPPER_CMD="$WRAPPER_TEST_CMD" | ||
206 | -else | ||
207 | - if [ "$DIST_OS" = "macosx" ] | ||
208 | - then | ||
209 | - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32" | ||
210 | - if [ -x $WRAPPER_TEST_CMD ] | ||
211 | - then | ||
212 | - WRAPPER_CMD="$WRAPPER_TEST_CMD" | ||
213 | - else | ||
214 | - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" | ||
215 | - if [ -x $WRAPPER_TEST_CMD ] | ||
216 | - then | ||
217 | - WRAPPER_CMD="$WRAPPER_TEST_CMD" | ||
218 | - else | ||
219 | - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64" | ||
220 | - if [ -x $WRAPPER_TEST_CMD ] | ||
221 | - then | ||
222 | - WRAPPER_CMD="$WRAPPER_TEST_CMD" | ||
223 | - else | ||
224 | - if [ ! -x $WRAPPER_CMD ] | ||
225 | - then | ||
226 | - echo "Unable to locate any of the following binaries:" | ||
227 | - echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" | ||
228 | - echo " $WRAPPER_CMD-$DIST_OS-universal-32" | ||
229 | - echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" | ||
230 | - echo " $WRAPPER_CMD-$DIST_OS-universal-64" | ||
231 | - echo " $WRAPPER_CMD" | ||
232 | - exit 1 | ||
233 | - fi | ||
234 | - fi | ||
235 | - fi | ||
236 | - fi | ||
237 | - else | ||
238 | - WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" | ||
239 | - if [ -x $WRAPPER_TEST_CMD ] | ||
240 | - then | ||
241 | - WRAPPER_CMD="$WRAPPER_TEST_CMD" | ||
242 | - else | ||
243 | - if [ ! -x $WRAPPER_CMD ] | ||
244 | - then | ||
245 | - echo "Unable to locate any of the following binaries:" | ||
246 | - echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" | ||
247 | - echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64" | ||
248 | - echo " $WRAPPER_CMD" | ||
249 | - exit 1 | ||
250 | - fi | ||
251 | - fi | ||
252 | - fi | ||
253 | -fi | ||
254 | - | ||
255 | -# Build the nice clause | ||
256 | -if [ "X$PRIORITY" = "X" ] | ||
257 | -then | ||
258 | - CMDNICE="" | ||
259 | -else | ||
260 | - CMDNICE="nice -$PRIORITY" | ||
261 | -fi | ||
262 | - | ||
263 | -# Build the anchor file clause. | ||
264 | -if [ "X$IGNORE_SIGNALS" = "X" ] | ||
265 | -then | ||
266 | - ANCHORPROP= | ||
267 | - IGNOREPROP= | ||
268 | -else | ||
269 | - ANCHORPROP=wrapper.anchorfile=$ANCHORFILE | ||
270 | - IGNOREPROP=wrapper.ignore_signals=TRUE | ||
271 | -fi | ||
272 | - | ||
273 | -# Build the lock file clause. Only create a lock file if the lock directory exists on this platform. | ||
274 | -if [ -d $LOCKDIR ] | ||
275 | -then | ||
276 | - LOCKPROP=wrapper.lockfile=$LOCKFILE | ||
277 | -else | ||
278 | - LOCKPROP= | ||
279 | -fi | ||
280 | - | ||
281 | -checkUser() { | ||
282 | - # Check the configured user. If necessary rerun this script as the desired user. | ||
283 | - if [ "X$RUN_AS_USER" != "X" ] | ||
284 | - then | ||
285 | - # Resolve the location of the 'id' command | ||
286 | - IDEXE="/usr/xpg4/bin/id" | ||
287 | - if [ ! -x $IDEXE ] | ||
288 | - then | ||
289 | - IDEXE="/usr/bin/id" | ||
290 | - if [ ! -x $IDEXE ] | ||
291 | - then | ||
292 | - echo "Unable to locate 'id'." | ||
293 | - echo "Please report this message along with the location of the command on your system." | ||
294 | - exit 1 | ||
295 | - fi | ||
296 | - fi | ||
297 | - | ||
298 | - if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ] | ||
299 | - then | ||
300 | - # Already running as the configured user. Avoid password prompts by not calling su. | ||
301 | - RUN_AS_USER="" | ||
302 | - fi | ||
303 | - fi | ||
304 | - if [ "X$RUN_AS_USER" != "X" ] | ||
305 | - then | ||
306 | - # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be | ||
307 | - # able to create the lock file. The Wrapper will be able to update this file once it | ||
308 | - # is created but will not be able to delete it on shutdown. If $2 is defined then | ||
309 | - # the lock file should be created for the current command | ||
310 | - if [ "X$LOCKPROP" != "X" ] | ||
311 | - then | ||
312 | - if [ "X$2" != "X" ] | ||
313 | - then | ||
314 | - # Resolve the primary group | ||
315 | - RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1` | ||
316 | - if [ "X$RUN_AS_GROUP" = "X" ] | ||
317 | - then | ||
318 | - RUN_AS_GROUP=$RUN_AS_USER | ||
319 | - fi | ||
320 | - touch $LOCKFILE | ||
321 | - chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE | ||
322 | - fi | ||
323 | - fi | ||
324 | - | ||
325 | - # Still want to change users, recurse. This means that the user will only be | ||
326 | - # prompted for a password once. | ||
327 | - su -m $RUN_AS_USER -s /bin/sh -c "$REALPATH $1" | ||
328 | - RETVAL=$? | ||
329 | - | ||
330 | - # Now that we are the original user again, we may need to clean up the lock file. | ||
331 | - if [ "X$LOCKPROP" != "X" ] | ||
332 | - then | ||
333 | - getpid | ||
334 | - if [ "X$pid" = "X" ] | ||
335 | - then | ||
336 | - # Wrapper is not running so make sure the lock file is deleted. | ||
337 | - if [ -f $LOCKFILE ] | ||
338 | - then | ||
339 | - rm $LOCKFILE | ||
340 | - fi | ||
341 | - fi | ||
342 | - fi | ||
343 | - | ||
344 | - exit $RETVAL | ||
345 | - fi | ||
346 | -} | ||
347 | - | ||
348 | -getpid() { | ||
349 | - if [ -f $PIDFILE ] | ||
350 | - then | ||
351 | - if [ -r $PIDFILE ] | ||
352 | - then | ||
353 | - pid=`cat $PIDFILE` | ||
354 | - if [ "X$pid" != "X" ] | ||
355 | - then | ||
356 | - # It is possible that 'a' process with the pid exists but that it is not the | ||
357 | - # correct process. This can happen in a number of cases, but the most | ||
358 | - # common is during system startup after an unclean shutdown. | ||
359 | - # The ps statement below looks for the specific wrapper command running as | ||
360 | - # the pid. If it is not found then the pid file is considered to be stale. | ||
361 | - if [ "$DIST_OS" = "solaris" ] | ||
362 | - then | ||
363 | - pidtest=`$PSEXE -p $pid -o comm | grep $WRAPPER_CMD | tail -1` | ||
364 | - else | ||
365 | - pidtest=`$PSEXE -p $pid -o command | grep $WRAPPER_CMD | tail -1` | ||
366 | - fi | ||
367 | - if [ "X$pidtest" = "X" ] | ||
368 | - then | ||
369 | - # This is a stale pid file. | ||
370 | - rm -f $PIDFILE | ||
371 | - echo "Removed stale pid file: $PIDFILE" | ||
372 | - pid="" | ||
373 | - fi | ||
374 | - fi | ||
375 | - else | ||
376 | - echo "Cannot read $PIDFILE." | ||
377 | - exit 1 | ||
378 | - fi | ||
379 | - fi | ||
380 | -} | ||
381 | - | ||
382 | -testpid() { | ||
383 | - pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` | ||
384 | - if [ "X$pid" = "X" ] | ||
385 | - then | ||
386 | - # Process is gone so remove the pid file. | ||
387 | - rm -f $PIDFILE | ||
388 | - pid="" | ||
389 | - fi | ||
390 | -} | ||
391 | - | ||
392 | -console() { | ||
393 | - echo "Running $APP_LONG_NAME..." | ||
394 | - getpid | ||
395 | - if [ "X$pid" = "X" ] | ||
396 | - then | ||
397 | - COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE $ANCHORPROP $LOCKPROP" | ||
398 | - exec $COMMAND_LINE | ||
399 | - else | ||
400 | - echo "$APP_LONG_NAME is already running." | ||
401 | - exit 1 | ||
402 | - fi | ||
403 | -} | ||
404 | - | ||
405 | -start() { | ||
406 | - echo "Starting $APP_LONG_NAME..." | ||
407 | - getpid | ||
408 | - if [ "X$pid" = "X" ] | ||
409 | - then | ||
410 | - if [ ! -d $DATADIR ]; then | ||
411 | - mkdir $DATADIR | ||
412 | - fi | ||
413 | - if [ ! -d $DATADIR/log ]; then | ||
414 | - mkdir $DATADIR/log | ||
415 | - fi | ||
416 | - COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP" | ||
417 | - exec $COMMAND_LINE | ||
418 | - else | ||
419 | - echo "$APP_LONG_NAME is already running." | ||
420 | - exit 1 | ||
421 | - fi | ||
422 | -} | ||
423 | - | ||
424 | -stopit() { | ||
425 | - echo "Stopping $APP_LONG_NAME..." | ||
426 | - getpid | ||
427 | - if [ "X$pid" = "X" ] | ||
428 | - then | ||
429 | - echo "$APP_LONG_NAME was not running." | ||
430 | - else | ||
431 | - if [ "X$IGNORE_SIGNALS" = "X" ] | ||
432 | - then | ||
433 | - # Running so try to stop it. | ||
434 | - kill $pid | ||
435 | - if [ $? -ne 0 ] | ||
436 | - then | ||
437 | - # An explanation for the failure should have been given | ||
438 | - echo "Unable to stop $APP_LONG_NAME." | ||
439 | - exit 1 | ||
440 | - fi | ||
441 | - else | ||
442 | - rm -f $ANCHORFILE | ||
443 | - if [ -f $ANCHORFILE ] | ||
444 | - then | ||
445 | - # An explanation for the failure should have been given | ||
446 | - echo "Unable to stop $APP_LONG_NAME." | ||
447 | - exit 1 | ||
448 | - fi | ||
449 | - fi | ||
450 | - | ||
451 | - # We can not predict how long it will take for the wrapper to | ||
452 | - # actually stop as it depends on settings in wrapper.conf. | ||
453 | - # Loop until it does. | ||
454 | - savepid=$pid | ||
455 | - CNT=0 | ||
456 | - TOTCNT=0 | ||
457 | - while [ "X$pid" != "X" ] | ||
458 | - do | ||
459 | - # Show a waiting message every 5 seconds. | ||
460 | - if [ "$CNT" -lt "5" ] | ||
461 | - then | ||
462 | - CNT=`expr $CNT + 1` | ||
463 | - else | ||
464 | - echo "Waiting for $APP_LONG_NAME to exit..." | ||
465 | - CNT=0 | ||
466 | - fi | ||
467 | - TOTCNT=`expr $TOTCNT + 1` | ||
468 | - | ||
469 | - sleep 1 | ||
470 | - | ||
471 | - testpid | ||
472 | - done | ||
473 | - | ||
474 | - pid=$savepid | ||
475 | - testpid | ||
476 | - if [ "X$pid" != "X" ] | ||
477 | - then | ||
478 | - echo "Failed to stop $APP_LONG_NAME." | ||
479 | - exit 1 | ||
480 | - else | ||
481 | - echo "Stopped $APP_LONG_NAME." | ||
482 | - fi | ||
483 | - fi | ||
484 | -} | ||
485 | - | ||
486 | -status() { | ||
487 | - getpid | ||
488 | - if [ "X$pid" = "X" ] | ||
489 | - then | ||
490 | - echo "$APP_LONG_NAME is not running." | ||
491 | - exit 1 | ||
492 | - else | ||
493 | - echo "$APP_LONG_NAME is running ($pid)." | ||
494 | - exit 0 | ||
495 | - fi | ||
496 | -} | ||
497 | - | ||
498 | -dump() { | ||
499 | - echo "Dumping $APP_LONG_NAME..." | ||
500 | - getpid | ||
501 | - if [ "X$pid" = "X" ] | ||
502 | - then | ||
503 | - echo "$APP_LONG_NAME was not running." | ||
504 | - | ||
505 | - else | ||
506 | - kill -3 $pid | ||
507 | - | ||
508 | - if [ $? -ne 0 ] | ||
509 | - then | ||
510 | - echo "Failed to dump $APP_LONG_NAME." | ||
511 | - exit 1 | ||
512 | - else | ||
513 | - echo "Dumped $APP_LONG_NAME." | ||
514 | - fi | ||
515 | - fi | ||
516 | -} | ||
517 | - | ||
518 | -case "$1" in | ||
519 | - | ||
520 | - 'console') | ||
521 | - checkUser $1 touchlock | ||
522 | - console | ||
523 | - ;; | ||
524 | - | ||
525 | - 'start') | ||
526 | - checkUser $1 touchlock | ||
527 | - start | ||
528 | - ;; | ||
529 | - | ||
530 | - 'stop') | ||
531 | - checkUser $1 | ||
532 | - stopit | ||
533 | - ;; | ||
534 | - | ||
535 | - 'restart') | ||
536 | - checkUser $1 touchlock | ||
537 | - stopit | ||
538 | - start | ||
539 | - ;; | ||
540 | - | ||
541 | - 'status') | ||
542 | - checkUser $1 | ||
543 | - status | ||
544 | - ;; | ||
545 | - | ||
546 | - 'dump') | ||
547 | - checkUser $1 | ||
548 | - dump | ||
549 | - ;; | ||
550 | - | ||
551 | - *) | ||
552 | - echo "Usage: $0 { console | start | stop | restart | status | dump }" | ||
553 | - exit 1 | ||
554 | - ;; | ||
555 | -esac | ||
556 | - | ||
557 | -exit 0 |
No preview for this file type
1 | -# ------------------------------------------------------------------------ | ||
2 | -# Licensed to the Apache Software Foundation (ASF) under one or more | ||
3 | -# contributor license agreements. See the NOTICE file distributed with | ||
4 | -# this work for additional information regarding copyright ownership. | ||
5 | -# The ASF licenses this file to You under the Apache License, Version 2.0 | ||
6 | -# (the "License"); you may not use this file except in compliance with | ||
7 | -# the License. You may obtain a copy of the License at | ||
8 | -# | ||
9 | -# http://www.apache.org/licenses/LICENSE-2.0 | ||
10 | -# | ||
11 | -# Unless required by applicable law or agreed to in writing, software | ||
12 | -# distributed under the License is distributed on an "AS IS" BASIS, | ||
13 | -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
14 | -# See the License for the specific language governing permissions and | ||
15 | -# limitations under the License. | ||
16 | -# ------------------------------------------------------------------------ | ||
17 | - | ||
18 | -#******************************************************************** | ||
19 | -# Wrapper Properties | ||
20 | -#******************************************************************** | ||
21 | -set.default.JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ | ||
22 | -set.default.KARAF_HOME=/opt/onos/apache-karaf-3.0.1 | ||
23 | -set.default.KARAF_BASE=/opt/onos/apache-karaf-3.0.1 | ||
24 | -set.default.KARAF_DATA=/opt/onos/apache-karaf-3.0.1/data | ||
25 | -set.default.KARAF_ETC=/opt/onos/apache-karaf-3.0.1/etc | ||
26 | - | ||
27 | -# Java Application | ||
28 | -wrapper.working.dir=%KARAF_BASE% | ||
29 | -wrapper.java.command=%JAVA_HOME%/bin/java | ||
30 | -wrapper.java.mainclass=org.apache.karaf.wrapper.internal.Main | ||
31 | -wrapper.java.classpath.1=%KARAF_HOME%/lib/karaf-wrapper.jar | ||
32 | -wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar | ||
33 | -wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jmx-boot.jar | ||
34 | -wrapper.java.classpath.4=%KARAF_HOME%/lib/karaf-jaas-boot.jar | ||
35 | -wrapper.java.classpath.5=%KARAF_HOME%/lib/karaf-wrapper-main.jar | ||
36 | -wrapper.java.classpath.6=%KARAF_HOME%/lib/karaf-org.osgi.core.jar | ||
37 | -wrapper.java.library.path.1=%KARAF_HOME%/lib/ | ||
38 | - | ||
39 | -# Application Parameters. Add parameters as needed starting from 1 | ||
40 | -#wrapper.app.parameter.1= | ||
41 | - | ||
42 | -# JVM Parameters | ||
43 | -# note that n is the parameter number starting from 1. | ||
44 | -wrapper.java.additional.1=-Dkaraf.home=%KARAF_HOME% | ||
45 | -wrapper.java.additional.2=-Dkaraf.base=%KARAF_BASE% | ||
46 | -wrapper.java.additional.3=-Dkaraf.data=%KARAF_DATA% | ||
47 | -wrapper.java.additional.4=-Dkaraf.etc=%KARAF_ETC% | ||
48 | -wrapper.java.additional.5=-Dcom.sun.management.jmxremote | ||
49 | -wrapper.java.additional.6=-Djavax.management.builder.initial=org.apache.karaf.management.boot.KarafMBeanServerBuilder | ||
50 | -wrapper.java.additional.7=-Dkaraf.startLocalConsole=false | ||
51 | -wrapper.java.additional.8=-Dkaraf.startRemoteShell=true | ||
52 | -wrapper.java.additional.9=-Djava.endorsed.dirs=%JAVA_HOME%/jre/lib/endorsed:%JAVA_HOME%/lib/endorsed:%KARAF_HOME%/lib/endorsed | ||
53 | -wrapper.java.additional.10=-Djava.ext.dirs=%JAVA_HOME%/jre/lib/ext:%JAVA_HOME%/lib/ext:%KARAF_HOME%/lib/ext | ||
54 | - | ||
55 | -# Uncomment to enable jmx | ||
56 | -#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616 | ||
57 | -#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false | ||
58 | -#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false | ||
59 | - | ||
60 | -# Uncomment to enable YourKit profiling | ||
61 | -#wrapper.java.additional.n=-Xrunyjpagent | ||
62 | - | ||
63 | -# Uncomment to enable remote debugging | ||
64 | -#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE | ||
65 | -#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 | ||
66 | - | ||
67 | -# Initial Java Heap Size (in MB) | ||
68 | -#wrapper.java.initmemory=3 | ||
69 | - | ||
70 | -# Maximum Java Heap Size (in MB) | ||
71 | -wrapper.java.maxmemory=512 | ||
72 | - | ||
73 | - | ||
74 | -#******************************************************************** | ||
75 | -# Wrapper Logging Properties | ||
76 | -#******************************************************************** | ||
77 | -# Format of output for the console. (See docs for formats) | ||
78 | -wrapper.console.format=PM | ||
79 | - | ||
80 | -# Log Level for console output. (See docs for log levels) | ||
81 | -wrapper.console.loglevel=INFO | ||
82 | - | ||
83 | -# Log file to use for wrapper output logging. | ||
84 | -wrapper.logfile=%KARAF_DATA%/log/wrapper.log | ||
85 | - | ||
86 | -# Format of output for the log file. (See docs for formats) | ||
87 | -wrapper.logfile.format=LPTM | ||
88 | - | ||
89 | -# Log Level for log file output. (See docs for log levels) | ||
90 | -wrapper.logfile.loglevel=INFO | ||
91 | - | ||
92 | -# Maximum size that the log file will be allowed to grow to before | ||
93 | -# the log is rolled. Size is specified in bytes. The default value | ||
94 | -# of 0, disables log rolling. May abbreviate with the 'k' (kb) or | ||
95 | -# 'm' (mb) suffix. For example: 10m = 10 megabytes. | ||
96 | -wrapper.logfile.maxsize=10m | ||
97 | - | ||
98 | -# Maximum number of rolled log files which will be allowed before old | ||
99 | -# files are deleted. The default value of 0 implies no limit. | ||
100 | -wrapper.logfile.maxfiles=5 | ||
101 | - | ||
102 | -# Log Level for sys/event log output. (See docs for log levels) | ||
103 | -wrapper.syslog.loglevel=NONE | ||
104 | - | ||
105 | -#******************************************************************** | ||
106 | -# Wrapper Windows Properties | ||
107 | -#******************************************************************** | ||
108 | -# Title to use when running as a console | ||
109 | -wrapper.console.title=onos | ||
110 | - | ||
111 | -#******************************************************************** | ||
112 | -# Wrapper Windows NT/2000/XP Service Properties | ||
113 | -#******************************************************************** | ||
114 | -# WARNING - Do not modify any of these properties when an application | ||
115 | -# using this configuration file has been installed as a service. | ||
116 | -# Please uninstall the service before modifying this section. The | ||
117 | -# service can then be reinstalled. | ||
118 | - | ||
119 | -# Name of the service | ||
120 | -wrapper.ntservice.name=onos | ||
121 | - | ||
122 | -# Display name of the service | ||
123 | -wrapper.ntservice.displayname=onos | ||
124 | - | ||
125 | -# Description of the service | ||
126 | -wrapper.ntservice.description=ONOS | ||
127 | - | ||
128 | -# Service dependencies. Add dependencies as needed starting from 1 | ||
129 | -wrapper.ntservice.dependency.1= | ||
130 | - | ||
131 | -# Mode in which the service is installed. AUTO_START or DEMAND_START | ||
132 | -wrapper.ntservice.starttype=AUTO_START | ||
133 | - | ||
134 | -# Allow the service to interact with the desktop. | ||
135 | -wrapper.ntservice.interactive=false |
No preview for this file type
No preview for this file type
... | @@ -12,9 +12,6 @@ LOG=$ONOS_INSTALL_DIR/config.log | ... | @@ -12,9 +12,6 @@ LOG=$ONOS_INSTALL_DIR/config.log |
12 | onos=$ONOS_INSTALL_DIR/bin/onos | 12 | onos=$ONOS_INSTALL_DIR/bin/onos |
13 | 13 | ||
14 | ssh $remote " | 14 | ssh $remote " |
15 | - echo 'Starting...' | ||
16 | - nohup $ONOS_INSTALL_DIR/bin/onos-ctl server </dev/null | 1>/opt/onos/svc.log 2>&1 & | ||
17 | - | ||
18 | # Wait until we reach the run-level 100 | 15 | # Wait until we reach the run-level 100 |
19 | echo 'Waiting for cluster bootstrap...' | 16 | echo 'Waiting for cluster bootstrap...' |
20 | running="" | 17 | running="" |
... | @@ -22,29 +19,13 @@ ssh $remote " | ... | @@ -22,29 +19,13 @@ ssh $remote " |
22 | $onos bundle:list 2>>$LOG | grep -q 'START LEVEL 100' && running=1 || sleep 2 | 19 | $onos bundle:list 2>>$LOG | grep -q 'START LEVEL 100' && running=1 || sleep 2 |
23 | done | 20 | done |
24 | 21 | ||
25 | - # Now create group onos and join it, while quitting the default one | 22 | + echo 'Installing ONOS bundles...' |
26 | - if ! $onos cluster:group-list 2>>$LOG | cut -d \\ -f3 | grep -q onos; then | 23 | + $onos cluster:feature-install default onos-api 1>>$LOG 2>&1 |
27 | - echo 'Creating ONOS group...' | 24 | + $onos cluster:feature-install default onos-core 1>>$LOG 2>&1 |
28 | - installRole=primary | 25 | + $onos cluster:feature-install default onos-openflow 1>>$LOG 2>&1 |
29 | - $onos cluster:group-create onos 1>>$LOG 2>&1 | 26 | + $onos cluster:feature-install default onos-cli 1>>$LOG 2>&1 |
30 | - fi | 27 | + # $onos cluster:feature-install default onos-gui 1>>$LOG 2>&1 |
31 | - | 28 | + # $onos cluster:feature-install default onos-rest 1>>$LOG 2>&1 |
32 | - echo 'Configuring group membership...' | 29 | + $onos cluster:feature-install default onos-app-tvue 1>>$LOG 2>&1 |
33 | - node=\$($onos cluster:node-list 2>>$LOG | grep '^x' | cut -d \\ -f3) | 30 | + $onos cluster:feature-install default onos-app-fwd 1>>$LOG 2>&1 |
34 | - $onos cluster:group-join onos \$node 1>>$LOG 2>&1 | ||
35 | - $onos cluster:group-quit default \$node 1>>$LOG 2>&1 | ||
36 | - | ||
37 | - if [ X\$installRole = Xprimary ]; then | ||
38 | - echo 'Installing ONOS bundles...' | ||
39 | - $onos cluster:feature-install onos onos-api 1>>$LOG 2>&1 | ||
40 | - $onos cluster:feature-install onos onos-core 1>>$LOG 2>&1 | ||
41 | - $onos cluster:feature-install onos onos-openflow 1>>$LOG 2>&1 | ||
42 | - $onos cluster:feature-install onos onos-cli 1>>$LOG 2>&1 | ||
43 | - # $onos cluster:feature-install onos onos-gui 1>>$LOG 2>&1 | ||
44 | - # $onos cluster:feature-install onos onos-rest 1>>$LOG 2>&1 | ||
45 | - $onos cluster:feature-install onos onos-app-tvue 1>>$LOG 2>&1 | ||
46 | - $onos cluster:feature-install onos onos-app-fwd 1>>$LOG 2>&1 | ||
47 | - fi | ||
48 | - | ||
49 | - echo 'Started...' | ||
50 | " | 31 | " | ... | ... |
... | @@ -20,6 +20,13 @@ ssh $remote " | ... | @@ -20,6 +20,13 @@ ssh $remote " |
20 | sudo mkdir -p $ONOS_INSTALL_DIR && sudo chown sdn:sdn $ONOS_INSTALL_DIR | 20 | sudo mkdir -p $ONOS_INSTALL_DIR && sudo chown sdn:sdn $ONOS_INSTALL_DIR |
21 | tar zxmf /tmp/$ONOS_BITS.tar.gz -C $ONOS_INSTALL_DIR --strip-components=1 | 21 | tar zxmf /tmp/$ONOS_BITS.tar.gz -C $ONOS_INSTALL_DIR --strip-components=1 |
22 | 22 | ||
23 | - # Make a link to the log file directory. | 23 | + # Make a link to the log file directory and make a home for auxiliaries |
24 | ln -s $ONOS_INSTALL_DIR/$KARAF_DIST/data/log /opt/onos/log | 24 | ln -s $ONOS_INSTALL_DIR/$KARAF_DIST/data/log /opt/onos/log |
25 | + mkdir $ONOS_INSTALL_DIR/var | ||
26 | + | ||
27 | + # Install the upstart configuration file. | ||
28 | + sudo cp $ONOS_INSTALL_DIR/debian/onos.conf /etc/init/onos.conf | ||
29 | + | ||
30 | + # Ignite the ONOS service. | ||
31 | + sudo service onos start | ||
25 | " | 32 | " | ... | ... |
... | @@ -9,6 +9,7 @@ | ... | @@ -9,6 +9,7 @@ |
9 | remote=$ONOS_USER@${1:-$OCI} | 9 | remote=$ONOS_USER@${1:-$OCI} |
10 | 10 | ||
11 | ssh $remote " | 11 | ssh $remote " |
12 | + sudo service onos stop 1>/dev/null 2>/dev/null | ||
12 | [ -f $ONOS_INSTALL_DIR/bin/onos ] && \ | 13 | [ -f $ONOS_INSTALL_DIR/bin/onos ] && \ |
13 | $ONOS_INSTALL_DIR/bin/onos halt 2>/dev/null | 14 | $ONOS_INSTALL_DIR/bin/onos halt 2>/dev/null |
14 | sudo rm -fr $ONOS_INSTALL_DIR | 15 | sudo rm -fr $ONOS_INSTALL_DIR | ... | ... |
... | @@ -35,6 +35,11 @@ | ... | @@ -35,6 +35,11 @@ |
35 | <artifactId>commons-lang3</artifactId> | 35 | <artifactId>commons-lang3</artifactId> |
36 | </dependency> | 36 | </dependency> |
37 | 37 | ||
38 | + <!-- TODO: do we still need this here? --> | ||
39 | + <dependency> | ||
40 | + <groupId>com.eclipsesource.minimal-json</groupId> | ||
41 | + <artifactId>minimal-json</artifactId> | ||
42 | + </dependency> | ||
38 | <dependency> | 43 | <dependency> |
39 | <groupId>com.esotericsoftware.kryo</groupId> | 44 | <groupId>com.esotericsoftware.kryo</groupId> |
40 | <artifactId>kryo</artifactId> | 45 | <artifactId>kryo</artifactId> | ... | ... |
-
Please register or login to post a comment