free5GC on Amazon EC2

# 1. はじめに

free5GCをUbuntu 20.04LTS on Amazon EC2 (t2.medium 1台) で構築できたのでメモ。(free5gcは、3.2.1を使った。以前は、3.0.5を使っていた）
- 3.2.1時の注意
  - go言語のインストールは、snapで簡便化した。
  - free5gcは、mongodb必須のため、Ubuntuは20.04のまま。(理由は参考資料のIssueを参照のこと)


# 2. 手順
## 2.1 free5gc 3.2.1時の手順


```
sudo apt -y update
sudo apt -y install mongodb make gcc
git clone https://github.com/free5gc/gtp5g
cd gtp5g
make
sudo make install
cd
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo snap install go --classic
git clone --recursive -b v3.2.1 -j `nproc` https://github.com/free5gc/free5gc
cd free5gc
make
sudo apt remove cmdtest
sudo apt remove yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update
sudo apt install -y nodejs yarn
make webconsole
```



# 3. 使ってみる。
## 3.1. コマンド
以下で実行することができる。スタンドアロンの説明書を参照のこと。

なお、スクリプト内のGOROOT変数は、書き換える必要がある。スクリプト内では、`/usr/local/go`から`/snap`に書き換える必要がある。

```
sudo ./test.sh
```

```
sudo ./run.sh
```



## 3.2. WebUI
上の`./run.sh`に加えて、以下を動かす。

```
cd ~/free5gc/webconsole
go run server.go
```
公開IPアドレスにアクセスし5000番ポートに接続する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153471/f0cd3041-35cd-ea7f-8fb1-164822b378e6.png)



```
lusername: admin
password: free5gc
```


# A. 参考資料
## A.1. 5Gコア

- [(JANOG46) オープンソースでローカル5Gをやってみたい](https://www.janog.gr.jp/meeting/janog46/wp-content/uploads/2020/07/janog46-lt-06-sumida.pdf)
- [the free5gc wiki!](https://github.com/free5gc/free5gc/wiki)
   - [Installation](https://github.com/free5gc/free5gc/wiki/Installation)
   - [free5GC Stage 2 Installation Guide](https://www.free5gc.org/installations/stage-2-standalone-5g/)
     - スタンドアロンでの構築など。文書が揃っているようには見えないので、該当ディレクトリを眺めて、使うしかない気がする。 
   - [Installing UERANSIM - a UE/RAN Simulator](https://www.free5gc.org/installations/stage-3-sim-install/) 
      - RAN (Radio Access Network) Simulatorを接続する場合の使い方。 
   - [Appendix](https://github.com/free5gc/free5gc/wiki/Appendix)
     - WebUIの設定など 
- [5Gのコアネットワークをパブリッククラウド上に構築](https://qiita.com/makotaka/items/c3b42486defe621af020)
- [OAI L2 nFAPI + Free5GCによるNSA 5GC構築方法](https://metonymical.hatenablog.com/entry/2020/01/03/151233)

## A.2. ソースコードやパッケージ

- [https://github.com/free5gc/free5gc](https://github.com/free5gc/free5gc) # 現行の開発版
- [https://github.com/PrinzOwO/gtp5g](https://github.com/PrinzOwO/gtp5g) # オリジナル版
- [(Ubuntu 20.04LTS)"focal" のサブセクション kernel に含まれるソフトウェアパッケージ](https://packages.ubuntu.com/focal/kernel/)

## A.3. OpenSource

- [Open, Programmable, and Virtualized 5G Networks: State-of-the-Art and the Road Ahead](https://arxiv.org/abs/2005.10027)
   - 各種OSSソフトウェアの紹介など。 

## A.4 注意事項
free5gcで使うMongoDBは、現在、Ubuntu 20.04まで対応している。このため、Ubuntu 22.04でインストールはもう少し先となる(2022/12/04現在)。

- [Release Notes for MongoDB 6.0](https://www.mongodb.com/docs/manual/release-notes/6.0/)
- [Platform Support: Add support for Ubuntu 22.04 x86](https://jira.mongodb.org/browse/SERVER-62300)

## A.5 free5gc 3.0.5時の手順
以下の手順を確認した際、snapを使わずgoをインストールしたため手順が複雑になった。

```
sudo apt -y update
sudo apt -y install mongodb wget git gcc cmake autoconf libtool pkg-config libmnl-dev libyaml-dev g++
sudo apt install  linux-image-5.8.0-50-generic linux-headers-5.8.0-50-generic
sudo reboot
```
再起動する。

```
uname -r # 版数が更新されたことを確認
git clone https://github.com/PrinzOwO/gtp5g.git
cd gtp5g
make
sudo make install
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
cd
# golang install
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz
mkdir -p ~/go/{bin,pkg,src}
# The following assume that your shell is bash
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc
echo 'export GO111MODULE=auto' >> ~/.bashrc
source ~/.bashrc
# free5gc install
cd ~
git clone --recursive -b v3.0.5 -j `nproc` https://github.com/free5gc/free5gc.git
cd free5gc
make
make upf
sudo apt remove cmdtest
sudo apt remove yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install -y nodejs yarn
make webconsole
```