mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
This commit introduces a substitute module library for setting up softmodems using YAML instead of libconfig. The softmodems should work the same with both types of files. Extra care was put to make sure the behavior of both modules is the same. Example yaml config files were added for the UE and gNB
842 lines
28 KiB
Plaintext
Executable File
842 lines
28 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="dnf"; CMAKE="cmake3" ;;
|
|
rocky) OS_BASEDISTRO="fedora"; INSTALLER="dnf"; CMAKE="cmake" ;;
|
|
centos) OS_BASEDISTRO="fedora"; INSTALLER="dnf"; CMAKE="cmake3" ;; # CentOS Stream
|
|
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)
|
|
|
|
#check if we run inside a container
|
|
IS_CONTAINER=`egrep -c "docker|podman|kubepods|libpod|buildah" /proc/self/cgroup || true`
|
|
#sudo is not needed when we are root
|
|
if [ "$UID" = 0 ]
|
|
then
|
|
SUDO=''
|
|
else
|
|
SUDO='sudo -S -E'
|
|
fi
|
|
|
|
###############################
|
|
## echo and family
|
|
###############################
|
|
# only emit color if connected to a terminal, and if it supports colors
|
|
if [ -t 1 ]; then
|
|
num_colors=$(tput colors)
|
|
if [ -n "$num_colors" ] && [ "$num_colors" -ge 8 ]; then
|
|
red='\E[31m'
|
|
green='\E[32m'
|
|
yellow='\E[33m'
|
|
blue='\E[1;34m'
|
|
reset_color='\E[00m'
|
|
fi
|
|
fi
|
|
|
|
cecho() {
|
|
# Color-echo
|
|
# arg1 = message
|
|
# arg2 = color
|
|
local default_msg="No Message."
|
|
message=${1:-$default_msg}
|
|
color=${2:-$green}
|
|
echo -e "$color$message$reset_color"
|
|
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:
|
|
# 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
|
|
"ubuntu24.04") return 0 ;;
|
|
"ubuntu22.04") return 0 ;;
|
|
"ubuntu20.04") return 0 ;;
|
|
"debian11") return 0 ;;
|
|
"fedora40") return 0 ;;
|
|
"rhel8.2") return 0 ;;
|
|
"rhel8.3") return 0 ;;
|
|
"rhel8.4") return 0 ;;
|
|
"rhel8.5") return 0 ;;
|
|
"rhel8.6") return 0 ;;
|
|
"rhel8.7") return 0 ;;
|
|
"rhel8.8") return 0 ;;
|
|
"rhel8.9") return 0 ;;
|
|
"rhel9.0") return 0 ;;
|
|
"rhel9.1") return 0 ;;
|
|
"rhel9.2") return 0 ;;
|
|
"rhel9.3") return 0 ;;
|
|
"rhel9.4") return 0 ;;
|
|
"centos9") return 0 ;; # CentOS stream
|
|
"rocky8.7") return 0 ;;
|
|
"rocky8.8") return 0 ;;
|
|
"rocky8.9") return 0 ;;
|
|
"rocky9.1") return 0 ;;
|
|
"rocky9.2") return 0 ;;
|
|
"rocky9.3") 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"
|
|
}
|
|
|
|
clean_all_files() {
|
|
set_openair_env
|
|
dir=$OPENAIR_DIR/cmake_targets
|
|
rm -rf $dir/ran_build $dir/ran_build_noLOG
|
|
rm -rf $dir/lte-simulators/build
|
|
rm -rf $dir/nas_sim_tools/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" | egrep -v "jobserver unavailable|disabling jobserver mode" | wc -l`
|
|
if [ $warning_count -gt 0 ]; then
|
|
echo_error "WARNING: $warning_count warnings. See $1"
|
|
fi
|
|
}
|
|
|
|
#check_errors:
|
|
# print error message if the compilation had errors
|
|
#argument:
|
|
# $1: log file
|
|
check_errors() {
|
|
#we look for 'error:' in the compilation log file
|
|
error_count=`grep -c "error:" "$1"`
|
|
if [ $error_count -gt 0 ]; then
|
|
echo_error "ERROR: $error_count error. See $1"
|
|
fi
|
|
}
|
|
|
|
compilations() {
|
|
[[ $# -gt 2 ]] || echo_fatal "compilations needs more than three arguments"
|
|
local dir=$1
|
|
shift 1
|
|
local logfile=$1
|
|
shift 1
|
|
local targets=$@
|
|
local verbose=$([ "$VERBOSE_COMPILE" == "1" ] && echo "-v" || echo "")
|
|
echo cd $OPENAIR_DIR/cmake_targets/$dir/build
|
|
cd $OPENAIR_DIR/cmake_targets/$dir/build
|
|
echo_info "Running \"$CMAKE --build . $verbose --target $targets -- -j$(nproc)\"" $green
|
|
echo "Log file for compilation is being written to: $dlog/$logfile"
|
|
set +e
|
|
{
|
|
$CMAKE --build . $verbose --target $targets -- -j$(nproc)
|
|
ret=$?
|
|
} > $dlog/$logfile 2>&1
|
|
# Print the errors and warnings for CI purposes
|
|
egrep -A3 "warning:|error:" $dlog/$logfile || true
|
|
check_warnings "$dlog/$logfile"
|
|
if [[ $ret -eq 0 ]]; then
|
|
echo_success "$targets compiled"
|
|
else
|
|
check_errors "$dlog/$logfile"
|
|
echo_error "compilation of $targets failed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
############################################
|
|
# External packages installers
|
|
############################################
|
|
|
|
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 "
|
|
(
|
|
pushd /tmp
|
|
echo "Cloning UHD driver repository"
|
|
rm -rf /tmp/uhd
|
|
git clone https://github.com/EttusResearch/uhd.git
|
|
cd uhd
|
|
# For our legacy TDD eNB running with a B2xx RF board
|
|
# the following patch has to be applied
|
|
if [[ -v UHD_VERSION ]]; then
|
|
git checkout tags/v${UHD_VERSION}
|
|
# We recommend to use not older than 3.15.0.0
|
|
if [[ "$UHD_VERSION" == "3.15.0.0" ]]; then
|
|
# Tested that patch for the following versions:
|
|
# - 3.15.0.0
|
|
git apply $OPENAIR_DIR/cmake_targets/tools/uhd-3.15-tdd-patch.diff
|
|
ret=$?;[[ $ret -ne 0 ]] && echo_fatal "Could not apply the TDD patch"
|
|
elif [[ "$UHD_VERSION" == "4.7.0.0" || "$UHD_VERSION" == "4.6.0.0" || "$UHD_VERSION" == "4.5.0.0" ]]; then
|
|
# Tested that patch for the following versions:
|
|
# - 4.7.0.0
|
|
cp $OPENAIR_DIR/cmake_targets/tools/uhd-4.x-tdd-patch.diff $OPENAIR_DIR/cmake_targets/tools/uhd-4.5plus-tdd-patch.diff
|
|
sed -i '9,13 s/STATE_OFF/STATE_RX1_OFF/' $OPENAIR_DIR/cmake_targets/tools/uhd-4.5plus-tdd-patch.diff
|
|
sed -i '24,28 s/STATE_OFF/STATE_RX2_OFF/' $OPENAIR_DIR/cmake_targets/tools/uhd-4.5plus-tdd-patch.diff
|
|
git apply $OPENAIR_DIR/cmake_targets/tools/uhd-4.5plus-tdd-patch.diff
|
|
ret=$?;[[ $ret -ne 0 ]] && echo_fatal "Could not apply the TDD patch"
|
|
else
|
|
# Tested that patch for the following versions:
|
|
# - 4.0.0.0
|
|
# - 4.1.0.0
|
|
# - 4.1.0.5
|
|
# - 4.2.0.0
|
|
# - 4.2.0.1
|
|
# - 4.3.0.0-rc1
|
|
# - 4.4.0.0
|
|
git apply $OPENAIR_DIR/cmake_targets/tools/uhd-4.x-tdd-patch.diff
|
|
ret=$?;[[ $ret -ne 0 ]] && echo_fatal "Could not apply the TDD patch"
|
|
fi
|
|
else
|
|
git checkout tags/v4.0.0.0
|
|
git apply $OPENAIR_DIR/cmake_targets/tools/uhd-4.x-tdd-patch.diff
|
|
ret=$?;[[ $ret -ne 0 ]] && echo_fatal "Could not apply the TDD patch"
|
|
fi
|
|
# Printing out the results of the patch to make sure it was properly applied
|
|
git diff
|
|
mkdir -p host/build
|
|
cd host/build || true
|
|
$CMAKE ../ -GNinja
|
|
echo "Compiling UHD"
|
|
ninja
|
|
$SUDO ninja install
|
|
$SUDO ldconfig -v
|
|
if [ $IS_CONTAINER -eq 0 ]; then
|
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
$SUDO /usr/local/lib/uhd/utils/uhd_images_downloader.py
|
|
fi
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "rocky" ]]; then
|
|
$SUDO /usr/local/lib64/uhd/utils/uhd_images_downloader.py
|
|
fi
|
|
fi
|
|
popd
|
|
rm -rf /tmp/uhd
|
|
) >& $uhd_install_log
|
|
}
|
|
|
|
check_install_usrp_uhd_driver(){
|
|
if [[ "$OS_BASEDISTRO" == "debian" ]]; then
|
|
boost_libs_ubuntu="libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libboost-test-dev libboost-regex-dev"
|
|
#first we remove old installation
|
|
$SUDO apt-get remove uhd -y || true
|
|
$SUDO apt-get remove uhd-host -y || true
|
|
$SUDO apt-get remove libuhd-dev -y || true
|
|
$SUDO apt-get remove libuhd003 -y || true
|
|
$SUDO apt-get remove libuhd3.13.1 -y || true
|
|
$SUDO apt-get remove libuhd3.14.0 -y || true
|
|
$SUDO apt-get remove libuhd3.14.1 -y || true
|
|
$SUDO apt-get remove libuhd3.15.0 -y || true
|
|
local distribution=$(get_distribution_release)
|
|
if [[ "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" ]]; then
|
|
$SUDO apt-get remove libuhd4.?.? -y || true
|
|
fi
|
|
v=$(lsb_release -cs)
|
|
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
|
|
if [[ -v BUILD_UHD_FROM_SOURCE ]] || [[ "$OS_DISTRO" == "debian" ]]; then
|
|
$SUDO apt-get install -y $boost_libs_ubuntu libusb-1.0-0-dev doxygen python3-docutils python3-mako python3-numpy python3-requests python3-setuptools ninja-build
|
|
install_usrp_uhd_driver_from_source
|
|
return
|
|
fi
|
|
# 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 install python-tk $boost_libs_ubuntu libusb-1.0-0-dev
|
|
case "$(get_distribution_release)" in
|
|
"ubuntu20.04" | "ubuntu22.04")
|
|
$SUDO apt-get -y install libuhd-dev libuhd4.5.0 uhd-host
|
|
;;
|
|
esac
|
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
boost_libs_fedora="boost-chrono boost-date-time boost-filesystem boost-program-options boost-thread boost-test boost-regex boost-devel"
|
|
if [ $IS_CONTAINER -eq 0 ]
|
|
then
|
|
$SUDO $INSTALLER -y install python3 $boost_libs_fedora libusb-devel libusbx-devel python3-mako python3-docutils python3-pip $CMAKE
|
|
$SUDO pip3 install requests
|
|
else
|
|
$SUDO $INSTALLER -y install $boost_libs_fedora $CMAKE
|
|
$SUDO pip3 install mako requests
|
|
fi
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]] || [[ "$OS_DISTRO" == "rocky" ]]; then
|
|
if [ $IS_CONTAINER -eq 0 ]
|
|
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
|
|
fi
|
|
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
|
|
# quick workaround for below distributions
|
|
local distribution=$(get_distribution_release)
|
|
if [ -z $1 ]; then
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "rocky" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
$SUDO /usr/local/bin/uhd_images_downloader
|
|
else
|
|
$SUDO uhd_images_downloader
|
|
fi
|
|
else
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "rocky" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
|
$SUDO /usr/local/bin/uhd_images_downloader -i $1
|
|
else
|
|
$SUDO uhd_images_downloader -i $1
|
|
fi
|
|
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 has been removed from default dependencies, so we must be sure that's installed
|
|
$SUDO $INSTALLER -y install wget
|
|
wget --tries=3 --retry-connrefused https://www.nuand.com/fx3/bladeRF_fw_latest.img
|
|
wget --tries=3 --retry-connrefused 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
|
|
$SUDO apt-get install -y bladerf libbladerf-dev
|
|
$SUDO apt-get install -y bladerf-firmware-fx3
|
|
$SUDO apt-get install -y 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://wiki.myriadrf.org/Lime_Suite"
|
|
echo_fatal "Cannot compile lmssdr device"
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
install_soapy_from_source(){
|
|
soapy_install_log=$OPENAIR_DIR/cmake_targets/log/soapy_install_log.txt
|
|
echo_info "\nInstalling Soapy EcoSystem from source. The log file for Soapy installation is here: $soapy_install_log "
|
|
(
|
|
cd /tmp
|
|
echo "Downloading SoapySDR"
|
|
rm -rf /tmp/SoapySDR
|
|
git clone -b soapy-sdr-0.7.0 --single-branch https://github.com/pothosware/SoapySDR.git
|
|
cd SoapySDR
|
|
#git checkout tags/release_003_010_001_001
|
|
mkdir -p build
|
|
cd build
|
|
$CMAKE ../
|
|
echo "Compiling SoapySDR"
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
cd /tmp
|
|
echo "Downloading SoapyRemote"
|
|
rm -rf /tmp/SoapyRemote
|
|
git clone -b soapy-remote-0.5.0 --single-branch https://github.com/pothosware/SoapyRemote.git
|
|
cd SoapyRemote
|
|
#git checkout tags/release_003_010_001_001
|
|
mkdir -p build
|
|
cd build
|
|
$CMAKE ../
|
|
echo "Compiling SoapyRemote"
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
) >& $soapy_install_log
|
|
}
|
|
|
|
install_soapy_iris_from_source(){
|
|
iris_install_log=$OPENAIR_DIR/cmake_targets/log/iris_install_log.txt
|
|
echo_info "\nInstalling Iris driver from source. The log file for Iris driver installation is here: $iris_install_log "
|
|
(
|
|
cd /tmp
|
|
echo "Downloading SoapyIris"
|
|
rm -rf /tmp/sklk-soapyiris
|
|
git clone -b soapy-iris-2018.08.0.1 --single-branch https://github.com/skylarkwireless/sklk-soapyiris.git
|
|
cd sklk-soapyiris
|
|
mkdir -p build
|
|
cd build
|
|
$CMAKE ../
|
|
echo "Compiling SoapyIris"
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
) >& $iris_install_log
|
|
}
|
|
|
|
check_install_soapy () {
|
|
#if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
|
#first we remove old installation
|
|
$SUDO apt-get remove -y soapysdr soapysdr-server libsoapysdr-dev python-soapysdr python3-soapysdr soapysdr-module-remote || true
|
|
#$SUDO add-apt-repository -y ppa:myriadrf/drivers
|
|
#$SUDO apt-get update
|
|
#$SUDO apt-get install -y soapysdr soapysdr-server libsoapysdr-dev python-soapysdr python3-soapysdr soapysdr-module-remote
|
|
|
|
#elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
# $SUDO $INSTALLER -y install software-properties-common python3-software-properties python-software-properties subversion git python3 python-numpy python3-numpy cmake swig python-dev
|
|
install_soapy_from_source
|
|
#fi
|
|
install_soapy_iris_from_source
|
|
}
|
|
|
|
check_install_additional_tools (){
|
|
$SUDO $INSTALLER update -y
|
|
local optional_packages=""
|
|
if [[ "$OS_BASEDISTRO" == "debian" ]]; then
|
|
case "$(get_distribution_release)" in
|
|
"ubuntu20.04" | "ubuntu22.04" | "debian11" )
|
|
optional_packages="python3 python3-pip python3-dev python3-scipy python3-matplotlib python3-pyroute2 universal-ctags"
|
|
;;
|
|
esac
|
|
PACKAGE_LIST="\
|
|
doxygen \
|
|
libgnutls28-dev \
|
|
libpthread-stubs0-dev \
|
|
tshark \
|
|
uml-utilities \
|
|
iperf3 \
|
|
libforms-bin \
|
|
libforms-dev \
|
|
libxft-dev \
|
|
xmlstarlet"
|
|
elif [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]] || [[ "$OS_DISTRO" == "rocky" ]] || [[ "$OS_DISTRO" == "fedora" ]]; then
|
|
PACKAGE_LIST="\
|
|
doxygen \
|
|
ctags \
|
|
iperf3 \
|
|
gnutls-devel \
|
|
libXft-devel \
|
|
xforms \
|
|
xforms-devel \
|
|
xmlstarlet"
|
|
fi
|
|
$SUDO $INSTALLER install -y $PACKAGE_LIST $optional_packages
|
|
}
|
|
|
|
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_BASEDISTRO" == "debian" ]]; then
|
|
$SUDO apt install -y software-properties-common
|
|
case "$(get_distribution_release)" in
|
|
"debian11")
|
|
specific_packages="libz-dev"
|
|
;;
|
|
esac
|
|
$SUDO apt-get install -y \
|
|
$specific_packages \
|
|
automake \
|
|
build-essential \
|
|
$CMAKE \
|
|
ninja-build \
|
|
pkg-config \
|
|
git \
|
|
libblas-dev \
|
|
liblapack-dev \
|
|
liblapacke-dev \
|
|
libreadline-dev \
|
|
libconfig-dev \
|
|
libsctp-dev \
|
|
libssl-dev \
|
|
libtool \
|
|
patch \
|
|
openssl \
|
|
zlib1g-dev \
|
|
xxd \
|
|
libyaml-cpp-dev
|
|
|
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]] || [[ "$OS_DISTRO" == "rocky" ]]; 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-9.noarch.rpm
|
|
fi
|
|
fi
|
|
|
|
$SUDO $INSTALLER install -y \
|
|
automake \
|
|
$CMAKE \
|
|
gcc \
|
|
gcc-c++ \
|
|
git \
|
|
pkgconfig \
|
|
libconfig-devel \
|
|
libffi-devel \
|
|
lksctp-tools \
|
|
lksctp-tools-devel \
|
|
libtool \
|
|
ninja-build \
|
|
make \
|
|
openssl \
|
|
openssl-devel \
|
|
patch \
|
|
readline-devel \
|
|
lapack \
|
|
lapack-devel \
|
|
blas \
|
|
blas-devel \
|
|
vim-common \
|
|
zlib-devel \
|
|
yaml-cpp-devel
|
|
fi
|
|
|
|
install_asn1c_from_source $1
|
|
install_simde_from_source $1
|
|
}
|
|
|
|
install_asn1c_from_source(){
|
|
mkdir -p $OPENAIR_DIR/cmake_targets/log
|
|
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 $INSTALLER -y install bison flex
|
|
$SUDO rm -rf /tmp/asn1c
|
|
# GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
|
|
git clone https://github.com/mouse07410/asn1c /tmp/asn1c
|
|
cd /tmp/asn1c
|
|
#git checkout vlm_master
|
|
# hotfix: current vlm_master (5fa129cf3161da9ff2d67341e6277e818c0f5d6a)
|
|
# breaks F1, NG, so use the one before.
|
|
git checkout 940dd5fa9f3917913fd487b13dfddfacd0ded06e
|
|
# Showing which version is used
|
|
git log -n1
|
|
autoreconf -iv
|
|
./configure --prefix /opt/asn1c/
|
|
make -j`nproc`
|
|
$SUDO make install
|
|
cd -
|
|
$SUDO ldconfig
|
|
if [[ -v CI_ENV ]]; then
|
|
$SUDO rm -rf /tmp/asn1c
|
|
fi
|
|
) > $asn1_install_log 2>&1
|
|
}
|
|
|
|
install_simde_from_source(){
|
|
echo_info "\nInstalling SIMDE from source without test cases (header files only)"
|
|
cd /tmp
|
|
$SUDO rm -rf /tmp/simde
|
|
git clone https://github.com/simd-everywhere/simde-no-tests.git /tmp/simde
|
|
cd /tmp/simde
|
|
# we can specify a given version of SIMDE (sha-one or tag)
|
|
if [[ -v SIMDE_VERSION ]]; then
|
|
git checkout -f $SIMDE_VERSION
|
|
else
|
|
# At time of writing, last working commit for OAI
|
|
git checkout 389f360a66d4a3bec62b7d71ad8be877487809ba
|
|
fi
|
|
# Showing which version is used
|
|
git log -n1
|
|
# brute force copy into /usr/include
|
|
$SUDO \cp -rv ../simde /usr/include
|
|
}
|
|
|
|
install_lttng() {
|
|
if [[ "$OS_DISTRO" != "ubuntu" ]]; then
|
|
echo_info "LTTng is supported only for ubuntu at the moment."
|
|
echo_info $distribution
|
|
return
|
|
fi
|
|
|
|
set +e
|
|
$SUDO apt-add-repository ppa:lttng/stable-2.13 -y && apt-get update
|
|
$SUDO apt-get install -y lttng-tools lttng-modules-dkms liblttng-ust-dev
|
|
if [[ $? > 0 ]]; then
|
|
echo "Failed to install LTTng using apt. Installing from source"
|
|
install_lttng_deps
|
|
install_lttng_from_source
|
|
fi
|
|
set -e
|
|
}
|
|
|
|
install_lttng_deps() {
|
|
echo "installing dependencies of LTTng"
|
|
$SUDO apt-get install uuid-dev libxml2-dev -y
|
|
}
|
|
|
|
install_lttng_from_source() {
|
|
echo "installing LTTng from source"
|
|
install_popt_1_18_from_source
|
|
install_userspace_rcu
|
|
install_lttng_ust_2_13_from_source
|
|
install_lttng_tools_2_13_from_source
|
|
}
|
|
|
|
install_popt_1_18_from_source() {
|
|
$SUDO $INSTALLER -y install wget
|
|
echo_info "\nInstalling popt_1_18."
|
|
cd $(mktemp -d) &&
|
|
wget http://ftp.rpm.org/popt/releases/popt-1.x/popt-1.18.tar.gz
|
|
tar -xf popt-1.18.tar.gz && cd popt-1.18
|
|
./configure && make -j16 && $SUDO make install
|
|
}
|
|
|
|
install_userspace_rcu() {
|
|
echo_info "\nInstalling U-RCU from source."
|
|
cd /tmp
|
|
$SUDO rm -rf /tmp/urcu
|
|
git clone https://github.com/urcu/userspace-rcu.git /tmp/urcu
|
|
cd /tmp/urcu
|
|
git checkout stable-0.12
|
|
./bootstrap && ./configure && make
|
|
$SUDO make install
|
|
$SUDO ldconfig
|
|
}
|
|
|
|
|
|
install_lttng_modules_2_13_from_source() {
|
|
$SUDO $INSTALLER -y install wget
|
|
echo_info "\nInstalling LTTng Modules."
|
|
cd $(mktemp -d) &&
|
|
wget https://lttng.org/files/lttng-modules/lttng-modules-latest-2.13.tar.bz2 &&
|
|
tar -xf lttng-modules-latest-2.13.tar.bz2 &&
|
|
cd lttng-modules-2.13.* &&
|
|
make &&
|
|
$SUDO make modules_install &&
|
|
$SUDO depmod -a
|
|
}
|
|
|
|
install_lttng_ust_2_13_from_source() {
|
|
$SUDO $INSTALLER -y install wget
|
|
echo_info "\nInstalling LTTng UST."
|
|
cd $(mktemp -d) &&
|
|
wget https://lttng.org/files/lttng-ust/lttng-ust-latest-2.13.tar.bz2 &&
|
|
tar -xf lttng-ust-latest-2.13.tar.bz2 &&
|
|
cd lttng-ust-2.13.* &&
|
|
./configure --disable-numa &&
|
|
make &&
|
|
$SUDO make install &&
|
|
$SUDO ldconfig
|
|
}
|
|
|
|
install_lttng_tools_2_13_from_source() {
|
|
$SUDO $INSTALLER -y install wget
|
|
echo_info "\nInstalling LTTng Tools."
|
|
cd $(mktemp -d) &&
|
|
wget https://lttng.org/files/lttng-tools/lttng-tools-latest-2.13.tar.bz2 &&
|
|
tar -xf lttng-tools-latest-2.13.tar.bz2 &&
|
|
cd lttng-tools-2.13.* &&
|
|
./configure &&
|
|
make &&
|
|
$SUDO make install &&
|
|
$SUDO ldconfig
|
|
}
|
|
|
|
#################################################
|
|
# 2. compile
|
|
################################################
|
|
|
|
install_nas_tools() {
|
|
echo_success "generate .ue_emm.nvram .ue.nvram"
|
|
./nvram --gen -c $1 -o $2 > "$3"
|
|
echo_success "generate .usim.nvram"
|
|
./usim --gen -c $1 -o $2 >> "$3"
|
|
}
|
|
|
|
|
|
################################
|
|
# 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
|
|
}
|