Skip to content

Commit a2f6009

Browse files
cb403craftleon
andauthored
ebpf code directory and makefile updates
* compile for Cross-platform * ebpf file to ebpf directory * ebpf log optimize * ebpf c file directory change * add ebpf to Makefile * add ebpf compile description in build.zh-cn.md * update ebpf compile description * update ebpf module compile * ebpf compile description * Update Makefile --------- Co-authored-by: Leon Zeng <craftleon@hotmail.com>
1 parent 7ba4bf2 commit a2f6009

File tree

13 files changed

+507
-487
lines changed

13 files changed

+507
-487
lines changed

Makefile

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,25 @@ END_COLOUR=\033[0m
3131
# Plugins
3232
NHP_SERVER_PLUGINS = ./endpoints/server/plugins
3333

34+
# eBPF compile
35+
EBPF_SRC = ./nhp/ebpf/xdp/nhp_ebpf_xdp.c
36+
EBPF_OBJ = ./release/nhp-ac/etc/nhp_ebpf_xdp.o
37+
CLANG_OPTS = -O2 -target bpf -g -Wall -I.
38+
39+
# check if clang is installed before
40+
CLANG := $(shell command -v clang 2>/dev/null)
41+
ifeq ($(CLANG),)
42+
$(error "clang is not installed. Please install clang to compile eBPF programs.")
43+
endif
44+
45+
ebpf: $(EBPF_OBJ)
46+
47+
$(EBPF_OBJ): $(EBPF_SRC)
48+
$(CLANG) $(CLANG_OPTS) -c $(EBPF_SRC) -o $(EBPF_OBJ)
49+
50+
clean_ebpf:
51+
rm -f $(EBPF_OBJ)
52+
3453
generate-version-and-build:
3554
@echo "$(COLOUR_BLUE)[OpenNHP] Start building... $(END_COLOUR)"
3655
@echo "$(COLOUR_BLUE)Version: ${VERSION} $(END_COLOUR)"
@@ -41,7 +60,7 @@ generate-version-and-build:
4160
@$(MAKE) agentd
4261
@$(MAKE) acd
4362
@$(MAKE) serverd
44-
@$(MAKE) de
63+
@$(MAKE) db
4564
@$(MAKE) agentsdk
4665
@$(MAKE) devicesdk
4766
@$(MAKE) plugins
@@ -73,7 +92,7 @@ serverd:
7392
mkdir -p ../release/nhp-server/etc; \
7493
cp ./server/main/etc/*.toml ../release/nhp-server/etc/
7594

76-
de:
95+
db:
7796
@echo "$(COLOUR_BLUE)[OpenNHP] Building nhp-db... $(END_COLOUR)"
7897
cd endpoints && \
7998
go build -trimpath -ldflags ${LD_FLAGS} -v -o ../release/nhp-db/nhp-db ./db/main/main.go && \
@@ -109,4 +128,7 @@ archive:
109128
@cd release && mkdir -p archive && tar -czvf ./archive/$(PACKAGE_FILE) nhp-agent nhp-ac nhp-db nhp-server
110129
@echo "$(COLOUR_GREEN)[OpenNHP] Package ${PACKAGE_FILE} archived!$(END_COLOUR)"
111130

112-
.PHONY: all generate-version-and-build init agentd acd serverd db agentsdk devicesdk plugins test archive
131+
# make ebpf
132+
ebpf: ebpf generate-version-and-build
133+
134+
.PHONY: all generate-version-and-build init agentd acd serverd db agentsdk devicesdk plugins test archive ebpf clean_ebpf

docs/zh-cn/build.zh-cn.md

Lines changed: 166 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -1,151 +1,166 @@
1-
---
2-
layout: page
3-
title: 编译源代码
4-
parent: 中文版
5-
nav_order: 6
6-
permalink: /zh-cn/build/
7-
---
8-
9-
# 编译OpenNHP
10-
{: .fs-9 }
11-
12-
[English](/build/){: .label .fs-4 }
13-
14-
---
15-
16-
## 1. WSL环境准备
17-
18-
**提示:** Windows 10/11下可以通过`WSL`子系统来运行Linux,详细请见WSL官方文档:<https://learn.microsoft.com/zh-cn/windows/wsl/install>
19-
20-
- **【开启WSL功能】** 在Win10上,需要首先开启WSL才能使用WSL安装Linux,设置界面请见下图。
21-
![Win10上WSL设置](/images/win10wsl.png)
22-
- **【WSL上安装Linux】** 推荐在WSL上安装Ubuntu Linux,通过PowerShell运行以下命令安装:
23-
24-
```bat
25-
wsl --update
26-
wsl --install -d Ubuntu
27-
```
28-
29-
如果遇到以下问题,参考:<https://blog.csdn.net/weixin_44293949/article/details/121863559>
30-
31-
```text
32-
无法从 'https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json’提取列表分发。无法解析服务器的名称或地址
33-
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED
34-
```
35-
36-
- **【WSL环境的IP地址】** 在WSL的Linux环境中,运行以下命令获取IP地址:
37-
38-
| 主机 | 查看IP地址的命令 |
39-
| :----------------: | :-----------------------------------------------------: |
40-
| WSL中Linux主机 | `hostname -I \| awk '{print $1}'` |
41-
| WSL宿主Windows主机 | `ip route show \| grep -i default \| awk '{ print $3}'` |
42-
43-
## 2. 系统需求
44-
45-
- 2.1 `Go语言`环境:**Go 1.21** 。安装包下载地址: <https://go.dev/dl/>
46-
- **Windows与macOS**环境下,通过下载的安装程序来安装Go。
47-
- **Linux**环境下可以直接通过管理工具安装: `sudo apt install golang `
48-
- 安装成功后,运行命令`go version` 来查看Go版本号。
49-
- **Windows与macOS**环境下,通过下载的安装程序来安装Go。
50-
- **Linux**环境下可以直接通过管理工具安装:`sudo apt install golang` 或者通过以下命令手动安装:
51-
52-
```bash
53-
1. sudo apt-get update
54-
2. wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
55-
3. sudo tar -xvf go1.21.0.linux-amd64.tar.gz
56-
4. sudo mv go /usr/local
57-
5. export GOROOT=/usr/local/go
58-
6. export GOPATH=$HOME/go
59-
7. export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
60-
8. source ~/.profile
61-
```
62-
63-
- 安装成功后,运行命令`go version` 来查看Go版本号。
64-
- 2.2 `GCC`环境:
65-
- **Linux与macOS****GCC 8.0**或以上。
66-
- 查看GCC版本的命令:`gcc -v`
67-
- 安装GCC: `sudo apt install build-essential`
68-
- **Windows**:
69-
1. 第一步:**安装mingw64**。mingw64可以通过msys2的包管理工具进行下载。安装msys2系统要求、下载与安装教程见:<https://www.msys2.org/>
70-
![install_msys2](/images/install_msys2.png)
71-
72-
2. 第二步:**安装GCC**。在msys2的控制台输入命令:
73-
74-
```bash
75-
pacman -S mingw-w64-ucrt-x86_64-gcc
76-
```
77-
78-
3. 第三步:**配置GCC**。将GCC工具路径加入Windows的 *%PATH%* 环境变量。例如:mingw-w64-gcc的安装路径为`C:\Program Files\MSYS2\`, 则需要运行命令
79-
80-
```bat
81-
setx PATH "%PATH%;C:\Program Files\MSYS2\ucrt64\bin
82-
```
83-
执行成功之后,打开新的命令行窗口,检查*gcc*的版本号
84-
```bat
85-
gcc --version
86-
```
87-
88-
- **提示:** Windows下可以通过`WSL`子系统来运行Linux,详细请见WSL官方文档:<https://learn.microsoft.com/zh-cn/windows/wsl/install>
89-
- 推荐在WSL上运行Ubuntu最新版v22,在Windows上的PowerShell运行以下命令安装:
90-
```bat
91-
wsl --install --distribution Ubuntu-22.04
92-
```
93-
94-
<small>*注:如果 2.1 和 2.2 已完成,直接在项目目录下执行编译命令 `.\build.bat` 时,通常会遇到 `系统找不到指定的路径`` 'lib' 不是内部或外部命令,也不是可运行的程序或批处理文件。` 的错误。2.3 提供了解决该问题的方法,供参考使用。*</small>
95-
96-
- 2.3 `lib`环境:
97-
98-
99-
- 在编译运行的命令中使用了 lib 工具,这是用于生成 .lib 文件的工具,通常用于链接静态库或导出符号表(在 Windows 中生成 .lib 文件以便与 .dll 文件配合使用)。遇到的错误提示 lib 不是内部或外部命令,表示系统找不到 lib 工具。
100-
101-
- **解决('lib' 不是内部或外部命令,也不是可运行的程序或批处理文件)问题 :** 安装 Visual Studio 和 Visual Studio tools。
102-
103-
- lib 工具是微软的库管理工具,通常随 Visual Studio 的 Microsoft Build Tools 安装。确保你已安装 Visual Studio,并且选择了 C++ 生成工具(C++ Build Tools)组件,其中包括 lib.exe。
104-
105-
- 如果还没有安装 Visual Studio,可以从 Visual Studio 官方网站下载安装:https://visualstudiomicrosoft.com/zh-hans/ 安装时,选择“桌面开发(C++)”工作负载,它包含 lib.exe 及其他必要的工具。
106-
107-
- 安装 Visual Studio 后,确保使用 Visual Studio 开发者命令行(Developer Command Prompt) 来运行包含 lib 命令的 `build.bat `文件。这个命令行工具会自动加载构建工具的环境变量,如 lib.exe
108-
109-
- **解决(系统找不到指定路径的错误)问题 :** 更改`bulid.bat`文件中的路径
110-
111-
- 打开 `build.bat` 文件,找到
112-
```bat
113-
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
114-
```
115-
116-
- 修改为你自己的 visual studio目录下安装路径。比如:
117-
```bat
118-
call "F:\develop\visualstu\VC\Auxiliary\Build\vcvarsall.bat" x64
119-
```
120-
121-
## 3. 编译
122-
123-
1. 拉取代码仓库
124-
125-
```bash
126-
git clone https://github.com/OpenNHP/opennhp.git
127-
```
128-
129-
2. Go环境设置
130-
131-
```bash
132-
go env -w GOPROXY="https://goproxy.cn,direct"
133-
```
134-
135-
3. 编译构建
136-
- **Linux与macOS**:运行代码根目录下脚本
137-
`make`
138-
- **Windows**:运行代码根目录下*BAT*文件
139-
`build.bat`<br>
140-
<small>*(注:如果在windows下编译过程中出现错误,请尝试此编译方法:在Visual Studio的developer command prompt for VS命令窗口中,切换到项目目录,执行`./build.bat`命令)*</small>
141-
142-
## 4. 结果
143-
144-
编译出来的二进制文件都在代码目录下的`release`子目录下。
145-
146-
- **NHP-Server**的可执行文件和配置文件: `release\nhp-server` 子目录下
147-
- **NHP-AC**的可执行文件和配置文件: `release\nhp-ac` 子目录下
148-
- **NHP-Agent**的可执行文件和配置文件: `release\nhp-agent` 子目录下
149-
- 所有二进制文件打包成一个`tar`文件: `release\archive` 子目录下
150-
151-
---
1+
---
2+
layout: page
3+
title: 编译源代码
4+
parent: 中文版
5+
nav_order: 6
6+
permalink: /zh-cn/build/
7+
---
8+
9+
# 编译OpenNHP
10+
{: .fs-9 }
11+
12+
[English](/build/){: .label .fs-4 }
13+
14+
---
15+
16+
## 1. WSL环境准备
17+
18+
**提示:** Windows 10/11下可以通过`WSL`子系统来运行Linux,详细请见WSL官方文档:<https://learn.microsoft.com/zh-cn/windows/wsl/install>
19+
20+
- **【开启WSL功能】** 在Win10上,需要首先开启WSL才能使用WSL安装Linux,设置界面请见下图。
21+
![Win10上WSL设置](/images/win10wsl.png)
22+
- **【WSL上安装Linux】** 推荐在WSL上安装Ubuntu Linux,通过PowerShell运行以下命令安装:
23+
24+
```bat
25+
wsl --update
26+
wsl --install -d Ubuntu
27+
```
28+
29+
如果遇到以下问题,参考:<https://blog.csdn.net/weixin_44293949/article/details/121863559>
30+
31+
```text
32+
无法从 'https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json’提取列表分发。无法解析服务器的名称或地址
33+
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED
34+
```
35+
36+
- **【WSL环境的IP地址】** 在WSL的Linux环境中,运行以下命令获取IP地址:
37+
38+
| 主机 | 查看IP地址的命令 |
39+
| :----------------: | :-----------------------------------------------------: |
40+
| WSL中Linux主机 | `hostname -I \| awk '{print $1}'` |
41+
| WSL宿主Windows主机 | `ip route show \| grep -i default \| awk '{ print $3}'` |
42+
43+
## 2. 系统需求
44+
45+
- 2.1 `Go语言`环境:**Go 1.21** 。安装包下载地址: <https://go.dev/dl/>
46+
- **Windows与macOS**环境下,通过下载的安装程序来安装Go。
47+
- **Linux**环境下可以直接通过管理工具安装: `sudo apt install golang `
48+
- 安装成功后,运行命令`go version` 来查看Go版本号。
49+
- **Windows与macOS**环境下,通过下载的安装程序来安装Go。
50+
- **Linux**环境下可以直接通过管理工具安装:`sudo apt install golang` 或者通过以下命令手动安装:
51+
52+
```bash
53+
1. sudo apt-get update
54+
2. wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
55+
3. sudo tar -xvf go1.21.0.linux-amd64.tar.gz
56+
4. sudo mv go /usr/local
57+
5. export GOROOT=/usr/local/go
58+
6. export GOPATH=$HOME/go
59+
7. export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
60+
8. source ~/.profile
61+
```
62+
63+
- 安装成功后,运行命令`go version` 来查看Go版本号。
64+
- 2.2 `GCC`环境:
65+
- **Linux与macOS****GCC 8.0**或以上。
66+
- 查看GCC版本的命令:`gcc -v`
67+
- 安装GCC: `sudo apt install build-essential`
68+
- **Windows**:
69+
1. 第一步:**安装mingw64**。mingw64可以通过msys2的包管理工具进行下载。安装msys2系统要求、下载与安装教程见:<https://www.msys2.org/>
70+
![install_msys2](/images/install_msys2.png)
71+
72+
2. 第二步:**安装GCC**。在msys2的控制台输入命令:
73+
74+
```bash
75+
pacman -S mingw-w64-ucrt-x86_64-gcc
76+
```
77+
78+
3. 第三步:**配置GCC**。将GCC工具路径加入Windows的 *%PATH%* 环境变量。例如:mingw-w64-gcc的安装路径为`C:\Program Files\MSYS2\`, 则需要运行命令
79+
80+
```bat
81+
setx PATH "%PATH%;C:\Program Files\MSYS2\ucrt64\bin
82+
```
83+
执行成功之后,打开新的命令行窗口,检查*gcc*的版本号
84+
```bat
85+
gcc --version
86+
```
87+
88+
- **提示:** Windows下可以通过`WSL`子系统来运行Linux,详细请见WSL官方文档:<https://learn.microsoft.com/zh-cn/windows/wsl/install>
89+
- 推荐在WSL上运行Ubuntu最新版v22,在Windows上的PowerShell运行以下命令安装:
90+
```bat
91+
wsl --install --distribution Ubuntu-22.04
92+
```
93+
94+
<small>*注:如果 2.1 和 2.2 已完成,直接在项目目录下执行编译命令 `.\build.bat` 时,通常会遇到 `系统找不到指定的路径`` 'lib' 不是内部或外部命令,也不是可运行的程序或批处理文件。` 的错误。2.3 提供了解决该问题的方法,供参考使用。*</small>
95+
96+
- 2.3 `lib`环境:
97+
98+
99+
- 在编译运行的命令中使用了 lib 工具,这是用于生成 .lib 文件的工具,通常用于链接静态库或导出符号表(在 Windows 中生成 .lib 文件以便与 .dll 文件配合使用)。遇到的错误提示 lib 不是内部或外部命令,表示系统找不到 lib 工具。
100+
101+
- **解决('lib' 不是内部或外部命令,也不是可运行的程序或批处理文件)问题 :** 安装 Visual Studio 和 Visual Studio tools。
102+
103+
- lib 工具是微软的库管理工具,通常随 Visual Studio 的 Microsoft Build Tools 安装。确保你已安装 Visual Studio,并且选择了 C++ 生成工具(C++ Build Tools)组件,其中包括 lib.exe。
104+
105+
- 如果还没有安装 Visual Studio,可以从 Visual Studio 官方网站下载安装:https://visualstudiomicrosoft.com/zh-hans/ 安装时,选择“桌面开发(C++)”工作负载,它包含 lib.exe 及其他必要的工具。
106+
107+
- 安装 Visual Studio 后,确保使用 Visual Studio 开发者命令行(Developer Command Prompt) 来运行包含 lib 命令的 `build.bat `文件。这个命令行工具会自动加载构建工具的环境变量,如 lib.exe
108+
109+
- **解决(系统找不到指定路径的错误)问题 :** 更改`bulid.bat`文件中的路径
110+
111+
- 打开 `build.bat` 文件,找到
112+
```bat
113+
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
114+
```
115+
116+
- 修改为你自己的 visual studio目录下安装路径。比如:
117+
```bat
118+
call "F:\develop\visualstu\VC\Auxiliary\Build\vcvarsall.bat" x64
119+
```
120+
121+
- 2.4 `clang`编译环境:
122+
123+
- 查看clang版本的命令:`clang --version`
124+
- **Linux Ubuntu**:
125+
- 安装clang llvm libbpf-dev:`sudo apt install clang llvm libbpf-dev`
126+
- **Linux Centos**:
127+
- 安装clang llvm libbpf-dev:`sudo yum install clang llvm libbpf-dev -y`
128+
- **编译eBPF**:
129+
- 编译命令:`make ebpf`
130+
- **提示:**
131+
- 关于clang编译工具,clang 只支持Linux,、不支持windows,windows下无需安装clang。
132+
- 关于eBPF模块编译,eBPF不支持windows,eBPF只支持Linux及内核5.6版本以上,在Opennhp根目录下执行编译命令:`make ebpf`,则会连带ebpf模块一起编译。
133+
134+
135+
136+
## 3. 编译
137+
138+
1. 拉取代码仓库
139+
140+
```bash
141+
git clone https://github.com/OpenNHP/opennhp.git
142+
```
143+
144+
2. Go环境
145+
146+
```bash
147+
go env -w GOPROXY="https://goproxy.cn,direct"
148+
```
149+
150+
3. 编译构建
151+
- **Linux与macOS**:运行代码根目录下脚本
152+
`make`
153+
- **Windows**:运行代码根目录下*BAT*文件
154+
`build.bat`<br>
155+
<small>*(注:如果在windows下编译过程中出现错误,请尝试此编译方法:在Visual Studio的developer command prompt for VS命令窗口中,切换到项目目录,执行`./build.bat`命令)*</small>
156+
157+
## 4. 结果
158+
159+
编译出来的二进制文件都在代码目录下的`release`子目录下。
160+
161+
- **NHP-Server**的可执行文件和配置文件: `release\nhp-server` 子目录下
162+
- **NHP-AC**的可执行文件和配置文件: `release\nhp-ac` 子目录下
163+
- **NHP-Agent**的可执行文件和配置文件: `release\nhp-agent` 子目录下
164+
- 所有二进制文件打包成一个`tar`文件: `release\archive` 子目录下
165+
166+
---

ebpf/xdp/Makefile

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)