1. Fix code generated from ASN.1 of F1AP v15.4.0 failed to be compiled 2. Fix incorrect UPER encoding for empty extensible SEQUENCE in 38.331 3. Fix the problem that duplicate type names exist in OPEN TYPE
793 lines
23 KiB
Plaintext
Executable File
793 lines
23 KiB
Plaintext
Executable File
#/*
|
|
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
# * contributor license agreements. See the NOTICE file distributed with
|
|
# * this work for additional information regarding copyright ownership.
|
|
# * The OpenAirInterface Software Alliance licenses this file to You under
|
|
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
# * except in compliance with the License.
|
|
# * You may obtain a copy of the License at
|
|
# *
|
|
# * http://www.openairinterface.org/?page_id=698
|
|
# *
|
|
# * Unless required by applicable law or agreed to in writing, software
|
|
# * distributed under the License is distributed on an "AS IS" BASIS,
|
|
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# * See the License for the specific language governing permissions and
|
|
# * limitations under the License.
|
|
# *-------------------------------------------------------------------------------
|
|
# * For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
# * contact@openairinterface.org
|
|
# */
|
|
|
|
# file build_helper
|
|
# brief
|
|
# authors Laurent Thomas, Lionel GAUTHIER
|
|
#
|
|
#######################################
|
|
if [ ! -f /etc/os-release ]; then
|
|
echo "No /etc/os-release file found. You're likely on an unsupported distro."
|
|
exit -1
|
|
fi
|
|
OS_DISTRO=$(grep "^ID=" /etc/os-release | sed "s/ID=//" | sed "s/\"//g")
|
|
OS_RELEASE=$(grep "^VERSION_ID=" /etc/os-release | sed "s/VERSION_ID=//" | sed "s/\"//g")
|
|
case "$OS_DISTRO" in
|
|
fedora) OS_BASEDISTRO="fedora"; INSTALLER="dnf"; CMAKE="cmake" ;;
|
|
rhel) OS_BASEDISTRO="fedora"; INSTALLER="yum"; CMAKE="cmake3" ;;
|
|
centos) OS_BASEDISTRO="fedora"; INSTALLER="yum"; CMAKE="cmake3" ;;
|
|
debian) OS_BASEDISTRO="debian"; INSTALLER="apt-get"; CMAKE="cmake" ;;
|
|
ubuntu) OS_BASEDISTRO="debian"; INSTALLER="apt-get"; CMAKE="cmake" ;;
|
|
esac
|
|
KERNEL_VERSION=$(uname -r | cut -d '.' -f1)
|
|
KERNEL_MAJOR=$(uname -r | cut -d '.' -f2)
|
|
|
|
SUDO='sudo -E'
|
|
|
|
###############################
|
|
## echo and family
|
|
###############################
|
|
black='\E[30m'
|
|
red='\E[31m'
|
|
green='\E[32m'
|
|
yellow='\E[33m'
|
|
blue='\E[1;34m'
|
|
magenta='\E[35m'
|
|
cyan='\E[36m'
|
|
white='\E[37m'
|
|
reset_color='\E[00m'
|
|
COLORIZE=1
|
|
|
|
cecho() {
|
|
# Color-echo
|
|
# arg1 = message
|
|
# arg2 = color
|
|
local default_msg="No Message."
|
|
message=${1:-$default_msg}
|
|
color=${2:-$green}
|
|
[ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
|
|
echo -e "$message"
|
|
return
|
|
}
|
|
|
|
echo_error() { cecho "$*" $red ;}
|
|
echo_fatal() { cecho "$*" $red; exit -1 ;}
|
|
echo_warning() { cecho "$*" $yellow ;}
|
|
echo_success() { cecho "$*" $green ;}
|
|
echo_info() { cecho "$*" $blue ;}
|
|
|
|
########################
|
|
# distribution helpers #
|
|
########################
|
|
|
|
# This function return a string to identify the distribution we are running
|
|
# If we can't check the distribution, it returns "Unknown"
|
|
# This function return always true as exit code by design
|
|
# Examples:
|
|
# ubuntu16.04
|
|
# debian8.5
|
|
get_distribution_release() {
|
|
if [[ ! -z "$OS_DISTRO$OS_RELEASE" ]]; then
|
|
echo "$OS_DISTRO$OS_RELEASE"
|
|
else
|
|
echo Unknown
|
|
fi
|
|
}
|
|
|
|
check_supported_distribution() {
|
|
local distribution=$(get_distribution_release)
|
|
case "$distribution" in
|
|
"ubuntu18.04") return 0 ;;
|
|
"ubuntu17.10") return 0 ;;
|
|
"ubuntu17.04") return 0 ;;
|
|
"ubuntu16.04") return 0 ;;
|
|
"ubuntu14.04") return 0 ;;
|
|
"fedora24") return 0 ;;
|
|
"rhel7") return 0 ;;
|
|
"centos7") return 0 ;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
##################
|
|
# Error handlers #
|
|
##################
|
|
|
|
handler_EXIT() {
|
|
local exit_code=$?
|
|
[ "$exit_code" -eq 0 ] || echo_error "build have failed"
|
|
exit $exit_code
|
|
}
|
|
|
|
trap handler_EXIT EXIT
|
|
|
|
###########################
|
|
# Cleaners
|
|
###########################
|
|
|
|
clean_kernel() {
|
|
$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"
|
|
$SUDO rmmod nasmesh > /dev/null 2>&1
|
|
$SUDO rmmod oai_nw_drv > /dev/null 2>&1
|
|
$SUDO rmmod openair_rf > /dev/null 2>&1
|
|
$SUDO rmmod ue_ip > /dev/null 2>&1
|
|
echo_info "removed drivers from kernel"
|
|
}
|
|
|
|
clean_all_files() {
|
|
set_openair_env
|
|
dir=$OPENAIR_DIR/cmake_targets
|
|
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
|
rm -rf $dir/lte_build_oai $dir/lte-simulators/build
|
|
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
|
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
|
}
|
|
|
|
###################################
|
|
# Compilers
|
|
###################################
|
|
|
|
#check_warnings:
|
|
# print error message if the compilation had warnings
|
|
#argument:
|
|
# $1: log file
|
|
check_warnings() {
|
|
#we look for 'warning:' in the compilation log file
|
|
#this is how gcc starts a warning
|
|
#this is not perfect, we may get false positive
|
|
warning_count=`grep "warning:" "$1"|wc -l`
|
|
if [ $warning_count -gt 0 ]; then
|
|
echo_error "WARNING: $warning_count warnings. See $1"
|
|
fi
|
|
}
|
|
|
|
compilations() {
|
|
cd $OPENAIR_DIR/cmake_targets/$1/build
|
|
set +e
|
|
{
|
|
rm -f $3
|
|
if [ "$VERBOSE_COMPILE" == "1" ]; then
|
|
make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE
|
|
else
|
|
make -j`nproc` $2
|
|
fi
|
|
|
|
} > $dlog/$2.$REL.txt 2>&1
|
|
set -e
|
|
echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt"
|
|
if [ -s $3 ] ; then
|
|
cp $3 $4
|
|
echo_success "$2 compiled"
|
|
check_warnings "$dlog/$2.$REL.txt"
|
|
else
|
|
echo_error "$2 compilation failed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
############################################
|
|
# External packages installers
|
|
############################################
|
|
|
|
install_protobuf_from_source(){
|
|
protobuf_install_log=$OPENAIR_DIR/cmake_targets/log/protobuf_install_log.txt
|
|
echo_info "\nInstalling Google Protobuf from sources. The log file for Protobuf installation is here: $protobuf_install_log "
|
|
(
|
|
cd /tmp
|
|
echo "Downloading protobuf"
|
|
#rm -rf /tmp/protobuf-2.6.1.tar.gz* /tmp/protobuf-2.6.1
|
|
#wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
|
|
#tar -xzvf protobuf-2.6.1.tar.gz --owner $USER --group $USER --no-same-owner
|
|
#cd protobuf-2.6.1/
|
|
rm -rf /tmp/protobuf-cpp-3.3.0.tar.gz* /tmp/protobuf-3.3.0
|
|
wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
|
|
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner $USER --group $(groups | cut -d" " -f1) --no-same-owner
|
|
cd protobuf-3.3.0/
|
|
./configure
|
|
echo "Compiling protobuf"
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
) >& $protobuf_install_log
|
|
}
|
|
|
|
install_protobuf_c_from_source(){
|
|
protobuf_c_install_log=$OPENAIR_DIR/cmake_targets/log/protobuf_c_install_log.txt
|
|
echo_info "\nInstalling Google Protobuf_C from sources. The log file for Protobuf_C installation is here: $protobuf_c_install_log "
|
|
(
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
|
fi
|
|
cd /tmp
|
|
echo "Downloading protobuf-c"
|
|
rm -rf /tmp/protobuf-c
|
|
git clone https://github.com/protobuf-c/protobuf-c.git
|
|
cd protobuf-c
|
|
git checkout 2a46af42784abf86804d536f6e0122d47cfeea45
|
|
./autogen.sh
|
|
./configure
|
|
echo "Compiling protobuf-c"
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
) >& $protobuf_c_install_log
|
|
}
|
|
|
|
install_usrp_uhd_driver_from_source(){
|
|
uhd_install_log=$OPENAIR_DIR/cmake_targets/log/uhd_install_log.txt
|
|
echo_info "\nInstalling UHD driver from sources. The log file for UHD driver installation is here: $uhd_install_log "
|
|
(
|
|
cd /tmp
|
|
echo "Downloading UHD driver"
|
|
rm -rf /tmp/uhd
|
|
git clone https://github.com/EttusResearch/uhd.git
|
|
cd uhd
|
|
git checkout tags/release_003_010_001_001
|
|
mkdir -p host/build
|
|
cd host/build
|
|
$CMAKE ../
|
|
echo "Compiling UHD"
|
|
make -j`nproc`
|
|
make test
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
) >& $uhd_install_log
|
|
}
|
|
|
|
check_install_usrp_uhd_driver(){
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
#first we remove old installation
|
|
$SUDO apt-get remove -y uhd || true
|
|
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y || true
|
|
v=$(lsb_release -cs)
|
|
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
|
|
# The new USRP repository
|
|
# Raphael Defosseux: Adding a loop on adding PPA because in CI the gpg key retrieve may
|
|
# timeout due to proxy / network latencies in Eurecom on VM
|
|
echo_info "\nAdding PPA repository ettusresearch/uhd\n"
|
|
x=0
|
|
while [ $x -le 5 ]
|
|
do
|
|
if $SUDO add-apt-repository ppa:ettusresearch/uhd -y
|
|
then
|
|
echo_info "add-apt-repository successful\n"
|
|
break
|
|
else
|
|
echo_info "add-apt-repository failed, retrying...\n"
|
|
sleep 30
|
|
fi
|
|
x=$((x + 1))
|
|
done
|
|
$SUDO apt-get update
|
|
$SUDO apt-get -y --allow-unauthenticated install python python-tk libboost-all-dev libusb-1.0-0-dev
|
|
$SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
|
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
$SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake
|
|
$SUDO -H pip install requests
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
# until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source
|
|
$SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware
|
|
install_usrp_uhd_driver_from_source
|
|
else
|
|
$SUDO $INSTALLER -y install uhd uhd-devel uhd-firmware
|
|
fi
|
|
fi
|
|
}
|
|
|
|
install_usrp_uhd_driver() {
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
# We move uhd-host apart because it depends on linux kernel version
|
|
# On newer kernels, it fails to install
|
|
$SUDO apt-get -y install uhd-host
|
|
fi
|
|
if [ -z $1 ]; then
|
|
$SUDO uhd_images_downloader
|
|
else
|
|
$SUDO uhd_images_downloader -i $1
|
|
fi
|
|
}
|
|
|
|
install_bladerf_driver_from_source(){
|
|
bladerf_install_log=$OPENAIR_DIR/cmake_targets/log/bladerf_install_log.txt
|
|
echo_info "\nInstalling BladeRF driver from sources. The log file for BladeRF driver installation is here: $bladerf_install_log "
|
|
(
|
|
cd /tmp
|
|
echo "Downloading BladeRF driver"
|
|
rm -rf /tmp/bladeRF
|
|
git clone https://github.com/Nuand/bladeRF.git
|
|
cd bladeRF
|
|
git checkout tags/2016.06
|
|
mkdir -p build
|
|
cd build
|
|
$CMAKE ../
|
|
echo "Compiling BladeRF driver"
|
|
make
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
echo "Downloading FPGA and firmware images"
|
|
cd /tmp/bladeRF
|
|
wget https://www.nuand.com/fx3/bladeRF_fw_latest.img
|
|
wget https://www.nuand.com/fpga/hostedx40-latest.rbf
|
|
sudo mkdir -p /usr/share/Nuand/bladeRF
|
|
sudo mv bladeRF_fw_latest.img /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
|
sudo mv hostedx40-latest.rbf /usr/share/Nuand/bladeRF/hostedx40.rbf
|
|
) >& $bladerf_install_log
|
|
}
|
|
|
|
check_install_bladerf_driver(){
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
if [ "$(get_distribution_release)" == "ubuntu14.04" ] ; then
|
|
$SUDO add-apt-repository -y ppa:bladerf/bladerf
|
|
$SUDO apt-get update
|
|
fi
|
|
$SUDO apt-get install -y --allow-unauthenticated bladerf libbladerf-dev
|
|
$SUDO apt-get install -y --allow-unauthenticated bladerf-firmware-fx3
|
|
$SUDO apt-get install -y --allow-unauthenticated bladerf-fpga-hostedx40
|
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
install_bladerf_driver_from_source
|
|
else
|
|
echo_error "BladeRF Installer for OAI does not support automatic build. Install BladeRF compiling sources manually from BladeRF website"
|
|
fi
|
|
}
|
|
|
|
flash_firmware_bladerf() {
|
|
$SUDO bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
|
}
|
|
|
|
check_install_lmssdr_driver(){
|
|
if ( [ -d "/usr/local/include/lime" ] &&
|
|
[ -f "/usr/local/include/lime/LimeSuite.h" ] )
|
|
then
|
|
echo_success "Found lmssdr drivers and tools installed from source"
|
|
else
|
|
echo_error "lmssdr support implies installing lmssdr drivers and tools" \
|
|
" from sources. check:"
|
|
echo_info "https://open-cells.com/index.php/2017/05/10/limesdr-installation/"
|
|
echo_fatal "Cannot compile lmssdr device"
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
check_install_additional_tools (){
|
|
$SUDO $INSTALLER update -y
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
PACKAGE_LIST="\
|
|
check \
|
|
dialog \
|
|
dkms \
|
|
gawk \
|
|
libboost-all-dev \
|
|
libpthread-stubs0-dev \
|
|
openvpn \
|
|
pkg-config \
|
|
python-dev \
|
|
python-pexpect \
|
|
sshfs \
|
|
swig \
|
|
tshark \
|
|
uml-utilities \
|
|
unzip \
|
|
valgrind \
|
|
vlan \
|
|
ctags \
|
|
ntpdate \
|
|
iperf3 \
|
|
android-tools-adb \
|
|
wvdial \
|
|
python-numpy \
|
|
sshpass \
|
|
nscd \
|
|
bc \
|
|
ntp \
|
|
python-scipy \
|
|
python-matplotlib"
|
|
elif [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
PACKAGE_LIST="\
|
|
check \
|
|
dialog \
|
|
dkms \
|
|
gawk \
|
|
boost-devel \
|
|
openvpn \
|
|
pkgconfig \
|
|
pexpect \
|
|
sshfs \
|
|
swig \
|
|
wireshark \
|
|
unzip \
|
|
valgrind \
|
|
vconfig \
|
|
ctags \
|
|
ntpdate \
|
|
iperf3 \
|
|
wvdial \
|
|
numpy \
|
|
sshpass \
|
|
nscd \
|
|
python2-paramiko \
|
|
python-pyroute2 \
|
|
python-netifaces \
|
|
scipy \
|
|
python-matplotlib"
|
|
elif [[ "$OS_DISTRO" == "fedora" ]]; then
|
|
PACKAGE_LIST=" \
|
|
check \
|
|
dialog \
|
|
dkms \
|
|
gawk \
|
|
boost-devel \
|
|
openvpn \
|
|
pkgconfig \
|
|
python-pexpect \
|
|
sshfs \
|
|
swig \
|
|
wireshark \
|
|
unzip \
|
|
valgrind \
|
|
vconfig \
|
|
ctags \
|
|
ntpdate \
|
|
iperf3 \
|
|
wvdial \
|
|
python-numpy \
|
|
sshpass \
|
|
nscd \
|
|
python2-paramiko \
|
|
python-pyroute2 \
|
|
python-netifaces \
|
|
python2-scipy \
|
|
python2-matplotlib"
|
|
fi
|
|
$SUDO $INSTALLER install -y $PACKAGE_LIST
|
|
|
|
$SUDO rm -fr /opt/ssh
|
|
$SUDO GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/ssh.git /opt/ssh
|
|
|
|
#The packages below are already installed for Redhat distros (RHEL, CentOS, Fedora)
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
$SUDO -H pip install paramiko
|
|
$SUDO -H pip install pyroute2 colorama
|
|
log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt
|
|
echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface"
|
|
(
|
|
$SUDO rm -fr /tmp/netifaces-0.10.4.tar.gz /tmp/netifaces
|
|
wget -P /tmp https://pypi.python.org/packages/18/fa/dd13d4910aea339c0bb87d2b3838d8fd923c11869b1f6e741dbd0ff3bc00/netifaces-0.10.4.tar.gz
|
|
tar -xzvf /tmp/netifaces-0.10.4.tar.gz -C /tmp
|
|
cd /tmp/netifaces-0.10.4
|
|
$SUDO python setup.py install
|
|
cd -
|
|
) >& $log_netiface
|
|
fi
|
|
}
|
|
|
|
check_install_oai_software() {
|
|
local specific_packages=""
|
|
if ! check_supported_distribution; then
|
|
echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
|
|
exit 1
|
|
fi
|
|
$SUDO $INSTALLER update -y
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
local LAPACK_LIBNAME="liblapack.so"
|
|
local LAPACK_TARGET="/usr/lib/atlas-base/atlas/liblapack.so"
|
|
$SUDO apt install -y software-properties-common
|
|
case "$(get_distribution_release)" in
|
|
"ubuntu14.04")
|
|
specific_packages="libtasn1-3-dev libgnutls-dev libatlas-dev iproute libconfig8-dev"
|
|
# For iperf3
|
|
$SUDO add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty-backports universe"
|
|
$SUDO apt-get update
|
|
;;
|
|
"ubuntu16.04")
|
|
specific_packages="libtasn1-6-dev libgnutls-dev libatlas-dev iproute libconfig8-dev"
|
|
;;
|
|
"ubuntu17.04")
|
|
specific_packages="libtasn1-6-dev libgnutls28-dev libatlas-dev iproute libconfig8-dev"
|
|
;;
|
|
"ubuntu17.10")
|
|
specific_packages="libtasn1-6-dev libgnutls28-dev iproute libconfig8-dev"
|
|
LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu"
|
|
LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so"
|
|
;;
|
|
"ubuntu18.04")
|
|
specific_packages="libtasn1-6-dev libgnutls28-dev iproute2 libconfig-dev"
|
|
LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu"
|
|
LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so"
|
|
;;
|
|
esac
|
|
$SUDO apt-get install -y \
|
|
$specific_packages \
|
|
autoconf \
|
|
automake \
|
|
bison \
|
|
build-essential \
|
|
cmake \
|
|
cmake-curses-gui \
|
|
doxygen \
|
|
doxygen-gui \
|
|
texlive-latex-base \
|
|
ethtool \
|
|
flex \
|
|
gdb \
|
|
git \
|
|
graphviz \
|
|
gtkwave \
|
|
guile-2.0-dev \
|
|
iperf \
|
|
iptables \
|
|
iptables-dev \
|
|
libatlas-base-dev \
|
|
libblas-dev \
|
|
liblapack-dev\
|
|
liblapacke-dev\
|
|
libffi-dev \
|
|
libforms-bin \
|
|
libforms-dev \
|
|
libgcrypt11-dev \
|
|
libgmp-dev \
|
|
libgtk-3-dev \
|
|
libidn2-0-dev \
|
|
libidn11-dev \
|
|
libmysqlclient-dev \
|
|
liboctave-dev \
|
|
libpgm-dev \
|
|
libpython2.7-dev \
|
|
libsctp1 \
|
|
libsctp-dev \
|
|
libssl-dev \
|
|
libtool \
|
|
libusb-1.0-0-dev \
|
|
libxml2 \
|
|
libxml2-dev \
|
|
libxslt1-dev \
|
|
mscgen \
|
|
octave \
|
|
octave-signal \
|
|
openssh-client \
|
|
openssh-server \
|
|
openssl \
|
|
python \
|
|
subversion \
|
|
xmlstarlet \
|
|
python-pip \
|
|
pydb \
|
|
libyaml-dev \
|
|
wget \
|
|
libxpm-dev
|
|
|
|
$SUDO update-alternatives --set "$LAPACK_LIBNAME" "$LAPACK_TARGET"
|
|
|
|
$SUDO apt-get install -y nettle-dev nettle-bin
|
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
if rpm -q epel-release > /dev/null; then
|
|
echo "EPEL repos already present. Good."
|
|
else
|
|
echo "EPEL repos not present. Installing them."
|
|
$SUDO $INSTALLER install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
|
fi
|
|
$SUDO $INSTALLER install -y python-epdb vim-common
|
|
else
|
|
$SUDO $INSTALLER install -y mscgen pydb
|
|
fi
|
|
|
|
$SUDO $INSTALLER install -y \
|
|
autoconf \
|
|
automake \
|
|
bc \
|
|
bison \
|
|
$CMAKE \
|
|
doxygen \
|
|
ethtool \
|
|
flex \
|
|
gdb \
|
|
git \
|
|
graphviz \
|
|
gtkwave \
|
|
guile-devel \
|
|
iperf \
|
|
iproute \
|
|
iptables \
|
|
iptables-devel \
|
|
atlas-devel \
|
|
blas-devel \
|
|
libconfig-devel \
|
|
libffi-devel \
|
|
xforms \
|
|
xforms-devel \
|
|
libgcrypt-devel \
|
|
gmp-devel \
|
|
gtk3-devel \
|
|
libidn2-devel \
|
|
libidn-devel \
|
|
mariadb-devel \
|
|
octave-devel \
|
|
openpgm-devel \
|
|
lksctp-tools \
|
|
lksctp-tools-devel \
|
|
openssl-devel \
|
|
libtasn1 \
|
|
libtool \
|
|
libusb-devel \
|
|
libxml2 \
|
|
libxml2-devel \
|
|
libxslt-devel \
|
|
octave \
|
|
octave-signal \
|
|
openssh-clients \
|
|
openssh-server \
|
|
openssl \
|
|
patch \
|
|
psmisc \
|
|
python \
|
|
subversion \
|
|
xmlstarlet \
|
|
python-pip \
|
|
wget \
|
|
kernel-headers \
|
|
kernel-devel \
|
|
nettle-devel \
|
|
gnutls-devel \
|
|
libXpm-devel \
|
|
lapack \
|
|
lapack-devel \
|
|
blas \
|
|
blas-devel \
|
|
libyaml-devel
|
|
fi
|
|
|
|
install_asn1c_from_source
|
|
$SUDO rm -fr /opt/ssh
|
|
$SUDO git clone https://gist.github.com/2190472.git /opt/ssh
|
|
}
|
|
|
|
install_asn1c_from_source(){
|
|
asn1_install_log=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt
|
|
echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log "
|
|
(
|
|
$SUDO rm -rf /tmp/asn1c
|
|
# GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
|
|
git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
|
|
cd /tmp/asn1c
|
|
# better to use a given commit than a branch in case the branch
|
|
# is updated and requires modifications in the source of OAI
|
|
#git checkout velichkov_s1ap_plus_option_group
|
|
git checkout f12568d617dbf48497588f8e227d70388fa217c9
|
|
autoreconf -iv
|
|
./configure
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
cd -
|
|
$SUDO ldconfig
|
|
) > $asn1_install_log 2>&1
|
|
}
|
|
|
|
#################################################
|
|
# 2. compile
|
|
################################################
|
|
|
|
install_nas_tools() {
|
|
if [ ! -f .ue.nvram0 ]; then
|
|
echo_success "generate .ue_emm.nvram .ue.nvram"
|
|
./nvram --gen -c $1 -o $2
|
|
else
|
|
[ ./nvram -nt .ue.nvram0 -o ./nvram -nt .ue_emm.nvram0 ] && ./nvram --gen -c $1 -o $2
|
|
fi
|
|
|
|
if [ ! -f .usim.nvram0 ]; then
|
|
echo_success "generate .usim.nvram"
|
|
./usim --gen -c $1 -o $2
|
|
else
|
|
[ ./usim -nt .usim.nvram0 ] && ./usim --gen -c $1 -o $2
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
################################
|
|
# set_openair_env
|
|
###############################
|
|
set_openair_env(){
|
|
fullpath=`readlink -f $BASH_SOURCE`
|
|
[ -f "/.$fullpath" ] || fullpath=`readlink -f $PWD/$fullpath`
|
|
openair_path=${fullpath%/cmake_targets/*}
|
|
openair_path=${openair_path%/targets/*}
|
|
openair_path=${openair_path%/openair[123]/*}
|
|
export OPENAIR_DIR=$openair_path
|
|
export OPENAIR1_DIR=$openair_path/openair1
|
|
export OPENAIR2_DIR=$openair_path/openair2
|
|
export OPENAIR3_DIR=$openair_path/openair3
|
|
export OPENAIR_TARGETS=$openair_path/targets
|
|
}
|
|
|
|
################################
|
|
# Function to killall the subprocesses when Ctrl-C Key is hit
|
|
###############################
|
|
function handle_ctrl_c(){
|
|
CURPID=$$
|
|
ppid=$$
|
|
arraycounter=1
|
|
echo_info "** Trapped CTRL-C. Killing all subprocesses now..."
|
|
echo_info "** Calling sync now..."
|
|
sync
|
|
while true
|
|
do
|
|
FORLOOP=FALSE
|
|
# Get all the child process id
|
|
for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'`
|
|
do
|
|
if [ $i -ne $CURPID ] ; then
|
|
procid[$arraycounter]=$i
|
|
arraycounter=`expr $arraycounter + 1`
|
|
ppid=$i
|
|
FORLOOP=TRUE
|
|
fi
|
|
done
|
|
if [ "$FORLOOP" = "FALSE" ] ; then
|
|
arraycounter=`expr $arraycounter - 1`
|
|
## We want to kill child process id first and then parent id's
|
|
while [ $arraycounter -ne 0 ]
|
|
do
|
|
echo "first we send ctrl-c to program"
|
|
$SUDO kill -INT "${procid[$arraycounter]}"
|
|
sleep 5
|
|
echo "Now we force kill if that didn't work"
|
|
$SUDO kill -9 "${procid[$arraycounter]}" >/dev/null
|
|
arraycounter=`expr $arraycounter - 1`
|
|
done
|
|
exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
# get from http://www.linuxjournal.com/content/validating-ip-address-bash-script
|
|
validate_ip() {
|
|
|
|
local ip=$1
|
|
local stat=1
|
|
|
|
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
|
OIFS=$IFS
|
|
IFS='.'
|
|
ip=($ip)
|
|
IFS=$OIFS
|
|
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
|
|
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
|
|
stat=$?
|
|
fi
|
|
|
|
return $stat
|
|
}
|