aboutsummaryrefslogtreecommitdiffstats
path: root/onos-package
blob: 1702b7ec8ff56b03aebc84f71ab0e630e2c54301 (plain)
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#!/bin/bash
# -----------------------------------------------------------------------------
# Packages ONOS distributable into onos.tar.gz, onos.zip or a deb file
# -----------------------------------------------------------------------------

##### Set build environment #####
export M2_REPO=${M2_REPO:-~/.m2/repository}
export PATH="$PATH:$ONOS_ROOT/tools/dev/bin:$ONOS_ROOT/tools/test/bin"
export PATH="$PATH:$ONOS_ROOT/tools/build"
export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)~$(date +'%Y/%m/%d@%H:%M')}
export ONOS_VERSION=${ONOS_VERSION:-1.3.0}
export ONOS_BITS=onos-${ONOS_VERSION%~*}
export ONOS_STAGE=$ONOS_STAGE_ROOT/$ONOS_BITS
export ONOS_DEB_ROOT=$ONOS_STAGE_ROOT/deb
export ONOS_DEB=$ONOS_STAGE.deb
export ONOS_RPM_ROOT=$ONOS_STAGE_ROOT/rpm
export ONOS_RPM=$ONOS_STAGE.rpm
export ONOS_RPM_VERSION=${ONOS_POM_VERSION//-/.}
export ONOS_TAR=$ONOS_STAGE.tar.gz
export KARAF_VERSION=3.0.3
export KARAF_TAR=$ONOS_STAGE/apache-karaf-$KARAF_VERSION.tar.gz
export KARAF_DIST=apache-karaf-$KARAF_VERSION
##### End set build environment #####

set -e

# Build the staging directory used to produce the packages
function build_stage_dir() {
    # Make sure we have the original apache karaf bits first
    [ ! -d $M2_REPO ] && echo "M2 repository $M2_REPO not found" && exit 1
#    [ -d $ONOS_STAGE ] && echo "ONOS stage $ONOS_STAGE already exists" && exit 1
    if [ -d $ONOS_STAGE ]; then
       cd $ONOS_STAGE
    else 
        mkdir -p $ONOS_STAGE
        cd $ONOS_STAGE
    fi
    # Create the stage directory and warp into it
   # mkdir -p $ONOS_STAGE
   # cd $ONOS_STAGE

    # Check if Apache Karaf bits are available and if not, fetch them.
   # if [ ! -f $KARAF_ZIPi -a ! -f $KARAF_TAR ]; then
        echo "Downloading $KARAF_TAR..."
        wget http://downloads.onosproject.org/third-party/apache-karaf-$KARAF_VERSION.tar.gz 
   # fi
    #[ ! -f $KARAF_ZIP -a ! -f $KARAF_TAR ] && \
    #    echo "Apache Karaf bits $KARAF_ZIP or $KARAF_TAR not found" && exit 1

   # Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
   # [ -f $KARAF_ZIP ] && unzip -q $KARAF_ZIP && rm -rf $ONOS_STAGE/$KARAF_DIST/demos
   # [ -f $KARAF_TAR ] && tar zxf $KARAF_TAR && rm -rf $ONOS_STAGE/$KARAF_DIST/demos
    echo $KARAF_TAR 
    tar zxf $KARAF_TAR
    mkdir bin

    # Patch the log-file size in place to increase it to 10 MB
    perl -pi.old -e "s/maxFileSize=1MB/maxFileSize=10MB/g" \
        $ONOS_STAGE/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg

    # Stage the ONOS admin scripts and patch in Karaf service wrapper extras
    cp -r $ONOS_ROOT/tools/package/bin .
    cp -r $ONOS_ROOT/tools/package/init $ONOS_STAGE/init
    cp -r $ONOS_ROOT/tools/package/etc/* $ONOS_STAGE/$KARAF_DIST/etc

    # Stage all builtin ONOS apps for factory install
    onos-stage-apps $ONOS_STAGE/apps $ONOS_STAGE/$KARAF_DIST/system

    # Mark the org.onosproject.drivers app active by default
    touch $ONOS_STAGE/apps/org.onosproject.drivers/active

    # Patch-in proper Karaf version into the startup script
    sed "s/\$KARAF_VERSION/$KARAF_VERSION/g" \
        $ONOS_ROOT/tools/package/bin/onos-service > bin/onos-service
    sed "s/\$KARAF_VERSION/$KARAF_VERSION/g" \
        $ONOS_ROOT/tools/package/bin/onos-client > bin/onos
    chmod a+x bin/onos-service bin/onos

    if [ -d $ONOS_ROOT/tools/package/karaf-assembly/target/repo ]; then
        cp -r $ONOS_ROOT/tools/package/karaf-assembly/target/repo/* $ONOS_STAGE/$KARAF_DIST/system
        #FIXME we need to add onos-features manually
        mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/onosproject/onos-features/$ONOS_POM_VERSION
        cp $M2_REPO/org/onosproject/onos-features/$ONOS_POM_VERSION/onos-features* \
           $ONOS_STAGE/$KARAF_DIST/system/org/onosproject/onos-features/$ONOS_POM_VERSION
    else
        # TODO: Deprecated so remove when confident staging works.
        # Stage the ONOS bundles, but only those that match the version
        mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/onosproject
        find $M2_REPO/org/onosproject -type f -path "*/$ONOS_POM_VERSION/*" \
            \( -name '*.jar' -o -name '*.pom' -o -name '*-features.xml' \) \
                | grep -v -Ee '-tests.jar|-[0-9]{8}.[0-9]{6}-' \
                | while read src; do
            dst=$ONOS_STAGE/$KARAF_DIST/system/${src#$M2_REPO/*}
            mkdir -p $(dirname $dst)
            cp $src $dst
        done
    fi

    # ONOS Patching ----------------------------------------------------------------

    # Patch the Apache Karaf distribution file to add ONOS features repository
    perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.onosproject/onos-features/$ONOS_POM_VERSION/xml/features|" \
        $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg

    # Patch the Apache Karaf distribution file to load default ONOS boot features
    export BOOT_FEATURES="webconsole,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui"
    perl -pi.old -e "s|^(featuresBoot=.*)|\1,$BOOT_FEATURES|" \
        $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg

    # Patch the Apache Karaf distribution with ONOS branding bundle
    cp $M2_REPO/org/onosproject/onos-branding/$ONOS_POM_VERSION/onos-branding-*.jar \
        $ONOS_STAGE/$KARAF_DIST/lib

    # Patch in the ONOS version file
    echo $ONOS_VERSION > $ONOS_STAGE/VERSION
}

function build_compressed_package() {
    # Package up the ONOS tar file
    cd $ONOS_STAGE_ROOT
    rm -f $ONOS_TAR $ONOS_ZIP
    COPYFILE_DISABLE=1 tar zcf $ONOS_TAR $ONOS_BITS

    # Figure out whether we should build ONOS zip file and if so, build it.
    which zip >/dev/null && [ -z "$ONOS_TAR_ONLY" ] && buildZip=true || unset buildZip
    [ -n "$buildZip" ] && zip -rq $ONOS_ZIP $ONOS_BITS

    # Report on the archives that were built and clean-up
    [ -n "$buildZip" ] && ls -lh $ONOS_TAR $ONOS_ZIP || ls -lh $ONOS_TAR
    rm -r $ONOS_STAGE
}

# Build a DEB package
function build_deb() {
    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}

    # 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/

    mkdir -p $ONOS_DEB_ROOT/opt/onos/var/

    sudo chown -R root:root $ONOS_DEB_ROOT

    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
function build_rpm() {
    read -r -p "WARN: rpm-build utility and root priviledges are need to build the package. Do you want to continue? [Y/n] " response
    [[ "$response" =~ ^[Nn] ]] && exit 0

    sudo rm -fr $ONOS_RPM_ROOT

    sudo yum -y install rpm-build

    mkdir -p $ONOS_RPM_ROOT/{BUILD,RPMS,SOURCES/onos-$ONOS_RPM_VERSION/{etc/init,opt},SPECS,SRPMS}

    cp -r $ONOS_STAGE $ONOS_RPM_ROOT/SOURCES/onos-$ONOS_RPM_VERSION/opt/onos
    cp $ONOS_ROOT/tools/package/init/onos.conf $ONOS_RPM_ROOT/SOURCES/onos-$ONOS_RPM_VERSION/etc/init/

    cd $ONOS_RPM_ROOT/SOURCES
    COPYFILE_DISABLE=1 tar zcf onos-$ONOS_RPM_VERSION.tar.gz onos-$ONOS_RPM_VERSION

    cp $ONOS_ROOT/tools/package/rpm/onos.spec $ONOS_RPM_ROOT/SPECS/
    sed -i'' -E "s/@ONOS_RPM_VERSION/$ONOS_RPM_VERSION/g" $ONOS_RPM_ROOT/SPECS/onos.spec

    rpmbuild --define "_topdir $ONOS_RPM_ROOT" -bb $ONOS_RPM_ROOT/SPECS/onos.spec

    cp $ONOS_RPM_ROOT/RPMS/noarch/onos-$ONOS_RPM_VERSION-1.noarch.rpm $ONOS_STAGE_ROOT && ls -l $ONOS_STAGE_ROOT/onos-$ONOS_RPM_VERSION-1.noarch.rpm
}

## Script entry point
#[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
#. $ONOS_ROOT/tools/build/envDefaults

# Bail on any errors
set -e

## Run karaf assembly to collect artifacts for off-line installations.
#aux=/tmp/assembly-$$.log
#trap "rm -f $aux 2>/dev/null" EXIT
#cd $ONOS_ROOT/tools/package/karaf-assembly && mvn clean install > $aux 2>&1

## Before starting make sure the environment is clan - delete onos staging folder
#rm -fr $ONOS_STAGE

# If there are parameters check if we want to build a deb - otherwise build tar.gz
case ${1:---tar} in
    "--tar" | "-T") build_stage_dir
                    build_compressed_package
    ;;
    "--deb" | "-D") build_stage_dir
                    build_deb
    ;;
    "--rpm" | "-R") build_stage_dir
                    build_rpm
    ;;
    *) echo "usage: $(basename $0) [--tar|--deb|--rpm]" >&2 && exit 1
    ;;
esac