# OAI gNB/UE Installation & Execution
###### tags: `Construction`
## OAI gNB/UE pre-requisites
#### Basic requirement
| OS/Kernel | Version |
|:-------------------------- |:----------------------------------------|
| Host operating system | Linux Ubuntu 18.04 or 20.04 or 22.04 |
| Kernel | 4.15.0.142.lowlatency |
## Build OAI gNB/UE
#### Clone and build the dependency for the first time
```sh
# Clone OAI project in Develop Branch
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git -b develop
cd openairinterface5g/
# Build ONLY FOR the FIRST time
source oaienv
cd cmake_targets
export BUILD_UHD_FROM_SOURCE=Ture
export UHD_VERSION=4.3.0.0-rc1 #(optional UHD_VERSION=4.4.0.0)
./build_oai -I
# Sometimes you will get error `no GPG public key or ppa public key XXXXXXXXX_Key`
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXX_Key
```
#### Build OAI gNB for USRP
```sh
./build_oai -w USRP --gNB
```
#### Build OAI nrUE for USRP
```sh
./build_oai -w USRP --nrUE
```
#### Build other libraries
* Use `./build_oai help` to check what library you need.
```sh
--build-lib <libraries>
# Build optional shared library, <libraries> can be one or several of
# telnetsrv
# enbscope
# uescope
# nrscope
# nrqtscope
# ldpc_cuda
# ldpc_t1
# websrv
# oai_iqplayer
# You can build the libraries you need separatedly.
./ build_oai --build-lib xxx -- build-lib yyy
# OR just build all libraries
./build_oai --build-lib all
```
## Build OAI CN
```shell
git clone https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git
```
## Run OAI CN
```shell
## Build OAI CN
cd ~/oai-cn5g-fed/docker-compose
docker-compose -f docker-compose-basic-nrf.yaml up -d # up
docker ps -a
docker-compose -f docker-compose-basic-nrf.yaml down # down
```

```sh
docker exec -it mysql /bin/bash
mysql -uroot -plinux -D oai_db
show tables;
select * from AuthenticationSubscription;
```

Run OAI gNB
```sh
cd ~/openairinterface5g
cd cmake_targets/ran_build/build
sudo ./nr-softmodem -O [where the config file is] --sa -E --gNBs.[0].min_rxtxtime 6
# --gNBs.[0].min_rxtxtime 6 --> To ensure that the rx tx time advance is 6 slots
```
* Optional: RUN OAI gNB with RF Simulator
```sh
sudo RFSIMULATOR=server ./nr-softmodem --rfsim --sa -O [where the config file is]
```
* If you have 5G CN
<font color=#FF0000> **!!! Check PLMN elements in config file to match with corresponding OAI CN !!!** </font>
For example:


## Run OAI UE
#### Step 1
Only if you need to connect to 5G CN; or skip this step
* Modify UE config file to match with the OAI CN database
* There are two options to deploy it.
1. Modify UE's information to match the CN
2. Add UE's information into Database
```sh
# UE Configuration
<your oai directory>/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/ue.conf
# Database (take oai_db2.sql for example)
<your oai CN directory>/oai-cn5g-fed/docker-compose/oai_db2.sql
```

```
uicc0 = {
imsi = "208950000000031"; #SUPI
key = "0C0A34601D4F07677303652C0462535B"; #secret key for imsi
opc= "63bfa50ee6523365ff14c1f45f88737d"; #secret key for operator
dnn= "oai";
nssai_sst=1;
nssai_sd=1;
}
```
#### Step 2:
Run OAI UE with USRP B210
```sh
# Without 5G CN
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -E --ue-fo-compensation
# With 5G CN
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa -O [corresponding UE config file] -E
or
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ue-fo-compensation --sa -E -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/ue.conf
# Optional With RF simulator
sudo RFSIMULATOR=127.0.0.1 ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa --nokrnmod -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/ue.conf
# -r: bandwidth in terms of RBs (default value 106)
# -- numerology: numerology index (default value 1)
# --band: NR band number (default value 78)
# --C: downlink carrier frequency in Hz (default value 0)
# --C0: uplink frequency offset for FDD in Hz (default value 0)
# -s: SSB start subcarrier (default value 512)
# --sa: Standalone mode
# --ue-fo-compensation : frequency output conpensation
```