Building

Use Build Server

To build the sipXcom source for execution or RPM generation on a physical server or cloud image, follow the instructions from installing_ to setup and configure a server.

Use Docker Container

To build sipXcom RPMs in a desktop or server Docker image, instantiate a container with the following command:

docker run -it --hostname=sipxecs --name=sipxecs-centos7 --privileged \
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
--label='org.label-schema.build-date=20201113' --label='org.label-schema.license=GPLv2' \
--label='org.label-schema.name=CentOS Base Image' --label='org.label-schema.schema-version=1.0' \
--label='org.label-schema.vendor=CentOS' --label='org.opencontainers.image.created=2020-11-13 00:00:00+00:00' \
--label='org.opencontainers.image.licenses=GPL-2.0-only' --label='org.opencontainers.image.title=CentOS Base Image' \
--label='org.opencontainers.image.vendor=CentOS' --runtime=runc -d centos:centos7

Setup System

  • Log on as root via ssh

    yum update -y
    
    yum install -y sudo git wget
    
  • If you are NOT using a Google Cloud image, you must add and install their artifact registry plugin:

    wget -O /etc/yum.repos.d/artifact-registry-plugin.repo \
        https://storage.googleapis.com/sipxecs/artifact-registry/artifact-registry-plugin.repo
    
    yum install -y yum-plugin-artifact-registry
    

Add sipx User

sipXcom must be built by a user called sipx with sudo privileges.

  • Add the sipx user:

    useradd -m sipx
    
  • If not on desktop docker, protect the sipx user with a password:

    passwd sipx
    
  • Assign sipx user sudo privileges:

    visudo
    
    ->
    
    # add sipx as sudo user
    sipx    ALL=(ALL)       NOPASSWD:ALL
    

Checkout sipXcom

Execute the following commands to checkout the sipXcom repository:

mkdir /src

cd /src

git clone https://github.com/onrelay/sipxecs.git

Build sipXcom

To build sipXcom from source, execute the master build script from the root scr folder as the sipx user with sudo privileges:

su sipx

cd /src/sipxecs

The sipxecs-build script will create /src/sipxecs/build and /usr/local/sipx directories where all build results are saved.

Build RPMs

To build all the sipX* RPMs from source, just add the –rpm option to the sipxecs-build script as follows:

sudo ./sipxecs-build --rpm

The resulting RPMs are e.g. found in the build/repo/CentOS_7/x86_64 folder for CentOS 7.

To also install the RPMs locally, add the ‘–install’ option:

sudo ./sipxecs-build --rpm --install

Build Executables

To just build the sipX* executables from source, simply run:

sudo ./sipxecs-build

Additional Build Options

The sipxecs-build script has the following additional options:

sudo ./sipxecs-build [options]

    **-p | --platform**: OS platform of sipxcom RPM to build, e.g. centos-7 (default), rocky-9

    **-a | --architecture**: Hardware architecture of sipxcom RPM to build, e.g. x86_64 (default)

    **-s | --subproject**: subproject to build or sipx for building all RPMs, e.g. sipx (default), sipXconfig, sipXproxy

    **-v | --version**: sipXcom cersion to build, e.g 24.01 (default), 24.07

    **-r | --rpm**: Include this option if building rpms

Advanced Builds

For more advanced builds, sipXcom relies on GNU autoconf and make to build its source. To use these mechanisms directly, you may use the following steps:

  • Prepare build folders:

    mkdir -p /src/sipxecs/build
    
    cd /src/sipxecs/build
    
    sudo mkdir -p /usr/local/sipx
    
    sudo chown sipx.sipx /usr/local/sipx
    
  • To exclude oss_core module from build:

    sudo echo oss_core >> .modules-exclude
    
    sudo yum install -y oss_core oss_core-devel oss_core-debuginfo
    
    sudo mkdir -p /usr/local/sipx/lib
    
    sudo ln -s /usr/lib64/liboss_core.la /usr/local/sipx/lib/liboss_core.la
    
    sudo ln -s /usr/lib64/liboss_carp.la /usr/local/sipx/lib/liboss_carp.la
    
    sudo mkdir -p /usr/local/sipx/opt
    
    sudo ln -s /usr/opt/ossapp /usr/local/sipx/opt/ossapp
    
  • Configure:

    cd /src/sipxecs
    
    sudo autoreconf -ivf
    
    sudo chown -R sipx.sipx build
    
  • To build for running sipXcom locally:

    cd build
    
    sudo ../configure
    
    sudo make sipx
    
  • Create a repo to build RPMs with mock:

    sudo yum install -y createrepo rpm-build mock
    
    sudo wget http://li.nux.ro/download/nux/misc/el7/x86_64/thttpd-2.25b-33.el7.nux.x86_64.rpm
    
    sudo rpm -ivh thttpd-2.25b-33.el7.nux.x86_64.rpm
    
    rm -f thttpd-2.25b-33.el7.nux.x86_64.rpm
    
    sudo usermod -a -G mock sipx`
    
  • To create sipXcom RPMs:

    sudo ../configure --enable-rpm DISTRO="centos-7-x86_64"
    
    sudo make sipx.rpm
    
  • Run sudo chown -R sipx.sipx repo if it gives a permission error on first try

  • If compilation stops for a subproject, it is possible to list all its dependencies:

    cd /src/sipxecs/sipXproxy
    
    grep -R '^BuildRequires'  | awk '{print $2}'