从开发者到设备的OTA更新——Eystein Stenberg, Mender.io

在本次会议中,我们将介绍Mender Hub、Artifactory和Mender空中更新管理器如何为具有OTA功能的连接设备产品提供交付钥匙CI/CD支持,以服务于物联网的整个生命周期。hth华体会最新官方网站
我们将介绍Yocto Project,这是一个构建系统,它为指定的目标设备创建具有软件和硬件支持的定制嵌入式Linux。这是当今在物联网设备上运行Linux的最流行的方法。
Mender Hub包含一个社区存储库,用于支持各种不同设备上的无线(OTA)更新,其中大多数与Yocto项目集成。

与Mender Hub的CI/CD集成可以创建磁盘映像和自动构建、测试并上传到JFrog Artifactory的Mender Artifacts。从JFrog Artifactory中,选择的设备映像被自动上传到一个Mender服务器,该服务器将它们部署到设备上。

这创建了一个完整的端到端循环,从开发源(包括应用程序软件和完整的Linux定制)到设备。这不仅加快了开发周期,因为完整的构建可以频繁地进行测试,而且还确保设备在发布到现场后可以通过无线远程更新。

视频记录

好了,各位,谢谢你们过来。是时候开始了。你们中有多少人今天和基特一起参加了主题演讲?最后一个?大多数人。Mender是他在自动驾驶汽车演示中展示的工具之一。你也可以在楼上看到。所以这是一个部署解决方案。我的名字是Iceland Stanburg,我们将讨论CICD管道及其在物联网世界中的工作原理。

你可能听说过这个故事,但是有很多这样的故事,所以有时会被遗漏。但这是关于菲亚特克莱斯勒的故事。我们正在更新车上的信息娱乐系统。结果是很多这样的车,它们进入了信息娱乐系统的不断重启循环你会看到你的摄像头,你会调整热量或改变音乐。所以它们基本上就无法使用了。所以你可以看到这条推文,你关心我们的工程团队正在调查原因,并在这个紧张的时期努力解决问题。问题是你们中谁愿意成为工程团队的一员?所以这就是本次会议的主题,比如我们如何以更好的方式做到这一点,这在物联网和汽车领域意味着什么?

快速的介绍。我的名字和爱因斯坦很像,我觉得这是个意外,但这样更容易记住。我在系统管理方面工作了大约10年,既在云数据中心领域,也在物联网领域,现在使用Mender,这是一个空中更新器。因此,它允许您以稳健和安全的方式将软件从中央位置部署到物联网设备,并且它也是开源的。重要的一点是,我认为既然你在这里,你可能,我是在向唱诗班说教,但我认为你应该使用专业的工具来处理CICD管道,因为正如你所知,当不好的事情发生时,事情不会向前发展,如果你部署不好的软件或者以不好的方式部署软件,就会导致客户问题,就像我们之前看到的那样。这样做还可以节省开发时间。

如果你从简化的开发过程来看物联网,这就是它的样子。我们正在做原型,这通常是在一些树莓派板上。也许它是一个[听不清00:02:58],一些开发板,你可以很容易地得到你的代码,它有你需要的所有硬件功能。然后进入产品设计。现在你要考虑的是,我是否需要在我要卖的板子上或者我要卖给顾客的产品上安装wifi ?我需要其他网络连接吗?我需要html输出吗?你为什么要这么做?你为什么不用同一块黑板呢?嗯,原因是你会节省成本。 So if you can save 50 cents on removing the wifi module, hardware module, if you don’t need it and you’re making a hundred thousand boards, that’s $50,000 if you’re making more, that’s more obviously.

所以这就是为什么你要进入生产设计阶段你要努力降低成本。这也是你开始关注操作系统的地方,我有什么样的软件,你有多少存储空间?所以你经历了它们,我想大多数技术发展的过程中,你通常会在发布最后期限的恐慌中结束。这至少是我们看到的。要把产品推出市场是有压力的,这里也涉及到制造业,因为在很多方面,你可能会认为物联网是下一代技术,或者在加德纳等公司有很多关于物联网的讨论,但在某种程度上,这也是一种倒退。原因是,现在你又要处理实体产品了,所以你必须与装配线合作,在中国建立关系,以廉价的方式制造产品。hth华体会最新官方网站这是要记住的。你必须调整好这些,做好计划显然是为了大规模生产,这意味着当你有一个最后期限的时候,或者当你必须完成开发的时候,通常有一个非常严格的最后期限。

当然,正如工程师们注意到的那样,也会有bug,所以你知道当你进入这个周期的末尾时,通常会发生什么,在我们开始创建Mender之前,我们已经与100多名嵌入式开发人员进行了交谈,但通常会发生的是你创建了某种后门,对吗?我可以用一种简单的方式更新设备。也许是SSH是开放的等等,所以这是一种快速的方法,可以让您部署没有计划好的新版本。当然,这是您在设计阶段应该考虑CICD的地方。当然,这也是JFrog正在做的事情的一部分。

这样做的目的是为了获得更快的迭代周期。你有一个更强大的管道。所以可能会有一些前期投资,但如果你设计得早,你也可以在测试中使用它。你可以建立一个测试环境,你可以在那里部署新软件,发布新版本,也许是夜间构建,并确保这在整个产品开发生命周期中都能正常工作。当然,一旦进入大众市场,你也可以使用同样的系统。这样就可以避免召回和压力就像你们在第一张图中看到的那样,工程团队将会经历。

是的。你们中有多少人会说自己主要从事云基础设施或云开发应用?是的。你们中有多少人参与过物联网或嵌入式开发?好的,一,二。是的,你们大多数人都在从事云计算方面的工作。对你们来说,我想这是一张很熟悉的图片。在CICD管道中,你会让一些开发人员提交一些代码这些代码最终会出现在CI服务器上。你用它构建一个Docker镜像,然后与Kubernetes进行一些集成。在这里,您将从Docker注册表中提取构建映像,并在Kubernetes中部署一个新的pod。 So that’s kind of the state of the art in the cloud or data center world today and web services. So what you might ask is, can we just repeat this? Now we’re working with IOT devices. Can we do this the same way?

在我们回答这个问题之前,让我们看看,我想这是构建模块最简单的形式。显然你需要一些源代码。否则这一切都没有意义。然后你需要一些持续集成服务,比如Jenkins或者这些工具之一。它所做的显然是把不同的资料汇集在一起。它构建它们,你可以测试它们,然后你得到某种构建工件。如果你只是在做持续集成,那就可以下载,但是如果你也在做持续交付,你也需要一个部署系统来如何把这个软件提供给你的客户。不管怎样,你需要一些方法来做这件事,即使它不是全自动的。否则,开发软件就没有什么意义了。当然,如果你在做大规模的工作,如果你有大规模的设备,你可以把它分成更高级的部分,你可以首先部署到某种分段环境中,然后你可以通过喜欢最新功能的满意客户部署它。 And then you go to the entire environment. So if you’re having a million devices out there, you probably don’t want to deploy it to them all at the same time. So this is just one way of mitigating the risk of deployments.

因此,如果我们可以更深入一步了解物联网中的源代码,那么如果您正在使用云web服务源代码,它通常是应用程序,对吧?你有一些在Docker中运行的服务或者你有,它可能是一组浏览器会显示的web浏览器文件或者是一些提供API的服务。所以你考虑应用程序,但如果你看一下物联网源代码实际上比应用程序要多得多,因为现在你要交付整个设备,对吧?它是一块硬件你必须在那块硬件上有完整的软件栈才能运行你的应用程序。老实说,这就是物联网变得有点复杂的地方,因为有太多的选择和太多的供应商,这是一个非常复杂的生态系统。如果你看一下底层,你肯定需要一些操作系统。如果你正在使用Linux,你可能会想看看Yocto项目,Kit在这个主题演讲中也提到过,它展示了[听不清00:11:02]Linux的基础。除此之外,你还需要一些所谓的董事会支持包。这基本上是一组驱动程序或一种方式,让您的操作系统支持所有外围设备,并使您的设备基本启动。

显示驱动,网络驱动。所以这些支持包是由设备制造商创建的。所以无论你从谁那里买硬件。最重要的是,你需要一些系统配置。好吧。你的设备如何启动,启动参数是什么?例如,你如何启动你的应用,然后你有一些运行时库以及你的应用可能需要的,这取决于它是什么语言等等。这些都是典型的源代码。所以你可以看到它变得有点复杂。简单介绍一下Yocto,你们中有多少人听说过Yocto或者知道一点? Okay. About half or one third of you. So it’s a way to build a Linux distribution. So people frequently confuse it with a Linux distribution like Ubuntu or [inaudible 00:12:25], but it’s rather a Linux distribution builder or as they put it, it’s not an embedded Linux distribution.

它会为您创建一个自定义的。从使用Linux的设备数量来看,这可能是在设备中运行Linux的最流行的方式。如果您查看使用Yocto与其他操作系统或其他基于linux的操作系统相比构建了多少,那么Yocto可能是最流行的。显然,很难得到确切的统计数据,但是,它被广泛采用。但是现在您正在从头开始构建Linux,对吗?所以你必须在那里得到系统,Linux内核,像所有这些包,带引导加载程序,从源代码,你要构建它。很明显,这需要几个小时。你需要从互联网上获取它,然后你需要编译有一些,对,对于那个板或板架构。这就是你的目标。

那么它看起来是怎样的呢?所以如果我们把这些放在一起,你可以在这里看到一些标志。如果你只看一个持续集成的部分,这就是它的样子。所以你有应用程序源配置BSP软件系统软件,就像我们提到的。你可以看到这些来自不同的公司,所有这些组件。所以唯一来自你公司的东西基本上就是应用程序的源代码和系统的配置。这可能是不同类型的开发者。所以在做系统配置的时候,你可能需要更多的低级技能,对引导加载程序,驱动程序,分区之类的东西有一些了解。应用程序开发人员可能不需要知道所有这些。BSP可以来自,是的,你的主板供应商,所以一些大的。 NXP, Samsung and Video Qualcomm, you would put out in all these sources into your CIS server, which can be based on Yocto and Jenkins for example to execute it all. And then you get the binary outfits, which is also not just one type. It can be like a full image and they can be a package or set of packages, containers maybe, depending on how you run your application.

希望这能让你明白,为物联网设备构建软件是非常复杂的。你有来自不同公司的不同输入,你也有很多不同类型的输出,所以它看起来和云的情况有点不同。显然,最后一部分是部署,使用Kubernetes,从Docker注册表中获取新的pod池等等。但你不能这么做。所以我知道有一些项目正在考虑在物联网设备上运行Kubernetes轻量级,但我不认为这将是一种方式,因为物联网环境与云环境有很大的不同。我会告诉你们一点,但它是断断续续的,不可靠的。这不像简单的实例,有不同类型的软件要部署。所以我想说,重复使用相同的工具和流程是不可能的,因为我们看到的所有构建块都是不同的。来源是不同的。集成,持续集成系统是不同的。 And also the way you’re doing deployments needs to be different. And why is that?

所以,如果你看一下物联网环境和对运行软件和部署软件很重要的属性,你可能会对此有所了解,但它们非常遥远,所以它们可能,就像主题演讲提到的那样,可能是汽车。那么汽车在哪里呢?它们横跨加州。它们遍布美国,遍布全世界。汽车业正在努力应对的显然是昂贵的召回。如果你必须把这些车都运回来,这将花费很多。但这只是汽车行业。可能是在农业中,可能是遍布地球的传感器来测量土壤中的水分这样你就可以优化肥料了,对吧?所以如果出了问题,你不得不去找设备,如果你有很多这样的设备,你可能会破产。与此同时,人们期望它们能持续很长时间。 So a car, what’s the expected lifetime of a car? Maybe 15 years or something like that, which is different than like the, yeah, the cloud infrastructure server and then so on. You replace those every two, three years maybe.

当然,环境的不可靠性也增加了风险。首先是电力的情况。这是你第一次做软件更新时会碰到的第一个。因为其中一些设备严重依赖于产品,但其中一些是用电池运行的,当你进行软件更新时,你会消耗更多的电池。如果在更新过程中断电了怎么办?你再次启动设备,它会启动还是会显示终端用户应用程序?它也可以不插电,一辆车,你可以随时关闭或打开它。然后我们还有网络情况,我想说大约三分之二是无线的。所以你知道无线连接,你不能一直依赖它,所以你可以在任何时候失去连接。带宽也较低,不同于数据中心。 I don’t know if it’s like 10 gigabit, that’s the standard right now and it’s insecure because of the wireless nature. You must or you should assume that somebody are able to observe the packages that are going on there and if you’re doing a software update, what are they going to see? Can they influence it or can they see what you’re updating?

至少在IT环境中,这些是您必须更多地考虑的事情。只是一个关于网络的简短提示。所以我们经常会想,好吧,技术是会进化的,对吧?因此,网络将变得更快,我们将获得更多的存储空间,最终这些物联网设备将成为小型数据中心,对吗?所以我们就等一会儿。摩尔定律将会发挥作用,我们可以再次使用相同的工具。但我想说的是,这对电视台来说绝对不是真的。原因是有非常不同的用例。所以如果你想一下,它不是真正的物联网设备,而是一款昂贵的手机。它在工作中固定住了。 So 5, I don’t know what’s the throughput on that, but maybe some of you do, but it’s pretty fast versus the typical IOT device.

也许依靠旧的3G标准或不同类型的LW泛网络是低范围无线网络。所以我的观点是,手机的用例需要快速的网络,因为你希望你的用户,你的客户能够使用Instagram,比如,发布高分辨率的图片或者看YouTube或者浏览网页等等。所以这是有道理的,我们在推动更快更快的网络和手机外壳。但如果你看一下物联网设备,你会在那里看YouTube或发布猫的照片或任何你想发布的东西吗?不,你不是。因此,物联网设备的用例可能是从农业中获取一个简单的数据点,并可能每天发送一次。也就是每天50个字节。但重要的是你有高度的连通性。你想要那个数据点到达,但你不关心它是否真的很快,只要它发生了。因此,在物联网中,连接比数据速度更重要。 So that’s why I think the network will continue to be slow in IOT case.

因此,我们将更深入地研究OTA部分,因为是的,这就是我们所涉及的。所以我非常了解这一点,我认为这也是一个非常有趣的挑战。希望你也会这么想。但默认情况是,人们开始想,好吧,当我更新设备时,这能有多难?对吧?所以只要从一个地方复制一些二进制文件到我的设备,使用curl创建一些脚本,就可以了。但是我们发现,我想这个样本来自大约30到40个嵌入式工程师。那些真正做到的人。因此,目前大约有一半的物联网设备是几年前建成的。其中一半没有更新的方式。 The other half they did and the way it was homegrown. So that’s also what motivated us to create Mender, because everybody’s reinventing the wheel here. And what people found is that after doing it, they would do it once and it would take 6 to 12 months probably to get a decent solution for deploying and nobody would want to do it again. So it’s costly and time consuming and of course you get into some more interesting issues down the road with security and the robustness and these kinds of things and it’s not really what you’re developing in the first place.

因此,就无线更新的要求而言,这显然不仅仅与Mender有关,但您将如何以良好的方式为物联网进行无线更新?我认为最重要的,可能也是经常被忽视的,尽管Kit确实谈到了这一部分,那就是健壮性。所以如果你断电了,你希望设备能重新启动。如果您不小心将不兼容的软件部署到设备上,您肯定不希望发生这种情况。您希望在出现任何错误时构建回滚,并且希望能够运行一些完整性检查,不仅检查设备是否正在引导或内核是否已加载,还检查最终用户应用程序是否正在运行。否则,您需要再次回滚。那里有很多故事,所以我可以花很多时间在用例或案例研究上。

这里有一个例子,一个智能锁设备。这是Airbnb推荐的。他们有一个叫做锁状态7i的软件,这是为新一代的锁准备的它被部署到旧的硬件或旧的版本上。结果是锁坏了,没有人能进他们的房子,或者Airbnb的客人被锁在外面,他们不得不把锁送回制造商那里换新的,这需要三到四周的时间,如果你进不了自己的房子,这有点烦人。

当然还有安全问题。我之前提到过,无线。那么你是如何使用TLS进行通信的呢?你会遇到密钥管理问题,如何识别设备,如何交换密钥,旋转密钥,等等。真实性码签名是另一个大问题。所以你知道你将要部署的代码实际上是来自你的开发人员或来自可信任的来源还是有人在链的任何地方修改了它?基本上在CICD链中。菲亚特克莱斯勒就是最后一个例子。他们没有正确地进行代码签名。你们中有多少人三年前听说过菲亚特克莱斯勒的故事? So just three of you. What happened was that some researchers took a look at the Fiat Chrysler car and their goal was to try to find vulnerabilities and figure out how the stack worked.

显然,这些都没有记录在案。我可能用的是很老的技术我想他们花了一些,有两个研究人员我想他们花了一年的时间在这个问题上。在那之后,他们成功地远程控制了一辆车,这样他们就可以开车,驶离道路,停车。所以这是一个相当可怕的故事。有一些有趣的视频是关于他们如何对待一名记者开车的,如果你想查一下的话,但他们没有核实更新的真实性。因此,研究人员能够部署新的软件,而不是来自菲亚特克莱斯勒,这就是他们如何接管汽车或它的一部分。这是一长串的事件。

然后还有一些其他要求你可能想要OTA更新管理器需要支持你正在使用的操作系统,你正在使用的硬件并且能够与你现有的开发工具集成,你正在用哪种语言编写应用程序,这些都不重要。然后很容易开始,因为正如我在第一张幻灯片中提到的,通常当你开始考虑,或者大多数人开始考虑他们的更新和IT的CICD时,已经太晚了。所以你可能不想在这上面花太多时间。当然还有带宽。所以对于汽车来说,我认为3G可能是最常见的连接方式,你也有wifi,但大约三分之一的物联网设备是在某种慢速无线连接上。所以你也需要一些支持。

如何将更新传输到低带宽网络?所以有一些技术可以用于此。当然,在更新过程中也会有停机时间。当更新发生时设备将无法使用,就像Kit提到的汽车更新的故事一样。你会坐上一个小时,等待它的到来。或者可以在使用设备时进行安装?然后,也许只是重新启动,它需要在可能发生停机的地方实际应用更新。

当然,你还需要某种方式来管理更新。不幸的是,至少最常见的方法是用u盘。但是如果你试图做持续部署,让很多人带着u盘出去,这就很烦人了。所以你需要某种中央管理服务器或者某种方式来大规模部署它。有了它,还有一组其他的用例。比如,你希望能够按客户或加州的人对设备进行分组,这样你就可以减少任何故障的风险。你不需要同时把它部署给所有人。这是一种更高级的形式,叫做活动管理。当然,你有报告问题,我刚刚做了一个部署,它是否工作?

它对多少设备有效,对那些不起作用的设备又发生了什么?因此,还需要日志管理和诊断。希望你们能看到,这不是一个简单的问题。这不仅仅是把一个字节从一个地方复制到另一个地方,然后期待最好的结果。这是更详细的,但这是我们在Mender中最终得到的工作流基于所有这些要求,更新程序应该在设备上做什么?在我们深入研究这个之前,再一次,当你开始这个过程时,你会想到什么。好,我如何部署更新?你考虑下载,这是一个顶部和安装。这很简单,对吧?但过了一段时间你就会发现你还需要很多其他的东西。

首先你需要检测更新这个。你是怎么做到的?也许用户想要做一个更新,或者它是基于服务器有一个新版本的自动更新,如果你需要一个兼容性检查,这更有可能。硬件和软件兼容吗?我是想在X86设备上运行Arm软件,诸如此类的基本问题。当然,您需要通过安全通道下载。做一个完整性检查。是否由于连接问题发生了一些事情?有人改了吗?所以我需要检查签名的真实性。 Maybe you encrypted it because there are some confidential information you need the decrypt it and extract it depending on the format of the package. Maybe you want to run some pre-install actions because your application is now using a different format for your configuration file or you’re doing some migration. Finally you are getting to do the installation and then maybe there’s some posting selections.

完成对最终用户应用更新后,您可以重新启动应用程序或设备。然后你需要做一些完整性检查因为应用程序是否正常工作。在部署和更新之后,这是一个非常重要的问题。否则你会有很多愤怒的顾客。然后取决于它是否有效?这很好,但如果它不起作用怎么办?所以如果它不工作,你怎么恢复,这就是你要回滚的地方。好吧,我有两份软件副本其中一份是最新的好版本,Mender也是这样做的。所以我们确实有自动回滚,但无论如何,你需要一些方法来恢复。这是一个参考管道。 So as Kit mentioned as well, there is a demo at the automotive booth, so I filled in basically the technologies that bring used there to give you a quick overview over how it’s all fits together.

他们用的是树莓派。有一个叫做Mender hub的东西,这是一个社区驱动的项目,为许多板添加支持,通过空中更新支持许多板。树莓派有一个板支持包。他们也使用Mender作为系统软件的一部分他们特别使用Yocto自动分级Linux,我猜你可以称之为Yocto和Lava的风格,这是一个测试框架因为当你处理硬件时,测试也变得非常有趣。它不再只是启动Docker容器并运行测试脚本。你需要知道,给定所有这些代码,设备是否会启动,如何测试?你需要设备,你需要在设备中安装新软件,用新映像重新映像它,然后你需要启动它。有很多硬件,我们会学到如何在操作系统下面操作。这很复杂。这就是熔岩的作用。 They have ways to test or it’s a test for [inaudible 00:34:41] where you can actually test more software that’s closer to the hardware, like the kernel and things like that.

然后他们把完整的图像上传到Artifactory[听不清00:34:54]在x射线中,你可能在视频中也看到了JFrog Artifactory和Mender之间有一个集成。因此,正如您所知道的,在Artifactory中有一些工作流是为了将一个给定的发布设置为发布就绪,或者将一个给定的工件设置为发布就绪。你也可以在这里上传带有集成需求器的软件。最后,他们有RC车在底部那里你有一个Mender客户端将从Mender服务器拉。这是我的最后一张幻灯片,所以我真的希望你们今天学到了一些关于物联网的知识,你们会考虑也许不要试图重新发明轮子,而是尝试使用经过验证的组件。如果你想了解更多关于CICD管道的参考实现,我还建议你去看看JFrog楼上的汽车展台。我还被告知,我们不应该在这里提问,所以我想我们要上楼去。是的。谢谢光临。

免费试用JFrog !