free5gc的安装与测试
作者:Yian
时间:2022年 11月 29日
内容简介:free5gc开发环境的搭建以及运行基本测试。
参考资源:free5gc GitHub仓库、互联网博客。
(如侵权烦请联系删除)
环境要求
以下来自free5gc的GitHub官方仓库document:
- 软件要求
- OS: Ubuntu 18.04
- gcc 7.3.0
- Go 1.14.4 linux/amd64
- kernel version 5.0.0-23-generic or 5.4.x
The listed kernel version is required for the UPF element.
- 最小硬件要求
- CPU: Intel i5 processor
- RAM: 4GB
- Hard drive: 160GB
- NIC: Any 1Gbps Ethernet card supported in the Linux kernel
- 推荐硬件要求
- CPU: Intel i7 processor
- RAM: 8GB
- Hard drive: 160GB
- NIC: Any 10Gbps Ethernet card supported in the Linux kernel
This guide assumes that you will run all 5GC elements on a single machine.
我的环境:
- 软件环境
- OS: Ubuntu 18.04
- Go 1.14.4 linux/amd64
- kernel version 5.4.0-132-generic
- VMware 16 Pro
- 硬件环境
- CPU: Intel i5-8265U 虚拟机分配:2核
- RAM: 8GB 虚拟机分配:2G
- Hard drive: 500GB 虚拟机分配:35G
其中,Ubuntu版本与内核版本最好与官方一致。
若你是从一个新的虚拟机环境中开始安装,推荐安装Ubuntu18.04并检查内核版本是否符合要求,然后安装下节基础环境配置,配置基本Linux开发环境。
基础环境配置
若你不是从一个新的环境中进行安装,可选择忽略本节中的内容。
设置root用户
sudo passwd root # 输入后系统提示设置root用户密码,输入两次创建完成
更换镜像源
cd /etc/apt # 进入 /etc/apt 目录
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup # 备份 sources.list 文件
sudo vi /etc/apt/sources.list # 打开 sources.list 文件进行修改
添加下列内容到文件开头
deb / bionic main restricted universe multiverse
deb / bionic-security main restricted universe multiverse
deb / bionic-updates main restricted universe multiverse
deb / bionic-proposed main restricted universe multiverse
deb / bionic-backports main restricted universe multiverse
deb-src / bionic main restricted universe multiverse
deb-src / bionic-security main restricted universe multiverse
deb-src / bionic-updates main restricted universe multiverse
deb-src / bionic-proposed main restricted universe multiverse
deb-src / bionic-backports main restricted universe multiverse
对 apt-get 进行更新
sudo apt-get update
sudo apt-get upgrade
开启SSH服务
sudo apt-get install openssh-server # 安装ssh服务sudo vim /etc/ssh/sshd_config # 将Port前面的#注释去掉,开启22端口,
StrictModes修改为yes,并去掉前面的#注释
并在#PermitRootLogin prohibit-password下一行添加PermitRootLogin yessudo /etc/init.d/ssh restart # 重启服务
GitHub加速
nslookup github # 在终端中输入,查询GitHub的Address
nslookup github.global.ssl.fastly # 查询github.global.ssl.fastly的Address
sudo vim /etc/hosts # 编辑host文件
在host文件末尾追加以下内容,其中ip地址更换为你上面获得的Address
#Github
20.205.243.166
20.205.243.166 .13.86.21
31.13.86.21
2001::c710:9eab
2001::c710:9eab
再刷新缓存
sudo /etc/init.d/networking restart # Ubuntu18.04使用
sudo service network-manager restart # Ubuntu20.04使用,若找不到命令,用第三条
sudo netplan apply # 第二条失效时
Go安装
若你已经安装go且使用go version
检查go语言版本若不为1.14.4,则需要卸载早前版本
# this assumes your current version of Go is in the default location
sudo rm -rf /usr/local/go
若你还没有安装go,根据以下命令可安装与配置go环境变量
wget .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
执行命令后可使用go version
检查是否安装成功
free5gc前置环境配置
控制面依赖安装
sudo apt -y update
sudo apt -y install mongodb wget git
sudo systemctl start mongodb # 这步时间会稍微长一点
用户面依赖安装
sudo apt -y update
sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev
Ubuntu主机网络设置
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE # <dn_interface>为你的网卡,如ens33,不带括号
sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
sudo systemctl stop ufw
free5gc安装
两种方式
1.手动安装,参考资料:
GitHub仓库官方文档
【Free5GC】环境安装搭建-LFTF-CSDN博客
我在上述方式的安装过程中遇到过各式各样的问题,最后一次问题出在make时的security error,所以更推荐用下面方式,我把编译好的代码文件放在了仓库。
2.下载我基于官方仓库已编译过NFs目录的代码安装(推荐,更方便)
git clone .git # 下载失败可以科学上网下载zip解压
cd free5gc
unzip gtp5g.zip # 解压gtp
cd gtp5g
sudo make
sudo make install # 安装gtp
lsmod | grep gtp # 测试安装状态
测试安装状态
cd ~/free5gc
./test.sh TestRegistration # 如果出现pass字段则说明安装成功
下面是执行完输出的末尾部分,可以看到PASS字样
--- PASS: TestRegistration (9.43s)
PASS
ok test 11.083s
2022-11-29T21:26:19+08:00 [INFO][UPF][Main] Shutdown UPF ...
2022-11-29T21:26:19+08:00 [INFO][UPF][Pfcp][10.200.200.101:8805] Stopping pfcp server
2022-11-29T21:26:19+08:00 [ERRO][UPF][Pfcp][10.200.200.101:8805] read udp4 10.200.200.101:8805: use of closed network connection
2022-11-29T21:26:19+08:00 [INFO][UPF][Pfcp][10.200.200.101:8805] pfcp reciver stopped
2022-11-29T21:26:19+08:00 [INFO][UPF][Pfcp][10.200.200.101:8805] pfcp server stopped
2022-11-29T21:26:19+08:00 [INFO][UPF][Buff] buff server stopped
2022-11-29T21:26:19+08:00 [INFO][UPF][Main] Terminating UPF...
2022-11-29T21:26:19+08:00 [INFO][UPF][Main] UPF terminated
2022-11-29T21:26:19+08:00 [INFO][UPF][Main] UPF exited
其中第6行的2022-11-29T21:26:19+08:00 [ERRO][UPF][Pfcp][10.200.200.101:8805] read udp4 10.200.200.101:8805: use of closed network connection
第六行read时抛出use of closed network connection
根据GoLang TCP网络编程-简书以及我有限的go知识,在己方已经关闭的socket上再进行read和write操作,会得到”use of closed network connection” error。这个error我猜测是第五行已经关闭服务器了,在进行read操作导致的,这应该要修改执行顺序,我暂时没有那个能力。
发布评论