build_helper.bash 38 KB
Newer Older
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
################################################################################
#   OpenAirInterface
#   Copyright(c) 1999 - 2014 Eurecom
#
#    OpenAirInterface is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#
#    OpenAirInterface is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with OpenAirInterface.The full GNU General Public License is
#    included in this distribution in the file called "COPYING". If not,
#    see <http://www.gnu.org/licenses/>.
#
#  Contact Information
#  OpenAirInterface Admin: openair_admin@eurecom.fr
#  OpenAirInterface Tech : openair_tech@eurecom.fr
#  OpenAirInterface Dev  : openair4g-devel@eurecom.fr
#
#  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_helper.bash
# brief
# author Lionel Gauthier and Navid Nikaein
# company Eurecom
# email: lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr 
#
#######################################
#            Helper Func
######################################

39 40 41 42 43 44 45 46 47 48 49
declare ROOT_UID=0
declare E_NOTROOT=67
declare NUM_CPU=`cat /proc/cpuinfo | grep processor | wc -l`
declare OAI_INSTALLED=1
declare PWD=`pwd`
declare USER=`whoami`
declare BUILD_FROM_MAKEFILE=0
declare SUDO=''
declare PW=''
declare UBUNTU_REL=`lsb_release -r | cut  -f2`
declare UBUNTU_REL_NAME=`lsb_release -cs`
50 51 52 53

set_build_from_makefile(){
    BUILD_FROM_MAKEFILE=$1   
}
nikaeinn's avatar
nikaeinn committed
54

55
check_for_root_rights() {
56 57 58
    
  #  if [[ $EUID -ne $ROOT_EUID ]]; then
    if [ $USER != "root" ]; then
59
        SUDO="sudo -E "
60 61
        echo "Run as a sudoers" 
        return 1
62
    else 
63 64
        echo  "Run as a root" 
        return 0
65 66 67 68 69 70 71 72 73 74 75
    fi
}

test_install_package() {
  # usage: test_install_package package_name
 
 if [ $# -eq 1 ]; then
      dpkg -s "$1" > /dev/null 2>&1 && {
          echo "$1 is installed." 
      } || {
          echo "$1 is not installed." 
76
          OAI_INSTALLED=0
77
          $SUDO apt-get install -y $@
78 79 80 81
      }
  fi
}

nikaeinn's avatar
nikaeinn committed
82 83 84 85
test_uninstall_package() {
  
 if [ $# -eq 1 ]; then
      dpkg -s "$1" > /dev/null 2>&1 && {
86 87
          $SUDO apt-get remove --assume-yes $1  
          echo "$1 is uninstalled." 
nikaeinn's avatar
nikaeinn committed
88 89 90 91 92
      } || {
          echo "$1 is not installed." 
      }
  fi
}
93 94 95 96 97 98 99 100 101 102
test_command_install_script() {
  # usage: test_command_install_script searched_binary script_to_be_invoked_if_binary_not_found
  command -v $1 >/dev/null 2>&1 || { echo_warning "Program $1 is not installed. Trying installing it." >&2; bash $2; command -v $1 >/dev/null 2>&1 || { echo_fatal "Program $1 is not installed. Aborting." >&2; };}
  echo_success "$1 available"
}


check_for_machine_type(){
    MACHINE_TYPE=`uname -m`
    if [ ${MACHINE_TYPE} = "x86_64" ]; then
103
        return 64  # 64-bit stuff here
104
    else
105
        if [ ${MACHINE_TYPE} = "i686" ]; then
106
            return 32 # 32-bit stuff here
107 108 109
        else 
            return -1 
        fi
110 111 112 113 114 115 116 117 118 119 120 121
    fi
}

####################################################
## OAI related functions
#####################################################

####################################################
# 1. install the required packages 
####################################################

make_certs(){
nikaeinn's avatar
nikaeinn committed
122 123

 # for certtificate generation
124
    rm -rf demoCA
nikaeinn's avatar
nikaeinn committed
125
    mkdir -m 777 -p demoCA
126 127
    echo 01 > demoCA/serial
    touch demoCA/index.txt
nikaeinn's avatar
nikaeinn committed
128 129 130
    
    echo "creating the certificate"
    
131
    user=$(whoami)
132
    HOSTNAME=$(hostname -f)
133 134 135 136 137 138

    echo "Creating certificate for user '$HOSTNAME'"
    
# CA self certificate
    openssl req  -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -subj /CN=eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
    
139 140 141 142 143
   # openssl genrsa -out user.key.pem 1024
    openssl genrsa -out hss.key.pem 1024
    #openssl req -new -batch -out user.csr.pem -key user.key.pem -subj /CN=$HOSTNAME.eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
    openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=hss.eur/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM
    openssl ca -cert cacert.pem -keyfile cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch
144 145
    
    if [ ! -d /usr/local/etc/freeDiameter ];  then
146 147
        echo "Creating non existing directory: /usr/local/etc/freeDiameter/"
        $SUDO mkdir /usr/local/etc/freeDiameter/
148 149
    fi
    
150 151 152
    echo "Copying *.pem to /usr/local/etc/freeDiameter/"
    $SUDO cp *.pem /usr/local/etc/freeDiameter/
    mv *.pem bin/
153 154 155 156 157 158 159
    
# openssl genrsa -out ubuntu.key.pem 1024
# openssl req -new -batch -x509 -out ubuntu.csr.pem -key ubuntu.key.pem -subj /CN=ubuntu.localdomain/C=FR/ST=BdR/L=Aix/O=fD/OU=Tests
# openssl ca -cert cacert.pem -keyfile cakey.pem -in ubuntu.csr.pem -out ubuntu.cert.pem -outdir . -batch

}

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
check_install_nettle(){
    if [ ! -f ./.lock_oaibuild ]; then 
	if [ $UBUNTU_REL = "12.04" ]; then 
	    test_uninstall_package nettle-dev
	    test_uninstall_package nettle-bin
	
	    if [ ! -d /usr/local/src/ ]; then
		echo "/usr/local/src/ doesn't exist please create one"
		exit -1
	    fi
	    
	    if [ ! -w /usr/local/src/ ];  then
		echo "You don't have permissions to write to /usr/local/src/, installing as a sudoer"
		#	exit -1
	    fi
	    
	    cd /usr/local/src/
	    
	    echo "Downloading nettle archive"
	    
	    if [ -f nettle-2.5.tar.gz ]; then
		$SUDO rm -f nettle-2.5.tar.gz
	    fi
	    if [ -f nettle-2.5.tar ]; then
		$SUDO rm -f nettle-2.5.tar
	    fi
	    if [ -d nettle-2.5 ];  then
		$SUDO rm -rf nettle-2.5/
	    fi
	    
	    
	    $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz 
	    $SUDO gunzip nettle-2.5.tar.gz 
	    $SUDO echo "Uncompressing nettle archive"
	    $SUDO tar -xf nettle-2.5.tar
	    cd nettle-2.5/
	    $SUDO ./configure --disable-openssl --enable-shared --prefix=/usr 
	    if [ $? -ne 0 ]; then
		exit -1
	    fi
	    echo "Compiling nettle"
	    $SUDO make -j $NUM_CPU  
	    $SUDO make check 
	    $SUDO make install 
	    cd ../
	fi
    fi
}

209 210
check_install_freediamter(){
    
211
    if [ $UBUNTU_REL = "12.04" ]; then 
nikaeinn's avatar
nikaeinn committed
212

213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
	if [ ! -d /usr/local/src/ ]; then
	    echo "/usr/local/src/ doesn't exist please create one"
	    exit -1
	fi
	
	if [ ! -w /usr/local/src/ ];  then
	    echo "You don't have permissions to write to /usr/local/src/, installing as a sudoer"
#	exit -1
	fi
	
	cd /usr/local/src/
	
	echo "Downloading nettle archive"
	
	if [ -f nettle-2.5.tar.gz ]; then
	    $SUDO rm -f nettle-2.5.tar.gz
	fi
	if [ -f nettle-2.5.tar ]; then
	    $SUDO rm -f nettle-2.5.tar
	fi
	if [ -d nettle-2.5 ];  then
	    $SUDO rm -rf nettle-2.5/
	fi
	
	
	$SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz 
	$SUDO gunzip nettle-2.5.tar.gz 
	$SUDO echo "Uncompressing nettle archive"
	$SUDO tar -xf nettle-2.5.tar
	cd nettle-2.5/
	$SUDO ./configure --disable-openssl --enable-shared --prefix=/usr 
	if [ $? -ne 0 ]; then
	    exit -1
	fi
	echo "Compiling nettle"
	$SUDO make -j $NUM_CPU  
	$SUDO make check 
	$SUDO make install 
	cd ../
252 253 254 255
    fi
    
    echo "Downloading gnutls archive"
    
256 257
    if [ -f gnutls-3.1.23.tar.xz ];  then
	$SUDO rm -f gnutls-3.1.23.tar.xz
258
    fi
259 260
    if [ -d gnutls-3.1.23/ ];  then
	$SUDO rm -rf gnutls-3.1.23/
261
    fi
262
    
nikaeinn's avatar
nikaeinn committed
263
    test_uninstall_package libgnutls-dev
264
    
265 266
    $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz 
    $SUDO tar -xf gnutls-3.1.23.tar.xz
nikaeinn's avatar
nikaeinn committed
267
    echo "Uncompressing gnutls archive ($PWD)"
268
    cd gnutls-3.1.23/
269 270 271 272 273 274 275 276
    $SUDO ./configure --prefix=/usr
    if [ $? -ne 0 ];   then
	exit -1
    fi
    echo "Compiling gnutls"
    $SUDO make -j $NUM_CPU 
    $SUDO make install 
    cd ../
277
    
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
    echo "Downloading freeDiameter archive"
    
    if [ -f 1.1.5.tar.gz ];  then
	$SUDO rm -f 1.1.5.tar.gz
    fi
    if [ -d freeDiameter-1.1.5/ ];   then
	$SUDO rm -rf freeDiameter-1.1.5/
    fi
    
    $SUDO wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz 
    $SUDO tar -xzf 1.1.5.tar.gz 
    echo "Uncompressing freeDiameter archive"
    cd freeDiameter-1.1.5
    $SUDO patch -p1 < $OPENAIRCN_DIR/S6A/freediameter/freediameter-1.1.5.patch 
    $SUDO mkdir build
    cd build
    $SUDO cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ 
    if [ $? -ne 0 ];  then
	exit -1
    fi
    echo "Compiling freeDiameter"
    $SUDO make -j $NUM_CPU 
#make help
    $SUDO make test 
    $SUDO sudo make install 
  
304
#    make_certs
305 306 307
   
}

nikaeinn's avatar
nikaeinn committed
308 309

test_is_host_reachable() {
gauthier's avatar
gauthier committed
310 311
    ping -c 1 $1 > /dev/null || { echo_fatal "$2 host $1 does not respond to ping" >&2 ; }
    echo_success "$2 host $1 is reachable"
nikaeinn's avatar
nikaeinn committed
312 313 314
}


315 316 317 318 319 320 321 322 323
check_epc_s6a_certificate() {
    if [ -d /usr/local/etc/freeDiameter ]
    then
        if [ -f /usr/local/etc/freeDiameter/user.cert.pem ]
        then
            full_hostname=`cat /usr/local/etc/freeDiameter/user.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6`
            if [ a$full_hostname == a`hostname`.${1:-'eur'} ]
            then
                echo_success "EPC S6A: Found valid certificate in /usr/local/etc/freeDiameter"
gauthier's avatar
gauthier committed
324
                return 0
325 326 327 328 329 330 331
            fi
        fi
    fi
    echo_error "EPC S6A: Did not find valid certificate in /usr/local/etc/freeDiameter"
    echo_warning "EPC S6A: generatting new certificate in /usr/local/etc/freeDiameter..."
    cd $OPENAIRCN_DIR/S6A/freediameter
    ./make_certs.sh ${1:-'eur'}
332
    if [ $# -lt 2 ] ; then
333 334
        check_epc_s6a_certificate ${1:-'eur'}  2
        return $?
nikaeinn's avatar
nikaeinn committed
335 336
    else
       exit 1
337 338 339 340
    fi
}


341
check_hss_s6a_certificate() {
342
    if [ -d /usr/local/etc/freeDiameter ]; then
343 344
        if [ -f /usr/local/etc/freeDiameter/hss.cert.pem ];  then
            full_hostname=`cat /usr/local/etc/freeDiameter/hss.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6`
345 346 347
            if [ a$full_hostname == a`hostname`.${1:-'eur'} ]
            then
                echo_success "HSS S6A: Found valid certificate in /usr/local/etc/freeDiameter"
348
                return 0
349 350
            else 
                echo_error "Bad hss hostname found in cert file: "$full_hostname " hostname is "`hostname`
351 352 353 354 355
            fi
        fi
    fi
    echo_error "S6A: Did not find valid certificate in /usr/local/etc/freeDiameter"
    echo_warning "S6A: generatting new certificate in /usr/local/etc/freeDiameter..."
356 357 358
    cd $OPENAIRCN_DIR/OPENAIRHSS/conf
    ./make_certs.sh ${1:-'eur'}
    if [ $# -lt 2 ] ; then
359 360
        check_hss_s6a_certificate ${1:-'eur'} 2
        return $?
gauthier's avatar
gauthier committed
361 362
    else
       exit 1
363
    fi
364 365
}

366 367
check_install_usrp_uhd_driver(){
    if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then 
368 369
        $SUDO bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/`lsb_release -cs` `lsb_release -cs` main" >> /etc/apt/sources.list.d/ettus.list'
        $SUDO apt-get update
370 371
    fi 
    $SUDO apt-get install -t $UBUNTU_REL_NAME uhd
372 373 374
    test_install_package python 
    test_install_package libboost-all-dev 
    test_install_package libusb-1.0-0-dev
375 376 377
    #test_install_package uhd
}

378 379 380
check_install_oai_software() {
    
    if [ ! -f ./.lock_oaibuild ]; then 
381 382 383 384
        $SUDO apt-get update
        if [ $UBUNTU_REL = "12.04" ]; then 
            test_uninstall_package nettle-dev
            test_uninstall_package nettle-bin
385 386 387
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
388 389 390 391 392
        fi 
        test_install_package autoconf 
        test_install_package automake 
        test_install_package bison 
        test_install_package build-essential
gauthier's avatar
gauthier committed
393
        test_install_package dialog
394 395 396 397 398 399 400 401
        test_install_package flex 
        test_install_package gawk
        test_install_package gcc
        test_install_package gdb 
        test_install_package make
        test_install_package cmake
        test_install_package openssh-client
        test_install_package openssh-server
402
        sudo service ssh start
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
        test_install_package unzip 
        test_install_package autoconf
        test_install_package automake
        test_install_package bison
        test_install_package build-essential
        test_install_package check
        test_install_package ethtool
        test_install_package flex
        test_install_package g++
        test_install_package gawk
        test_install_package gcc
        test_install_package gccxml
        test_install_package gdb 
        test_install_package guile-2.0-dev
        test_install_package iperf
        test_install_package iproute
        test_install_package iptables
        test_install_package libatlas-base-dev
        test_install_package libatlas-dev
        test_install_package libblas3gf
        test_install_package libblas-dev
424 425 426 427 428
#	if [ $MACHINE_ARCH = 64 ]; then
            test_install_package libconfig8-dev
#	else
#            test_install_package libconfig-dev
#	fi
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
        test_install_package libforms-bin
        test_install_package libforms-dev
        test_install_package libgcrypt11-dev
        test_install_package libgmp-dev
        test_install_package libgtk-3-dev
        test_install_package libidn11-dev
        test_install_package libidn2-0-dev
        test_install_package libpgm-dev
        test_install_package libpgm-5.1-0
        test_install_package libpthread-stubs0-dev
        test_install_package libsctp1
        test_install_package libsctp-dev
        test_install_package libtasn1-3-dev
        test_install_package libxml2
        test_install_package libxml2-dev
#       test_install_package linux-headers-`uname -r`
        test_install_package openssl
        test_install_package libssl-dev 
        test_install_package pkg-config
        test_install_package python-dev
        test_install_package python-pexpect
        test_install_package sshfs
        test_install_package subversion
        test_install_package valgrind
        test_install_package doxygen
        test_install_package graphviz
455
	
456
#        test_install_package libboost-all-dev
457
	
458 459 460
        if [ $OAI_INSTALLED = 1 ]; then 
            touch ./.lock_oaibuild
        fi 
461 462
    
     else
463
        echo_info "All the required packages installed: skip"
464 465 466
    fi 
    
}
467

468 469
check_install_hss_software() {
    if [ ! -f ./.lock_oaibuild ]; then 
470 471 472 473
        $SUDO apt-get update
        if [ $UBUNTU_REL = "12.04" ]; then 
            test_uninstall_package nettle-dev
            test_uninstall_package nettle-bin
474 475 476
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
477
        fi 
478 479 480 481 482 483
	test_install_package autoconf 
	test_install_package automake 
	test_install_package bison 
	test_install_package build-essential
	test_install_package cmake
	test_install_package cmake-curses-gui 
gauthier's avatar
gauthier committed
484 485
    test_install_package dialog
    test_install_package dkms
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
	test_install_package flex 
	test_install_package gawk
	test_install_package gcc
	test_install_package gdb 
	test_install_package guile-2.0-dev 
	test_install_package g++
	test_install_package libgmp-dev 
	test_install_package libgcrypt11-dev 
	test_install_package libidn11-dev 
	test_install_package libidn2-0-dev 
	test_install_package libmysqlclient-dev 
	test_install_package libtasn1-3-dev 
	test_install_package libsctp1 
	test_install_package libsctp-dev 
	test_install_package libxml2-dev 
501
#	test_install_package linux-headers-`uname -r` 
502
	test_install_package make
503
	test_install_package mysql-client 
504
	test_install_package mysql-server-core-5.5 
505
	test_install_package mysql-server
506 507
	test_install_package openssh-client
	test_install_package openssh-server
508
        sudo service ssh start
509 510 511 512 513
	test_install_package phpmyadmin
	test_install_package python-dev 
	test_install_package sshfs
	test_install_package swig 
	test_install_package unzip 
514 515
#	test_install_package nettle-bin
#	test_install_package nettle-dev
516 517 518 519 520
	test_install_package valgrind 

	if [ $OAI_INSTALLED = 1 ]; then 
	    touch ./.lock_oaibuild
	fi 
nikaeinn's avatar
nikaeinn committed
521
	
522
    else
523
	echo_info "All the required packages installed: skip"
524 525 526 527 528 529 530
    fi 

}

check_install_epc_software() {

    if [ ! -f ./.lock_oaibuild ]; then 
531 532 533 534
        $SUDO apt-get update
        if [ $UBUNTU_REL = "12.04" ]; then 
            test_uninstall_package nettle-dev
            test_uninstall_package nettle-bin
535 536 537
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
538 539 540 541 542 543 544 545
        fi 
        test_install_package autoconf
        test_install_package automake
        test_install_package bison
        test_install_package build-essential
        test_install_package check
        test_install_package cmake
        test_install_package cmake-curses-gui
gauthier's avatar
gauthier committed
546
        test_install_package dialog
547 548 549 550 551 552 553 554 555 556 557 558
        test_install_package ethtool
        test_install_package flex
        test_install_package g++
        test_install_package gawk
        test_install_package gcc
        test_install_package gccxml
        test_install_package gdb 
        test_install_package guile-2.0-dev
        test_install_package gtkwave
        test_install_package iperf
        test_install_package iproute
        test_install_package iptables
gauthier's avatar
gauthier committed
559
        test_install_package iptables-dev
560 561 562 563 564
        test_install_package libatlas-base-dev
        test_install_package libatlas-dev
        test_install_package libblas
        test_install_package libblas-dev
#       if [ $MACHINE_ARCH = 64 ]; then
565
            test_install_package libconfig8-dev
566
#        else
567
#            test_install_package libconfig-dev
568 569 570 571 572 573 574 575 576 577 578 579 580 581
#       fi
        test_install_package libforms-bin
        test_install_package libforms-dev
        test_install_package libgcrypt11-dev
        test_install_package libgmp-dev
        test_install_package libgtk-3-dev
        test_install_package libidn11-dev
        test_install_package libidn2-0-dev
        test_install_package libmysqlclient-dev
        test_install_package libpgm-dev
        test_install_package libpthread-stubs0-dev
        test_install_package libsctp1
        test_install_package libsctp-dev
        test_install_package libtasn1-3-dev
gauthier's avatar
gauthier committed
582
        test_install_package libtool 
583 584 585 586 587 588
        test_install_package libxml2
        test_install_package libxml2-dev
#        test_install_package linux-headers-`uname -r`
        test_install_package make
        test_install_package openssh-client
        test_install_package openssh-server
nikaeinn's avatar
nikaeinn committed
589
        $SUDO service ssh start
590 591 592 593 594 595 596 597 598 599 600 601
        test_install_package openssl
        test_install_package openvpn
        test_install_package pkg-config
        test_install_package python-dev
        test_install_package sshfs
        test_install_package subversion
        test_install_package swig
        test_install_package tshark
        test_install_package uml-utilities
        test_install_package unzip
        test_install_package valgrind
        test_install_package vlan
602
	
603 604 605
        if [ $OAI_INSTALLED = 1 ]; then 
            touch ./.lock_oaibuild
        fi 
nikaeinn's avatar
nikaeinn committed
606
    
607
    else
608
        echo_info "All the required packages installed: skip"
609
    fi 
610

611 612 613 614 615
}

check_install_asn1c(){
    
    test_command_install_script   "asn1c" "$OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash $SUDO"
616 617
    
    # One mor check about version of asn1c
618 619
    ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE="ASN.1 Compiler, v0.9.24"
    ASN1C_COMPILER_VERSION_MESSAGE=`asn1c -h 2>&1 | grep -i ASN\.1\ Compiler`
620
    ##ASN1C_COMPILER_VERSION_MESSAGE=`trim $ASN1C_COMPILER_VERSION_MESSAGE`
621
    if [ "$ASN1C_COMPILER_VERSION_MESSAGE" != "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE" ]; then
622
      #  diff <(echo -n "$ASN1C_COMPILER_VERSION_MESSAGE") <(echo -n "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE")
623 624 625
        echo_error "Version of asn1c is not the required one, do you want to install the required one (overwrite installation) ? (Y/n)"
        echo_error "$ASN1C_COMPILER_VERSION_MESSAGE"
        while read -r -n 1 -s answer; do
626
            if [[ $answer = [YyNn] ]]; then
627 628 629
                [[ $answer = [Yy] ]] && $OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash $SUDO
                [[ $answer = [Nn] ]] && echo_error "Version of asn1c is not the required one, exiting." && exit 1
                break
630
            fi
631 632
        done
    fi
633
    
634 635 636 637 638 639 640
}

#################################################
# 2. compile 
################################################
compile_hss() {
    cd $OPENAIRCN_DIR/OPENAIRHSS
641 642 643 644 645 646 647
    
    if [ "$1" -eq 1 ]; then
        echo_info "build a clean HSS"
        rm -rfv obj*
        rm -rfv m4
        rm -rfv .autom4*
        rm -fv configure
648
    fi
649 650 651

    OBJ_DIR=`find . -maxdepth 1 -type d -iname obj*`
    
652 653
    if [ ! -n "$OBJ_DIR" ]; then
        OBJ_DIR="objs"
654
        mkdir --verbose -m 777 ./$OBJ_DIR
655 656 657
    else
        OBJ_DIR=`basename $OBJ_DIR`
    fi
658
    
659 660 661
    if [ ! -f "$OBJ_DIR"/Makefile ]; then
        if [ ! -d m4 ]; then
            mkdir --verbose -m 777 m4
662 663
        fi
        echo_success "Invoking autogen"
664 665 666 667 668
        ./autogen.sh
        if [ $? -ne 0 ]; then
            return 1
        fi
        cd $OBJ_DIR
669
        echo_success "Invoking configure"
670
        ../configure 
671 672 673
        if [ $? -ne 0 ]; then
            return 1
        fi
674
    else
675
        cd $OBJ_DIR
676
    fi
677

678
    if [ -f Makefile ];  then
679
        echo_success "Compiling..."
680
        make ; #-j $NUM_CPU
681 682
        if [ $? -ne 0 ]; then
            echo_error "Build failed, exiting"
683
            return 1
684 685
        else 
            return 0
686 687
        fi
    else
688
        echo_error "Configure failed, aborting"
689
    fi
690
    return 1
691 692 693 694 695
}


compile_epc() {
    cd $OPENAIRCN_DIR
696
    if [ $1 = 1 ]; then
697 698
        echo_info "build a clean EPC"
        bash_exec "rm -rf obj"
699
    fi
700 701 702 703 704 705 706 707 708 709 710 711
    OBJ_DIR=`find . -maxdepth 1 -type d -iname obj*`
    if [ ! -n "$OBJ_DIR" ]; then
        OBJ_DIR="objs"
        bash_exec "mkdir -m 777 ./$OBJ_DIR"
        echo_success "Created $OBJ_DIR directory"
    else
        OBJ_DIR=`basename $OBJ_DIR`
    fi
    if [ ! -f $OBJ_DIR/Makefile ]; then
        if [ ! -n "m4" ]; then
            mkdir -m 777 m4
        fi
712
        bash_exec "autoreconf -i -f"
713
        echo_success "Invoking autogen"
nikaeinn's avatar
nikaeinn committed
714
        bash_exec "libtoolize"        
715
        bash_exec "./autogen.sh"
716 717
        cd ./$OBJ_DIR
        echo_success "Invoking configure"
718 719 720 721 722
        if [ $DEBUG -ne 0 ]; then 
            ../configure --enable-debug --enable-standalone-epc --enable-gtp1u-in-kernel LDFLAGS=-L/usr/local/lib
        else
            ../configure                --enable-standalone-epc --enable-gtp1u-in-kernel LDFLAGS=-L/usr/local/lib
        fi
723 724 725 726
    else
        cd ./$OBJ_DIR
    fi

727 728
#    pkill oai_epc
#    pkill tshark
729 730 731 732 733 734

    if [ -f Makefile ]; then
        echo_success "Compiling..."
        make -j $NUM_CPU
        if [ $? -ne 0 ]; then
            echo_error "Build failed, exiting"
735 736
            return 1
        else 
737
            cp -pf ./OAI_EPC/oai_epc  $OPENAIR_TARGETS/bin
738
        fi
739 740
    else
        echo_error "Configure failed, exiting"
741
        return 1
742
    fi
743 744 745 746 747 748 749
    
    cd $OPENAIRCN_DIR/GTPV1-U/GTPUAH;
    make
    if [ $? -ne 0 ]; then
        echo_error "Build GTPUAH module failed, exiting"
        return 1
    else 
nikaeinn's avatar
nikaeinn committed
750 751
       	$SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables
        $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin
752 753 754 755 756 757 758 759
    fi
    
    cd $OPENAIRCN_DIR/GTPV1-U/GTPURH;
    make
    if [ $? -ne 0 ]; then
        echo_error "Build GTPURH module failed, exiting"
        return 1
    else 
nikaeinn's avatar
nikaeinn committed
760 761
       $SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables
       $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin
762 763
    fi
    return 0
764 765
}

766 767 768 769 770 771 772
compile_exmimo2_driver() {
    cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean && make   || exit 1
    cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make   || exit 1
    # TO DO CHECKS...
}


773 774 775
compile_ltesoftmodem() {
    cd $OPENAIR_TARGETS/RT/USER
    if [ -f Makefile ];  then
776
        rm -f ./lte-softmodem
777 778 779 780 781 782 783 784 785 786
        echo "LTE softmodem compiling directives: $SOFTMODEM_DIRECTIVES"
        if [ $OAI_CLEAN -ne 0 ]; then
            echo "Cleaning LTE softmodem"
            make cleanall > /dev/null 2>&1
        fi
        make -j $NUM_CPU $SOFTMODEM_DIRECTIVES
        if [ $? -ne 0 ]; then
            # to locate easily compilation error in log file
            make  $SOFTMODEM_DIRECTIVES
        fi 
787
        if [ $? -ne 0 ]; then
788
            if [ ! -f ./lte-softmodem ]; then 
789 790 791
                echo_error "Build lte-softmodem failed, returning"
                return 1
            else 
792
                cp -pf ./lte-softmodem  $OPENAIR_TARGETS/bin
793 794 795
                return 0
            fi 
        else
796
            cp -pf ./lte-softmodem  $OPENAIR_TARGETS/bin
797
            return 0
798 799 800 801 802 803 804 805 806 807
        fi
    else
        echo_error "make file for oai softmodem not found, returning"
        return 1
    fi
}

compile_oaisim() {
    cd $OPENAIR_TARGETS/SIMU/USER
    if [ -f Makefile ]; then
nikaeinn's avatar
nikaeinn committed
808
        echo "Compiling for oaisim  target ($OAISIM_DIRECTIVES)"
809 810
        make cleanall > /dev/null
        make -j $NUM_CPU $OAISIM_DIRECTIVES 
811 812 813
        if [ $? -ne 0 ]; then
            echo_error "Build oaisim failed, returning"
            return 1
814
        else 
815
            cp -pf ./oaisim $OPENAIR_TARGETS/bin
816
            return 0
817 818 819 820 821 822 823 824 825 826
        fi
    else
        echo_error "Makefile not found for oaisim target, returning"
        return 1
    fi
}

compile_unisim() {
    cd $OPENAIR1_DIR/SIMULATION/LTE_PHY
    if [ -f Makefile ]; then
nikaeinn's avatar
nikaeinn committed
827
        echo "Compiling for UNISIM target ..."
828 829
        make cleanall
        make  -j $NUM_CPU all 
830 831 832
        if [ $? -ne 0 ]; then
            echo_error "Build unisim failed, returning"
            return 1
833
        else 
834 835 836 837 838 839 840
            cp -pf ./dlsim     $OPENAIR_TARGETS/bin
            cp -pf ./ulsim     $OPENAIR_TARGETS/bin
            cp -pf ./pucchsim  $OPENAIR_TARGETS/bin
            cp -pf ./prachsim  $OPENAIR_TARGETS/bin
            cp -pf ./pdcchsim  $OPENAIR_TARGETS/bin
            cp -pf ./pbchsim   $OPENAIR_TARGETS/bin
            cp -pf ./mbmssim   $OPENAIR_TARGETS/bin
841
            return 0
842 843 844 845 846 847 848 849 850 851 852 853 854
        fi
    else
        echo_error "Configure failed, exiting"
        return 1
    fi
}
################################################
# 1. check if the executable functions exist
###############################################

check_for_ltesoftmodem_executable() {
    if [ ! -f $OPENAIR_TARGETS/RT/USER/lte-softmodem ];   then
        echo_error "Cannot find lte-softmodem executable object in directory $OPENAIR_TARGETS/RT/USER"
855
        echo_error "Check the compilation logs in bin/install_log.txt"
856
        exit 1
857 858 859 860 861
    fi
}

check_for_epc_executable() {
    if [ ! -f $OPENAIRCN_DIR/objs/OAI_EPC/oai_epc ]; then
862
        echo_error "Cannot find oai_epc executable object in directory $OPENAIRCN_DIR/objs/OAI_EPC/"
gauthier's avatar
gauthier committed
863
        echo_fatal "Please make sure you have compiled OAI EPC with --enable-standalone-epc option"
864 865 866
    fi
}

867 868 869
check_for_hss_executable() {
    if [ ! -f $OPENAIRCN_DIR/OPENAIRHSS/objs/openair-hss ]; then
        echo_error "Cannot find openair-hss executable object in directory $OPENAIRCN_DIR/OPENAIRHSS/objs/"
gauthier's avatar
gauthier committed
870
        echo_fatal "Please make sure you have compiled OAI HSS"
871 872 873
    fi
}

874 875 876 877 878 879 880 881 882 883
check_for_sgw_executable() {
    if [ ! -f $OPENAIRCN_DIR/objs/OAI_SGW/oai_sgw ]; then
        echo_error "Cannot find oai_sgw executable object in directory $OPENAIR3_DIR/OPENAIRMME/objs/OAI_SGW/"
        echo_fatal "Please make sure you have compiled OAI EPC without --enable-standalone-epc option"
    fi
}

check_for_oaisim_executable() {
    if [ ! -f $OPENAIR_TARGETS/SIMU/USER/oaisim ]; then
        echo_error "Cannot find oaisim executable object in directory $OPENAIR_TARGETS/SIMU/USER"
884
        echo_error "Check the compilation logs in bin/install_log.txt"
885 886 887 888 889 890
    fi
}

check_for_dlsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/dlsim ];  then
        echo_error "Cannot find dlsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
891
        echo_error "Check the compilation logs in bin/install_log.txt"
892 893 894 895 896 897
    fi
}

check_for_ulsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/ulsim ]; then
        echo_error "Cannot find ulsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
898
        echo_error "Check the compilation logs in bin/install_log.txt"
899 900 901 902 903 904
    fi
}

check_for_pucchsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/pucchsim ]; then
        echo_error "Cannot find pucchsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
905
        echo_error "Check the compilation logs in bin/install_log.txt"
906 907 908 909 910 911
    fi
}

check_for_prachsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/prachsim ]; then
        echo_error "Cannot find prachsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
912
        echo_error "Check the compilation logs in bin/install_log.txt"
913 914 915 916 917 918
    fi
}

check_for_pdcchsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/pdcchsim ]; then
        echo_error "Cannot find pdcchsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
919
        echo_error "Check the compilation logs in bin/install_log.txt"
920 921 922 923 924 925
    fi
}

check_for_pbchsim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/pbchsim ]; then
        echo_error "Cannot find pbchsim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
926
        echo_error "Check the compilation logs in bin/install_log.txt"
927 928 929 930 931 932
    fi
}

check_for_mbmssim_executable() {
    if [ ! -f $OPENAIR1_DIR/SIMULATION/LTE_PHY/mbmssim ]; then
        echo_error "Cannot find mbmssim executable object in directory $OPENAIR1_DIR/SIMULATION/LTE_PHY"
933
        echo_error "Check the compilation logs in bin/install_log.txt"
934 935
    fi
}
nikaeinn's avatar
nikaeinn committed
936 937 938 939 940

################################################
# 1. check if the executable functions exist
###############################################

nikaeinn's avatar
nikaeinn committed
941 942 943
install_ltesoftmodem() {
    # RT
    if [ $1 = "RTAI" ]; then 
nikaeinn's avatar
nikaeinn committed
944
	if [ ! -f /tmp/init_rt_done.tmp ]; then
nikaeinn's avatar
nikaeinn committed
945
            echo_info "  8.1 Insert RTAI modules"
nikaeinn's avatar
nikaeinn committed
946 947 948 949 950 951 952
            $SUDO insmod /usr/realtime/modules/rtai_hal.ko     > /dev/null 2>&1
            $SUDO insmod /usr/realtime/modules/rtai_sched.ko   > /dev/null 2>&1
            $SUDO insmod /usr/realtime/modules/rtai_sem.ko     > /dev/null 2>&1
            $SUDO insmod /usr/realtime/modules/rtai_fifos.ko   > /dev/null 2>&1
            $SUDO insmod /usr/realtime/modules/rtai_mbx.ko     > /dev/null 2>&1
            $SUDO touch /tmp/init_rt_done.tmp
            $SUDO chmod 666 /tmp/init_rt_done.tmp
nikaeinn's avatar
nikaeinn committed
953
        else
nikaeinn's avatar
nikaeinn committed
954
            echo_warning "  8.1 RTAI modules already inserted"
nikaeinn's avatar
nikaeinn committed
955 956
        fi
    fi
nikaeinn's avatar
nikaeinn committed
957 958 959 960 961 962
    #HW
    if [ $2 = "EXMIMO" ]; then 
	echo_info "  8.2 [EXMIMO] creating RTAI fifos"
	for i in `seq 0 64`; do 
	    have_rtfX=`ls /dev/ |grep -c rtf$i`;
	    if [ "$have_rtfX" -eq 0 ] ; then 
nikaeinn's avatar
nikaeinn committed
963
		$SUDO mknod -m 666 /dev/rtf$i c 150 $i; 
nikaeinn's avatar
nikaeinn committed
964 965 966 967 968 969 970 971 972 973 974 975 976 977
	    fi;
	done
	echo_info "  8.3 [EXMIMO] Build lte-softmodemdrivers"
	cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean && make  # || exit 1
	cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make  # || exit 1
	
	echo_info "  8.4 [EXMIMO] Setup RF card"
	cd $OPENAIR_TARGETS/RT/USER
	. ./init_exmimo2.sh
    else 
	if [ $2 = "USRP" ]; then
	    echo_info "  8.2 [USRP] "
	fi

nikaeinn's avatar
nikaeinn committed
978 979
    fi
    
nikaeinn's avatar
nikaeinn committed
980 981 982 983 984
    # ENB_S1
    if [ $3 = 0 ]; then 
	cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko  #|| exit 1
	cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make  # || exit 1
    fi
nikaeinn's avatar
nikaeinn committed
985 986 987 988 989
    
}

install_oaisim() {
   if [ $1 = 0 ]; then 
nikaeinn's avatar
nikaeinn committed
990 991
	cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko  #|| exit 1
	cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make  # || exit 1
nikaeinn's avatar
nikaeinn committed
992 993 994
   fi 
   
}
995

996 997 998 999 1000 1001
##################################
# create HSS DB
################################

# arg 1 is mysql user      (root)
# arg 2 is mysql password  (linux)
1002 1003 1004
# arg 3 is hss username    (hssadmin)
# arg 4 is hss password    (admin)
# arg 5 is database name   (oai_db)
1005
create_hss_database(){
1006
    EXPECTED_ARGS=5
1007 1008
    E_BADARGS=65
    MYSQL=`which mysql`
1009
    rv=0
1010 1011
    if [ $# -ne $EXPECTED_ARGS ]
    then
1012
        echo_fatal "Usage: $0 dbuser dbpass hssuser hsspass databasename"
gauthier's avatar
gauthier committed
1013
        rv=1
1014 1015
    fi

1016
    set_openair_env
1017
    
1018 1019 1020 1021 1022
    # removed %
    #Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'%' IDENTIFIED BY '$4' WITH GRANT OPTION;"
    Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'localhost' IDENTIFIED BY '$4' WITH GRANT OPTION;"
    Q2="FLUSH PRIVILEGES;"
    SQL="${Q1}${Q2}"
1023 1024
    $MYSQL -u $1 --password=$2 -e "$SQL"
    if [ $? -ne 0 ]; then
1025
       echo_error "$3 permissions failed"
gauthier's avatar
gauthier committed
1026
       return 1
1027
    else
1028
       echo_success "$3 permissions succeeded"
1029 1030
    fi
    
1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042
    
    Q1="CREATE DATABASE IF NOT EXISTS ${BTICK}$5${BTICK};"
    SQL="${Q1}"
    $MYSQL -u $3 --password=$4 -e "$SQL"
    if [ $? -ne 0 ]; then
       echo_error "$5 creation failed"
       return 1
    else
       echo_success "$5 creation succeeded"
    fi
    
    
gauthier's avatar
gauthier committed
1043
    # test if tables have been created
1044
    mysql -u $3 --password=$4  -e "desc $5.users" > /dev/null 2>&1
gauthier's avatar
gauthier committed
1045 1046
    
    if [ $? -eq 1 ]; then 
1047
        $MYSQL -u $3 --password=$4 $5 < $OPENAIRCN_DIR/OPENAIRHSS/db/oai_db.sql
gauthier's avatar
gauthier committed
1048
        if [ $? -ne 0 ]; then
1049
            echo_error "$5 tables creation failed"
gauthier's avatar
gauthier committed
1050 1051
            return 1
        else
1052
            echo_success "$5 tables creation succeeded"
gauthier's avatar
gauthier committed
1053
        fi
1054 1055
    fi
    
gauthier's avatar
gauthier committed
1056
    return 0
1057 1058
}

1059
################################
1060
# set_openair_env
1061 1062 1063
###############################
set_openair_env(){

1064 1065 1066 1067 1068 1069 1070
    fullpath=`readlink -f $BASH_SOURCE`
    [ -f "/.$fullpath" ] || fullpath=`readlink -f $PWD/$fullpath`
    openair_path=${fullpath%/targets/*}
    openair_path=${openair_path%/openair-cn/*}
    openair_path=${openair_path%/openair[123]/*}

    export OPENAIR_DIR=$openair_path
1071
    export OPENAIR_HOME=$openair_path
1072 1073 1074 1075 1076
    export OPENAIR1_DIR=$openair_path/openair1
    export OPENAIR2_DIR=$openair_path/openair2
    export OPENAIR3_DIR=$openair_path/openair3
    export OPENAIRCN_DIR=$openair_path/openair-cn
    export OPENAIR_TARGETS=$openair_path/targets
1077 1078

}
1079 1080 1081 1082 1083 1084 1085

########################################
### print help
######################################

print_help(){
    echo_success "Name : build_oai  - install and build OAI"
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
    echo_success "Usage: build_oai.bash -a -b -c -d -e RTAI -m -r REL8 -s -t OAISIM -w EXMIMO -x"
    echo_success "-a | --doxygen                          : Enable doxygen for documentation (default disabled)"
    echo_success "-b | --disable-s1                       : Disable S1 interface for eNB (default enabled)"
    echo_success "-c | --clean                            : Enable clean OAI build (default disabled)"
    echo_success "-C | --config-file                      : Set the config file local path"
    echo_success "-d | --debug                            : Enable debug mode (default disabled)"
    echo_success "-D | --disable-check-installed-software : Disable the checking of installed software (default is check)"
    echo_success "-e | --realtime                         : Set realtime mode: RTAI, NONE (default NONE)"
    echo_success "-g | --run-with-gdb                     : Run the executable built by this script with gdb"
    echo_success "-K | --itti-dump-file                   : Set the execution events trace file"
    echo_success "-l | --build-target                     : Set the LTE build target: ENB,EPC,HSS,NONE (default ENB)"
    echo_success "-m | --build-from-makefile              : Enable build from the makefile (default disabled)"
    echo_success "-r | --3gpp-release                     : Set the release: REL8, REL10 (default REL8)"
    echo_success "-R | --run                              : Run the executable built by this script"
    echo_success "-s | --check                            : Enable OAI testing and sanity check (default disabled)"
    echo_success "-t | --enb-build-target                 : Set the eNB build target: ALL, SOFTMODEM,OAISIM,UNISIM (default ALL)"
    echo_success "-V | --vcd                              : Log vcd events"
    echo_success "-w | --hardware                         : Set the hardware platform: EXMIMO, USRP (also installs UHD driver), ETHERNET, NONE, (default EXMIMO)"
    echo_success "-x | --xforms                           : Enable xforms (default disabled)"
    echo_success "-z | --defaults                         : Set the default build options"
1106
}
1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127
###############################
## echo and  family 
###############################
black='\E[30m'
red='\E[31m'
green='\E[32m'
yellow='\E[33m'
blue='\E[34m'
magenta='\E[35m'
cyan='\E[36m'
white='\E[37m'
reset_color='\E[00m'


cecho()   # Color-echo
# arg1 = message
# arg2 = color
{
    local default_msg="No Message."
    message=${1:-$default_msg}
    color=${2:-$green}
1128 1129 1130 1131 1132 1133
    if [ $BUILD_FROM_MAKEFILE = 0 ]; then 
	echo -e -n "$color$message$reset_color"
	echo
    else 
	echo "$message"
    fi
1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176
    return
}

echo_error() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
        done
        cecho "$my_string" $red
}

echo_fatal() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
        done
        echo_error "$my_string"
    exit -1
}

echo_warning() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $yellow
}

echo_success() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $green
}
nikaeinn's avatar
nikaeinn committed
1177 1178 1179 1180 1181 1182 1183 1184 1185
echo_info() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $blue
}
1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242

bash_exec() {
    output=$($1 2>&1)
    result=$?
    if [ $result -eq 0 ]; then
        echo_success "$1"
    else
        echo_error "$1: $output"
    fi
}


wait_process_started () {
    if  [ -z "$1" ]; then
        echo_error "WAITING FOR PROCESS START: NO PROCESS"
        return 1
    fi
    ps -C $1 > /dev/null 2>&1
    while [ $? -ne 0 ]; do
        echo_warning "WAITING FOR $1 START"
        sleep 2
        ps -C $1 > /dev/null 2>&1
    done
    echo_success "PROCESS $1 STARTED"
    return 0
}

is_process_started () {
    if  [ -z "$1" ]; then
        echo_error "WAITING FOR PROCESS START: NO PROCESS"
        return 1
    fi
    ps -C $1 > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo_success "PROCESS $1 NOT STARTED"
        return 1
    fi
    echo_success "PROCESS $1 STARTED"
    return 0
}

assert() {
    # If condition false
    # exit from script with error message
    E_PARAM_ERR=98
    E_PARAM_FAILED=99

    if [ -z "$2" ] ; then # Not enought parameters passed.
        return $E_PARAM_ERR
    fi
    
    lineno=$2
    if [ ! $1 ]; then
        echo_error "Assertion failed:  \"$1\""
        echo_fatal "File \"$0\", line $lineno"
    fi
}