diff --git a/build.xml b/build.xml index 0f97f63306fe1d76a459e998bbfa036f1fb75e5c..ab4bffc7d817b536c08df37fbfef4ccc36831185 100644 --- a/build.xml +++ b/build.xml @@ -26,7 +26,7 @@ generated code. --> -<project default="dist" name="Floodlight"> +<project default="dist" name="floodlight"> <property name="target" location="target"/> <property name="build" location="${target}/bin"/> <property name="build-test" location="${target}/bin-test"/> @@ -82,6 +82,15 @@ </fileset> </path> + <patternset id="lib-package"> + <include name="jdeb-1.0.1.jar"/> + </patternset> + <path id="package-classpath"> + <fileset dir="${lib}"> + <patternset refid="lib-package"/> + </fileset> + </path> + <patternset id="lib-cobertura"> <include name="cobertura-1.9.4.1.jar"/> <include name="asm-3.0.jar"/> @@ -268,6 +277,46 @@ </jar> </target> + <target name="package"> <!-- depends="dist" //--> + <taskdef name="deb" + classname="org.vafer.jdeb.ant.DebAntTask" + classpathref="package-classpath"/> + + <copy todir="${target}/debian"> + <fileset dir="debian"/> + <filterset begintoken="[[" endtoken="]]"> + <filter token="version" value="1.9.0"/> + <filter token="name" value="${ant.project.name}"/> + </filterset> + </copy> + + <deb destfile="${target}/floodlight-1.9.0.deb" + control="${target}/debian/control"> + <data src="${floodlight-jar}" type="file"> + <mapper type="perm" prefix="/usr/share/floodlight/java"/> + </data> + <tarfileset dir="debian/misc/bin" prefix="/usr/bin" filemode="755"/> + <data src="debian/misc/logrotate/floodlight" type="file"> + <mapper type="perm" prefix="/etc/logrotate.d"/> + </data> + <data src="debian/misc/init/floodlight.conf" type="file"> + <mapper type="perm" prefix="/etc/init"/> + </data> + <data src="debian/misc/logback.xml" type="file"> + <mapper type="perm" prefix="/etc/floodlight"/> + </data> + <data src="debian/misc/rsyslog/10-floodlight.conf" type="file"> + <mapper type="perm" prefix="/etc/rsyslog.d"/> + </data> + <data src="debian/misc/default/floodlight" type="file"> + <mapper type="perm" prefix="/etc/default"/> + </data> + <data src="src/main/resources/floodlightdefault.properties" type="file"> + <mapper type="perm" prefix="/etc/floodlight"/> + </data> + </deb> + </target> + <target name="javadoc"> <javadoc access="protected" author="true" diff --git a/debian/control/control b/debian/control/control new file mode 100644 index 0000000000000000000000000000000000000000..088e7529f87c41b8c7cb9c81fdab10170f9b06e4 --- /dev/null +++ b/debian/control/control @@ -0,0 +1,14 @@ +Package: [[name]] +Version: [[version]] +Section: net +Priority: low +Maintainer: rob.adams@bigswitch.com +Architecture: all +Depends: adduser, + default-jre-headless | java6-runtime-headless +Description: Floodlight is a high performance Java based OpenFlow controller originally + written by David Erickson at Stanford University. + . + Floodlight supports a broad range of virtual and physical OpenFlow switches + and has rich support for mixed OpenFlow and non-OpenFlow networks supporting + management of multiple islands of OpenFlow switches. diff --git a/debian/control/dirs b/debian/control/dirs new file mode 100644 index 0000000000000000000000000000000000000000..262b10f9a89f13c810736c90be22800af96bfdaa --- /dev/null +++ b/debian/control/dirs @@ -0,0 +1,2 @@ +/var/log/floodlight +/var/lib/floodlight diff --git a/debian/control/floodlight.1 b/debian/control/floodlight.1 new file mode 100644 index 0000000000000000000000000000000000000000..80635073d7d13a860e182ac53853246ddeb9e188 --- /dev/null +++ b/debian/control/floodlight.1 @@ -0,0 +1,40 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH FLOODLIGHT 1 "May 14, 2012" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp <n> insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +floodlight \- An Apache licensed, Java based OpenFlow controller +.SH SYNOPSIS +.B floodlight +.RI [ options ] +.SH DESCRIPTION +This manual page documents briefly the +.B floodlight +command. +.PP +.\" TeX users may be more comfortable with the \fB<whatever>\fP and +.\" \fI<whatever>\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBfloodlight\fP is an Apache licensed, Java based OpenFlow controller. +.SH OPTIONS +.TP +.B \-cf, \-\-configFile FILE +Floodlight configuration file. +.SH AUTHOR +floodlight was written by David Erickson and Big Switch Networks. +.PP +This manual page was written by Rich Lane <rlane@bigswitch.com>, +for the Debian project (and may be used by others). diff --git a/debian/control/floodlight.upstart b/debian/control/floodlight.upstart new file mode 100644 index 0000000000000000000000000000000000000000..cf06c8e1799046da37420d7c46297c9ae8421929 --- /dev/null +++ b/debian/control/floodlight.upstart @@ -0,0 +1,26 @@ +# floodlight - A Java-based OpenFlow controller +# +# The Floodlight program configures network switches using the OpenFlow protocol. +# vim: set filetype=upstart : + +description "Floodlight controller" + +start on filesystem or runlevel [2345] +stop on runlevel [!2345] + +setuid floodlight +setgid floodlight + +respawn + +pre-start script + [ -f /usr/share/floodlight/java/floodlight.jar ] || exit 0 +end script + +script + . /etc/default/floodlight + exec java ${JVM_OPTS} -Dpython.home=/usr/share/jython \ + -Dlogback.configurationFile=/etc/floodlight/logback.xml \ + -jar /usr/share/floodlight/java/floodlight.jar \ + $DAEMON_OPTS 2>&1 >> /var/log/floodlight/floodlight.log +end script diff --git a/debian/control/manpages b/debian/control/manpages new file mode 100644 index 0000000000000000000000000000000000000000..bec775d2741b6ae5db26abc89c80c7f41cd13f97 --- /dev/null +++ b/debian/control/manpages @@ -0,0 +1 @@ +debian/floodlight.1 diff --git a/debian/control/postinst b/debian/control/postinst new file mode 100644 index 0000000000000000000000000000000000000000..a5f3176a54fdec4d2768d8df61872f5bf61003ea --- /dev/null +++ b/debian/control/postinst @@ -0,0 +1,33 @@ +#!/bin/sh -e + +NAME=floodlight + +case "$1" in + configure) + if ! id $NAME > /dev/null 2>&1 ; then + adduser --quiet --group --system --disabled-password \ + --no-create-home --home /dev/null $NAME + fi + mkdir -p /var/log/floodlight + mkdir -p /var/lib/floodlight + chown -R $NAME:$NAME /var/log/floodlight + chown -R $NAME:$NAME /var/lib/floodlight + if [ ! -f /etc/floodlight/auth_credentials.jceks ]; then + authtool -a CHALLENGE_RESPONSE \ + -ks /etc/floodlight/auth_credentials.jceks \ + -kp dcbc178a0a3a8674f048ac86372ac456 + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/control/postrm b/debian/control/postrm new file mode 100644 index 0000000000000000000000000000000000000000..79466b46e9eae5232778991aa4ead511c5c4dca5 --- /dev/null +++ b/debian/control/postrm @@ -0,0 +1,24 @@ +#!/bin/sh -e + +NAME=floodlight + +case "$1" in + purge) + deluser --quiet --system $NAME || true + delgroup --quiet --system $NAME || true + rm -f /etc/floodlight/auth_credentials.jceks + rm -rf /var/lib/floodlight/SyncDB + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/misc/bin/authtool b/debian/misc/bin/authtool new file mode 100644 index 0000000000000000000000000000000000000000..978f3d7899b1eaaf54173f014bff93cc15e18af8 --- /dev/null +++ b/debian/misc/bin/authtool @@ -0,0 +1,3 @@ +#!/bin/sh + +exec java -cp /usr/share/floodlight/java/floodlight.jar org.sdnplatform.sync.client.AuthTool "$@" diff --git a/debian/misc/bin/bootstraptool b/debian/misc/bin/bootstraptool new file mode 100644 index 0000000000000000000000000000000000000000..2ea61c566795d094b6cd99a48f9b24b06f5c87b2 --- /dev/null +++ b/debian/misc/bin/bootstraptool @@ -0,0 +1,3 @@ +#!/bin/sh + +exec java -cp /usr/share/floodlight/java/floodlight.jar org.sdnplatform.sync.client.BootstrapTool "$@" diff --git a/debian/misc/bin/floodlight b/debian/misc/bin/floodlight new file mode 100755 index 0000000000000000000000000000000000000000..c1fc4548b846bcb4c4caced408d0e05f310317be --- /dev/null +++ b/debian/misc/bin/floodlight @@ -0,0 +1,3 @@ +#!/bin/sh + +exec java -cp /usr/share/floodlight/java/floodlight.jar net.floodlightcontroller.core.Main "$@" diff --git a/debian/misc/bin/syncclient b/debian/misc/bin/syncclient new file mode 100644 index 0000000000000000000000000000000000000000..825cb268255544fdabb59c40c10b898674cefabb --- /dev/null +++ b/debian/misc/bin/syncclient @@ -0,0 +1,3 @@ +#!/bin/sh + +exec java -cp /usr/share/floodlight/java/floodlight.jar org.sdnplatform.sync.client.SyncClient "$@" diff --git a/debian/misc/default/floodlight b/debian/misc/default/floodlight new file mode 100644 index 0000000000000000000000000000000000000000..acac914e7d8843a842c2593010abba3abe80bc8c --- /dev/null +++ b/debian/misc/default/floodlight @@ -0,0 +1,18 @@ +# Options to pass to Floodlight. +DAEMON_OPTS="-cf /etc/floodlight/floodlightdefault.properties" +# Additional options to pass to the JVM +JVM_OPTS="" +# Sample performance options taken from upstream +JVM_OPTS="-server" +JVM_OPTS="$JVM_OPTS -ea" +JVM_OPTS="$JVM_OPTS -XX:MaxDirectMemorySize=128M" +JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC" +JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC" +JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled" +JVM_OPTS="$JVM_OPTS -XX:OnError='kill -9 %p'" +JVM_OPTS="$JVM_OPTS -XX:OnOutOfMemoryError='kill -9 %p'" +JVM_OPTS="$JVM_OPTS -Dpython.security.respectJavaAccessibility=false" +JVM_OPTS="$JVM_OPTS -Dnet.floodlightcontroller.packetstreamer.port=9090" +JVM_OPTS="$JVM_OPTS -Dlogback.configurationFile=/etc/floodlight/logback.xml" +JVM_OPTS="$JVM_OPTS -Dnet.floodlightcontroller.core.PTWarningThresholdInMilli=0" +JVM_OPTS="$JVM_OPTS -Dcom.bigswitch.floodlight.addressspace.EnableNetworkService=0" diff --git a/debian/misc/init/floodlight.conf b/debian/misc/init/floodlight.conf new file mode 100644 index 0000000000000000000000000000000000000000..4b58aa2c58d926d8fb727ab866a0b15429862308 --- /dev/null +++ b/debian/misc/init/floodlight.conf @@ -0,0 +1,14 @@ +start on runlevel [2345] +stop on runlevel [!2345] +respawn +kill timeout 30 +setuid floodlight +setgid floodlight + +script + if [ -f /etc/default/floodlight ]; then + . /etc/default/floodlight + fi + COMMAND="java ${JVM_OPTS} -cp /usr/share/floodlight/java/floodlight.jar net.floodlightcontroller.core.Main ${DAEMON_OPTS}" + exec /bin/bash -c "${COMMAND} 2>&1 | /usr/bin/logger -t floodlight -p user.info" +end script diff --git a/debian/misc/logback.xml b/debian/misc/logback.xml new file mode 100644 index 0000000000000000000000000000000000000000..18733bb71278dc76e60187eed8212b9438204b4b --- /dev/null +++ b/debian/misc/logback.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<configuration scan="true"> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%level [%logger{20}:%thread] %msg%n</pattern> + </encoder> + </appender> + <root level="INFO"> + <appender-ref ref="STDOUT"/> + </root> + <logger name="org" level="WARN"/> + <logger name="LogService" level="WARN"/> <!-- Restlet access logging --> + <logger name="net.floodlightcontroller" level="INFO"/> + <logger name="org.sdnplatform" level="INFO"/> +</configuration> diff --git a/debian/misc/logrotate/floodlight b/debian/misc/logrotate/floodlight new file mode 100644 index 0000000000000000000000000000000000000000..9ce9078a85dcfb3c7dcba955c90573366b5bd326 --- /dev/null +++ b/debian/misc/logrotate/floodlight @@ -0,0 +1,9 @@ +/var/log/floodlight/floodlight.log { + daily + copytruncate + missingok + rotate 7 + compress + delaycompress + notifempty +} diff --git a/debian/misc/rsyslog/10-floodlight.conf b/debian/misc/rsyslog/10-floodlight.conf new file mode 100644 index 0000000000000000000000000000000000000000..5bcc8f25fe6355a4328441f473e78a08e877c451 --- /dev/null +++ b/debian/misc/rsyslog/10-floodlight.conf @@ -0,0 +1,3 @@ +!floodlight +*.* /var/log/floodlight.log +!* diff --git a/lib/jdeb-1.0.1.jar b/lib/jdeb-1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..edef380c742c99178d03cd4ebd0cddc6aea5ab60 Binary files /dev/null and b/lib/jdeb-1.0.1.jar differ diff --git a/src/main/resources/floodlightdefault.properties b/src/main/resources/floodlightdefault.properties index c6c5afcf0ba9ea950f6e26143a366766ab9cf716..188e1b2c2757e38d32450fc3cec9433b93f24795 100644 --- a/src/main/resources/floodlightdefault.properties +++ b/src/main/resources/floodlightdefault.properties @@ -22,3 +22,7 @@ net.floodlightcontroller.core.internal.FloodlightProvider.openflowport = 6633 net.floodlightcontroller.jython.JythonDebugInterface.port = 6655 net.floodlightcontroller.forwarding.Forwarding.idletimeout = 5 net.floodlightcontroller.forwarding.Forwarding.hardtimeout = 0 +org.sdnplatform.sync.internal.SyncManager.dbPath=/var/lib/floodlight/ +org.sdnplatform.sync.internal.SyncManager.authScheme=CHALLENGE_RESPONSE +org.sdnplatform.sync.internal.SyncManager.keyStorePath=/etc/floodlight/auth_credentials.jceks +org.sdnplatform.sync.internal.SyncManager.keyStorePassword=dcbc178a0a3a8674f048ac86372ac456