Edgex foundry 在ARM 32的Linux上构建和运行(不使用docker 和 snap) |
您所在的位置:网站首页 › 怎样获取app源代码 › Edgex foundry 在ARM 32的Linux上构建和运行(不使用docker 和 snap) |
特别是在树莓派上本地构建和运行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如何检查机器上的存在和版本在本指南中,您将在“非安全”模式下构建和运行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命令,如下所示。 姊妹Linux基金会,LF Edge项目eKuiper是EdgeX的参考实现规则引擎。 进入ekuiper文件夹并发出make build_with_edgex命令,如下所示。 请注意:eKuiper还提供了可以下载和使用的二进制文件,而不需要构建。 构建GUIEdgeX为探索EdgeX平台的单个实例提供了一个图形用户界面。GUI使得使用EdgeX和查看来自传感器的样本数据变得更加容易。它提供了一种方法来检查EdgeX是否正常工作,监控EdgeX,甚至进行一些配置更改。 进入edgex-ui-go文件夹并发出make build命令,如下所示。 如果一切构建正确且没有问题,您现在可以一次启动一个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 每个核心和支持的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 & 启动GUIEdgeX图形用户界面(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的启动和运行(包括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 |