build_helper.bash 37.6 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
######################################

gauthier's avatar
   
gauthier committed
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 "
gauthier's avatar
   
gauthier committed
60
61
        echo "Run as a sudoers" 
        return 1
62
    else 
gauthier's avatar
   
gauthier committed
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." 
gauthier's avatar
   
gauthier committed
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 && {
gauthier's avatar
   
gauthier committed
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
gauthier's avatar
   
gauthier committed
103
        return 64  # 64-bit stuff here
104
    else
gauthier's avatar
   
gauthier committed
105
        if [ ${MACHINE_TYPE} = "i686" ]; then
106
            return 32 # 32-bit stuff here
gauthier's avatar
   
gauthier committed
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)
nikaeinn's avatar
   
nikaeinn committed
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
    
nikaeinn's avatar
   
nikaeinn committed
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
gauthier's avatar
   
gauthier committed
146
147
        echo "Creating non existing directory: /usr/local/etc/freeDiameter/"
        $SUDO mkdir /usr/local/etc/freeDiameter/
148
149
    fi
    
nikaeinn's avatar
   
nikaeinn committed
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(){
    
nikaeinn's avatar
   
nikaeinn committed
211
    if [ $UBUNTU_REL = "12.04" ]; then 
nikaeinn's avatar
nikaeinn committed
212

nikaeinn's avatar
   
nikaeinn committed
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"
    
knopp's avatar
   
knopp committed
256
257
    if [ -f gnutls-3.1.23.tar.xz ];  then
	$SUDO rm -f gnutls-3.1.23.tar.xz
258
    fi
knopp's avatar
   
knopp committed
259
260
    if [ -d gnutls-3.1.23/ ];  then
	$SUDO rm -rf gnutls-3.1.23/
261
    fi
nikaeinn's avatar
   
nikaeinn committed
262
    
nikaeinn's avatar
nikaeinn committed
263
    test_uninstall_package libgnutls-dev
nikaeinn's avatar
   
nikaeinn committed
264
    
knopp's avatar
   
knopp committed
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)"
knopp's avatar
   
knopp committed
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 ../
nikaeinn's avatar
   
nikaeinn committed
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 
  
nikaeinn's avatar
   
nikaeinn committed
304
#    make_certs
305
306
307
   
}

nikaeinn's avatar
nikaeinn committed
308
309
310
311
312
313

test_is_host_reachable() {
    ping -c 1 $1 > /dev/null || { echo_fatal "$1 does not respond to ping" >&2 ; }
}


314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
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"
                return 1
            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'}
331
332
    if [ $# -lt 2 ] ; then
        check_epc_s6a_certificate ${1:-'eur'}  2
nikaeinn's avatar
nikaeinn committed
333
334
    else
       exit 1
335
336
337
338
    fi
}


339
check_hss_s6a_certificate() {
340
    if [ -d /usr/local/etc/freeDiameter ]; then
nikaeinn's avatar
   
nikaeinn committed
341
342
        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`
343
344
345
            if [ a$full_hostname == a`hostname`.${1:-'eur'} ]
            then
                echo_success "HSS S6A: Found valid certificate in /usr/local/etc/freeDiameter"
nikaeinn's avatar
   
nikaeinn committed
346
                return 0
347
348
            else 
                echo_error "Bad hss hostname found in cert file: "$full_hostname " hostname is "`hostname`
349
350
351
352
353
            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..."
354
355
356
    cd $OPENAIRCN_DIR/OPENAIRHSS/conf
    ./make_certs.sh ${1:-'eur'}
    if [ $# -lt 2 ] ; then
gauthier's avatar
   
gauthier committed
357
358
        __i=check_hss_s6a_certificate ${1:-'eur'} 2
        return $__i
nikaeinn's avatar
   
nikaeinn committed
359
    fi
gauthier's avatar
   
gauthier committed
360
    return 1
361
362
}

363
364
check_install_usrp_uhd_driver(){
    if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then 
gauthier's avatar
   
gauthier committed
365
366
        $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
367
368
    fi 
    $SUDO apt-get install -t $UBUNTU_REL_NAME uhd
369
370
371
    test_install_package python 
    test_install_package libboost-all-dev 
    test_install_package libusb-1.0-0-dev
372
373
374
    #test_install_package uhd
}

375
376
377
check_install_oai_software() {
    
    if [ ! -f ./.lock_oaibuild ]; then 
gauthier's avatar
   
gauthier committed
378
379
380
381
        $SUDO apt-get update
        if [ $UBUNTU_REL = "12.04" ]; then 
            test_uninstall_package nettle-dev
            test_uninstall_package nettle-bin
382
383
384
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
gauthier's avatar
   
gauthier committed
385
386
387
388
389
        fi 
        test_install_package autoconf 
        test_install_package automake 
        test_install_package bison 
        test_install_package build-essential
gauthier's avatar
gauthier committed
390
        test_install_package dialog
gauthier's avatar
   
gauthier committed
391
392
393
394
395
396
397
398
        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
399
        sudo service ssh start
gauthier's avatar
   
gauthier committed
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
        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
421
422
423
424
425
#	if [ $MACHINE_ARCH = 64 ]; then
            test_install_package libconfig8-dev
#	else
#            test_install_package libconfig-dev
#	fi
gauthier's avatar
   
gauthier committed
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
        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
nikaeinn's avatar
nikaeinn committed
452
	
gauthier's avatar
   
gauthier committed
453
#        test_install_package libboost-all-dev
nikaeinn's avatar
nikaeinn committed
454
	
gauthier's avatar
   
gauthier committed
455
456
457
        if [ $OAI_INSTALLED = 1 ]; then 
            touch ./.lock_oaibuild
        fi 
458
459
    
     else
gauthier's avatar
   
gauthier committed
460
        echo_info "All the required packages installed: skip"
461
462
463
    fi 
    
}
nikaeinn's avatar
nikaeinn committed
464

465
466
467
check_install_hss_software() {
    if [ ! -f ./.lock_oaibuild ]; then 
	$SUDO apt-get update
468
	if [ $UBUNTU_REL = "12.04" ]; then 
nikaeinn's avatar
   
nikaeinn committed
469
470
	    test_uninstall_package nettle-dev
	    test_uninstall_package nettle-bin
471
472
473
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
nikaeinn's avatar
   
nikaeinn committed
474
	fi 
475
476
477
478
479
480
	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
481
482
    test_install_package dialog
    test_install_package dkms
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
	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 
nikaeinn's avatar
   
nikaeinn committed
498
#	test_install_package linux-headers-`uname -r` 
499
500
501
502
503
504
	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
505
        sudo service ssh start
506
507
508
509
510
	test_install_package phpmyadmin
	test_install_package python-dev 
	test_install_package sshfs
	test_install_package swig 
	test_install_package unzip 
nikaeinn's avatar
   
nikaeinn committed
511
512
#	test_install_package nettle-bin
#	test_install_package nettle-dev
513
514
515
516
517
	test_install_package valgrind 

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

}

check_install_epc_software() {

    if [ ! -f ./.lock_oaibuild ]; then 
gauthier's avatar
   
gauthier committed
528
529
530
531
        $SUDO apt-get update
        if [ $UBUNTU_REL = "12.04" ]; then 
            test_uninstall_package nettle-dev
            test_uninstall_package nettle-bin
532
533
534
        else 
            test_install_package nettle-dev
            test_install_package nettle-bin
gauthier's avatar
   
gauthier committed
535
536
537
538
539
540
541
542
        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
543
        test_install_package dialog
gauthier's avatar
   
gauthier committed
544
545
546
547
548
549
550
551
552
553
554
555
        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
556
        test_install_package iptables-dev
gauthier's avatar
   
gauthier committed
557
558
559
560
561
        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
562
            test_install_package libconfig8-dev
gauthier's avatar
   
gauthier committed
563
#        else
nikaeinn's avatar
   
nikaeinn committed
564
#            test_install_package libconfig-dev
gauthier's avatar
   
gauthier committed
565
566
567
568
569
570
571
572
573
574
575
576
577
578
#       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
579
        test_install_package libtool 
gauthier's avatar
   
gauthier committed
580
581
582
583
584
585
        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
586
        $SUDO service ssh start
gauthier's avatar
   
gauthier committed
587
588
589
590
591
592
593
594
595
596
597
598
        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
nikaeinn's avatar
nikaeinn committed
599
	
gauthier's avatar
   
gauthier committed
600
601
602
        if [ $OAI_INSTALLED = 1 ]; then 
            touch ./.lock_oaibuild
        fi 
nikaeinn's avatar
nikaeinn committed
603
    
604
    else
gauthier's avatar
   
gauthier committed
605
        echo_info "All the required packages installed: skip"
606
    fi 
607

608
609
610
611
612
}

check_install_asn1c(){
    
    test_command_install_script   "asn1c" "$OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash $SUDO"
613
614
    
    # One mor check about version of asn1c
615
616
    ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE="ASN.1 Compiler, v0.9.24"
    ASN1C_COMPILER_VERSION_MESSAGE=`asn1c -h 2>&1 | grep -i ASN\.1\ Compiler`
617
    ##ASN1C_COMPILER_VERSION_MESSAGE=`trim $ASN1C_COMPILER_VERSION_MESSAGE`
618
    if [ "$ASN1C_COMPILER_VERSION_MESSAGE" != "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE" ]; then
619
      #  diff <(echo -n "$ASN1C_COMPILER_VERSION_MESSAGE") <(echo -n "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE")
620
621
622
        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
gauthier's avatar
   
gauthier committed
623
            if [[ $answer = [YyNn] ]]; then
624
625
626
                [[ $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
gauthier's avatar
   
gauthier committed
627
            fi
628
629
        done
    fi
nikaeinn's avatar
nikaeinn committed
630
    
631
632
633
634
635
636
637
}

#################################################
# 2. compile 
################################################
compile_hss() {
    cd $OPENAIRCN_DIR/OPENAIRHSS
gauthier's avatar
   
gauthier committed
638
639
640
641
642
643
644
    
    if [ "$1" -eq 1 ]; then
        echo_info "build a clean HSS"
        rm -rfv obj*
        rm -rfv m4
        rm -rfv .autom4*
        rm -fv configure
nikaeinn's avatar
   
nikaeinn committed
645
    fi
gauthier's avatar
   
gauthier committed
646
647
648

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

675
    if [ -f Makefile ];  then
gauthier's avatar
   
gauthier committed
676
        echo_success "Compiling..."
677
        make ; #-j $NUM_CPU
678
679
        if [ $? -ne 0 ]; then
            echo_error "Build failed, exiting"
nikaeinn's avatar
   
nikaeinn committed
680
            return 1
681
682
683
        else 
            cp -pfv ./openair-hss $OPENAIR_TARGETS/bin
            return 0
684
685
        fi
    else
686
        echo_error "Configure failed, aborting"
687
    fi
688
    return 1
689
690
691
692
693
}


compile_epc() {
    cd $OPENAIRCN_DIR
nikaeinn's avatar
   
nikaeinn committed
694
    if [ $1 = 1 ]; then
gauthier's avatar
   
gauthier committed
695
696
        echo_info "build a clean EPC"
        bash_exec "rm -rf obj"
nikaeinn's avatar
   
nikaeinn committed
697
    fi
698
699
700
701
702
703
704
705
706
707
708
709
    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
710
        bash_exec "autoreconf -i -f"
711
        echo_success "Invoking autogen"
nikaeinn's avatar
nikaeinn committed
712
        bash_exec "libtoolize"        
713
        bash_exec "./autogen.sh"
714
715
        cd ./$OBJ_DIR
        echo_success "Invoking configure"
716
717
718
719
720
        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
721
722
723
724
    else
        cd ./$OBJ_DIR
    fi

nikaeinn's avatar
   
nikaeinn committed
725
726
#    pkill oai_epc
#    pkill tshark
727
728
729
730
731
732

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

gauthier's avatar
   
gauthier committed
764
765
766
767
768
769
770
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...
}


771
772
773
compile_ltesoftmodem() {
    cd $OPENAIR_TARGETS/RT/USER
    if [ -f Makefile ];  then
gauthier's avatar
   
gauthier committed
774
        rm -f ./lte-softmodem
gauthier's avatar
   
gauthier committed
775
776
777
778
779
780
781
782
783
784
        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 
785
        if [ $? -ne 0 ]; then
786
            if [ ! -f ./lte-softmodem ]; then 
gauthier's avatar
   
gauthier committed
787
788
789
                echo_error "Build lte-softmodem failed, returning"
                return 1
            else 
gauthier's avatar
   
gauthier committed
790
                cp -pf ./lte-softmodem  $OPENAIR_TARGETS/bin
gauthier's avatar
   
gauthier committed
791
792
793
                return 0
            fi 
        else
gauthier's avatar
   
gauthier committed
794
            cp -pf ./lte-softmodem  $OPENAIR_TARGETS/bin
gauthier's avatar
   
gauthier committed
795
            return 0
796
797
798
799
800
801
802
803
804
805
        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
806
        echo "Compiling for oaisim  target ($OAISIM_DIRECTIVES)"
gauthier's avatar
   
gauthier committed
807
808
        make cleanall > /dev/null
        make -j $NUM_CPU $OAISIM_DIRECTIVES 
809
810
811
        if [ $? -ne 0 ]; then
            echo_error "Build oaisim failed, returning"
            return 1
gauthier's avatar
   
gauthier committed
812
        else 
gauthier's avatar
   
gauthier committed
813
            cp -pf ./oaisim $OPENAIR_TARGETS/bin
gauthier's avatar
   
gauthier committed
814
            return 0
815
816
817
818
819
820
821
822
823
824
        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
825
        echo "Compiling for UNISIM target ..."
gauthier's avatar
   
gauthier committed
826
827
        make cleanall
        make  -j $NUM_CPU all 
828
829
830
        if [ $? -ne 0 ]; then
            echo_error "Build unisim failed, returning"
            return 1
gauthier's avatar
   
gauthier committed
831
        else 
gauthier's avatar
   
gauthier committed
832
833
834
835
836
837
838
            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
gauthier's avatar
   
gauthier committed
839
            return 0
840
841
842
843
844
845
846
847
848
849
850
851
852
        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"
853
        echo_error "Check the compilation logs in bin/install_log.txt"
gauthier's avatar
   
gauthier committed
854
        exit 1
855
856
857
858
859
    fi
}

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

nikaeinn's avatar
   
nikaeinn committed
865
866
867
868
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/"
        echo_error "Please make sure you have compiled OAI HSS"
869
        exit 1
nikaeinn's avatar
   
nikaeinn committed
870
871
872
    fi
}

873
874
875
876
877
878
879
880
881
882
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"
883
        echo_error "Check the compilation logs in bin/install_log.txt"
884
885
886
887
888
889
    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"
890
        echo_error "Check the compilation logs in bin/install_log.txt"
891
892
893
894
895
896
    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"
897
        echo_error "Check the compilation logs in bin/install_log.txt"
898
899
900
901
902
903
    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"
904
        echo_error "Check the compilation logs in bin/install_log.txt"
905
906
907
908
909
910
    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"
911
        echo_error "Check the compilation logs in bin/install_log.txt"
912
913
914
915
916
917
    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"
918
        echo_error "Check the compilation logs in bin/install_log.txt"
919
920
921
922
923
924
    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"
925
        echo_error "Check the compilation logs in bin/install_log.txt"
926
927
928
929
930
931
    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"
932
        echo_error "Check the compilation logs in bin/install_log.txt"
933
934
    fi
}
nikaeinn's avatar
nikaeinn committed
935
936
937
938
939

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

nikaeinn's avatar
nikaeinn committed
940
941
942
install_ltesoftmodem() {
    # RT
    if [ $1 = "RTAI" ]; then 
nikaeinn's avatar
nikaeinn committed
943
	if [ ! -f /tmp/init_rt_done.tmp ]; then
nikaeinn's avatar
nikaeinn committed
944
            echo_info "  8.1 Insert RTAI modules"
nikaeinn's avatar
nikaeinn committed
945
946
947
948
949
950
951
            $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
952
        else
nikaeinn's avatar
nikaeinn committed
953
            echo_warning "  8.1 RTAI modules already inserted"
nikaeinn's avatar
nikaeinn committed
954
955
        fi
    fi
nikaeinn's avatar
nikaeinn committed
956
957
958
959
960
961
    #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
962
		$SUDO mknod -m 666 /dev/rtf$i c 150 $i; 
nikaeinn's avatar
nikaeinn committed
963
964
965
966
967
968
969
970
971
972
973
974
975
976
	    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
977
978
    fi
    
nikaeinn's avatar
nikaeinn committed
979
980
981
982
983
    # 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
984
985
986
987
988
    
}

install_oaisim() {
   if [ $1 = 0 ]; then 
nikaeinn's avatar
nikaeinn committed
989
990
	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
991
992
993
   fi 
   
}
994

995
996
997
998
999
1000
1001
1002
1003
1004
##################################
# create HSS DB
################################

# arg 1 is mysql user      (root)
# arg 2 is mysql password  (linux)
create_hss_database(){
    EXPECTED_ARGS=2
    E_BADARGS=65
    MYSQL=`which mysql`
nikaeinn's avatar
   
nikaeinn committed
1005
    rv=0
1006
1007
1008
    if [ $# -ne $EXPECTED_ARGS ]
    then
        echo_fatal "Usage: $0 dbuser dbpass"
nikaeinn's avatar
   
nikaeinn committed
1009
	rv=1
1010
1011
    fi

1012
    set_openair_env
1013
1014
1015
1016
1017
1018
    
    Q1="CREATE DATABASE IF NOT EXISTS ${BTICK}oai_db${BTICK};"
    SQL="${Q1}"
    $MYSQL -u $1 --password=$2 -e "$SQL"
    if [ $? -ne 0 ]; then
       echo_error "oai_db creation failed"
nikaeinn's avatar
   
nikaeinn committed
1019
       rv=1
1020
1021
1022
1023
1024
1025
1026
    else
       echo_success "oai_db creation succeeded"
    fi
    
    $MYSQL -u $1 --password=$2 oai_db < $OPENAIRCN_DIR/OPENAIRHSS/db/oai_db.sql
    if [ $? -ne 0 ]; then
       echo_error "oai_db tables creation failed"
nikaeinn's avatar
   
nikaeinn committed
1027
       rv=1
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
    else
       echo_success "oai_db tables creation succeeded"
    fi
    
    Q1="GRANT ALL PRIVILEGES ON *.* TO 'hssadmin'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION;"
    Q2="FLUSH PRIVILEGES;"
    SQL="${Q1}${Q2}"
    $MYSQL -u $1 --password=$2 -e "$SQL"
    if [ $? -ne 0 ]; then
       echo_error "hssadmin permissions failed"
nikaeinn's avatar
   
nikaeinn committed
1038
       rv=1
1039
1040
1041
    else
       echo_success "hssadmin permissions succeeded"
    fi
nikaeinn's avatar
   
nikaeinn committed
1042
    return rv
1043
1044
}

1045
################################
1046
# set_openair_env
1047
1048
1049
###############################
set_openair_env(){

1050
1051
1052
1053
1054
1055
1056
    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
1057
    export OPENAIR_HOME=$openair_path
1058
1059
1060
1061
1062
    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
1063
1064

}
1065
1066
1067
1068
1069
1070
1071

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

print_help(){
    echo_success "Name : build_oai  - install and build OAI"
gauthier's avatar
   
gauthier committed
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
    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"
1092
}
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
###############################
## 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}
1114
1115
1116
1117
1118
1119
    if [ $BUILD_FROM_MAKEFILE = 0 ]; then 
	echo -e -n "$color$message$reset_color"
	echo
    else 
	echo "$message"
    fi
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
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
    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
1163
1164
1165
1166
1167
1168
1169
1170
1171
echo_info() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $blue
}
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
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

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
}