Edgex foundry 在ARM 32的Linux上构建和运行(不使用docker 和 snap)

您所在的位置:网站首页 怎样获取app源代码 Edgex foundry 在ARM 32的Linux上构建和运行(不使用docker 和 snap)

Edgex foundry 在ARM 32的Linux上构建和运行(不使用docker 和 snap)

2023-07-07 03:39| 来源: 网络整理| 查看: 265

特别是在树莓派上本地构建和运行EdgeX

警告:本构建和运行指南为经验丰富的开发人员或管理员提供了一些帮助,帮助他们在带有ARM 32硬件的Linux操作系统上原生构建和运行EdgeX(不使用Docker,也不使用snap运行)。该项目不支持在ARM 32上运行。EdgeX是独立于平台的。因此,我们相信大多数EdgeX可以在几乎任何环境(任何硬件架构和几乎任何操作系统)上运行。

本指南的存在并不意味着当前或将来的支持。使用本指南时应谨慎使用,并理解社区尽最大努力为高级开发人员提供在ARM 32硬件上运行的Linux发行版上开始他们自己的定制EdgeX开发和执行的方法。

本构建和运行指南向您展示了如何在ARM 32硬件的Linux上获取,编译/构建,执行和测试EdgeX(包括核心和支持服务,可配置应用程序服务,eKuiper规则引擎和虚拟设备服务)。具体来说,本指南是使用运行树莓派操作系统5.15版本的树莓派3完成的。在大多数情况下,本指南应该帮助您在几乎所有的Linux发行版和几乎所有的ARM 32硬件上构建和运行EdgeX,但是有些指令会根据底层发行版的细微差别而有所不同。

环境

在Linux上本地构建和运行EdgeX将需要您具备:

一个相对现代的Linux操作系统(本指南使用树莓派操作系统5.15版本编写)Sudo或root访问权限从主机访问Internet以获取工具和源代码(例如,从GitHub克隆代码)ARM 32硬件平台——比如树莓派平台足够的内存来构建和运行EdgeX微服务(EdgeX建议至少1GB)。 1GB的内存足以运行所有必需的软件以及构建/运行下面列出的EdgeX服务足够的磁盘空间来拉取所需的工具、库、代码等来构建和运行EdgeX (EdgeX建议至少10GB) 10GB包括下载和设置所有必需的软件/工具以及EdgeX所需的空间  所需的软件

假设主机平台上已经安装并可用以下软件。如果您需要安装或设置此软件,请遵循参考指南。请注意,下面记录的检查所需软件的命令是正确的,但是检查的实际结果可能因操作系统发行版和版本而异。

Go Lang,Kamakur版本或者1.17以上 相关帮助查看Download and install - The Go Programming Language如何检查机器上的存在和版本

GCC Build Essentials (for C++) 相关帮助查看Install build-essential on Raspberry Pi | Lindevs如何检查机器上的存在和版本您的安装过程可能因Linux版本/发行版而异

Consul,Kamakur版本或者1.10以上 相关帮助查看Consul by HashiCorp如何检查机器上的存在和版本

Redis,Kamakur版本或者6.2以上 相关帮助查看How to install Redis in Raspberry Pi ? – All About Tech (amalgjose.com)如何检查机器上的存在和版本您的安装过程可能因Linux版本/发行版而异

Git Git已经安装在树莓派操作系统中如果您的操作系统没有提供,请参阅Install Git | Atlassian Git Tutorial如何检查机器上的存在和版本

 准备好环境

在本指南中,您将在“非安全”模式下构建和运行EdgeX。也就是说,您将在没有安全服务和安全配置的情况下构建和运行EdgeX平台。设置环境变量EDGEX_SECURITY_SECRET_STORE,以指示是否期望EdgeX服务初始化并使用安全秘密存储。默认情况下,该变量被设置为true。在构建和运行EdgeX之前,将此环境变量设置为false。

export EDGEX_SECURITY_SECRET_STORE=false

这可以在构建和运行EdgeX的终端中完成,也可以在用户配置文件中设置它,使环境跨终端会话持续存在。请参见How to Set Environment Variables in Linux - Serverlab。

下载EdgeX源代码

为了构建和运行EdgeX微服务,您首先需要获得该平台的源代码。使用git,用以下命令克隆EdgeX存储库:

提示:您可能希望创建一个新文件夹,然后从该文件夹发出这些git命令,以便所有EdgeX代码整齐地存储在单个文件夹中。

git clone https://github.com/edgexfoundry/edgex-go.git git clone https://github.com/edgexfoundry/device-virtual-go.git git clone https://github.com/edgexfoundry/app-service-configurable.git git clone https://github.com/lf-edge/ekuiper.git git clone https://github.com/edgexfoundry/edgex-ui-go.git

注意,将创建一个以存储库命名的新文件夹,其中包含上面每个git克隆的源代码。

警告:这些git克隆操作来自EdgeX存储库的主分支。这是EdgeX开发中的当前工作分支。请参阅git克隆文档,了解如何克隆特定的命名发布分支或版本标记。

构建EdgeX服务

有了源代码,您现在可以构建EdgeX服务、GUI以及eKuiper规则引擎。

构建核心和支持服务

大多数服务都在edge -go文件夹中。此文件夹包含核心和支持服务的代码。此存储库中的单个命令将构建多个服务。

进入edgex-go文件夹并发出make build命令,如下所示。

警告:根据系统拥有的内存量,在edgex-go中构建服务可能需要几分钟(在Raspberry Pi 3的情况下,构建edgex-go服务的时间可能长达30-45分钟,而构建设备服务大约需要10-15分钟)。

请注意:在edgex-go文件夹中构建服务实际上会构建本指南中没有用到的一些服务(比如安全服务),但是发出单个命令是构建所需服务的最简单方法,而不必一个一个地构建服务。

构建虚拟设备服务

虚拟设备服务模拟设备/传感器向EdgeX发送数据,就好像它是一个“东西”一样。本指南使用虚拟设备服务来举例说明如何构建和运行其他设备服务。

进入device-virtual-go文件夹并发出make build命令,如下所示。

构建可配置应用程序服务

可配置的应用程序服务有助于为企业或云系统准备设备/传感器数据。它还准备数据供规则引擎eKuiper使用

进入app-service-configurable文件夹,并发出make build命令,如下所示。

构建eKuiper

姊妹Linux基金会,LF Edge项目eKuiper是EdgeX的参考实现规则引擎。

进入ekuiper文件夹并发出make build_with_edgex命令,如下所示。

请注意:eKuiper还提供了可以下载和使用的二进制文件,而不需要构建。

构建GUI

EdgeX为探索EdgeX平台的单个实例提供了一个图形用户界面。GUI使得使用EdgeX和查看来自传感器的样本数据变得更加容易。它提供了一种方法来检查EdgeX是否正常工作,监控EdgeX,甚至进行一些配置更改。

进入edgex-ui-go文件夹并发出make build命令,如下所示。

运行EdgeX

如果一切构建正确且没有问题,您现在可以一次启动一个EdgeX服务。首先确保Redis Server正在运行。如果Redis未运行,请在启动其他服务之前启动它。如果它正在运行,您可以按下面列出的顺序启动每个EdgeX服务。

启动Consul

使用以下命令启动Consul Agent。

nohup consul agent -ui -bootstrap -server -client 0.0.0.0 -data-dir=tmp/consul &

nohup用于执行命令并忽略所有SIGHUP(挂起)信号。&表示在后台执行进程。nohup和&都将用于运行每个服务,以便可以使用相同的终端,并将输出定向到本地nohup.out日志文件。

如果Consul正常运行,您应该能够通过浏览器访问Consul UI,地址为http://[host]:8500

启动Core Metadata

每个核心和支持的EdgeX服务都位于EdgeX -go/cmd下的子文件夹下的服务名称。在第一种情况下,core-metadata位于edgex-go/cmd/core-metadata中。将目录更改为core-metadata服务子文件夹,然后使用-cp和-registry命令行选项运行子文件夹中找到的可执行文件,如下所示。

cd edgex-go/cmd/core-metadata/ nohup ./core-metadata -cp=consul.http://localhost:8500 -registry &

-cp=consul.http://localhost:8500命令行参数告诉core-metadata使用Consul,以及在哪里可以找到正在运行的Consul。registry命令行参数告诉core-metadata使用(并注册)注册中心服务。这两个命令行参数将在启动所有EdgeX服务时使用。

启动其他核心和支持服务

以类似的方式,在edgex-go/cmd中输入其他每个核心和支持服务文件夹,并启动服务。

cd ../core-data nohup ./core-data -cp=consul.http://localhost:8500 -registry & cd ../core-command nohup ./core-command -cp=consul.http://localhost:8500 -registry & cd ../support-notifications/ nohup ./support-notifications -cp=consul.http://localhost:8500 -registry & cd ../support-scheduler/ nohup ./support-scheduler -cp=consul.http://localhost:8500 -registry &

启动可配置应用程序服务

可配置的应用服务位于app-service-configurable文件夹的根目录下。

可配置应用程序服务以与其他EdgeX服务类似的方式启动。可配置的应用程序服务将用于将数据路由到规则引擎。因此,在它的启动命令中添加了一个额外的命令行参数(p),以告诉应用服务使用规则引擎配置和概要文件。

nohup ./app-service-configurable -cp=consul.http://localhost:8500 -registry -p=rules-engine & 启动虚拟设备服务

虚拟设备服务也以与其他EdgeX服务类似的方式启动。虚拟设备服务制造数据,就像它来自传感器一样,并将该数据发送到EdgeX的其余部分。默认情况下,虚拟设备服务将生成随机数(整数、无符号整数、浮点数)、布尔值甚至二进制数据作为模拟传感器数据。虚拟设备服务位于device-virtual-go/cmd文件夹中。

将目录更改为虚拟设备服务的cmd文件夹,然后使用以下命令启动该服务。

nohup ./device-virtual -cp=consul.http://localhost:8500 -registry & 启动GUI

EdgeX图形用户界面(GUI)提供了一个易于使用的可视化工具来监控通过EdgeX服务的数据。它还提供了一些更改EdgeX实例的配置或元数据的功能。EdgeX GUI位于EdgeX -ui-go/cmd/ EdgeX -ui-server文件夹中。

 将目录更改为GUI的cmd/edgex-ui-server文件夹,然后使用如下所示的命令启动GUI。

nohup ./edgex-ui-server &

如果GUI正常运行,您应该能够通过浏览器(http://(host地址):4000访问GUI。点击URL后,GUI可能需要几秒钟的时间来初始化。

注意:由于没有运行所有可用的EdgeX服务,GUI的某些元素将无法工作。值得注意的是,System Management服务及其执行程序没有运行,因此GUI的System视图将显示错误。默认情况下,System Management服务及其执行器通过Docker Stats检查其他服务的内存、CPU等来运行。在这种情况下,由于您没有运行Docker容器,因此System Management服务将不起作用。

eKuiper是参考实现规则引擎,默认情况下通常与EdgeX一起运行。它是一个轻量级的、易于使用的规则引擎。可以使用SQL建立规则。它是LF Edge伞式项目下的姊妹项目。

eKuiper的可执行文件(称为kuiperd)位于eKuiper /_build/kuiper-*version*-linux-arm/bin文件夹中。请注意,该位置位于构建eKuiper时创建的_build文件夹子文件夹中。子文件夹以eKuiper版本、操作系统、体系结构命名。

将目录改为“ekuiper/_build/kuiper-*version*-linux-arm/bin”文件夹。

设置ekuiper环境变量

作为第三方组件,eKuiper可以设置为与来自不同系统或引擎的许多数据流一起工作。必须向它提供有关在何处接收数据以及如何处理/处理传入数据的知识。因此,在启动eKuiper之前,执行以下环境变量的导出,以便告诉eKuiper在哪里接收来自EdgeX可配置应用程序服务的数据(通过EdgeX消息总线)。

export CONNECTION__EDGEX__REDISMSGBUS__PORT=6379 export CONNECTION__EDGEX__REDISMSGBUS__PROTOCOL=redis export CONNECTION__EDGEX__REDISMSGBUS__SERVER=localhost export CONNECTION__EDGEX__REDISMSGBUS__TYPE=redis export EDGEX__DEFAULT__PORT=6379 export EDGEX__DEFAULT__PROTOCOL=redis export EDGEX__DEFAULT__SERVER=localhost export EDGEX__DEFAULT__TOPIC=rules-events export EDGEX__DEFAULT__TYPE=redis export KUIPER__BASIC__CONSOLELOG="true" export KUIPER__BASIC__RESTPORT=59720

必须在计划执行eKuiper服务器的同一终端中设置这些环境变量。

运行eKuiper

在ekuiper/_build/kuiper-*version*-linux-arm文件夹中,设置好环境变量,使用下面的命令启动ekuiper服务器。

nohup ./bin/kuiperd &

警告:在bin文件夹中有一个kuiper和一个kuiperd可执行文件。确保你正在运行kuiperd。

如果eKuiper运行正常,EdgeX GUI中的RuleEngine选项卡应该提供定义eKuiper流和规则的能力,如下所示。

如果eKuiper没有正确运行,或者环境变量设置不正确,那么您将看到如下所示的错误屏幕。

测试和探索EdgeX

随着EdgeX的启动和运行(包括Consul, Redis和eKuiper),您可以尝试这些快速测试来查看EdgeX是否正常运行。

查看流经EdgeX的传感器数据

在本教程中,您已经使用Consul和EdgeX GUI来检查EdgeX的一些项目。您可以使用EdgeX GUI进一步检查传感器数据是否流经系统。

在浏览器中访问http://[host]:4000。记住,在点击URL后,GUI可能需要几秒钟的时间来初始化。GUI显示之后,找到并单击左侧导航栏上的DataCenter链接(下面高亮显示)。

 DataCenter显示允许您查看EdgeX事件/读数,因为它们被核心数据服务持久化到Redis。只需按下>Start按钮,即可看到由虚拟设备服务生成并发送到EdgeX的模拟传感器数据“stream”。模拟数据可能需要一两秒钟才能开始显示在GUI的EventDataStream区域中。

按暂停按钮停止数据的显示。注意,您可以在这个DataCenter显示中看到EdgeX Events(和相关的reading),或者只看到带有两个选项卡的reading。

检查EdgeX服务API

每个EdgeX微服务都有一个与之关联的REST API。您可以使用curl或浏览器来使用ping API测试服务是否启动。下面是用于“ping” core data 和 core metadata 的curl命令。

curl http://localhost:59880/api/v2/ping curl http://localhost:59881/api/v2/ping

每个服务都应该使用JSON数据进行响应,以表明它能够响应请求。下面是一个来自核心元数据“Ping”请求的响应示例。

{"apiVersion":"v2","timestamp":"Thu May 12 23:25:04 UTC 2022","serviceName":"core-metadata"}

请参考Default Service Ports - EdgeX Foundry Documentation,查看其他服务的ping API。

作为一个附加的测试,使用curl使用下面的命令获取由核心数据持久化的事件数(您也可以使用带有URL的浏览器获得相同的结果)。

curl http://localhost:59880/api/v2/event/count

回应将指示存储事件的“计数”(在本例中为6270)。

{"apiVersion":"v2","statusCode":200,"Count":6270}

信息:每个服务的完整api集可以在Search | SwaggerHub中找到。您也可以使用文档来测试其他api。

建立一个eKuiper流和规则

虽然eKuiper正在运行,但它目前处于闲置状态,因为它没有规则来监视数据和执行命令。设置一个简单的eKuiper规则来记录它看到的任何传感器数据。使用GUI工具建立eKuiper流和规则。在eKuiper文档中了解流和规则。

建立流

在GUI中,单击左侧导航栏中的Rules Engine链接。然后,单击Stream选项卡上的Add按钮。通过点击Submit按钮,允许创建默认的EdgeX流。

建立规则

接下来,单击Rules Engine页面上的Rules选项卡。然后单击Rules选项卡上的Add按钮,以创建一个新的eKuiper规则。在出现的表单中,在name字段中输入规则的任何名称(下面将使用TestRule)。在RuleSQL字段中输入SELECT * FROM EdgeXStream,并添加一个日志操作——如下表所示。建立规则后,点击Submit按钮。

检查规则引擎是否启动

定义了流和规则后,您已经要求eKuiper在每次看到新的EdgeX事件/读取通过它时触发一个日志条目。将来,您可以让eKuiper查找特定传感器产生的特定事件/读数(例如,高于指定温度的恒温器读数),以便向某些设备发出命令。但是现在,您可以检查eKuiper日志,以查看规则引擎正在工作,并在每个事件/读取时向日志发布消息。

在ekuiper/_build/kuiper-*version*-linux-arm/log文件夹中,你会发现一个stream.log文件。

 如果使用Linux tail,可以看到eKuiper规则引擎正在为流经EdgeX的每个虚拟设备服务记录触发一个日志条目。发出以下命令查看日志条目的实时发生情况:

tail -f stream.log

看到eKuiper规则引擎为每个EdgeX事件/读取触发一个日志条目到一个文件中,您可以确认并看到整个EdgeX系统是否正常工作。

首先,虚拟设备服务创建一个EdgeX事件/读取,以模拟通过消息总线发送给core data和configurable application服务的真实传感器读取。 GUI允许您查看由core data服务存储在数据库中的EdgeX事件/读数。configurable application服务必须从消息总线上获取EdgeX事件/读取,并将其发送到eKuiper规则引擎。然后,规则引擎拾取EdgeX事件/读取并在日志中触发一个条目。 调试和故障排除

在每个服务上使用nohup命令,日志文件内容将被重定向到启动每个服务的目录中的一个文件(nohup.out)。如果您发现某个服务似乎没有运行,或者它正在运行但不能正常工作,请检查nohup。输出文件以查找任何错误或问题。在下面的示例中,核心数据为nohup。查看输出日志文件。

翻译自官网 Build and Run on Linux on ARM 32 - EdgeX Foundry Documentation



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3