build_helper.bash 24.5 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 39 40 41 42
################################################################################
#   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
######################################

ROOT_UID=0
E_NOTROOT=67
NUM_CPU=`cat /proc/cpuinfo | grep processor | wc -l`
OAI_INSTALLED=1
nikaeinn's avatar
nikaeinn committed
43
PWD=`pwd`
44
check_for_root_rights() {
nikaeinn's avatar
nikaeinn committed
45 46
    if [[ $EUID -eq 0 ]]; then
        echo "Run as a sudoers" 
47 48
	return 1
    else 
nikaeinn's avatar
nikaeinn committed
49
	echo  "Run as a root" 
50 51 52 53
	return 0
    fi
}

nikaeinn's avatar
nikaeinn committed
54
output=$(check_for_root_rights) 
55 56
result=$?
SUDO=''
nikaeinn's avatar
nikaeinn committed
57
PW=''
58
if [ $result -ne 1 ]; then
nikaeinn's avatar
nikaeinn committed
59 60 61 62 63 64
  #  echo "Please provide your  password :" 
  #  read -s PW
#   SUDO="echo $PW | sudo -S -E "
    SUDO="sudo -S -E "
else 
    echo "root"
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
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." 
	  OAI_INSTALLED=0
          $SUDO apt-get install --assume-yes $1  
      }
  fi
}

nikaeinn's avatar
nikaeinn committed
81 82 83 84 85 86 87 88 89 90 91
test_uninstall_package() {
  
 if [ $# -eq 1 ]; then
      dpkg -s "$1" > /dev/null 2>&1 && {
         $SUDO apt-get remove --assume-yes $1  
	 echo "$1 is uninstalled." 
      } || {
          echo "$1 is not installed." 
      }
  fi
}
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
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
	return 64  # 64-bit stuff here
    else
	if [ ${MACHINE_TYPE} = "i686" ]; then
            return 32 # 32-bit stuff here
	else 
	    return -1 
	fi
    fi
}

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

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

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

 # for certtificate generation
123
    rm -rf demoCA
nikaeinn's avatar
nikaeinn committed
124
    mkdir -m 777 -p demoCA
125 126
    echo 01 > demoCA/serial
    touch demoCA/index.txt
nikaeinn's avatar
nikaeinn committed
127 128 129
    
    echo "creating the certificate"
    
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
    user=$(whoami)
    HOSTNAME=$(hostname -f)

    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
    
    openssl genrsa -out user.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 ca -cert cacert.pem -keyfile cakey.pem -in user.csr.pem -out user.cert.pem -outdir . -batch
    
    if [ ! -d /usr/local/etc/freeDiameter ];  then
	echo "Creating non existing directory: /usr/local/etc/freeDiameter/"
	$SUDO mkdir /usr/local/etc/freeDiameter/
    fi
    
    echo "Copying cakey.pem user.key.pem cacert.pem to /usr/local/etc/freeDiameter/"
    $SUDO cp user.key.pem user.cert.pem cacert.pem /usr/local/etc/freeDiameter/
    
# 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

}

check_install_freediamter(){
 
    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
nikaeinn's avatar
nikaeinn committed
164
	echo "You don't have permissions to write to /usr/local/src/, installing as a sudoer"
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
#	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
nikaeinn's avatar
nikaeinn committed
181 182
     

183 184
    $SUDO wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz 
    $SUDO gunzip nettle-2.5.tar.gz 
nikaeinn's avatar
nikaeinn committed
185
    $SUDO echo "Uncompressing nettle archive"
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
    $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 ../
    
    echo "Downloading gnutls archive"
    
    if [ -f gnutls-3.1.0.tar.xz ];  then
	$SUDO rm -f gnutls-3.1.0.tar.xz
    fi
    if [ -d gnutls-3.1.0/ ];  then
	$SUDO rm -rf gnutls-3.1.0/
    fi
nikaeinn's avatar
nikaeinn committed
206 207 208

    test_uninstall_package libgnutls-dev

209 210
    $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.0.tar.xz 
    $SUDO tar -xf gnutls-3.1.0.tar.xz
nikaeinn's avatar
nikaeinn committed
211
    echo "Uncompressing gnutls archive ($PWD)"
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 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 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 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
    cd gnutls-3.1.0/
    $SUDO ./configure --prefix=/usr
    if [ $? -ne 0 ];   then
	exit -1
    fi
    echo "Compiling gnutls"
    $SUDO make -j $NUM_CPU 
    $SUDO make install 
    cd ../

    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 
  
    make_certs
   
}

check_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 [ $full_hostname = `hostname`.eur ];   then
                echo_success "S6A: Found valid certificate in /usr/local/etc/freeDiameter"
                return 1
            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..."
    cd $OPENAIRCN_DIR/S6A/freediameter
    make_certs
    check_s6a_certificate
    return 1
}

check_install_oai_software() {
    
    if [ ! -f ./.lock_oaibuild ]; then 

	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 
	test_install_package dkms
	test_install_package flex 
	test_install_package gawk
	test_install_package gcc
	test_install_package gdb 
	test_install_package make
	test_install_package openssh-client
	test_install_package openssh-server
	test_install_package swig 
	test_install_package unzip 
	test_install_package valgrind 
	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
	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
#	if [ $MACHINE_ARCH = 64 ]; then
            test_install_package libconfig8-dev
#	else
#            test_install_package libconfig-dev
#	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 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 make
	test_install_package openssh-client
	test_install_package openssh-server
	test_install_package openssl
	test_install_package libssl-dev
	test_install_package nettle-dev
	test_install_package nettle-bin
	test_install_package openvpn
	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 swig
	test_install_package tshark
	test_install_package uml-utilities
	test_install_package unzip
	test_install_package valgrind
	test_install_package vlan
	test_install_package doxygen
nikaeinn's avatar
nikaeinn committed
354 355 356
	# uninstall some automatically installed packges
	# we need a newer version
#	test_uninstall_package libnettle4
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 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 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
    fi 

    echo "$OPENAIR_TARGETS/bin/install_log.txt"
    if [ $OAI_INSTALLED = 1 ]; then 
	touch ./.lock_oaibuild
    fi 

    if [ ! -d /usr/local/etc/freeDiameter ]; then
           # This script make certificates also
#	echo "run the install script for free diameter "
#	cd $OPENAIRCN_DIR/S6A/freediameter/ && ./install_freediameter.sh
	check_install_freediamter
    else
        echo_success "freediameter is installed"
        check_s6a_certificate
    fi

    test_command_install_script   "asn1c" "$OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash $result"
    
    # One mor check about version of asn1c
    ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE="ASN.1 Compiler, v0.9.24"
    ASN1C_COMPILER_VERSION_MESSAGE=`asn1c -h 2>&1 | grep -i ASN\.1\ Compiler`
    ##ASN1C_COMPILER_VERSION_MESSAGE=`trim $ASN1C_COMPILER_VERSION_MESSAGE`
    if [ "$ASN1C_COMPILER_VERSION_MESSAGE" != "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE" ]; then
      #  diff <(echo -n "$ASN1C_COMPILER_VERSION_MESSAGE") <(echo -n "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE")
        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
            if [[ $answer = [YyNn] ]]; then
                [[ $answer = [Yy] ]] && $OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash $results
                [[ $answer = [Nn] ]] && echo_error "Version of asn1c is not the required one, exiting." && exit 1
                break
            fi
        done
    fi

}

check_install_hss_software() {
    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 
    test_install_package dkms
    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 
    test_install_package linux-headers-`uname -r` 
    test_install_package make
    test_install_package mysql-client-core-5.5 
    test_install_package mysql-server-core-5.5 
    test_install_package mysql-server-5.5 
    test_install_package openssh-client
    test_install_package openssh-server
    test_install_package phpmyadmin
    test_install_package python-dev 
    test_install_package sshfs
    test_install_package swig 
    test_install_package unzip 
    test_install_package valgrind 
}

#################################################
# 2. compile 
################################################
compile_hss() {
    cd $OPENAIRCN_DIR/OPENAIRHSS
    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
        echo_success "Invoking autogen"
        bash_exec "./autogen.sh"
        cd ./$OBJ_DIR
        echo_success "Invoking configure"
        ../configure 
    else
        cd ./$OBJ_DIR
    fi
    if [ -f Makefile ];  then
        echo_success "Compiling..."
        make -j $NUM_CPU
        if [ $? -ne 0 ]; then
            echo_error "Build failed, exiting"
            exit 1
        fi
    else
        echo_error "Configure failed, exiting"
        exit 1
    fi
}


compile_epc() {
    cd $OPENAIRCN_DIR
    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
        echo_success "Invoking autogen"
        bash_exec "./autogen.sh"
        cd ./$OBJ_DIR
        echo_success "Invoking configure"
        ../configure --enable-standalone-epc --enable-raw-socket-for-sgi  LDFLAGS=-L/usr/local/lib
    else
        cd ./$OBJ_DIR
    fi

    pkill oai_epc
    pkill tshark

    if [ -f Makefile ]; then
        echo_success "Compiling..."
        make -j $NUM_CPU
        if [ $? -ne 0 ]; then
            echo_error "Build failed, exiting"
            exit 1
        fi
    else
        echo_error "Configure failed, exiting"
        exit 1
    fi
}

compile_ltesoftmodem() {
    cd $OPENAIR_TARGETS/RT/USER
    if [ -f Makefile ];  then
nikaeinn's avatar
nikaeinn committed
514 515
        echo "Compiling for EXMIMO target (default)..."
	echo "Compiling directives: $SOFTMODEM_DIRECTIVES"
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
        make cleanall > /dev/null 2>&1
	make  $SOFTMODEM_DIRECTIVES 
	make -j $NUM_CPU $SOFTMODEM_DIRECTIVES 
        if [ $? -ne 0 ]; then
            echo_error "Build lte-softmodem failed, returning"
            return 1
	else
	    cp -f ./lte-softmodem  $OPENAIR_TARGETS/bin
	    return 0
        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
535 536
        echo "Compiling for oaisim  target ($OAISIM_DIRECTIVES)"
        make cleanall > /dev/null
537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
	make $OAISIM_DIRECTIVES 
	make -j $NUM_CPU $OAISIM_DIRECTIVES 
        if [ $? -ne 0 ]; then
            echo_error "Build oaisim failed, returning"
            return 1
	else 
	    cp -f ./oaisim $OPENAIR_TARGETS/bin
	    return 0
        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
555
        echo "Compiling for UNISIM target ..."
556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655
        make cleanall
	make  -j $NUM_CPU all 
        if [ $? -ne 0 ]; then
            echo_error "Build unisim failed, returning"
            return 1
	else 
	    cp -f ./dlsim     $OPENAIR_TARGETS/bin
	    cp -f ./ulsim     $OPENAIR_TARGETS/bin
	    cp -f ./pucchsim  $OPENAIR_TARGETS/bin
	    cp -f ./prachsim  $OPENAIR_TARGETS/bin
	    cp -f ./pdcchsim  $OPENAIR_TARGETS/bin
	    cp -f ./pbchsim   $OPENAIR_TARGETS/bin
	    cp -f ./mbmssim   $OPENAIR_TARGETS/bin
	    return 0
        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"
        echo_error "Please make sure you have compiled OAI lte-softmodem"
    fi
}

check_for_epc_executable() {
    if [ ! -f $OPENAIRCN_DIR/objs/OAI_EPC/oai_epc ]; then
        echo_error "Cannot find oai_epc executable object in directory $OPENAIR3_DIR/OPENAIRMME/objs/OAI_EPC/"
        echo_error "Please make sure you have compiled OAI EPC with --enable-standalone-epc option"
    fi
}

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"
        echo_error "Please make sure that the OAI oaisim is compiled"
    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"
        echo_error "Please make sure that the OAI dlsim is compiled"
    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"
        echo_error "Please make sure that the OAI ulsim is compiled"
    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"
        echo_error "Please make sure that the OAI pucchsim is compiled"
    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"
        echo_error "Please make sure that the OAI prachsim is compiled"
    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"
        echo_error "Please make sure that the OAI pdcchsim is compiled"
    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"
        echo_error "Please make sure that the OAI pbchsim is compiled"
    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"
        echo_error "Please make sure that the OAI mbmssim is compiled"
    fi
}
nikaeinn's avatar
nikaeinn committed
656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708

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

install_ltesoftmodem_() {
    if [ $1 = "RTAI" ] ; then 
	if [ ! -f /tmp/init_rt_done.tmp ]; then
            echo_warning "Step1: insert RTAI modules"
            insmod /usr/realtime/modules/rtai_hal.ko     > /dev/null 2>&1
            insmod /usr/realtime/modules/rtai_sched.ko   > /dev/null 2>&1
            insmod /usr/realtime/modules/rtai_sem.ko     > /dev/null 2>&1
            insmod /usr/realtime/modules/rtai_fifos.ko   > /dev/null 2>&1
            insmod /usr/realtime/modules/rtai_mbx.ko     > /dev/null 2>&1
            touch /tmp/init_rt_done.tmp
            chmod 666 /tmp/init_rt_done.tmp
        else
            echo_warning "RTAI modules already inserted"
        fi
    else
	if [ $1 = "RT_PREEMPT" ]; then 
	    echo_warning "Step1: setup RT_PREMMPT"
	fi    
    fi
    
    echo_warning "Step2: creating RTAI fifos"
    for i in `seq 0 64`; do 
	have_rtfX=`ls /dev/ |grep -c rtf$$i`;
	if [ "$$have_rtfX" -eq 0 ] ;then 
	    mknod -m 666 /dev/rtf$$i c 150 $$i; 
	fi;
    done
    echo_warning "Step3: 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
    if [ $2 = 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
    
    echo_warning "Step4: setup RF card"
    cd $OPENAIR_TARGETS/RT/USER
    bash ./init_exmimo2.sh
    
}

install_oaisim() {
   if [ $1 = 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 
   
}
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841
###############################
## 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}
    echo -e -n "$color$message$reset_color"
    echo
    return
}

cecho2()   # Color-echo
# arg1 = message
# arg2 = color
{
    local default_msg="No Message."
    message=${1:-$default_msg}
    echo "$message"
    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
}

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
}