It has been chosen to not include the full history of commits from David. He included a binary version of wireshark, probably a modified one that understands NFAPI. Wireshark is released under the GPL license, we cannot include it in the repository. We could have done a next commit to remove this binary. But then it would still be present in the history of commits, which may not be allowed. And it would take space on disk. We could edit the history to remove wireshark entirely. But this operation is too complicated. There was also a pcap capture file, which has nothing to do in the history of commits and would take space on disk. There again, it's too difficult to edit the history to remove it. There was a file .gitignore that was also removed. The original history can be found on David's repository: https://gitlab.eurecom.fr/daveprice/openairinterface5g/ The branch is: nfapi-ru-rau-split. A copy of that branch has been included in the internal OAI repository, for those who have access to it. The branch is the same. The last commit ID is 9106438239e0bc626ff1fa1d97d911caadd0fbb9. You can compare the current commit with the commit 9106... to see what differs. The current commit has to be considered non-working. The commit following the current commit will fix problems with the work in the current commit. If you use git bisect, don't spend time analyzing the current commit.
759 lines
21 KiB
Plaintext
Executable File
759 lines
21 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
|
|
"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 $USER --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 git://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
|
|
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
|
|
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
|
|
$SUDO add-apt-repository ppa:ettusresearch/uhd -y
|
|
$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
|
|
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_ursp_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 pip install paramiko
|
|
$SUDO 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
|
|
$SUDO apt install -y software-properties-common
|
|
case "$(get_distribution_release)" in
|
|
"ubuntu14.04")
|
|
specific_packages="libtasn1-3-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"
|
|
;;
|
|
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 \
|
|
gccxml \
|
|
gdb \
|
|
git \
|
|
graphviz \
|
|
gtkwave \
|
|
guile-2.0-dev \
|
|
iperf \
|
|
iproute \
|
|
iptables \
|
|
iptables-dev \
|
|
libatlas-base-dev \
|
|
libatlas-dev \
|
|
libblas-dev \
|
|
libconfig8-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 liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
|
|
|
|
$SUDO apt-get install -y nettle-dev nettle-bin
|
|
|
|
$SUDO apt-get install -y libgnutls-dev
|
|
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
|
|
$SUDO $INSTALLER install -y gccxml
|
|
else
|
|
$SUDO $INSTALLER install -y mscgen pydb
|
|
# Fedora repos already contain gccxml's successor castxml.
|
|
$SUDO $INSTALLER install -y castxml
|
|
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
|
|
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
|
|
cd /tmp/asn1c
|
|
./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
|
|
}
|