Improve MAC docs for MCS and docker for BuildKit usage See commits for details. The first one is for fixing an omission in !3281, the second to clarify docker build usage. Closes: #973
725 lines
24 KiB
Plaintext
Executable File
725 lines
24 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=`grep -E -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 ;;
|
|
"fedora41") 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 ;;
|
|
"rhel9.5") return 0 ;;
|
|
"rhel9.6") return 0 ;;
|
|
"rhel9.7") 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 ;;
|
|
"rocky9.4") return 0 ;;
|
|
"rocky9.5") return 0 ;;
|
|
"rocky9.6") return 0 ;;
|
|
"rocky9.7") 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/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
|
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
|
}
|
|
|
|
############################################
|
|
# External packages installers
|
|
############################################
|
|
|
|
install_usrp_uhd_driver_from_source(){
|
|
echo_info "\nInstalling UHD driver from sources."
|
|
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.8.0.0" || "$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 -DENABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_B100=OFF -DENABLE_DOXYGEN=OFF -DENABLE_MANUAL=OFF -DENABLE_MAN_PAGES=OFF -DENABLE_MAN_PAGE_COMPRESSION=OFF -DENABLE_OCTOCLOCK=ON -DENABLE_USRP1=OFF -DENABLE_USRP2=OFF
|
|
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
|
|
}
|
|
|
|
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* libuhd* -y || true
|
|
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(){
|
|
echo_info "\nInstalling BladeRF driver from sources."
|
|
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
|
|
}
|
|
|
|
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(){
|
|
echo_info "\nInstalling Soapy EcoSystem from source."
|
|
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
|
|
}
|
|
|
|
install_soapy_iris_from_source(){
|
|
echo_info "\nInstalling Iris driver from source."
|
|
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
|
|
}
|
|
|
|
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 \
|
|
libpcre3-dev \
|
|
libssh-dev \
|
|
libxml2-dev"
|
|
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 \
|
|
pcre-devel \
|
|
libssh-devel \
|
|
libxml2-devel"
|
|
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 \
|
|
lksctp-tools \
|
|
lksctp-tools-devel \
|
|
libtool \
|
|
ninja-build \
|
|
make \
|
|
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(){
|
|
echo_info "\nInstalling ASN1."
|
|
$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
|
|
}
|
|
|
|
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: c7f26b7
|
|
git checkout c7f26b73ba8e874b95c2cec2b497826ad2188f68
|
|
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
|
|
}
|