From 8a0c20ea6f5f4e82f2701f4cbb508b9b855576b6 Mon Sep 17 00:00:00 2001 From: Brian O'Connor Date: Wed, 16 Sep 2015 22:54:24 -0700 Subject: [PATCH] Updating onos-package for debian packaging Change-Id: Icc3899b3a35ba0a02a97f5eddebfbe51ff6c1638 --- tools/build/onos-package | 18 +++++++----------- tools/package/deb/control | 8 ++++++++ tools/package/deb/copyright | 20 ++++++++++++++++++++ tools/package/deb/postinst | 16 ++++++++++++++++ tools/package/deb/prerm | 24 ++++++++++++++++++++++++ tools/package/init/onos.conf | 7 +++++-- 6 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 tools/package/deb/control create mode 100644 tools/package/deb/copyright create mode 100755 tools/package/deb/postinst create mode 100755 tools/package/deb/prerm diff --git a/tools/build/onos-package b/tools/build/onos-package index a1264c6e96..f47f5b666e 100755 --- a/tools/build/onos-package +++ b/tools/build/onos-package @@ -93,22 +93,16 @@ function build_compressed_package() { # Build a DEB package function build_deb() { - echo "You need to be root in order to generate a proper DEB package." + echo "This command may ask for your password to run commands as sudo," + echo " because you need to be root in order to generate a proper DEB package." sudo rm -fr $ONOS_DEB_ROOT mkdir -p $ONOS_DEB_ROOT/{DEBIAN,opt,etc/init} - { - echo "Package: ONOS" - echo "Architecture: all" - echo "Maintainer: ONOS Project" - echo "Depends: debconf (>= 0.5.00), default-jre-headless (>= 1.8) | openjdk-8-jre | oracle-java8-installer" - echo "Priority: optional" - echo "Version: $ONOS_POM_VERSION" - echo "Description: Open Network Operating System (ONOS) is an" - echo " opensource SDN controller." - } > $ONOS_DEB_ROOT/DEBIAN/control + # Copy the debian directory and fill in version + cp -r $ONOS_ROOT/tools/package/deb/* $ONOS_DEB_ROOT/DEBIAN/ + sed -i'' -E "s/@ONOS_POM_VERSION/$ONOS_POM_VERSION/" $ONOS_DEB_ROOT/DEBIAN/control cp -r $ONOS_STAGE $ONOS_DEB_ROOT/opt/onos cp $ONOS_ROOT/tools/package/init/onos.conf $ONOS_DEB_ROOT/etc/init/ @@ -119,6 +113,8 @@ function build_deb() { sudo dpkg-deb --build $ONOS_DEB_ROOT > /dev/null && sudo mv $ONOS_STAGE_ROOT/deb.deb $ONOS_DEB && ls -l $ONOS_DEB + + #TODO run lintian on .deb } # Build an RPM package diff --git a/tools/package/deb/control b/tools/package/deb/control new file mode 100644 index 0000000000..c581ac2583 --- /dev/null +++ b/tools/package/deb/control @@ -0,0 +1,8 @@ +Package: onos +Architecture: all +Maintainer: ONOS Project +Depends: debconf (>= 0.5.00), default-jre-headless (>= 1.8) | openjdk-8-jre | oracle-java8-installer +Priority: optional +Version: @ONOS_POM_VERSION +Description: Open Network Operating System (ONOS) + Open Network Operating System (ONOS) is an opensource SDN controller. diff --git a/tools/package/deb/copyright b/tools/package/deb/copyright new file mode 100644 index 0000000000..09ec05e31d --- /dev/null +++ b/tools/package/deb/copyright @@ -0,0 +1,20 @@ +Upstream-Name: onos +Source: http://github.com/opennetworkinglab/onos + +Files: * +Copyright: 2014-2015 Open Networking Laboratory +License: Apache 2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + . + On Debian systems, the complete text of the Apache License 2.0 can + be found in "/usr/share/common-licenses/Apache-2.0" diff --git a/tools/package/deb/postinst b/tools/package/deb/postinst new file mode 100755 index 0000000000..60de14a7c6 --- /dev/null +++ b/tools/package/deb/postinst @@ -0,0 +1,16 @@ +#!/bin/bash + +ONOS_USER=sdn + +# Check to see if user exists, and if not, create a service account +getent passwd $ONOS_USER >/dev/null 2&>1 || ( useradd -M $ONOS_USER && usermod -L $ONOS_USER ) + +# Create ONOS options file +[ ! -f /opt/onos/options ] && cat << EOF > /opt/onos/options +export ONOS_OPTS=server +export ONOS_USER="$ONOS_USER" +EOF + +# Change permissions for onos directory +[ -d /opt/onos ] && chown -R $ONOS_USER.$ONOS_USER /opt/onos + diff --git a/tools/package/deb/prerm b/tools/package/deb/prerm new file mode 100755 index 0000000000..5e8ace3064 --- /dev/null +++ b/tools/package/deb/prerm @@ -0,0 +1,24 @@ +#!/bin/bash + +# Check if onos is running; if it is, stop onos +[ -z "$(status onos 2>/dev/null | grep start)" ] && echo "onos is not running." || ( + stop onos + + # Wait for onos to stop up to 5 seconds + for i in $(seq 1 5); do + [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && break + sleep 1 + done + [ -z "$(ps -ef | grep karaf.jar | grep -v grep)" ] && echo 'Stopped onos service' || echo 'Failed to stop onos' + ps -ef | grep karaf.jar | grep -v grep +) + +# Clean up onos runtime directories +# TODO don't hardcode karaf version +rm -rf /opt/onos/apache-karaf-3.0.3/ +rm -rf /opt/onos/var/* +rm -rf /opt/onos/config +rm -rf /opt/onos/options +rm -rf /opt/onos/log + +#TODO consider removing the sdn user if we created it diff --git a/tools/package/init/onos.conf b/tools/package/init/onos.conf index f415f8e5bb..779df9050d 100644 --- a/tools/package/init/onos.conf +++ b/tools/package/init/onos.conf @@ -13,9 +13,12 @@ respawn env LANG=en_US.UTF-8 pre-start script + [ -f /opt/onos/options ] && . /opt/onos/options + ONOS_USER=${ONOS_USER:-root} + # Ensure that the environment is initialized - [ -d /opt/onos ] && mkdir -p /opt/onos/var - [ -d /opt/onos ] && mkdir -p /opt/onos/config + [ -d /opt/onos ] && mkdir /opt/onos/var 2>/dev/null && chown $ONOS_USER.$ONOS_USER /opt/onos/var + [ -d /opt/onos ] && mkdir /opt/onos/config 2>/dev/null && chown $ONOS_USER.$ONOS_USER /opt/onos/config # TODO make karaf version configurable [ -d /opt/onos ] && [ ! -h /opt/onos/log ] \ && ln -s /opt/onos/apache-karaf-3.0.3/data/log /opt/onos/log || :