# Internship Notes ## 26 June 2023, 27 June 2023, [Impelementing RabbitMQ part 3](https://hackmd.io/@naufalfaza/BJHz-Y8dn) ## 15 June 2023 [Implementing RabbitMQ on Docker](https://hackmd.io/@naufalfaza/Bk5LQadwn) ## 2 June 2023 [Attempt at Implementing RabbitMQ on AUSF](https://hackmd.io/@naufalfaza/H1eBELL82) ## 26 May 2023 [Message Queue using RabbitMQ in AUSF](https://hackmd.io/@naufalfaza/BknVitaS2) ## 19 May 2023 [Attempting to make new AUSF algorithm](https://hackmd.io/tJF-Au_QTHignBtCWpbV4g) ## 11 May 2023 [Attempt at improving AUSF](https://hackmd.io/NO7wjcuaTGKFusUJz5Dbkw) ## 4 May 2023 [Learning about AUSF](https://hackmd.io/@naufalfaza/rk7IbvZV3) ## 24 April 2023 1. [Installing Uerasim](https://hackmd.io/@naufalfaza/HkZeF6fm3) ## 27 March 2023 Searched about what is free5gc and its requirements specification :::success EXPLANATION ABOUT FREE5GC Free5GC is an open-source project for 5th generation (5G) mobile core networks. The ultimate goal of this project is to implement the 5G core network (5GC) defined in 3GPP Release 15 (R15) and beyond. It is the first open-source 5G core network in the world to conform to the 3GPP R15 international standards. Some of the content that I should be studying about free5GC are: - The architecture and components of free5GC, such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, PCF, NSSF, etc. - The installation and configuration of free5GC on different platforms, such as Linux, Kubernetes, etc. - The testing and debugging of free5GC with different tools, such as Wireshark, tcpdump, etc. - The integration and interoperability of free5GC with other 5G systems, such as gNBs, UEs, etc. - The development and contribution of free5GC with GitHub and other open-source communities. ARCHITECTURE & COMPONENTS of FREE5GC The architecture and components of free5GC are based on the 3GPP Release 15 (R15) standards for 5G core network (5GC). Free5GC adopts a service-based architecture (SBA) that consists of network functions (NFs) that communicate with each other through a common service-based interface (SBI). The NFs can be categorized into control plane NFs and user plane NFs. The control plane NFs are responsible for managing the signaling and control functions of the 5GC, such as authentication, authorization, session management, policy control, mobility management, etc. The control plane NFs include: * Access and Mobility Management Function (AMF): It handles the registration, connection, mobility and reachability of the user equipment (UE). * Session Management Function (SMF): It handles the establishment, modification and release of the packet data unit (PDU) sessions between the UE and the data network. * User Plane Function (UPF): It handles the user plane traffic forwarding and routing between the UE and the data network. It also supports policy enforcement and charging functions. * Authentication Server Function (AUSF): It handles the authentication and security protection of the UE and the network access. * Unified Data Management (UDM): It handles the subscription data management and provisioning for the UE and the network access. * Unified Data Repository (UDR): It stores and provides access to the structured data of the 5GC, such as subscriber profiles, policies, session contexts, etc. * Network Slice Selection Function (NSSF): It handles the selection of network slices for the UE based on its subscription and service requirements. * Network Repository Function (NRF): It handles the discovery and registration of NFs and their services in the 5GC. * Network Exposure Function (NEF): It handles the exposure of 5GC capabilities and events to external applications or third parties. * Policy Control Function (PCF): It handles the policy rules and decisions for the UE and the PDU sessions. * Application Function (AF): It interacts with the PCF to influence or request policy control for specific applications or services. The user plane NFs are responsible for handling the user data traffic between the UE and the data network. The user plane NFs include: * User Plane Function (UPF): As mentioned above, it handles the user plane traffic forwarding and routing between the UE and the data network. It also supports policy enforcement and charging functions. * Non-3GPP Interworking Function (N3IWF): It handles the interworking between the 5GC and non-3GPP access networks, such as Wi-Fi or fixed networks. ::: ## 28 March 2023 Studying about free5GC from [5G Core Architecture Part 1 Live Session on 6th April 2021](https://www.youtube.com/watch?v=W4M3_FYO2WY) 1. Learnt about UE, AMF, SMF, UDM, UPF, PCF, and gnB 2. AMF is for access and mobility. It is to authenticate the user and know its position. 3. SMF gives session and allocate IP address 4. UDM for data management 5. PCF for dynamic policy 6. UPF for routing 7. gnB to connect user to 5G core ## 29 March 2023 1. Installed Ubuntu 20.04 VM and clone for the free5gc 2. following the tutorial [here](https://github.com/free5gc/free5gc/wiki/Installation). Succesfully installed and tested all the bash script. However, i noticed I was using the most updated kernel. Still works tho ## 1 April 2023 **I'm trying to install free5gc using cloud VM (Amazon EC2)** 1. Create AWS account. Long story short, I can't access AWS Educate because I signed up to AWS Education earlier than having the AWS account so there comes error. I already contacted AWS. Meanwhile, I'm using my own credit. 2. We want to create a VM. So, launch instances ::: info ![](https://i.imgur.com/3dVYEIr.png) ::: 4. Setup the name and choose the OS :::info ![](https://i.imgur.com/gOk41IC.png) ::: 6. Choose the instance type that matches Free5GC specification and cheap :::info ![](https://i.imgur.com/2ZGqUSY.png) ::: Also create the key pair for connecting the VM using SSH. We need to allow SSH from anywhere just to make it easy for us (it is not the best practice as far as i know) 8. Launch instance! :::info ![](https://i.imgur.com/4gWLvHP.png) ::: 10. The instance will be automatically started :::info ![](https://i.imgur.com/SnIqi9l.png) ::: 12. Click connect :::info ![](https://i.imgur.com/dUkSNKi.png) ::: 13. Connect with SSH client. I'm using Windows Powershell here. :::info ![](https://i.imgur.com/pGs8W5F.png) ::: 14. However, if we follow the command directly, it will show that the .pem key has bad permission. This is because we only want the private key to be read only. :::info ![](https://i.imgur.com/e04sLY4.png) ::: 15. In Ubuntu, we should do this to our private key (.pem file) ``` chmod 400 free5gc-1.pem ``` This command will change the permissions of the file to read and write only for the owner, and no permissions for anyone else. However, I'm using Windows. So, we need to disable the inheritance permission for the private key file and add full control over my username like this. :::info ![](https://i.imgur.com/qiokU2j.png) ::: 16. We can connect ``` ssh -i "free5gc-1.pem" ubuntu@ec2-18-141-209-116.ap-southeast-1.compute.amazonaws.com ``` :::info ![](https://i.imgur.com/thW3OYR.png) ::: **Now let's install free5gc on this instance/VM** 1. Follow the instruction from [free5gc wiki Installation](https://github.com/free5gc/free5gc/wiki/Installation) 2. When we're doing ``` uname -r ``` Our kernel is :::info ![](https://i.imgur.com/ZMTi0JV.png) ::: So, we need to revert back our kernel. ``` sudo apt update & sudo apt install linux-image-5.4.0-65-generic -y & sudo update-grub & sudo reboot ``` :::warning ![](https://i.imgur.com/FOjNEbK.png) It's still the same? hmmm. okay. I hope the kernel version is not necessary ::: 3. Since GO language is not installed, :::info ![](https://i.imgur.com/eJB8I99.png) ::: we need to install it. :::info 1. Run this command ``` wget https://dl.google.com/go/go1.17.8.linux-amd64.tar.gz ``` This command downloads the Go programming language version 1.17.8 for the Linux operating system in the 64-bit AMD architecture. The downloaded file is in the compressed tar.gz format. The wget command is a utility for downloading files from the internet using the command line interface. ![](https://i.imgur.com/cAhvF0G.png) 2 Run this command ``` sudo tar -C /usr/local -zxvf go1.17.8.linux-amd64.tar.gz ``` This command extracts the contents of the go1.17.8.linux-amd64.tar.gz file to the /usr/local directory on a Linux system. The sudo command is used to run the tar command with administrative privileges, allowing it to write to the /usr/local directory. The tar command is a utility for archiving and extracting files. The -C option specifies the directory where the files should be extracted, in this case, /usr/local. The -z option tells tar to use gzip compression, and the -x option tells it to extract the files. The -v option is used to display verbose output, showing the progress of the extraction process. Once the extraction is complete, the Go programming language will be installed in the /usr/local/go directory. This directory will contain the Go binary files and other related files needed to run Go programs. In summary, the sudo tar -C /usr/local -zxvf go1.17.8.linux-amd64.tar.gz command extracts the Go programming language files from the compressed tar.gz archive and installs them in the /usr/local/go directory on a Linux system. ![This is after runnign the command](https://i.imgur.com/zGgxrYw.png) 3. Run this command ``` mkdir -p ~/go/{bin,pkg,src} ``` This command creates three directories, bin, pkg, and src, inside the go directory in the user's home directory (~/). The -p option tells the mkdir command to create the parent directory (go) if it does not exist. The bin directory is used to store executable files generated by Go programs. The pkg directory is used to store compiled package files, and the src directory is used to store source code files for Go programs. By creating these directories, the user is setting up the recommended directory structure for Go development. This structure allows for easy organization of Go projects and makes it easier to manage dependencies and build Go programs. In summary, the mkdir -p ~/go/{bin,pkg,src} command creates the bin, pkg, and src directories inside the go directory in the user's home directory, providing a recommended directory structure for Go development. ![](https://i.imgur.com/C3LW9GK.png) 4. Lastly, run this bash command ``` 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 ``` These commands modify the ~/.bashrc file to set environment variables for Go development and then reload the file to apply the changes to the current shell session. The ~/.bashrc file is a shell script that is executed whenever a new terminal session is started. It is used to set environment variables, aliases, and other settings for the shell. The first command, echo 'export GOPATH=$HOME/go' >> ~/.bashrc, sets the GOPATH environment variable to the go directory in the user's home directory. This directory is used to store Go source code, compiled packages, and executable files. The second command, echo 'export GOROOT=/usr/local/go' >> ~/.bashrc, sets the GOROOT environment variable to the directory where Go is installed. This variable is used to specify the location of the Go binary files. The third command, echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc, adds the GOPATH/bin and GOROOT/bin directories to the PATH environment variable. This allows the shell to find the Go binary files when they are executed. The fourth command, echo 'export GO111MODULE=auto' >> ~/.bashrc, sets the GO111MODULE environment variable to auto. This variable is used to enable or disable Go modules, which are used to manage dependencies in Go projects. The final command, source ~/.bashrc, reloads the ~/.bashrc file to apply the changes to the current shell session. This allows the user to immediately start using the new environment variables and settings. In summary, these commands modify the ~/.bashrc file to set environment variables for Go development and then reload the file to apply the changes to the current shell session. ![](https://i.imgur.com/4HateH7.png) 5. Check the GO version ``` go version ``` ![](https://i.imgur.com/DqaCNA6.png) ::: 4. We need to install the Control-Plane Supporting packages ``` sudo apt -y update sudo apt -y install mongodb wget git sudo systemctl start mongodb ``` :::info These commands install MongoDB, wget, and Git on a Linux system and start the MongoDB service. The first command, sudo apt -y update, updates the package list on the system to ensure that the latest versions of packages are available for installation. The second command, sudo apt -y install mongodb wget git, installs MongoDB, wget, and Git on the system. MongoDB is a NoSQL database used for storing data, while wget is a utility for downloading files from the internet, and Git is a version control system used for managing source code. The third command, sudo systemctl start mongodb, starts the MongoDB service. This command starts the MongoDB daemon process, which listens for incoming connections and manages the database. Once these commands are executed, MongoDB, wget, and Git will be installed on the system, and the MongoDB service will be running. The user can then start using these tools for their intended purposes. In summary, these commands update the package list on the system, install MongoDB, wget, and Git, and start the MongoDB service on a Linux system. ::: :::success ![](https://i.imgur.com/5p3QLpe.png) ![](https://i.imgur.com/SLBaGTW.png) ::: 4. We need to install the User-Plane Supporting packages ``` sudo apt -y update sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev ``` :::info This command installs several development tools and libraries on a Linux system. Here's what each package does: git: A version control system used for managing source code. gcc and g++: Compilers for the C and C++ programming languages, respectively. cmake: A build system used for generating makefiles and building software. autoconf and libtool: Tools used for generating configure scripts and building shared libraries. pkg-config: A tool used for retrieving information about installed libraries. libmnl-dev: A library for working with Netlink sockets in Linux. libyaml-dev: A library for working with YAML data in C programs. By installing these packages, the user will have access to a wide range of development tools and libraries that can be used for building and compiling software on the system. The -y option tells the apt command to automatically answer "yes" to any prompts that may appear during the installation process, making the installation process faster and more streamlined. In summary, the sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev command installs several development tools and libraries on a Linux system, providing the user with a wide range of tools for building and compiling software. ::: ::: success ![](https://i.imgur.com/AU2zoF9.png) ![](https://i.imgur.com/9OrgXpf.png) ::: 5. Do some Linux Host Network Settings ``` sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400 sudo systemctl stop ufw ``` :::info This command sequence is used to configure network settings on a Linux system. Here is a breakdown of each command: * **sudo sysctl -w net.ipv4.ip_forward=1**: This command enables IP forwarding on the system, which allows the system to forward packets between different networks or subnets. * **sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE**: This command sets up network address translation (NAT) on the system, which allows devices on a local network to access the internet through a single public IP address. The -t nat option specifies the NAT table, -A POSTROUTING appends the rule to the end of the POSTROUTING chain, -o eth0 specifies the outgoing network interface, and -j MASQUERADE replaces the source IP address of outgoing packets with the IP address of the outgoing interface. * **sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400**: This command sets the maximum segment size (MSS) for TCP packets to 1400 bytes, which can help prevent fragmentation and improve network performance. The -A FORWARD option appends the rule to the end of the FORWARD chain, -p tcp specifies the protocol, -m tcp matches TCP packets, --tcp-flags SYN,RST SYN matches packets with the SYN flag set and the RST flag unset, -j TCPMSS jumps to the TCPMSS target, and --set-mss 1400 sets the MSS to 1400 bytes. * **sudo systemctl stop ufw**: This command stops the Uncomplicated Firewall (UFW) service, which is a front-end for iptables that simplifies firewall configuration. This is done to prevent any conflicts with the iptables rules that were just set up. Overall, this command sequence is used to configure a Linux system to forward packets between different networks or subnets, set up network address translation (NAT), optimize TCP packet size, and disable the UFW service. ::: :::success ![](https://i.imgur.com/Ydtd9DF.png) ::: 6. Install Control-Plane elements: Cloning the repository ``` cd ~ git clone --recursive -b v3.2.1 -j `nproc` https://github.com/free5gc/free5gc.git cd free5gc ``` :::info This command sequence is used to download and install the free5gc network function virtualization (NFV) software on a Linux system. Here is a breakdown of each command: cd ~: This command changes the current working directory to the user's home directory. This is done to ensure that the free5gc software is downloaded to a location that the user has write access to. git clone --recursive -b v3.2.1 -j \nproc` https://github.com/free5gc/free5gc.git`: This command uses the git command to clone the free5gc repository from GitHub. The --recursive option tells git to also clone any submodules that the repository depends on. The -b v3.2.1 option specifies that the v3.2.1 branch of the repository should be cloned. The -j \nproc option specifies the number of threads to use for the clone operation, which is set to the number of available processing cores on the system. Finally, the URL of the repository is specified. cd free5gc: This command changes the current working directory to the free5gc directory that was just cloned. This is done to prepare for the installation and configuration of the free5gc software. Overall, this command sequence is used to download and prepare the free5gc software for installation on a Linux system. The git command is used to clone the repository, and the cd command is used to change the working directory to the cloned repository. ::: :::success ![](https://i.imgur.com/wKLVHVY.png) ![](https://i.imgur.com/V74jp4m.png) ::: 7. Build all network functions ``` cd ~/free5gc make ``` :::info Here is a breakdown of each command: cd ~/free5gc: This command changes the current working directory to the free5gc directory that was cloned in the previous step. This is done to prepare for the build process. make: This command runs the make utility, which reads the Makefile in the current directory and executes the commands necessary to build the free5gc software. The Makefile specifies the dependencies and build instructions for the software, and the make utility automates the build process. Overall, this command sequence is used to build the free5gc software on a Linux system. The cd command is used to change the working directory to the cloned repository, and the make command is used to execute the build process. Once the build process is complete, the free5gc software will be installed and ready to use. ::: :::success ![](https://i.imgur.com/BSoFp2n.png) ![](https://i.imgur.com/Yac1hCK.png) ::: 8. Retrieve the 5G GTP-U kernel module using git and build it ``` git clone -b v0.6.8 https://github.com/free5gc/gtp5g.git cd gtp5g make sudo make install ``` :::info This command sequence is used to download, build, and install the gtp5g software on a Linux system. Here is a breakdown of each command: git clone -b v0.6.8 https://github.com/free5gc/gtp5g.git: This command uses the git command to clone the gtp5g repository from GitHub. The -b v0.6.8 option specifies that the v0.6.8 branch of the repository should be cloned. Finally, the URL of the repository is specified. cd gtp5g: This command changes the current working directory to the gtp5g directory that was just cloned. This is done to prepare for the build process. make: This command runs the make utility, which reads the Makefile in the current directory and executes the commands necessary to build the gtp5g software. The Makefile specifies the dependencies and build instructions for the software, and the make utility automates the build process. sudo make install: This command runs the make install command with superuser privileges, which installs the gtp5g software on the system. This command copies the compiled binaries and other necessary files to the appropriate system directories, so that the software can be used by other programs and services. Overall, this command sequence is used to download, build, and install the gtp5g software on a Linux system. The git command is used to clone the repository, the cd command is used to change the working directory to the cloned repository, the make command is used to execute the build process, and the sudo make install command is used to install the software on the system. Once the installation process is complete, the gtp5g software will be ready to use. ::: :::success ![](https://i.imgur.com/NfvMpxN.png) ![](https://i.imgur.com/9553pv7.png) ![](https://i.imgur.com/4IhigeS.png) ::: 9. Before building WebConsole, install nodejs and yarn packages first: ``` 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-get update sudo apt-get install -y nodejs yarn ``` :::info This command sequence is used to install Node.js and Yarn on a Linux system. Here is a breakdown of each command: **sudo apt remove cmdtest**: This command removes the cmdtest package from the system. This package is known to cause conflicts with Node.js and Yarn, so it is recommended to remove it before installing these packages. **sudo apt remove yarn**: This command removes the yarn package from the system. This is done to ensure that the latest version of Yarn is installed. **curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -**: This command downloads the Yarn package signing key and adds it to the system's list of trusted keys. This is done to ensure that the Yarn packages are authentic and have not been tampered with. **echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list**: This command adds the Yarn package repository to the system's list of package sources. This is done so that the apt-get command can find and install the Yarn package. **curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -**: This command downloads and runs a script that adds the Node.js package repository to the system's list of package sources. This is done so that the apt-get command can find and install the Node.js package. **sudo apt-get update**: This command updates the system's list of available packages. This is done to ensure that the latest versions of the Node.js and Yarn packages are available for installation. **sudo apt-get install -y nodejs yarn**: This command installs the Node.js and Yarn packages on the system. The -y option tells apt-get to automatically answer "yes" to any prompts that may appear during the installation process. Overall, this command sequence is used to install Node.js and Yarn on a Linux system. The apt command is used to manage the installation of packages, and the curl command is used to download and run scripts that add package repositories and signing keys to the system. Once the installation process is complete, Node.js and Yarn will be ready to use. ::: :::success ![](https://i.imgur.com/QLlwD6J.png) A deprecation warning. Interesting.... ![](https://i.imgur.com/d7o85mZ.png) ::: 10. Build Webconsole ``` cd ~/free5gc make webconsole ``` :::info **make webconsole**: This command runs the make utility with the webconsole target, which builds the webconsole component of the free5gc software. The Makefile in the free5gc directory specifies the dependencies and build instructions for the webconsole component, and the make utility automates the build process. ::: :::warning Start building webconsole.... cd webconsole/frontend && \ yarn install && \ yarn build && \ rm -rf ../public && \ cp -R build ../public yarn install v1.22.19 warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json. [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > eslint-config-react-app@2.1.0" has incorrect peer dependency "babel-eslint@^7.2.3". warning " > react-bootstrap-table@4.3.1" has incorrect peer dependency "react@^15.0.0 || ^16.0.0". warning "react-bootstrap-table > react-modal@3.11.2" has incorrect peer dependency "react@^0.14.0 || ^15.0.0 || ^16". warning "react-bootstrap-table > react-modal@3.11.2" has incorrect peer dependency "react-dom@^0.14.0 || ^15.0.0 || ^16". warning "react-bootstrap-table > react-s-alert@1.4.1" has incorrect peer dependency "react@^15.0.0 || ^16.0.0". warning "react-bootstrap-table > react-s-alert@1.4.1" has incorrect peer dependency "react-dom@^15.0.0 || ^16.0.0". warning " > react-redux@5.1.2" has incorrect peer dependency "react@^0.14.0 || ^15.0.0-0 || ^16.0.0-0". warning " > redux-form@7.4.2" has incorrect peer dependency "react@^15.0.0-0 || ^16.0.0-0". [4/4] Building fresh packages... Done in 42.14s. yarn run v1.22.19 $ NODE_PATH=./src node scripts/build.js Creating an optimized production build... Warning: React version not specified in eslint-plugin-react settings. See https://github.com/yannickcr/eslint-plugin-react#configuration . Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0. Recommendation: math.div(15, 16) or calc(15 / 16) More info and automated migrator: https://sass-lang.com/d/slash-div ╷ 2 │ $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; │ ^^^^^ ╵ src/assets/styles/base/mixins/_chartist.scss 2:20 @import src/assets/styles/base/_mixins.scss 22:9 @import stdin 4:9 root stylesheet Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0. Recommendation: math.div(8, 9) or calc(8 / 9) More info and automated migrator: https://sass-lang.com/d/slash-div ╷ 2 │ $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; │ ^^^ ╵ src/assets/styles/base/mixins/_chartist.scss 2:29 @import src/assets/styles/base/_mixins.scss 22:9 @import stdin 4:9 root stylesheet Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0. Recommendation: math.div(5, 6) or calc(5 / 6) More info and automated migrator: https://sass-lang.com/d/slash-div ╷ 2 │ $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; │ ^^^ ╵ src/assets/styles/base/mixins/_chartist.scss 2:36 @import src/assets/styles/base/_mixins.scss 22:9 @import stdin 4:9 root stylesheet Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0. Recommendation: math.div(4, 5) or calc(4 / 5) More info and automated migrator: https://sass-lang.com/d/slash-div ╷ 2 │ $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; │ ^^^ ╵ src/assets/styles/base/mixins/_chartist.scss 2:43 @import src/assets/styles/base/_mixins.scss 22:9 @import stdin 4:9 root stylesheet Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0. Recommendation: math.div(3, 4) or calc(3 / 4) More info and automated migrator: https://sass-lang.com/d/slash-div ╷ 2 │ $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; │ ^^^ ╵ src/assets/styles/base/mixins/_chartist.scss 2:50 @import src/assets/styles/base/_mixins.scss 22:9 @import stdin 4:9 root stylesheet Warning: 12 repetitive deprecation warnings omitted. Compiled with warnings. ./src/pages/Tasks/TasksOverview.js Line 16: componentWillMount is deprecated since React 16.9.0, use UNSAFE_componentWillMount instead, see https://reactjs.org/docs/react-component.html#unsafe_componentwillmount. Use https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles to automatically update your components react/no-deprecated Line 25: componentWillReceiveProps is deprecated since React 16.9.0, use UNSAFE_componentWillReceiveProps instead, see https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops. Use https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles to automatically update your components react/no-deprecated Search for the keywords to learn more about each warning. To ignore, add // eslint-disable-next-line to the line before. File sizes after gzip: 314.43 KB build/static/js/main.63f851df.js The project was built assuming it is hosted at the server root. To override this, specify the homepage in your package.json. For example, add this to build it for GitHub Pages: "homepage" : "http://myname.github.io/myapp", The build folder is ready to be deployed. You may serve it with a static server: yarn global add serve serve -s build Done in 28.57s. cd webconsole && \ CGO_ENABLED=0 go build -ldflags "-X github.com/free5gc/util/version.VERSION=v3.2.1 -X github.com/free5gc/util/version.BUILD_TIME=2023-03-31T18:51:29Z -X github.com/free5gc/util/version.COMMIT_HASH=69864fe6 -X github.com/free5gc/util/version.COMMIT_TIME=2022-05-25T05:24:43Z" -o /home/ubuntu/free5gc/webconsole/bin/webconsole ./server.go ***One important thing to note in this output is the warning message about the package-lock.json file. The warning states that the project contains lock files generated by tools other than Yarn, and it is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. This warning suggests that the project may have been using a different package manager before switching to Yarn, and it is recommended to remove the package-lock.json file to avoid any potential issues.*** ***Another important thing to note is the warning messages about deprecated lifecycle methods in the TasksOverview.js file. These warnings indicate that the componentWillMount and componentWillReceiveProps methods are deprecated since React 16.9.0, and it is recommended to use the UNSAFE_componentWillMount and UNSAFE_componentWillReceiveProps methods instead. These warnings suggest that the code may need to be updated to use the latest React lifecycle methods to avoid any potential issues in the future.*** ::: 11. Everything's alright. Let's test In order to run the test: ``` cd ~/free5gc make upf chmod +x ./test.sh ``` :::info The first command make upf is used to build the User Plane Function (UPF) component of the free5gc network function virtualization (NFV) software on a Linux system. The make utility is used to automate the build process, and the upf target specifies the UPF component to be built. Once the build process is complete, the UPF component will be installed and ready to use. The second command chmod +x ./test.sh is used to make the test.sh script executable. The chmod command is used to change the permissions of a file, and the +x option specifies that the file should be made executable. Once the test.sh script is made executable, it can be run using the ./test.sh command. This command is often used to ensure that the script has the necessary permissions to run, and to prevent any permission errors that may occur during execution. ::: :::success ![](https://i.imgur.com/S9FBUui.png) ::: 12. A) TestRegistration https://github.com/free5gc/free5gc/wiki/Test :::success ![](https://i.imgur.com/Sy9X7fm.png) ::: B) TestGUTIRegistration :::success ![](https://i.imgur.com/mSLOnDK.png) ::: C) TestServiceRequest :::success ![](https://i.imgur.com/jHAq4bN.png) ::: D) TestXnHandover :::success ![](https://i.imgur.com/jHiZ6Jw.png) ::: E) TestDeregistration :::success ![](https://i.imgur.com/fywXESE.png) ::: F) TestPDUSessionReleaseRequest :::success ![](https://i.imgur.com/8iO4JBr.png) ::: G) TestPaging :::success ![](https://i.imgur.com/zmKh196.png) ::: H) TestN2Handover :::success ![](https://i.imgur.com/yuuuTow.png) ::: I) TestNon3GPP :::success ![](https://i.imgur.com/GfmCXEU.png) ![](https://i.imgur.com/EFk3FiZ.png) ![](https://i.imgur.com/95T8ut2.png) ::: J) TestReSynchronization :::success ![](https://i.imgur.com/YjMJfkD.png) ::: K) TestULCL :::success ![](https://i.imgur.com/JPyYRS8.png) :::