#!/bin/bash ################################################################################ # OpenAirInterface # Copyright(c) 1999 - 2014 Eurecom # # OpenAirInterface is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) anylater version. # # # OpenAirInterface is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with OpenAirInterface.The full GNU General Public License is # included in this distribution in the file called "COPYING". If not, # see <http://www.gnu.org/licenses/>. # # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr # OpenAirInterface Dev : openair4g-devel@eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # ################################################################################ # file build_epc # brief # author Lionel Gauthier # company Eurecom # email: lionel.gauthier@eurecom.fr # ################################ # include helper functions ################################ THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) source $THIS_SCRIPT_PATH/build_helper function help() { echo_error " " echo_error "Usage: build_epc [OPTION]..." echo_error "Build the EPC executable." echo_error " " echo_error "Options:" echo_error "Mandatory arguments to long options are mandatory for short options too." echo_error " -c, --clean Clean the build generated files (build from scratch)" echo_error " -d, --debug Compile with debug informations." echo_error " -h, --help Print this help." echo_error " -H, --hss hostname HSS hostname (with FQDN), default is this host (hostname)." echo_error " -i, --check-installed-software Check installed software packages necessary to build and run EPC (support Ubuntu 14.04)." echo_error " -r, --realm realm Realm of the MME (if not specified, is extracted from this host FQDN)." echo_error " -s, --transport-sctp-only Diameter use SCTP only (TCP disabled)." echo_error " -S, --s6a-server MME act as a server on s6a interface (useful when HSS and MME/EPC run on the same host)." echo_error " -t, --transport-tcp-only Diameter use TCP only (SCTP disabled)." echo_error " -T, --transport-prefer-tcp Diameter prefer TCP." echo_error " -v, --verbose Build process verbose." } function main() { local -i clean=0 local -i verbose=0 local -i s6a_server=0 local cmake_args=" " local make_args="-j $NUM_CPU" local realm="" local hss_fqdn="" local hss_hostname="" local hss_ip="" local REL="Rel10" until [ -z "$1" ] do case "$1" in -c | --clean) clean=1 echo "Clean the build generated files (build from scratch)" shift; ;; -d | --debug) cmake_args="$cmake_args -DDEBUG=1" echo "Compile with debug informations" shift; ;; -h | --help) help shift; exit 0 ;; -H | --hss) hss_fqdn=$2 cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn" shift 2; ;; -i | --check-installed-software) echo "Check installed software packages necessary to build and run EPC (support Ubuntu 14.04):" check_install_epc_software exit 0 ;; -r | --realm) echo "Realm: $2" realm=$2 cmake_args="$cmake_args -DREALM=$realm" shift 2; ;; -s | --transport-sctp-only) echo "Diameter use SCTP (TCP disabled), this is the default option." cmake_args="$cmake_args -DTRANSPORT_option=No_TCP" shift; ;; -S | --s6a-server) echo "MME act as a server on s6a" s6a_server=1 cmake_args="$cmake_args -DMME_S6A_IS_SERVER=1" shift 1; ;; -t | --transport-tcp-only) echo "Diameter use TCP (SCTP disabled)." cmake_args="$cmake_args -DTRANSPORT_option=No_SCTP" shift; ;; -T | --transport-prefer-tcp) echo "Diameter prefer TCP (TCP, SCTP enabled)." cmake_args="$cmake_args -DTRANSPORT_PREFER_TCP_option=Prefer_TCP" shift; ;; -v | --verbose) echo "Make build process verbose" cmake_args="$cmake_args -DCMAKE_VERBOSE_MAKEFILE=ON" make_args="VERBOSE=1 $make_args" verbose=1 shift; ;; *) echo "Unknown option $1" help exit 1 ;; esac done # extra arguments processing if [[ z$hss_fqdn = z ]]; then hss_fqdn=`hostname --fqdn` cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn" if [[ z$realm = z ]]; then realm=$hss_fqdn realm=${realm#*.} cmake_args="$cmake_args -DREALM=$realm" fi else if [[ z$realm = z ]]; then realm=${hss_fqdn#*.} cmake_args="$cmake_args -DREALM=$realm" fi fi hss_hostname=${hss_fqdn%%.*} cmake_args="$cmake_args -DHSS_HOSTNAME=$hss_hostname" hss_ip=`resolveip --silent $hss_hostname` if [[ z$hss_ip = z ]]; then hss_ip=`resolveip --silent $hss_fqdn` fi if [[ z$hss_ip = z ]]; then echo_abort "Unable to get HSS IP addr of $hss_fqdn" fi cmake_args="$cmake_args -DHSS_IP=$hss_ip" set_openair_env if [[ $verbose -eq 1 ]]; then cecho "OPENAIR_DIR = $OPENAIR_DIR" $green fi # for conf files copy in this bash script if [ -d /usr/lib/freeDiameter ]; then export FREEDIAMETER_PREFIX=/usr else if [ -d /usr/local/lib/freeDiameter ]; then export FREEDIAMETER_PREFIX=/usr/local else echo_fatal "FreeDiameter prefix not found, install freeDiameter if EPC, HSS" fi fi local dbin=$OPENAIR_DIR/targets/bin local dlog=$OPENAIR_DIR/cmake_targets/log local dconf=$OPENAIR_DIR/targets/bin mkdir -m 777 -p $dbin $dlog ############################################################################## # Compile userspace executable ############################################################################## rm -f $OPENAIR_DIR/targets/bin/mme_gw cd $OPENAIR_DIR/cmake_targets/epc_build_oai if [ $clean -ne 0 ]; then if [[ $verbose -eq 1 ]]; then echo "Cleaning EPC" fi rm -Rf build 2>&1 rm -Rf $OPENAIR_TARGETS/CMAKE/EPC/MME_GW/build 2>&1 rm -f /usr/local/etc/freeDiameter/mme* 2>&1 rm -f /usr/local/etc/freeDiameter/epc* 2>&1 rm -f /usr/etc/freeDiameter/mme* 2>&1 rm -f /usr/etc/freeDiameter/epc* 2>&1 rm -f $OPENAIR_DIR/targets/bin/xt_GTPU*.ko 2>&1 (cd $OPENAIRCN_DIR/GTPV1-U/GTPUAH && make clean) (cd $OPENAIRCN_DIR/GTPV1-U/GTPURH && make clean) rm -f $OPENAIRCN_DIR/GTPV1-U/GTPUAH/Bin/* 2>&1 rm -f /lib/xtables/libxt_GTPU*.so 2>&1 mkdir -m 777 -p -v build fi ############################################################################## # Compile kernel modules ############################################################################## # NO CMAKE FOR THAT, THIS CODE CAN DISAPEAR #cd $OPENAIRCN_DIR/GTPV1-U/GTPUAH; #make #if [ $? -ne 0 ]; then # echo_error "Build GTPUAH module failed, exiting" # return 1 #else # $SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables # $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin #fi #cd $OPENAIRCN_DIR/GTPV1-U/GTPURH; #make #if [ $? -ne 0 ]; then # echo_error "Build GTPURH module failed, exiting" # return 1 #else # $SUDO cp -pfv ./Bin/libxt_*.so /lib/xtables # $SUDO cp -pfv ./Bin/*.ko $OPENAIR_TARGETS/bin #fi ############################################################################## # Compile EPC ############################################################################## cd $OPENAIR_DIR/cmake_targets/epc_build_oai #cd $OPENAIR_TARGETS/CMAKE/EPC/MME_GW if [ ! -d ./build ]; then mkdir -m 777 -p -v build fi cmake_file=./CMakeLists.txt cp $OPENAIR_DIR/cmake_targets/epc_build_oai/CMakeLists.template $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd ./build cmake $cmake_args .. #make $make_args -j $NUM_CPU #make install compilations \ epc_build_oai mme_gw \ mme_gw $dbin/mme_gw.$REL # Only integrated mme+sgw+pgw is operational today # compilations \ # epc_build_oai oai_sgw \ # oai_sgw $dbin/oai_sgw.$REL compilations \ epc_build_oai xt_GTPUAH_lib \ libxt_GTPUAH_lib.so $dbin compilations \ epc_build_oai xt_GTPURH_lib \ libxt_GTPURH_lib.so $dbin compilations \ epc_build_oai xt_GTPURH \ CMakeFiles/xt_GTPURH/xt_GTPURH.ko $dbin compilations \ epc_build_oai xt_GTPUAH \ CMakeFiles/xt_GTPUAH/xt_GTPUAH.ko $dbin echo_info "Copying iptables libraries into system directory: /lib/xtables" if [ -f $dbin/libxt_GTPURH_lib.so ] ; then $SUDO rm -f /lib/xtables/libxt_GTPURH.so /lib/xtables/libxt_GTPUAH.so $SUDO ln -s $dbin/libxt_GTPURH_lib.so /lib/xtables/libxt_GTPURH.so $SUDO ln -s $dbin/libxt_GTPUAH_lib.so /lib/xtables/libxt_GTPUAH.so else echo_fatal "not installed GTP-U iptables: binaries not found" fi # Do EPC if [ -f $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf ] ; then cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/epc*.conf $dconf $SUDO cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf $FREEDIAMETER_PREFIX/etc/freeDiameter else echo_fatal "not installed EPC config files: not found" fi } main "$@"