Commit b5cad627 authored by Raphael Defosseux's avatar Raphael Defosseux
Browse files

Merge remote-tracking branch 'origin/master' into gnbsim_tutorial_update

parents 2e851400 0a253a74
......@@ -59,10 +59,11 @@ pipeline {
JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
sh "git clean -x -d -f > /dev/null 2>&1"
sh 'git log -n1'
if (params.CheckAnotherBranch != null) {
if (params.CheckAnotherBranch) {
if (params.BranchToCheck != null) {
sh 'git checkout params.BranchToCheck'
sh 'git checkout '+ params.BranchToCheck
sh 'git log -n1'
}
}
......
......@@ -23,12 +23,6 @@ services:
oai-amf:
container_name: "oai-amf"
image: oai-amf:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/amf.pcap 2>&1 > /dev/null &
/openair-amf/bin/oai_amf -c /openair-amf/etc/amf.conf -o | tee /tmp/amf.log 2>&1
"
cap_add:
- NET_ADMIN
environment:
- TZ=Europe/paris
- INSTANCE=0
......@@ -94,12 +88,6 @@ services:
oai-smf:
container_name: "oai-smf"
image: oai-smf:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/smf.pcap 2>&1 > /dev/null &
/openair-smf/bin/oai_smf -c /openair-smf/etc/smf.conf -o | tee /tmp/smf.log 2>&1
"
cap_add:
- NET_ADMIN
environment:
- TZ=Europe/Paris
- INSTANCE=0
......@@ -110,7 +98,7 @@ services:
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
- DEFAULT_DNS_SEC_IPV4_ADDRESS=8.8.8.8
- DEFAULT_DNS_SEC_IPV4_ADDRESS=192.168.18.129
- AMF_IPV4_ADDRESS=192.168.70.132
- AMF_PORT=80
- AMF_API_VERSION=v1
......@@ -143,10 +131,6 @@ services:
oai-spgwu:
container_name: "oai-spgwu"
image: oai-spgwu-tiny:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/spgwu.pcap 2>&1 > /dev/null &
/openair-spgwu-tiny/bin/oai_spgwu -c /openair-spgwu-tiny/etc/spgw_u.conf -o | tee /tmp/spgwu.log 2>&1
"
environment:
- TZ=Europe/Paris
- PID_DIRECTORY=/var/run
......@@ -200,16 +184,15 @@ services:
"apt update; apt install -y iptables iproute2 iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.70.134 dev eth0; sleep infinity"
command: ["/bin/bash", "-c", "trap : TERM INT; sleep infinity & wait"]
depends_on:
- oai-spgwu
networks:
public_net:
ipv4_address: 192.168.70.135
networks:
public_net:
external:
name: demo-oai-public-net
# public_net:
# external:
# name: demo-oai-public-net
public_net:
driver: bridge
name: demo-oai-public-net
......
......@@ -3,12 +3,6 @@ services:
oai-nrf:
container_name: "oai-nrf"
image: oai-nrf:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/nrf.pcap 2>&1 > /dev/null &
/openair-nrf/bin/oai_nrf -c /openair-nrf/etc/nrf.conf -o | tee /tmp/nrf.log 2>&1
"
cap_add:
- NET_ADMIN
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80
......@@ -49,12 +43,6 @@ services:
oai-amf:
container_name: "oai-amf"
image: oai-amf:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/amf.pcap 2>&1 > /dev/null &
/openair-amf/bin/oai_amf -c /openair-amf/etc/amf.conf -o | tee /tmp/amf.log 2>&1
"
cap_add:
- NET_ADMIN
environment:
- TZ=Europe/paris
- INSTANCE=0
......@@ -120,12 +108,6 @@ services:
oai-smf:
container_name: "oai-smf"
image: oai-smf:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/smf.pcap 2>&1 > /dev/null &
/openair-smf/bin/oai_smf -c /openair-smf/etc/smf.conf -o | tee /tmp/smf.log 2>&1
"
cap_add:
- NET_ADMIN
environment:
- TZ=Europe/Paris
- INSTANCE=0
......@@ -136,7 +118,7 @@ services:
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
- DEFAULT_DNS_SEC_IPV4_ADDRESS=8.8.8.8
- DEFAULT_DNS_SEC_IPV4_ADDRESS=192.168.18.129
- AMF_IPV4_ADDRESS=0.0.0.0
- AMF_PORT=80
- AMF_API_VERSION=v1
......@@ -169,10 +151,6 @@ services:
oai-spgwu:
container_name: "oai-spgwu"
image: oai-spgwu-tiny:latest
command: >
bash -c "nohup tshark -i eth0 -w /tmp/spgwu.pcap 2>&1 > /dev/null &
/openair-spgwu-tiny/bin/oai_spgwu -c /openair-spgwu-tiny/etc/spgw_u.conf -o | tee /tmp/spgwu.log 2>&1
"
environment:
- TZ=Europe/Paris
- PID_DIRECTORY=/var/run
......@@ -226,16 +204,15 @@ services:
"apt update; apt install -y iptables iproute2 iperf3 iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.70.134 dev eth0; sleep infinity"
command: ["/bin/bash", "-c", "trap : TERM INT; sleep infinity & wait"]
depends_on:
- oai-spgwu
networks:
public_net:
ipv4_address: 192.168.70.135
networks:
public_net:
external:
name: demo-oai-public-net
# public_net:
# external:
# name: demo-oai-public-net
public_net:
driver: bridge
name: demo-oai-public-net
......
......@@ -78,7 +78,7 @@ git submodule update
## 1.2. You are interested on the latest features. ##
All the latest features are somehow pushed to the `develop` branches of each cNF repository.
All the latest features are somehow pushed to the `develop` branches of each NF repository.
It means that we/you are able to build and the Continuous Integration test suite makes sure it
does NOT break any existing tested feature.
......
......@@ -20,6 +20,7 @@
3. [Networking](#3-networking)
# 1. Configure the containers #
- **Core Network Configuration**: The [docker-compose](../docker-compose/docker-compose.yaml) file has configuration parameters of all the core network components. The file is pre-configured with parameters related to an [example scenario](./DEPLOY_SA5G_WITH_DS_TESTER.md). The table contains the location of the configuration files. These files contains allowed configurable parameters. **Keep checking this file it is possible that we will add new parameters for new features.**
| File Name | Repository | Location |
......@@ -99,6 +100,82 @@
# 3. Networking #
- The [docker-compose.yaml](../docker-compose/docker-compose.yaml) will create the network automatically.
## 3.1. Automatic docker network deployment. ##
The [docker-compose.yaml](../docker-compose/docker-compose.yaml) will create the network automatically. The bottom section of the file SHALL look like this:
```bash
networks:
# public_net:
# external:
# name: demo-oai-public-net
public_net:
driver: bridge
name: demo-oai-public-net
ipam:
config:
- subnet: 192.168.70.128/26
driver_opts:
com.docker.network.bridge.name: "demo-oai"
```
## 3.2. Manual docker network deployment. ##
At the deployment, if you want to capture initial transactions between the CN5G components, you will have to manually create the network.
First edit [docker-compose.yaml](../docker-compose/docker-compose.yaml) to look like this:
```bash
networks:
public_net:
external:
name: demo-oai-public-net
# public_net:
# driver: bridge
# name: demo-oai-public-net
# ipam:
# config:
# - subnet: 192.168.70.128/26
# driver_opts:
# com.docker.network.bridge.name: "demo-oai"
```
Then create the docker network:
```bash
(docker-compose-host)$ docker network create \
--driver=bridge \
--subnet=192.168.70.128/26 \
-o "com.docker.network.bridge.name"="demo-oai" \
demo-oai-public-net
455631b3749ccd6f10a366cd1c49d5a66cf976d176884252d5d88a1e54049bc5
(docker-compose-host)$ ifconfig demo-oai
demo-oai: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.70.129 netmask 255.255.255.192 broadcast 192.168.70.191
ether 02:42:9c:0a:23:44 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(docker-compose-host)$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d2d34e05bb2d bridge bridge local
455631b3749c demo-oai-public-net bridge local
```
Finally you can start capturing.
```bash
tshark -i demo-oai -w 5gcn-deployment.pcap
```
## 3.3. In case you forgot! ##
If the `docker-compose-host` machine is not configured with packet forwarding then it can be done using below command,
```bash
(docker-compose-host)$ sudo sysctl net.ipv4.conf.all.forwarding=1
(docker-compose-host)$ sudo iptables -P FORWARD ACCEPT
```
You are ready to check out the tutorial that [how 5g core works](./DEPLOY_SA5G_WITH_DS_TESTER.md).
......@@ -12,11 +12,16 @@
</tr>
</table>
Welcome to the tutorial home page of OAI 5g Core project. Here you can find lot of tutorials and help manuals. We regularly update these documents depending on the new feature set.
**2021/07/27 Update: you have now the choice to either pull images or build your-self.**
**Table of Contents**
1. [Pre-requisites](./DEPLOY_PRE_REQUESITES.md)
2. [Building the Container Images](./BUILD_IMAGES.md)
2. Getting the images
1. [Retrieving the Container Images](./RETRIEVE_OFFICIAL_IMAGES.md)
2. [Building the Container Images](./BUILD_IMAGES.md)
3. [Configuring the Containers](./CONFIGURE_CONTAINERS.md)
4. [Tutorial: 5G Core Network Deployment and Testing with dsTest](./DEPLOY_SA5G_WITH_DS_TESTER.md)
5. [Tutorial: 5G Core Network Deployment using Helm Charts](./DEPLOY_SA5G_HC.md)
......
......@@ -48,15 +48,15 @@ $ docker info
# 2. Create an account on Docker Hub #
Go to [https://hub.docker.com/](https://hub.docker.com/) website and create an account.
Go to [docker-hub](https://hub.docker.com/) and create an account.
# 3. Pull base images #
* Ubuntu version: We need 2 base images: `ubuntu:bionic` and `mysql/mysql-server:5.7`
* Ubuntu version: We need 2 base images: `ubuntu:bionic` and `mysql/mysql:5.7`
Currently we are working to support `CentOS8` and `RHEL8` distributions.
First log with your Docker Hub credentials.
First log with your Docker Hub credentials. This is required if your organization has reached pulling limit as `anonymous`.
```bash
$ docker login
......@@ -65,13 +65,11 @@ Username:
Password:
```
Then pull base images.
On a Ubuntu18.04 host:
```bash
$ docker pull ubuntu:bionic
$ docker pull mysql/mysql-server:5.7
$ docker pull mysql:5.7
```
Finally you may logoff --> your token is stored in plain text..
......@@ -138,4 +136,7 @@ $ docker network inspect bridge
....
```
You are ready to [build the images](./BUILD_IMAGES.md).
Here you have 2 choices:
* You can pull official images from Docker Hub like [this](./RETRIEVE_OFFICIAL_IMAGES.md).
* Or you are ready to [build your-self the network function images](./BUILD_IMAGES.md).
......@@ -15,10 +15,20 @@
![SA dsTest Demo](./images/docker-compose/5gCN.jpg)
This tutorial will help in understanding how to deploy OAI core network using docker-compose. In this tutorial we have used [dsTest](https://www.developingsolutions.com/products/dstest-5g-core-network-testing/) a commercial paid gNB emulator. Though instead of this readers can also use gNBsim (an opensource gNB emulator), you can follow another tutorial for [this](./DEPLOY_SA5G_WITH_GNBSIM.md). Please follow the tutorial step by step to create a stable working testbed.
**Reading time: ~20mins**
**Tutorial replication time: ~1hr**
Note: In case readers are interested in deploying debuggers/developers core network environment with more logs please follow [this tutorial](./DEBUG_5G_CORE.md)
**TABLE OF CONTENTS**
1. [Pre-requisites](#1-pre-requisites)
2. [Building Container Images](#2-building-container-images)
2. [Network Function Container Images](#2-network-function-container-images)
3. [Configuring Host Machines](#3-configuring-host-machines)
4. [Configuring OAI 5G Core Network Functions](#4-configuring-the-oai-5g-core-network-functions)
5. [Configuring dsTest Scenario](#5-configuring-dstester-scenario)
......@@ -45,44 +55,122 @@ The requried softwares and their respected versions are listed below. To replica
| tshark | 3.4.4 (Git commit c33f6306cbb2) |
| wireshark | 3.4.4 (Git commit c33f6306cbb2) |
The new version of `wireshark` may not be available in the ubuntu repository so it is better to build it from source.
The new version of `wireshark` may not be available in the ubuntu repository so it is better to build it from source.
Most of the times the `docker-compose-host` machine is not configured with packet forwarding then it can be done using below command (if you have already done it in any other section then don't repeat).
To know how to configure the machine with the above requirements vist [pre-requisites](./DEPLOY_PRE_REQUESITES.md) page.
**This is the most important step towards end-to-end connectivity.**
## 2. Building Container Images ##
```bash
(docker-compose-host)$ sudo sysctl net.ipv4.conf.all.forwarding=1
(docker-compose-host)$ sudo iptables -P FORWARD ACCEPT
```
- In this demo the image tags and commits which were used are listed below, follow the [Building images](./BUILD_IMAGES.md) to build images with below tags.
To know how to configure the machine with the above requirements vist [pre-requisites](./DEPLOY_PRE_REQUESITES.md) page.
| CNF Name | Branch Name | Commit at time of writing | Ubuntu 18.04 | RHEL8 |
| ----------- |:----------------------- | ------------------------------------------ | ------------ | ---------------|
| AMF | `develop` | `82ca64fe8d79dbadbb1a495124ee26352f81bd7a` | X | Releasing soon |
| SMF | `develop` | `0dba68d6a01e1dad050f47437647f62d40acaec6` | X | Releasing soon |
| NRF | `develop` | `0e877cb5b80a9c74fa6abca60b95e2d3d22f7a52` | X | Releasing soon |
| SPGW-U-TINY | `gtp_extension_header` | `b628036d2e6060da8ba77c5e4cdde35bf18a62a5` | X | Releasing soon |
## 2. Network Function Container Images ##
- In this demo the network function branch and tags which were used are listed below, follow the [Retrieving images](./RETRIEVE_OFFICIAL_IMAGES.md) or the [Building images](./BUILD_IMAGES.md) to build images with below tags.
| CNF Name | Branch Name | Tag | Ubuntu 18.04 | RHEL8 (UBI8) |
| ----------- | ----------- | -------- | ------------ | ----------------|
| AMF | `master` | `v1.1.0` | X | X |
| SMF | `master` | `v1.1.0` | X | X |
| NRF | `master` | `v1.1.0` | X | X |
| SPGW-U-TINY | `master` | `v1.1.2` | X | X |
- In case readers are interested in making images using different branch then **they have to build images from scratch they can't use the docker-hub images**.
## 3. Configuring Host Machines ##
- The `docker-compose-host` machine will be configured with `demo-oai-public-net` bridge automatically using [docker-compose.yaml](../docker-compose/docker-compose.yaml) at the time of deploying core network components. And also for each component it will start capturing `pcap` messages and stores it on the `/tmp/` location of that container. Use the below command as shown as an example.
All the network functions are connected using `demo-oai` bridge.
There are two ways to create this bridge either manually or automatically using docker-compose.
* The manual version will allow packet capturing while network functions are getting deployed. So the initial tested setup packets can be captured for debugging purposes or checking if network functions registered properly to NRF.
* The second option of automatic deployment is good when initial packet capture is not important.
**NOTE** This tutorial needs that the bridge is created manually to analyse NRF packet exchange.
### 3.1 Creating bridge manually
- The bottom section of [docker-compose file](../docker-compose/docker-compose.yaml) SHALL look like this:
```
networks:
public_net:
external:
name: demo-oai-public-net
# public_net:
# driver: bridge
# name: demo-oai-public-net
# ipam:
# config:
# - subnet: 192.168.70.128/26
# driver_opts:
# com.docker.network.bridge.name: "demo-oai"
```
- The `docker-compose-host` machine needs to be configured with `demo-oai` bridge before deploying core network components. To capture initial message exchange between smf<-->nrf<-->upf.
```bash
(docker-compose-host)$ docker cp container_name:/tmp/amf.pcap amf.pcap
(docker-compose-host)$ docker network create \
--driver=bridge \
--subnet=192.168.70.128/26 \
-o "com.docker.network.bridge.name"="demo-oai" \
demo-oai-public-net
455631b3749ccd6f10a366cd1c49d5a66cf976d176884252d5d88a1e54049bc5
(docker-compose-host)$ ifconfig demo-oai
demo-oai: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.70.129 netmask 255.255.255.192 broadcast 192.168.70.191
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(docker-compose-host)$ docker network ls
NETWORK ID NAME DRIVER SCOPE
d2d34e05bb2d bridge bridge local
455631b3749c demo-oai-public-net bridge local
```
### 3.2 Create bridge automatically
- Though the bridge can be automatically created using docker-compose file if there is no need to capture initial packets.
This is the `default` version in the [docker-compose.yaml](../docker-compose/docker-compose.yaml) or docker-compose-no-nrf.yaml.
The bottom section SHALL look like this:
```
networks:
# public_net:
# external:
# name: demo-oai-public-net
public_net:
driver: bridge
name: demo-oai-public-net
ipam:
config:
- subnet: 192.168.70.128/26
driver_opts:
com.docker.network.bridge.name: "demo-oai"
```
- Optional, if the `docker-compose-host` machine is not configured with packet forwarding then it can be done using below command,
- If the `docker-compose-host` machine is not configured with packet forwarding then it can be done using below command (**important step**),
```bash
(docker-compose-host)$ sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
(docker-compose-host)$ sudo iptables -P FORWARD ACCEPT
```
- The `dsTest-host` needs to configured with a route to reach `docker-compose-host`. Assuming `dsTest-host` physical interface which is connected with `docker-compose-host` is NIC1 and the ip-address of this interface is IP_ADDR_NIC1 then,
```bash
(dsTest-host)$ sudo ip route add route \
192.168.70.128/26 via IP_ADDR_NIC1\
dev NIC1_NAME
(dsTest-host)$ sudo ip route add route 192.168.70.128/26 \
via IP_ADDR_NIC1\
dev NIC1_NAME
```
- To verify ping the ip-address of the `docker-compose-host` interface connected to demo-oai-public-net bridge,
- To verify ping the ip-address of the `docker-compose-host` interface connected to demo-oai bridge, if possible also ping amf from the dsTest-host machine.
```bash
(dsTest-host)$ ping 192.168.70.129
......@@ -110,7 +198,7 @@ To know how to configure the machine with the above requirements vist [pre-requi
| spgw_u.conf | (Github) OPENAIRINTERFACE/openair-spgwu-tiny | [etc/spgw_u.conf](https://github.com/OPENAIRINTERFACE/openair-spgwu-tiny/blob/gtp_extension_header/etc/spgw_u.conf) |
- **User Subscprition Profile**: The dsTest UE which will request for a PDU session will have this user profile. Verify that this entry is present in the oai_db.sql file located in docker-compose/oai-db.sql.
- **User Subscprition Profile**: The dsTest UE which will request for a PDU session will have this user profile. Verify that this entry is present in the oai_db.sql file located in [docker-compose/oai-db.sql](../docker-compose/oai_db.sql).
```
IMSI - 208950000000031
......@@ -166,7 +254,7 @@ To know how to configure the machine with the above requirements vist [pre-requi
```bash
(docker-compose-host)$ pwd
/home/<docker-compose-host>/oai/oai-cn-fed/docker-compose
(docker-compose-host)$ ./core-network
(docker-compose-host)$ ./core-network.sh
Only use the following options
......@@ -194,7 +282,7 @@ To know how to configure the machine with the above requirements vist [pre-requi
- Starting the core network components,
```bash
(docker-compose-host)$ ./core-network start nrf spgwu
(docker-compose-host)$ ./core-network.sh start nrf spgwu
Starting 5gcn components in the order nrf, mysql, amf, smf, spgwu...
Creating mysql ... done
Creating oai-nrf ... done
......@@ -244,7 +332,7 @@ To know how to configure the machine with the above requirements vist [pre-requi
(docker-compose-host)$ docker logs oai-smf > smf.log
(docker-compose-host)$ docker logs oai-nrf > nrf.log
(docker-compose-host)$ docker logs oai-spgwu > spgwu.log
(docker-compose-host)$ ./core-network.sh stop nrf
(docker-compose-host)$ ./core-network.sh stop nrf spgwu
Stopping the core network...
Stopping oai-ext-dn ... done
Stopping oai-smf ... done
......@@ -260,7 +348,7 @@ To know how to configure the machine with the above requirements vist [pre-requi
Removing oai-nrf ... done
Network demo-oai-public-net is external, skipping
Core network stopped
```
```
## 8. Analysing the Scenario Results ##
......@@ -278,8 +366,6 @@ This section is subdivided in two parts the first part for analysing the message
| dsTest gNB/UE | 192.168.18.184 |
| Pcap/log files |
|:-------------------------------------------------------------------------------------------------------- |
| [5gcn-deployment.pcap](./results/dsTest/pcap/5gcn-deployment.pcap) |
......@@ -335,10 +421,11 @@ Using wireshark open scenario-execution.pcap use the filter ngap || http || pfcp
## 10. Notes ##
- The `oai-ext-dn` container is optional and is only required if the user wants to ping the dsTest UE. In general this container is not required except for testing purposes.
- There is a possibility to perform the same test or setup the core network without nrf by using `docker-compose/docker-compose-no-nrf.yaml`. Check the configuration before using the compose file.
- There is a possibility to perform the same test or setup the core network without nrf by using `docker-compose/docker-compose-no-nrf.yaml` [file](../docker-compose/docker-compose-no-nrf.yaml) . Check the configuration before using the compose file.
- This tutorial can be taken as reference to test the OAI 5G core with a COTS UE. The configuration files has to be changed according to the gNB and COTS UE information should be present in the mysql database.
- Generally, in a COTS UE two PDN sessions are created by default so configure the IMS in SMF properly. Currently some parameters can not be configured via [docker-compose.yaml](../docker-compose/docker-compose.yaml). We recommend you directly configure them in the conf file and mount the file in the docker during run time.
- Its not necessary to use [core-network.sh](../docker-compose/core-network.sh) bash script, it is possible to directly deploy using `docker-compose` command
- In case you want to deploy debuggers/developers core network environment with more logs please follow [this tutorial](./DEBUG_5G_CORE.md)
```
#To start the containers
......
......@@ -14,6 +14,12 @@
![SA dsTest Demo](./images/5gCN_gnbsim.jpg)
**Reading time: ~ 30mins**
**Tutorial replication time: ~ 1h30mins**
Note: In case readers are interested in deploying debuggers/developers core network environment with more logs please follow [this tutorial](./DEBUG_5G_CORE.md)
**TABLE OF CONTENTS**
1. Pre-requisites
......
......@@ -12,8 +12,16 @@
</tr>
</table>
**CAUTION: the vpp-upf repository is stil not public.**
![SA dsTest Demo](./images/5gcn_vpp_upf.jpg)
**Reading time: ~ 30mins**
**Tutorial replication time: ~ 1h30mins**
Note: In case readers are interested in deploying debuggers/developers core network environment with more logs please follow [this tutorial](./DEBUG_5G_CORE.md)
**TABLE OF CONTENTS**
1. Pre-requisites
......
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OpenAirInterface 5G Core Network Deployment : Pulling Container Images</font></b>
</td>
</tr>
</table>
This page is only valid for an `Ubuntu18` host.
If you are using any other distributions, please refer to [Build your own images](./BUILD_IMAGES.md).
If you want to the up-to-date new features, please refer to [Build your own images](./BUILD_IMAGES.md).
# Pulling the images from Docker Hub #
Currently the images are hosted under the user account `rdefosseoai`.
This may change in the future.
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
```bash
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password:
```
Now pull images.
```bash
$ docker pull rdefosseoai/oai-amf
$ docker pull rdefosseoai/oai-nrf
$ docker pull rdefosseoai/oai-spgwu-tiny
$ docker pull rdefosseoai/oai-smf
```
And **re-tag** them for tutorials' docker-compose file to work.
```bash
$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest
$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest
$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
```
Finally you may logoff --> your token is stored in plain text..