# DevOps free5gc 測試 ###### tags: `III DevOps` [TOC] ## free5gc 專案環境為Ubuntu 18.04下執行Command下載free5gc ### 新增專案 選擇範本 > Defualt ### 修改環境  #### Dockerfile ```javascript FROM ubuntu:18.04 MAINTAINER jiahong RUN apt-get update -y \ && apt-get install nginx -y EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"] ``` #### 刪除app內的檔案 Default範本是執行一個簡易的index.php,這部分不會用到,所以會將它刪除。 ### 執行pipeline,生成實證環境  ### 進入此環境(Command Line)   ### 開始安裝free5gc #### 安裝基本工具 ##### git ```javascript= apt install git -y ``` ##### sudo ```javascript= apt-get install sudo ``` ##### golang ```javascript= apt-get install wget wget https://go.dev/dl/go1.17.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.17.4.linux-amd64.tar.gz ``` 新增PATH環境變數 ```javascript= mkdir -p ~/go/{bin,pkg,src} 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 ``` 看 golang 有無下載成功:  ##### mongodb ```javascript= sudo apt -y update ``` ```javascript= sudo apt -y install mongodb ``` 之後要啟動mongodb,我們嘗試運行`sudo systemctl start mongodb`命令來管理我們的服務時,但我們可能會遇到一個錯誤: #### 錯誤1:  這基本上意味著systemd包尚未安裝或現有systemd包中存在一些問題。 我們必須確保該systemd軟件包已安裝在我們的機器上。我們可以用命令驗證:`sudo dpkg -l | grep systemd`  如果systemd沒有安裝,那麼我們可以使用以下命令安裝它: `sudo apt-get install systemd` #### 錯誤2:  您的Linux系統不支援systemd。將`systemctl start mongodb`改成: ```javascript= service mongodb start ```  ### 安裝編譯 Free5GC 與 UERANSIM 所需的套件 ```javascript= sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev go get -u github.com/sirupsen/logrus ``` ### 網路規則設定 安裝好之後,為了讓後續 UPF 能夠把封包 forward 出去,我們必須手動 config networking。 ```javascript= sudo apt-get install nano sudo nano /etc/sysctl.conf ```  net.ipv4.ip_forward=1一個網路介面到另一個介面的IP轉發(封包轉發)。因此要把註解刪掉。 #### Kubernetes K8S之Pod跨namespace名稱空間訪問Service服務 :::info 在 Kubernetes 中,namespace提供了一種在單個集群中隔離資源組的機制。它有助於對 Kubernetes 對象(如 Pod、Deployments、Services)進行分組和結構化,並在 Kubernetes 集群中對它們進行邏輯分區。  在本次free5gc測試過程需要針對類似iptable的方式做IP轉發,但DevOps架構上使用Kubernetes Cluster的方式。上圖所示,在DevOps上一個專案會以namespace的方式進行分組,要根據free5gc跟UERANSIM進行訪問,要實現跨namespace與Service通信。 通過Service的ExternalName類型即可實現跨namespace名稱空間與Service通信。 Service域名格式: (servicename).(namespace).svc.cluster.local,其中cluster.local 為指定的集群的域名。 ::: ### 安裝free5gc 利用git clone把最新版本的free5gc下載下來 ```javascript= ubuntu@free5gc:~$ git clone https://github.com/free5gc/free5gc.git ``` 下載完後接著編譯free5gc,先進入/free5gc資料夾內再執行。 ```javascript= ubuntu@free5gc:~$ cd ~/free5gc ubuntu@free5gc:~/free5gc$ make ``` #### 發現無法編譯free5gc  後續發現是最新版(v3.2.1)的free5gc的Makefile出錯。 修改free5gc版本:在這邊指定使用v3.1.0 ```javascript= git clone --recursive -b v3.1.0 -j ` nproc` https://github.com/free5gc/free5gc.git ``` 重新編譯make  ### 安裝gtp5g 安裝gtp5g,先回到根目錄~ ```javascript= ubuntu@free5gc:~$ cd ~ ubuntu@free5gc:~$ git clone https://github.com/free5gc/gtp5g.git ubuntu@free5gc:~$ cd gtp5g ``` 嘗試編譯gtp5g ```javascript= ubuntu@free5gc:~/gtp5g$ sudo make install ubuntu@free5gc:~/gtp5g$ make ```  看狀態是Ubuntu Kernel可能無法執行  看來Container無法直接升級內核,必須在操作系統上升級才行。 目前版本是5.4.0-43-generic 因為Container的內核是藉由host來共享,所以要升級必須到操作系統來實作。[解決Ubuntu Kernel版本問題](https://hackmd.io/@Ting-Wan/SJ6vPMscY) 重開機回到container可以看到Kernel版號已改成5.4.0-131-generic  重新make發現沒有用,根據錯誤發現沒有modules ```javascript= sudo apt-get install linux-headers-5.4.0.131-generic sudo apt install linux-image-5.4.0-131-generic ``` 有了!  重新編譯  安裝gtp5其餘工具,處理封包。 ```javascript= sudo make install ``` 測試gtp5g是否安裝 ```javascript= lsmod | grep gtp ``` 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up