| #!/bin/bash |
| # ----------------------------------------------------------------------------- |
| # Remotely configures & starts ONOS for the first time. |
| # ----------------------------------------------------------------------------- |
| |
| function _usage () { |
| cat << _EOF_ |
| usage: |
| $(basename $0) [node] |
| |
| options: |
| - [node] : The node to configure |
| |
| summary: |
| Remotely configures and starts ONOS for the first time. |
| |
| The procedure for configruing a node include determining base features, |
| applications to load at startup, and clustering and logical network view |
| configurations, among others. |
| |
| If [node] isn't specified, the defualt target becomes \$OCI. |
| |
| _EOF_ |
| } |
| |
| [ "$1" = "-h" ] && _usage && exit 0 |
| |
| [ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 |
| . $ONOS_ROOT/tools/build/envDefaults |
| |
| node=${1:-$OCI} |
| remote=$ONOS_USER@$node |
| |
| # ONOS boot features |
| export ONOS_BOOT_FEATURES="${ONOS_BOOT_FEATURES:-webconsole,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui}" |
| |
| # ONOS builtin apps and providers ignited by default |
| export ONOS_APPS="${ONOS_APPS:-drivers,openflow}" |
| |
| # Generate a cluster.json from the ON* environment variables |
| CDEF_FILE=/tmp/${remote}.cluster.json |
| echo "{ \"ipPrefix\": \"$ONOS_NIC\"," > $CDEF_FILE |
| echo " \"nodes\":[" >> $CDEF_FILE |
| for node in $(env | sort | egrep "OC[2-9]+" | cut -d= -f2); do |
| echo " { \"id\": \"$node\", \"ip\": \"$node\", \"tcpPort\": 9876 }," >> $CDEF_FILE |
| done |
| echo " { \"id\": \"$OC1\", \"ip\": \"$OC1\", \"tcpPort\": 9876 }" >> $CDEF_FILE |
| echo "]}" >> $CDEF_FILE |
| scp -q $CDEF_FILE $remote:$ONOS_INSTALL_DIR/config/cluster.json |
| |
| ssh $remote " |
| echo \"onos.ip = \$(sudo ifconfig | grep $ONOS_NIC | cut -d: -f2 | cut -d\\ -f1)\" \ |
| >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/system.properties |
| |
| # Drop copycat related log level for the console |
| echo "log4j.logger.net.kuujo.copycat= INFO" \ |
| >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg |
| |
| # Patch the Apache Karaf distribution file to load ONOS boot features |
| perl -pi.old -e \"s|^(featuresBoot=.*,management)(,webconsole,.*)|\1,$ONOS_BOOT_FEATURES|\" \ |
| $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.apache.karaf.features.cfg |
| |
| # Customize which builtin apps should be ignited |
| for app in $(echo $ONOS_APPS | tr ',' ' '); do |
| touch $ONOS_INSTALL_DIR/apps/org.onosproject.\$app/active |
| done |
| " |
| |
| # Generate a default tablets.json from the ON* environment variables |
| TDEF_FILE=/tmp/${remote}.tablets.json |
| onos-gen-partitions $TDEF_FILE |
| scp -q $TDEF_FILE $remote:$ONOS_INSTALL_DIR/config/tablets.json |
| |
| # Copy tools/package/config/ to remote |
| scp -qr ${ONOS_ROOT}/tools/package/config/ $remote:$ONOS_INSTALL_DIR/ |
| |
| # Copy the desired initial network configuration to remote if needed |
| [ -n "$ONOS_CFG" -a -f "$ONOS_CFG" -a "${1:-$OCI}" = "$OC1" ] && \ |
| scp $ONOS_CFG $remote:$ONOS_INSTALL_DIR/config/network-cfg.json |