build_oai.bash 27.7 KB
Newer Older
1 2 3 4 5 6 7
################################################################################
#   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
nikaeinn's avatar
nikaeinn committed
8
#    (at your option) anylater version.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#
#
#    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
24
#  OpenAirInterface Dev  : openair4g-devel@lists.eurecom.fr
25 26 27 28 29
#
#  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_oai.bash
30
# brief OAI automated build tool that can be used to install, compile, run OAI.
gauthier's avatar
gauthier committed
31
# author  Navid Nikaein, Lionel GAUTHIER
32
# company Eurecom
gauthier's avatar
gauthier committed
33
# email:  navid.nikaein@eurecom.fr, lionel.gauthier@eurecom.fr 
34 35 36 37 38 39 40 41 42
#

#!/bin/bash
################################
# include helper functions
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
. $THIS_SCRIPT_PATH/build_helper.bash

43
check_for_root_rights
44 45

#######################################
46
# Default PARAMETERS
47
######################################
gauthier's avatar
gauthier committed
48 49
declare OAI_DB_ADMIN_USER_NAME="root"
declare OAI_DB_ADMIN_USER_PASSWORD="linux"
50

51
#only one could be set at the time
52
declare BUILD_LTE="NONE" # ENB, EPC, HSS
53 54 55 56 57

declare HW="EXMIMO" # EXMIMO, USRP, ETHERNET, NONE
declare TARGET="ALL" # ALL, SOFTMODEM, OAISIM, UNISIM, NONE
declare ENB_S1=1
declare REL="REL8" # REL8, REL10
nikaeinn's avatar
nikaeinn committed
58
declare RT="NONE" # RTAI, RT_PREMPT, NONE
59
declare DEBUG=0
60
declare CONFIG_FILE=" "
61
declare CONFIG_FILE_ACCESS_OK=0
62
declare EXE_ARGUMENTS=" "
63
declare RUN_GDB=0
64
declare RUN=0
65
declare DISABLE_CHECK_INSTALLED_SOFTWARE=0
66
declare OAI_CLEAN=0
gauthier's avatar
gauthier committed
67
declare CLEAN_IPTABLES=0
68
declare CLEAN_HSS=0
69 70 71

declare OAI_TEST=0
declare XFORMS=0
nikaeinn's avatar
nikaeinn committed
72

73
# script is not currently handling these params
74
declare EPC=0 # flag to build EPC
nikaeinn's avatar
nikaeinn committed
75

76 77 78 79 80 81
declare ITTI_ANALYZER=0
declare VCD_TIMING=0
declare WIRESHARK=0
declare TIME_MEAS=0
declare DOXYGEN=0
declare DEV=0
82

83 84 85
#EMULATION_DEV_INTERFACE="eth0"
#EMULATION_MULTICAST_GROUP=1
#EMULATION_DEV_ADDRESS=`ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
86

nikaeinn's avatar
nikaeinn committed
87
############## script params #####################
88

nikaeinn's avatar
nikaeinn committed
89
if [ -f ./.lock_oaibuild ]; then 
90
    OAI_CLEAN=0
nikaeinn's avatar
nikaeinn committed
91
else 
92
    OAI_CLEAN=1
nikaeinn's avatar
nikaeinn committed
93 94
fi 
 
95 96 97 98 99
#for i in "$@"
#do 
#    echo "i is : $i"
#    case $i in

100

101 102
  until [ -z "$1" ]
  do
103 104 105 106 107 108 109 110 111 112 113 114 115 116
  case "$1" in
       -a | --doxygen)
            DOXYGEN=1
            echo "setting doxygen flag to: $DOXYGEN"
            shift;
            ;;
       -b | --disable-s1)
            ENB_S1=0
            echo "disable eNB S1 flag"
            shift;
            ;;
       -c | --clean)
            rm -rf ./.lock_oaibuild
            OAI_CLEAN=1
117
            CLEAN_HSS=1
118 119 120 121
            echo "setting clean flag to: $OAI_CLEAN"
            echo "may check package installation, and recompile OAI"
            shift;
            ;;
gauthier's avatar
gauthier committed
122 123 124 125
       --clean-iptables)
            CLEAN_IPTABLES=1;
            shift;
            ;;
126 127
       -C | --config-file)
            CONFIG_FILE=$2
128 129 130 131
            # may be relative path 
            if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then
                CONFIG_FILE=$(dirname $(readlink -f $0))/$CONFIG_FILE
                echo "setting config file to: $CONFIG_FILE"
132
                CONFIG_FILE_ACCESS_OK=1
133 134 135 136
            else
                # may be absolute path 
                if [ -f $CONFIG_FILE ]; then
                    echo "setting config file to: $CONFIG_FILE"
137
                    CONFIG_FILE_ACCESS_OK=1
138 139 140 141 142 143
                else
                    echo "config file not found"
                    exit 1
                fi
            fi
            EXE_ARGUMENTS="$EXE_ARGUMENTS -O $CONFIG_FILE"
144 145 146 147 148 149 150 151 152 153 154 155 156
            shift 2;
            ;;
       -d | --debug)
            DEBUG=1
            echo "setting debug flag to: $DEBUG"
            shift;
            ;;
       -D | --disable-check-installed-software)
            DISABLE_CHECK_INSTALLED_SOFTWARE=1
            echo "disable check installed software"
            shift;
            ;;
       -e | --realtime)
157
            RT=$2
158 159 160 161
            echo "setting realtime flag to: $RT"
            shift 2 ;
            ;;
       -g | --run-with-gdb)
162
            DEBUG=1
163
            RUN=1 
164 165
            RUN_GDB=1
            echo "Running with gdb"
166
            shift;
167 168 169 170 171 172 173 174 175
            ;;
       -K | --itti-dump-file)
            ITTI_ANALYZER=1
            ITTI_DUMP_FILE=$2
            echo "setting ITTI dump file to: $ITTI_DUMP_FILE"
            EXE_ARGUMENTS="$EXE_ARGUMENTS -K $ITTI_DUMP_FILE"
            shift 2;
            ;;
       -l | --build-target) 
176
            BUILD_LTE=$2
177 178 179 180 181 182 183 184 185 186 187 188 189 190
            echo "setting top-level build target to: $2"
            shift 2;
            ;;
       -h | --help)
            print_help
            exit -1
            ;;
       -m | --build-from-makefile)
            BUILD_FROM_MAKEFILE=1
            set_build_from_makefile $BUILD_FROM_MAKEFILE
            echo "setting a flag to build from makefile to: $BUILD_FROM_MAKEFILE"
            shift;
            ;;
       -r | --3gpp-release)
191
            REL=$2 
192 193 194
            echo "setting release to: $REL"
            shift 2 ;
            ;;
195 196 197
       -R | --run)
            RUN=1 
            echo "setting run to $RUN"
gauthier's avatar
gauthier committed
198
            shift;
199
            ;;
200 201 202 203 204 205
       -s | --check)
            OAI_TEST=1
            echo "setting sanity check to: $OAI_TEST"
            shift;
            ;;
       -t | --enb-build-target)
206 207
            TARGET=$2 
            echo "setting enb build target to: $TARGET"
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
            shift 2;
            ;;
       -V | --vcd)
            echo "setting gtk-wave output"
            VCD_TIMING=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
            shift ;
            ;;
       -w | --hardware)
            HW="$2" #"${i#*=}"
            echo "setting hardware to: $HW"
            shift 2 ;
            ;;
       -x | --xforms)
            XFORMS=1
gauthier's avatar
gauthier committed
223
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
224 225 226
            echo "setting xforms to: $XFORMS"
            shift;
            ;;
227 228 229 230 231
       -p | --wireshark)
	  WIRESHARK=1
	  echo "enabling Wireshark interface to $WIRESHARK"
          shift;
          ;;
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
       -z | --defaults)
            echo "setting all parameters to: default"
            rm -rf ./.lock_oaibuild
            OAI_CLEAN=1
            HW="EXMIMO"
            TARGET="ALL" 
            ENB_S1=1
            REL="REL8" 
            RT="NONE"
            DEBUG=0
            ENB_CONFIG_FILE=$OPENAIR_TARGETS/"PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.conf"
            OAI_TEST=0
            shift ;
            ;;
       *)   
            echo "Unknown option $1"
            break ;
nikaeinn's avatar
nikaeinn committed
249
            # unknown option
250
            ;;
251
   esac
nikaeinn's avatar
nikaeinn committed
252 253
done

254 255 256
#####################
# create a bin dir
#####################
257
echo_info "1. Creating the bin dir ..." 
258
mkdir -m 777 bin 
259 260 261 262

build_date=`date +%Y_%m_%d`
oai_build_date="oai_built_${build_date}"
touch bin/${oai_build_date} 
263 264
chmod -f 777 bin/${oai_build_date}

nikaeinn's avatar
nikaeinn committed
265
touch bin/install_log.txt
266
chmod -f 777 bin/install_log.txt
267 268 269
################################
# cleanup first 
################################
270
#echo_info "3. Cleaning ..."
271

272 273 274 275
#$SUDO kill -9 `ps -ef | grep oaisim | awk '{print $2}'` 2>&1
#$SUDO kill -9 `ps -ef | grep lte-softmodem | awk '{print $2}'`  2>&1
#$SUDO kill -9 `ps -ef | grep dlsim | awk '{print $2}'`  2>&1
#$SUDO kill -9 `ps -ef | grep ulsim | awk '{print $2}'`  2>&1
nikaeinn's avatar
nikaeinn committed
276

gauthier's avatar
gauthier committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
if [ $CLEAN_IPTABLES -eq 1 ]; then 
    echo_info "Flushing iptables..."
    $SUDO modprobe ip_tables
    $SUDO modprobe x_tables
    $SUDO iptables -P INPUT ACCEPT
    $SUDO iptables -F INPUT
    $SUDO iptables -P OUTPUT ACCEPT
    $SUDO iptables -F OUTPUT
    $SUDO iptables -P FORWARD ACCEPT
    $SUDO iptables -F FORWARD
    $SUDO iptables -t nat -F
    $SUDO iptables -t mangle -F
    $SUDO iptables -t filter -F
    $SUDO iptables -t raw -F
    echo_info "Flushed iptables"
fi
293
############################################
294
# setting and printing OAI envs, we should check here
295
############################################
296 297
    
echo_info "2. Setting the OAI PATHS ..."
298

nikaeinn's avatar
nikaeinn committed
299
set_openair_env 
300 301 302 303
cecho "OPENAIR_HOME    = $OPENAIR_HOME" $green
cecho "OPENAIR1_DIR    = $OPENAIR1_DIR" $green
cecho "OPENAIR2_DIR    = $OPENAIR2_DIR" $green
cecho "OPENAIR3_DIR    = $OPENAIR3_DIR" $green
304
cecho "OPENAIR3_DIR   = $OPENAIR3_DIR" $green
305 306 307 308 309 310 311
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green


echo "OPENAIR_HOME    = $OPENAIR_HOME" >>  bin/${oai_build_date}
echo "OPENAIR1_DIR    = $OPENAIR1_DIR"  >>  bin/${oai_build_date}
echo "OPENAIR2_DIR    = $OPENAIR2_DIR"  >>  bin/${oai_build_date}
echo "OPENAIR3_DIR    = $OPENAIR3_DIR"  >>  bin/${oai_build_date}
312
echo "OPENAIR3_DIR   = $OPENAIR3_DIR"  >>  bin/${oai_build_date}
313 314
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS"  >>  bin/${oai_build_date}

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

build_enb(){

##########################################
# process parameters
#########################################

    echo_info "4. Process the parameters"

    echo_info "User-defined Parameters :  HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS"
    
    echo "User-defined Parameters :  HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS" >> bin/${oai_build_date}
    
 
############################################
# compilation directives 
############################################

    echo_info "5. building the compilation directives ..."
    
    
336 337 338
    SOFTMODEM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    OAISIM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    
339
    if [ $ENB_S1 -eq 1 ]; then 
340 341 342
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
        #OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
	OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
343 344
    fi 
    
345 346 347
    if [ $DEBUG -eq 0 ]; then 
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES DISABLE_XER_PRINT=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES DISABLE_XER_PRINT=1 "
348 349
    fi 

350
    if [ $HW = "USRP" ]; then 
351
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USRP=1 "
352 353 354
    fi
    
    if [ $HW = "EXMIMO" ]; then 
355
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES EXMIMO=1 "
356 357 358
    fi
    
    if [ $HW = "ETHERNET" ]; then 
359
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES ETHERNET=1 "
360 361 362
    fi 
    
    if [ $ENB_S1 -eq 0 ]; then 
363 364
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES NAS=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES NAS=1 "
365 366 367
    fi 
    
    if [ $REL = "REL8" ]; then
368 369
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel8=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel8=1 "
370
    else 
371 372
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel10=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel10=1 "
373 374 375
    fi
    
    if [ $RT = "RTAI" ]; then 
376 377 378 379 380 381 382
        if [ ! -f /usr/realtime/modules/rtai_hal.ko ];   then
            echo_warning "RTAI doesn't seem to be installed"
            RT="NONE"
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
        else 
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES HARD_RT=1 "
        fi
383
    else 
384 385
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
        RT="NONE"
386 387 388
    fi
    
    if [ $TARGET != "ALL" ]; then 
389 390 391
        if [ $TARGET  != "SOFTMODEM" ]; then 
            HW="NONE"
        fi
392 393
    fi
    
394
    if [ $UBUNTU_REL = "12.04" ]; then 
395 396 397 398 399 400
        output=$(check_for_machine_type 2>&1) 
        MACHINE_ARCH=$?
        if [ $MACHINE_ARCH -eq 64 ]; then
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES LIBCONFIG_LONG=1 "
            OAISIM_DIRECTIVES="$OASIM_DIRECTIVES LIBCONFIG_LONG=1 "
        fi
401 402 403 404 405 406 407 408 409
    fi
    
    echo_success "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES"
    echo_success "OAISIM Compilation directives:    $OAISIM_DIRECTIVES"
    
    echo "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES" >>  bin/${oai_build_date}
    echo "OAISIM Compilation directive:    $OAISIM_DIRECTIVES" >>  bin/${oai_build_date}
    
    
410 411 412
############################################
# check the installation
############################################
413 414 415 416 417 418 419 420 421 422 423
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "6. Checking the the required softwares/packages ..."

        check_install_oai_software  
        if [ $HW = "USRP" ]; then 
            check_install_usrp_uhd_driver 
        fi
        check_install_asn1c
        check_install_nettle
    else
        echo_info "6. Not checking the required softwares/packages ..."
424
        touch ./.lock_oaibuild
425
    fi
426
    
427 428 429 430
############################################
# compile 
############################################

431
    echo_info "7. compiling and installing the OAI binaries ..."
432

433 434 435
    softmodem_compiled=1
    oaisim_compiled=1
    unisim_compiled=1
436
    
437
    if [ $TARGET = "ALL" ]; then
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
        echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt 
        output=$(compile_ltesoftmodem  >> bin/install_log.txt  2>&1 )
        softmodem_compiled=$?
        check_for_ltesoftmodem_executable
        echo_info "7.1 finished ltesoftmodem target : check the installation log file bin/install_log.txt" 

        echo "################ compile_oaisim #################"  >> bin/install_log.txt 
        output=$(compile_oaisim      >> bin/install_log.txt   2>&1 )
        oaisim_compiled=$?
        check_for_oaisim_executable
        echo_info "7.2 finished oaisim target : check the installation log file bin/install_log.txt" 

        echo "################## compile_unisim ##################"  >> bin/install_log.txt 
        output=$(compile_unisim      >> bin/install_log.txt  2>&1 )
        unisim_compiled=$?
        check_for_dlsim_executable
        check_for_ulsim_executable
        check_for_pucchsim_executable
        check_for_prachsim_executable
        check_for_pdcchsim_executable
        check_for_pbchsim_executable
        check_for_mbmssim_executable
        echo_info "7.3 finished unisim target : check the installation log file bin/install_log.txt" 


463
    else
464
        if [ $TARGET == "SOFTMODEM" ]; then 
465 466 467 468 469 470
            echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt 
            output=$(compile_ltesoftmodem   >> bin/install_log.txt 2>&1 )
            softmodem_compiled=$?
            check_for_ltesoftmodem_executable
            echo_info "7.1 finished ltesoftmodem target: check the installation log file bin/install_log.txt"
            
471
            if [ $HW == "EXMIMO" ]; then 
472
                output=$(compile_exmimo2_driver   >> bin/install_log.txt  2>&1)
473 474 475 476 477 478 479 480
            fi
        fi
        if [ $TARGET = "OAISIM" ]; then 
            echo "################ compile_oaisim #################"  >> bin/install_log.txt 
            output=$(compile_oaisim   >> bin/install_log.txt 2>&1 )
            oaisim_compiled=$?	
            check_for_oaisim_executable
            echo_info "7.2 finished oaisim target: check the installation log file bin/install_log.txt" 
gauthier's avatar
gauthier committed
481 482 483 484 485 486 487
            
            if [ $ENB_S1 -eq 1 ]; then
                compile_nas_tools  2>&1
                nas_tools_compiled=$?  
                check_for_nas_tools_executable
                echo_info "7.2.1 finished nas ue target: check the installation log file bin/install_log.txt"
            fi
488 489 490 491 492 493 494 495 496 497 498 499 500 501
        fi
        if [ $TARGET = "UNISIM" ]; then 
           echo "################## compile_unisim ##################"  >> bin/install_log.txt 
            output=$(compile_unisim   >> bin/install_log.txt 2>&1 )
            unisim_compiled=$?
            check_for_dlsim_executable
            check_for_ulsim_executable
            check_for_pucchsim_executable
            check_for_prachsim_executable
            check_for_pdcchsim_executable
            check_for_pbchsim_executable
            check_for_mbmssim_executable
            echo_info "7.3 finished unisim target: check the installation log file bin/install_log.txt" 
        fi
502 503 504 505
    fi


############################################
nikaeinn's avatar
nikaeinn committed
506
# install 
507 508
############################################

509 510
    echo_info "8. Installing ..."
    
511
    if [ $softmodem_compiled -eq 0 ]; then 
512 513 514
        echo_success "target lte-softmodem built and installed in the bin directory"
        echo "target lte-softmodem built and installed in the bin directory"  >>  bin/${oai_build_date}
        output=$(install_ltesoftmodem $RT $HW $ENB_S1 )
515
    fi
516
    if [ $oaisim_compiled -eq 0 ]; then 
517 518 519
        echo_success "target oaisim built and installed in the bin directory"
        echo "target oaisim built and installed in the bin directory"  >>  bin/${oai_build_date}
        output=$(install_oaisim $ENB_S1 )
520
    fi 
521
    if [ $unisim_compiled -eq  0 ]; then 
522 523
        echo_success "target unisim built and installed in the bin directory"
        echo "target unisim built and installed in the bin directory"  >>  bin/${oai_build_date}
524 525 526 527 528
    fi 
    
    echo_info "build terminated, binaries are located in bin/"
    echo_info "build terminated, logs are located in bin/${oai_build_date} and bin/install_log.txt"
    
529 530


531 532
}
build_epc(){
533 534 535

    epc_compiled=1

536
    echo_info "Note: this scripts tested only on Ubuntu 14.04x64"
537 538 539 540

######################################
# CHECK MISC SOFTWARES AND LIBS      #
######################################
541 542
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "4. Checking the the required softwares/packages for EPC..."
543

544 545 546 547 548 549 550 551 552 553 554
        check_install_epc_software  
        check_install_asn1c
        if [ $OAI_CLEAN -eq 1 ]; then
            check_install_freediamter
        else 
            if [ ! -d /usr/local/etc/freeDiameter ]; then
                check_install_freediamter
            fi
        fi
    else
        echo_info "4. Not checking the required softwares/packages for EPC"
555 556 557 558 559 560
    fi

###########################################
# configure and compile
##########################################

561 562
    echo_info "5. configure and compile epc"

563
    output=$(compile_epc $OAI_CLEAN  >> $OPENAIR_TARGETS/bin/install_log.txt  2>&1 )
564
    epc_compiled=$?
565 566 567 568
    if [ $epc_compiled -ne 0 ]; then
        echo_error "EPC compilation failed : check the installation log file bin/install_log.txt" 
        exit 1
    fi
569 570
    check_for_epc_executable
    echo_info "finished epc target: check the installation log file bin/install_log.txt" 
571 572 573 574 575

    if [ $CONFIG_FILE_ACCESS_OK -eq 0 ]; then
        echo_error "You have to provide a EPC config file"
        exit 1
    fi
576
    
577
    TEMP_FILE=`tempfile`
578
    VARIABLES=" S6A_CONF\|\
gauthier's avatar
gauthier committed
579
           HSS_HOSTNAME\|\
580 581 582 583
           REALM"

    VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
    VARIABLES=$(echo $VARIABLES | tr -d ' ')
584 585 586
    cat $CONFIG_FILE | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > $TEMP_FILE
    source $TEMP_FILE
    rm -f $TEMP_FILE
587 588 589 590 591 592 593 594 595 596 597 598 599

    if [ x"$REALM" == "x" ]; then
        echo_error "Your config file do not contain a REALM for S6A configuration"
        exit 1
    fi
    if [ x"$S6A_CONF" != "x./epc_s6a.conf" ]; then
        echo_error "Your config file do not contain the good path for the S6A config file,"
        echo_error "accordingly to what is done in this script, it should be set to epc_s6a.conf"
        exit 1
    fi

    check_epc_s6a_certificate $REALM

600 601 602 603 604 605
###########################################
# install the binary in bin
##########################################

    echo_info "6. install the binary file"

606
    if [ $epc_compiled -eq 0 ]; then 
607 608
        echo_success "target epc built and installed in the bin directory"
        echo "target epc built and installed in the bin directory"  >>  bin/${oai_build_date}
609
        cp -f $CONFIG_FILE  $OPENAIR_TARGETS/bin
610
        cp -f $OPENAIR3_DIR/objs/UTILS/CONF/s6a.conf  $OPENAIR_TARGETS/bin/epc_s6a.conf
611
    fi
612 613 614
}

build_hss(){
615
    echo_info "Note: this script tested only for Ubuntu 12.04 x64 -> 14.04 x64"
616 617 618 619

######################################
# CHECK MISC SOFTWARES AND LIBS      #
######################################
620 621 622
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "4. check the required packages for HSS"
        check_install_hss_software
623
        if [ $OAI_CLEAN -eq 1 ]; then
624
            check_install_freediamter
625 626 627 628
        else 
            if [ ! -d /usr/local/etc/freeDiameter ]; then
                check_install_freediamter
            fi
629
        fi
630 631
    else
        echo_info "4. Not checking the required packages for HSS"
632
    fi
633
    
634
  
635 636 637
######################################
# compile HSS                        #
######################################
638
    echo_info "5. compile HSS"
639

640
     # Bad behaviour of $OAI_CLEAN with ./.lock_oaibuild ...
gauthier's avatar
gauthier committed
641
     compile_hss $CLEAN_HSS
642 643
     hss_compiled=$?
     check_for_hss_executable
gauthier's avatar
gauthier committed
644
     echo_info "finished hss target" 
645
 
646 647 648 649 650
######################################
# Check certificates                 #
######################################
  
    TEMP_FILE=`tempfile`
651 652 653 654
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf | grep -w "Identity" | tr -d " " | tr -d ";" > $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_user" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_pass" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_db" | tr -d " " | tr -d ";" >> $TEMP_FILE
655 656 657 658 659 660 661 662
    source $TEMP_FILE
    rm -f  $TEMP_FILE

    if [ x"$Identity" == "x" ]; then
        echo_error "Your config file do not contain a host identity for S6A configuration"
        exit 1
    fi
    HSS_REALM=$(echo $Identity | sed 's/.*\.//')
663 664 665 666
    HSS_HOSTNAME=${Identity%.$HSS_REALM}
    NEW_HOSTNAME=`hostname -s`
    if [ "x$HSS_HOSTNAME" != "x$NEW_HOSTNAME" ]; then
       echo_warning "Changing identity of HSS from <$HSS_HOSTNAME.$HSS_REALM> to <$NEW_HOSTNAME.$HSS_REALM>"
667
       sed -ibak "s/$HSS_HOSTNAME/$NEW_HOSTNAME/"  $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf 
668
    fi
669 670
    check_hss_s6a_certificate $HSS_REALM
    
671 672 673
######################################
# fill the HSS DB
######################################
674
     echo_info "6. create HSS database (for EURECOM SIM CARDS)"
675
     hss_db_created=1
676
     create_hss_database $OAI_DB_ADMIN_USER_NAME $OAI_DB_ADMIN_USER_PASSWORD $MYSQL_user $MYSQL_pass $MYSQL_db
gauthier's avatar
gauthier committed
677 678
     if [ $? -eq 1 ]; then
         echo_fatal "hss DB not created"
679
     fi
680 681
}

682

nikaeinn's avatar
nikaeinn committed
683
 
gauthier's avatar
gauthier committed
684

685
echo_info "3. set the top-level build target"
686
case "$BUILD_LTE" in
687 688 689 690 691
    'ENB')
         echo_success "build LTE eNB"
         build_enb
         ;;
    'EPC')
692
         echo_success "build EPC(MME and xGW)"
693 694 695
         build_epc
         ;;
    'HSS')
696 697 698
        echo_success "build HSS"
        build_hss 
        ;;
699
    'NONE')
700
        ;;
701
    *)
702
        ;;
703 704 705 706 707 708 709
esac

# Additional operation 

############################################
# Generate doxygen documentation
############################################
710

711 712 713 714 715 716 717
if [ $DOXYGEN = 1 ]; then 
    echo_info "9. Generate doxygen documentation ..."
    doxygen $OPENAIR_TARGETS/DOCS/Doxyfile
    echo_info "9.1 use your navigator to open $OPENAIR_TARGETS/DOCS/html/index.html "
else 
    echo_info "9. Bypassing doxygen documentation ..."
fi 
718 719 720 721 722 723


############################################
# testing
############################################
    
724 725 726 727 728 729
if [ $OAI_TEST -eq 1 ]; then 
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
    python $OPENAIR_TARGETS/TEST/OAI/test01.py -l 
else 
    echo_info "10. Bypassing the Tests ..."
fi 
730 731 732 733
    
############################################
# run 
############################################
nikaeinn's avatar
nikaeinn committed
734

735
if [ $RUN -ne 0 ]; then 
736
    echo_info "11. Running ..."
737 738 739 740 741 742 743 744
    cd $OPENAIR_TARGETS/bin
    case "$BUILD_LTE" in
        'ENB')
            if [ $TARGET == "SOFTMODEM" ]; then 
                if [ $HW == "EXMIMO" ]; then 
                    $SUDO chmod 777 $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
                    $SUDO $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
                fi
745 746 747
		if [ $WIRESHARK -eq 1 ]; then 
		    EXE_ARGUMENTS="$EXE_ARGUMENTS -W"
		fi 
748 749
                echo "############# running ltesoftmodem #############"
                if [ $RUN_GDB -eq 0 ]; then 
750
                    $SUDO $OPENAIR_TARGETS/bin/lte-softmodem  `echo $EXE_ARGUMENTS`
751
                else
752
                    $SUDO setenv MALLOC_CHECK_ 2
753 754 755 756 757 758
                    $SUDO touch ~/.gdb_lte_softmodem
                    $SUDO echo "file $OPENAIR_TARGETS/bin/lte-softmodem" > ~/.gdb_lte_softmodem
                    $SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_lte_softmodem
                    $SUDO echo "run" >> ~/.gdb_lte_softmodem
                    $SUDO gdb -nh -x ~/.gdb_lte_softmodem 2>&1 
                fi
gauthier's avatar
gauthier committed
759 760 761 762
                
            elif [ $TARGET == "OAISIM" ]; then
            
                if [ $ENB_S1 -eq 0 ]; then
nikaeinn's avatar
nikaeinn committed
763
		    install_nasmesh
gauthier's avatar
gauthier committed
764 765 766 767
                else
                    # prepare NAS for UE
                    if [ ! -f .ue.nvram ]; then
                        echo_success "generate .ue_emm.nvram .ue.nvram"
768
                        $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
gauthier's avatar
gauthier committed
769 770 771 772
                    fi

                    if [ ! -f .usim.nvram ]; then
                        echo_success "generate .usim.nvram"
773
                        $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
gauthier's avatar
gauthier committed
774
                    fi
775 776
                    $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --print
                    $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --print
gauthier's avatar
gauthier committed
777 778 779 780

                    insmod  $OPENAIR2_DIR/NETWORK_DRIVER/UE_IP/ue_ip.ko
                    
                fi
781 782 783
                if [ $WIRESHARK -eq 1 ]; then 
		    EXE_ARGUMENTS="$EXE_ARGUMENTS -P wireshark"
		fi 
gauthier's avatar
gauthier committed
784 785 786 787 788 789 790 791 792 793
                if [ $RUN_GDB -eq 0 ]; then 
                    $SUDO exec $OPENAIR_TARGETS/bin/oaisim  `echo $EXE_ARGUMENTS`
                else
                    $SUDO setenv MALLOC_CHECK_ 2
                    $SUDO touch ~/.gdb_oaisim
                    $SUDO echo "file $OPENAIR_TARGETS/bin/lte-oaisim" > ~/.gdb_oaisim
                    $SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_oaisim
                    $SUDO echo "run" >> ~/.gdb_oaisim
                    $SUDO gdb -nh -x ~/.gdb_oaisim 2>&1 
                fi
794
            fi
795
            ;;
796 797
        
        
798
        'EPC')
799
            echo "############# running EPC #############"
gauthier's avatar
gauthier committed
800
            test_is_host_reachable $HSS_HOSTNAME.$REALM HSS
801
            if [ $RUN_GDB -eq 0 ]; then
nikaeinn's avatar
nikaeinn committed
802
                $SUDO $OPENAIR_TARGETS/bin/oai_epc  `echo $EXE_ARGUMENTS`
803
            else
nikaeinn's avatar
nikaeinn committed
804 805 806 807 808
                touch ~/.gdb_epc
                chmod 777 ~/.gdb_epc
                echo "file $OPENAIR_TARGETS/bin/oai_epc" > ~/.gdb_epc
                echo "set args $EXE_ARGUMENTS" >> ~/.gdb_epc
                echo "run" >> ~/.gdb_epc
809 810 811
                $SUDO gdb -nh -x ~/.gdb_epc 2>&1 
            fi
            ;;
812 813
        
        
814
        'HSS')
815
            echo "############# running HSS #############"
816
            cd $OPENAIR3_DIR/OPENAIRHSS/objs
817
            if [ $RUN_GDB -eq 0 ]; then
gauthier's avatar
gauthier committed
818
                $SUDO exec ./openair-hss -c ./conf/hss.conf
819
            else
nikaeinn's avatar
nikaeinn committed
820 821 822
                touch ~/.gdb_hss
                chmod 777 ~/.gdb_hss
                echo "file ./openair-hss" > ~/.gdb_hss
gauthier's avatar
gauthier committed
823
                echo "set args -c ./conf/hss.conf" >> ~/.gdb_hss
nikaeinn's avatar
nikaeinn committed
824
                echo "run" >> ~/.gdb_hss
825 826
                $SUDO gdb -nh -x ~/.gdb_hss 2>&1 
            fi
827
             ;;
828 829
         
         
830 831
        'NONE')
             ;;
832 833
         
         
834 835 836 837 838 839 840 841
        *)
             echo_error "Unknown option $BUILD_LTE: do not execute"
             ;;
    esac
else
    echo_info "11. No run requested, end of script"
    exit 0
fi
842

843