onos-setup-karaf
6.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/bin/bash
# -----------------------------------------------------------------------------
# Downloads and sets-up Apache Karaf as a basis for running ONOS locally
# as a single-instance.
#
# Note that this in no way impacts the method for running ONOS remotely.
# For that, one should use onos-package and onos-install tools.
# -----------------------------------------------------------------------------
[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults
# TODO: consider putting this under ~/Applications/onos/apache-karaf-...
export KARAF_ROOT=${KARAF_ROOT:-~/Applications/apache-karaf-$KARAF_VERSION}
export STAGE=$(dirname $KARAF_ROOT)
# Validates the specified IP regular expression against existing adapters.
# Excludes local-loopback.
function validateIp {
ifconfig | sed -ne 's:[[:space:]]*inet[^6][ adr:]*\([0-9.]*\).*:\1: p' | grep $1
}
# Parse optional arguments
while [[ $# > 0 ]]; do
case $1 in
clean)
CLEAN="true";;
secure)
SECURE="true";;
*)
break;;
esac
shift
done
ONOS_IP=${ONOS_IP:-127.0.0.1}
IP="${1:-$ONOS_IP}"
# If the installed version does not line-up with ONOS_POM_VERSION force clean install
if [ ! -f $KARAF_ROOT/etc/org.apache.karaf.features.cfg ] || \
! grep -q "mvn:org.onosproject/onos-features/$ONOS_POM_VERSION/xml/features" \
$KARAF_ROOT/etc/org.apache.karaf.features.cfg; then
echo "Existing ONOS Karaf uses version different from $ONOS_POM_VERSION; forcing clean install..."
CLEAN="true"
fi
# If clean option was specified, wipe-out existing installation
if [ "$CLEAN" = "true" ]; then
echo "Removing existing ONOS Karaf, apps, data and config directories..."
[ -d $KARAF_ROOT ] && rm -fr $KARAF_ROOT $STAGE/apps $STAGE/data $STAGE/config
fi
# If IP was not given, nor configured attempt to use ONOS_NIC env. variable
if [ -z "$IP" -a -n "$ONOS_NIC" ]; then
IP=$(validateIp $ONOS_NIC)
[ -z "$IP" ] && echo "No adapter with IP matching $ONOS_NIC found!"
else
# Otherwise, verify that the IP address given exists among the adapters.
saveIp=$IP
IP=$(validateIp $IP)
[ -z "$IP" ] && echo "No adapter with IP $saveIp found!"
fi
# If IP is still not surmised or if usage was requested, show usage and IPs.
if [ -z "$IP" -o "$1" = "-?" -o "$1" = "-h" -o "$1" = "--help" ]; then
echo "usage: $(basename $0) [clean] [secure] <ip-address>"
echo "Available IP addresses are:"
validateIp .
exit 1
fi
SUBNET="$(echo $IP | cut -d. -f1-3)"
# Bail on any errors
set -e
# Check if Apache Karaf is already installed.
if [ ! -d $KARAF_ROOT ]; then
# Check if Apache Karaf bits are available and if not, fetch them.
if [ ! -f $KARAF_TAR ]; then
echo "Downloading $KARAF_TAR..."
curl -sL http://downloads.onosproject.org/third-party/apache-karaf-$KARAF_VERSION.tar.gz --create-dirs -o $KARAF_TAR
fi
[ ! -f $KARAF_ZIP -a ! -f $KARAF_TAR ] && \
echo "Apache Karaf bits $KARAF_ZIP or $KARAF_TAR not found" && exit 1
echo "Unpacking $KARAF_TAR to $STAGE..."
mkdir -p $STAGE
cd $STAGE
tar zxf $KARAF_TAR
rm -rf $KARAF_ROOT/demos
fi
if [ "$SECURE" = "true" ]; then
echo "Enabling security mode ONOS..."
# SM-ONOS step 1: downgrade felix config admin
FELIX_CFG_ADMIN=${FELIX_CFG_ADMIN:-~/Downloads/org.apache.felix.configadmin-1.6.0.jar}
if [ ! -f $FELIX_CFG_ADMIN ]; then
echo "Downloading $FELIX_CFG_ADMIN..."
curl -sL http://archive.apache.org/dist/felix/org.apache.felix.configadmin-1.6.0.jar > $FELIX_CFG_ADMIN
fi
[ ! -f $FELIX_CFG_ADMIN ] && \
echo "Felix config admin not found: $FELIX_CFG_ADMIN" && exit 1
mkdir -p $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
cp $FELIX_CFG_ADMIN $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
perl -pi.old -e "s|^(.*org.apache.felix.configadmin.*)|mvn\\\\:org.apache.felix/org.apache.felix.configadmin/1.6.0 = 10|" \
$KARAF_ROOT/etc/startup.properties
# SM-ONOS step 2: stage ONOS Felix framework security (will get downloaded on demand); end
# SM-ONOS step 3.1: configure karaf
perl -pi.old -e "s|#java.security.policy|java.security.policy|" \
$KARAF_ROOT/etc/system.properties
perl -pi.old -e "s|#org.osgi.framework.security|org.osgi.framework.security|" \
$KARAF_ROOT/etc/system.properties
fi
if ! grep -q "/onos-features/" $KARAF_ROOT/etc/org.apache.karaf.features.cfg; then
# Patch the Apache Karaf distribution file to add ONOS features repository
echo "Adding ONOS feature repository..."
perl -pi.old -e "s|^(featuresRepositories=.*)|featuresRepositories=mvn:org.apache.karaf.features/standard/$KARAF_VERSION/xml/features,mvn:org.onosproject/onos-features/$ONOS_POM_VERSION/xml/features|" \
$KARAF_ROOT/etc/org.apache.karaf.features.cfg
fi
if ! grep -q ",onos-api," $KARAF_ROOT/etc/org.apache.karaf.features.cfg; then
# Patch the Apache Karaf distribution file to load default ONOS boot features
BOOT_FEATURES="standard,ssh,webconsole"
if [ "$SECURE" = "true" ]; then
# SM-ONOS Step 3.2: add onos-security to featuresBoot
BOOT_FEATURES="$BOOT_FEATURES,onos-security"
fi
BOOT_FEATURES="$BOOT_FEATURES,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui"
echo "Adding ONOS boot features $BOOT_FEATURES..."
perl -pi.old -e "s|^(featuresBoot=.*)|featuresBoot=$BOOT_FEATURES|" \
$KARAF_ROOT/etc/org.apache.karaf.features.cfg
fi
if [ ! -f $KARAF_ROOT/lib/onos-branding-$ONOS_POM_VERSION.jar ]; then
# Patch the Apache Karaf distribution with ONOS branding bundle
echo "Branding as ONOS..."
rm -f $KARAF_ROOT/lib/onos-branding-*.jar
cp $M2_REPO/org/onosproject/onos-branding/$ONOS_POM_VERSION/onos-branding-$ONOS_POM_VERSION.jar \
$KARAF_ROOT/lib
fi
echo "Creating local cluster configs for IP $IP..."
[ -d $STAGE/config ] || mkdir -p $STAGE/config
cat > $STAGE/config/cluster.json <<EOF
{
"name": "default",
"nodes": [ {"id": "$IP", "ip": "$IP", "port": 9876 } ],
"partitions": [ { "id": 0, "members": [ "$IP" ] }, { "id": 1, "members": [ "$IP" ] } ]
}
EOF
if [ "$CLEAN" = "true" ]; then
echo "Copying package configs..."
cp -r $ONOS_ROOT/tools/package/etc/* $KARAF_ROOT/etc/
cp -r $ONOS_ROOT/tools/package/config/* $STAGE/config/
fi
echo "Staging builtin apps..."
rm -fr $STAGE/apps
onos-stage-apps $STAGE/apps $KARAF_ROOT/system
ACTIVE_APPS=${ONOS_APPS:-drivers,openflow}
echo "Customizing apps to be auto-activated: $ACTIVE_APPS..."
for app in ${ACTIVE_APPS//,/ }; do
touch $STAGE/apps/org.onosproject.$app/active
done