Standard Software Installation
The standard software stack is much more complex than the mimimal configuration and is installed using Ansible and Docker containers. This provides a flexible Home Subscriber Server (HSS), Evolved Packet Core (EPC), IP Multimedia Subsystem (IMS), and eNodeB (LTE radio base station).
The software stack is comprised of main components:
PyHSS. Home Subscriber Server.
Open5GS. LTE Evolved Packet Core (EPC).
Kamailio. IP Multimedia Subsystem (IMS).
srsENB. LTE eNodeB implemented purely in software.
Lime Suite. Software-defined radio (SDR) driver.
Plus their dependencies. E.g. PyHSS and Kamailio both require MySQL. Such service dependencies are also installed via Docker containers.
Where only a data service is required — i.e. no native voice (VoLTE) or SMS support — the IMS components can be omitted.
Linux Docker Host
At the time of writing testing has been completed using Ubuntu Server 22.04 for the Docker host. However, given that the software stack is containerised other versions and distros should work.
Ubuntu Server version 22.04 LTS — or another version/distro — should be downloaded and installed. Default installation options will typically suffice, although the SSH server should be selected for installation. Desktop Linux variants are best avoided as these include all manner of uneccessary software.
Once rebooted install updates. E.g.:
sudo apt update && sudo apt dist-upgrade
See the Docker documentation for details of how to install Docker Engine.
Next configure the CPU governor to use performance mode:
sudo apt install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
sudo reboot
This is to ensure that the SDR transceiver application does not suffer scheduling delays, which could result in reduced performance and/or instability.
Network Components
The various components are installed using Ansible playbooks. The git repo containing these and the software stack configuration should be cloned:
git clone https://github.com/myriadrf/lc-configs.git
cd lc-configs/standard
The site.yml file should be edited and at minimum the following config parameters updated:
network.host. The hostname of the target system.
mysql.root_passwd. The MySQL root password.
Although it would be prudent to also change the MySQL passwords for the network elements.
If the Ansible playbooks are being run from an admin system the hostname should resolve to a remote IP. Whereas if the playbooks are being run directly on the target system the value can be set to localhost. Note that the target system will also need to be in your /etc/ansible/hosts file.
The user account on the target system should be a member of the docker group and have sudo acccess. With network deployment it is assumed that the remote system has a user with the same name as the local user, but of course the target system username can be set to be something different, e.g. via the ansible_user option with the system’s entry in /etc/ansible/hosts.
Base
The base playbook creates a Docker private network and installs the software stack configuration under /etc/lc.
ansible-playbook base.yml
At this stage if the MySQL passwords have been changed for any of the network elements — pyhss, pcscf and icscf etc. — you may wish to update their configuration files accordingly, before deploying the stack itself.
It also vitally important to update the eNodeB configuration, to ensure that the base station will be operating on an appropriately licensed RF channel and bandwidth for the site in question. This can be done by editing the file /etc/lc/srsenb/enb.conf. See the srsRAN 4G documentation for details.
Danger
LTE networks operate in licensed spectrum and operating equipment without a licence from the regulatory authority in your country is likely to be a crime punishable under applicable law.
HSS
The HSS playbook deploys the following Docker containers:
BIND. DNS server dependency for IMS.
MySQL. Database server dependency for PyHSS and Kamailio.
Redis. In-memory data store dependency for PyHSS.
PyHSS Base. HSS base container.
PyHSS API. HSS API (RESTful server) container.
A DNS server is required for the IMS components to function correctly and this will only be available via the Docker private network.
ansible-playbook hss.yml
EPC
The EPC playbook deploys the following Open5GS Docker containers:
PGW-C / SMF. Packet Gateway Control Plane (contained in Open5GS SMF).
PGW-U / UPF. Packet Gateway User Plane (contained in Open5GS UPF).
SGW-C. Serving Gateway Control Plane.
SGW-U. Serving Gateway User Plane.
MME. Mobility Management Entity.
ansible-playbook epc.yml
IMS Databases
This playbook creates the MySQL databases which are required by Kamailio:
ansible-playbook ims_dbs.yml
Danger
This playbook should only be run once and if run a second time will create duplicate entries. In case of errors it may be easiest to drop the offending database(s) and re-run the playbook or part of it. This is a temporary limitation and will be addressed in future.
IMS
This playbook deploys the following Kamailio Docker containers:
P-CSCF. Proxy Call Session Control Function.
I-CSCF. Interrogating Call Session Control Function.
S-CSCF. Serving Call Session Control Function.
SMSC. Short Message Service Centre.
ansible-playbook ims.yml
eNodeB
This playbook deploys the srsENB Docker container:
ansible-playbook enb.yml
Ensure that you have configured this component for the appropriate radio channel and bandwidth via /etc/lc/srsenb/enb.conf before deploying!