{"id":414288,"date":"2024-06-29T23:40:17","date_gmt":"2024-06-29T23:40:17","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=414288"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=414288","title":{"rendered":"<span>OTA \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 Linux<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f95\/c20\/98d\/f95c2098d93001b8cfa0230d3d0bd970.png\" width=\"780\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f95\/c20\/98d\/f95c2098d93001b8cfa0230d3d0bd970.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>TL;DR:<\/h2>\n<p><abbr title=\"\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 (\u0430\u043d\u0433\u043b. over-the-air, OTA)\">OTA<\/abbr> A\/B \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 rootfs \u0434\u043b\u044f IoT \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 Linux \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/mender.io\/\" rel=\"noopener noreferrer nofollow\">Mender<\/a>.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0432\u0443\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e IoT-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 Linux \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0417\u0430\u0434\u0430\u0447\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u0412\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c.\u00a0\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e ssh \u2014 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u043e ssh \u0442\u043e\u0436\u0435, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0442\u0435\u0440\u044f\u0442\u044c \u0441\u0435\u0442\u044c. <\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e IoT \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 Mender:<\/p>\n<ul>\n<li>\n<p>end-to-end \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 + \u0441\u0435\u0440\u0432\u0435\u0440 + \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>A\/B \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 rootfs \u2014 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 rootfs A \u0438 B. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 A, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b B, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 B \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b A.<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 debian \u0438 yocto<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u0442\u044c open-source \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache v2<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e <a href=\"https:\/\/mender.io\/how-it-works\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, Mender \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/deutschetelekomitsolutions\/blog\/520406\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> <a class=\"mention\" href=\"\/users\/moooom\">@MooooM<\/a>, \u043d\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<h2>Workflow<\/h2>\n<p>\u042f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Raspberry Pi 3B c Raspberry Pi OS. \u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 8 \u0413\u0411 \u0438 \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Mender \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0434\u0435\u043c\u043e-\u0441\u0435\u0440\u0432\u0435\u0440 <a href=\"https:\/\/hosted.mender.io\" rel=\"noopener noreferrer nofollow\">hosted.mender.io<\/a> (\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u044b). <\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0441 Ubuntu 20.04. <\/p>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Mender \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/docs.mender.io\/3.0\/system-updates-debian-family\/convert-a-mender-debian-image#recommended-workflow\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0445\u043e\u0434<\/a> \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 debian:<\/p>\n<ol>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u041e\u0421<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u041f\u041a<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (provisioning)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (artifact)<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (deploy)<\/p>\n<\/li>\n<\/ol>\n<h3>0. \u0421\u0435\u0440\u0432\u0435\u0440<\/h3>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 <a href=\"https:\/\/hosted.mender.io\" rel=\"noopener noreferrer nofollow\">hosted.mender.io<\/a>.<\/p>\n<h3>1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u041e\u0421<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS Lite<\/a> \u043f\u043e <a href=\"https:\/\/www.raspberrypi.org\/documentation\/computers\/getting-started.html#installing-images-on-linux\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>.<\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c <code>\/boot\/config.txt<\/code>: <code>enable_uart=1<\/code><\/p>\n<h3>2. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e (golden) \u043e\u0431\u0440\u0430\u0437\u0430<\/h3>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c SD-\u043a\u0430\u0440\u0442\u0443 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e(Raspberry Pi 3B) \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043f\u043e uart \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 minicom.<\/p>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>raspi-config<\/code>. <\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u042f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0441\u0432\u043e\u044e Raspberry \u043f\u043e ethernet (\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c over-the-air, \u0437\u043d\u0430\u044e).<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>\/data<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u041f\u043e\u043b\u043e\u0436\u0438\u043c \u0442\u0443\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>important_file.txt<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 <code>hello_habr<\/code>.<\/p>\n<h3>3. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430<\/h3>\n<p>\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c SD-\u043a\u0430\u0440\u0442\u0443 \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440:<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432:<\/p>\n<pre><code class=\"bash\">lsblk -p \/dev\/sda           8:0    1   7,4G  0 disk \u251c\u2500\/dev\/sda1        8:1    1   256M  0 part \u2514\u2500\/dev\/sda2        8:2    1   7,1G  0 part <\/code><\/pre>\n<p>\u0420\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u044b:<\/p>\n<pre><code class=\"bash\">umount \/dev\/sdX1 umount \/dev\/sdX2<\/code><\/pre>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u0441 \u043a\u0430\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo dd if=\/dev\/sdX of=golden-image-1.img bs=4M status=progress<\/code><\/pre>\n<h3>4. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert<\/h3>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/mendersoftware\/mender-convert\" rel=\"noopener noreferrer nofollow\">mender-convert<\/a> \u0438 <a href=\"https:\/\/docs.mender.io\/system-updates-debian-family\/convert-a-mender-debian-image#docker\" rel=\"noopener noreferrer nofollow\">Docker<\/a>.<\/p>\n<pre><code class=\"bash\">git clone -b 2.5.0 https:\/\/github.com\/mendersoftware\/mender-convert.git cd mender-convert .\/docker-build<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0451\u043c\u043a\u043e\u0441\u0442\u044c SD-\u043a\u0430\u0440\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<pre><code class=\"bash\">sudo fdisk -l Disk \/dev\/sda: 7,38 GiB, 7910457344 bytes, 15450112 sectors<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0431\u0430\u0439\u0442\u044b \u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b: 7910457344 \/ 1024 \/ 1024 = 7544 MB<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 mender-convert <code>.\/configs\/raspberrypi3_custom_config<\/code> \u0441 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code>RASPBERRYPI_CONFIG=\"raspberrypi3\" RASPBERRYPI_KERNEL_IMAGE=\"kernel7.img\" MENDER_KERNEL_IMAGETYPE=\"zImage\" MENDER_DEVICE_TYPE=\"raspberrypi3\" MENDER_STORAGE_TOTAL_SIZE_MB=\"7500\" MENDER_DATA_PART_SIZE_MB=\"1000\" IMAGE_ROOTFS_SIZE=\"-1\" MENDER_ADDON_CONNECT_INSTALL=\"y\"  source configs\/raspberrypi_config<\/code><\/pre>\n<p><code>MENDER_STORAGE_TOTAL_SIZE_MB<\/code> \u2014 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 SD \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435<\/p>\n<p><code>MENDER_DATA_PART_SIZE_MB<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \/data<\/p>\n<p><code>MENDER_ADDON_CONNECT_INSTALL<\/code> \u2014 \u0444\u043b\u0430\u0433 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <a href=\"https:\/\/docs.mender.io\/add-ons\/overview\" rel=\"noopener noreferrer nofollow\">mender-connect<\/a> (\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b)<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>.\/rootfs_overlay\/etc\/mender<\/code>. \u042d\u0442\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043d\u0430\u0448 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 mender-convert.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 mender-client <code>.\/rootfs_overlay\/etc\/mender\/mender.conf<\/code>:<\/p>\n<pre><code class=\"json\">{ \u00a0\u00a0\"ServerURL\": \"https:\/\/hosted.mender.io\/\", \u00a0\u00a0\"TenantToken\": \"XXXX\", \u00a0\u00a0\"UpdatePollIntervalSeconds\": 300, \u00a0\u00a0\"InventoryPollIntervalSeconds\":\u00a0 300 }<\/code><\/pre>\n<p><code>TenantToken<\/code> &#8212; \u0442\u043e\u043a\u0435\u043d \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e <a href=\"https:\/\/hosted.mender.io\/ui\/#\/settings\/organization-and-billing\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/a> \u0432 hosted.mender.io (Settings->Organization and billing->Organization token).<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 mender-connect <code>.\/rootfs_overlay\/etc\/mender\/mender-connect.conf<\/code>:<\/p>\n<pre><code class=\"json\">{ \u00a0\u00a0\"ShellCommand\": \"\/bin\/bash\", \u00a0\u00a0\"User\": \"pi\" }<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u0433\u0440\u0443\u043f\u043f\u0443 \u043e\u0432\u0435\u0440\u043b\u0435\u044f:<\/p>\n<pre><code class=\"bash\">sudo chown -R 0 .\/rootfs_overlay\/ sudo chgrp -R 0 .\/rootfs_overlay\/<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>.\/input<\/code> \u0438 \u043a\u043b\u0430\u0434\u0451\u043c \u0432 \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0437 <code>golden-image-1.img<\/code> \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c mender-convert. \u00a0<\/p>\n<pre><code class=\"bash\">MENDER_ARTIFACT_NAME=release-1 .\/docker-mender-convert --disk-image input\/golden-image-1.img --config configs\/raspberrypi3_custom_config --overlay rootfs_overlay\/<\/code><\/pre>\n<p><code>MENDER_ARTIFACT_NAME<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 hosted.mender.io.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0433\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043e\u0431\u0440\u0430\u0437 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f U-Boot<\/p>\n<\/li>\n<li>\n<p>\u0432 Raspberry OS \u0434\u043e\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f mender-client \u0438 mender-connect<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f A \u0438 B \u0440\u0430\u0437\u0434\u0435\u043b\u044b rootfs \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 SD-\u043a\u0430\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 data<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>\/data<\/code> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <code>.\/logs\/convert.log.XXXX<\/code>.<\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<p><code>.\/deploy\/golden-image-1-raspberrypi3-mender.img<\/code> &#8212; \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0443<\/p>\n<p><code>.\/deploy\/golden-image-1-raspberrypi3-mender.mender<\/code> &#8212; \u0430\u0440\u0445\u0438\u0432 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 Mender(519\u041c\u0411) \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<h3>5. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (provisioning)<\/h3>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 <code>golden-image-1-raspberrypi3-mender.img<\/code> \u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0443:<\/p>\n<pre><code class=\"bash\">sudo dd if=.\/deploy\/golden-image-1-raspberrypi3-mender.img of=\/dev\/sdX bs=4M oflag=sync status=progress<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>\/dev\/sda           8:0    1   7,4G  0 disk \u251c\u2500\/dev\/sda1        8:1    1   256M  0 part \u251c\u2500\/dev\/sda2        8:2    1     3G  0 part \u251c\u2500\/dev\/sda3        8:3    1     3G  0 part \u2514\u2500\/dev\/sda4        8:4    1  1000M  0 part<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0432\u043e\u0434 uart \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 (\u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c U-Boot):\u00a0<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>U-Boot 2020.01-g83cf4883ec (Jul 09 2021 - 14:23:27 +0000)  DRAM:  948 MiB RPI 3 Model B (0xa02082) MMC:   mmc@7e202000: 0, sdhci@7e300000: 1 Loading Environment from MMC... OK In:    serial Out:   serial Err:   serial Net:   No ethernet found. Hit any key to stop autoboot:  0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... Found U-Boot script \/boot.scr 568 bytes read in 10 ms (54.7 KiB\/s) ## Executing script at 02400000 switch to partitions #0, OK mmc0 is current device 6320888 bytes read in 538 ms (11.2 MiB\/s) Kernel image @ 0x080000 [ 0x000000 - 0x6072f8 ] ## Flattened Device Tree blob at 2eff8c00    Booting using the fdt blob at 0x2eff8c00    Using Device Tree in place at 2eff8c00, end 2f002f2b  Starting kernel ...  [    0.000000] Booting Linux on physical CPU 0x0<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>6. \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/h3>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 hosted.mender.io \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441 pending \u043d\u0430 accepted.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/33a\/bce\/e73\/33abcee73fc95a9542ef35c1056aa6c9.png\" width=\"1194\" height=\"653\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33a\/bce\/e73\/33abcee73fc95a9542ef35c1056aa6c9.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b Troubleshoot \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 mender-connect). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d ssh-\u0441\u0435\u0440\u0432\u0435\u0440. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0447\u0435\u0440\u0435\u0437 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 File transfer.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03f\/97d\/aab\/03f97daab69e030663d73b00e06b67fe.png\" width=\"1504\" height=\"842\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03f\/97d\/aab\/03f97daab69e030663d73b00e06b67fe.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<h3>7. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (artifact)<\/h3>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443 (golden-image-1.img). \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u041e\u0421 \u0438 \u0432\u043d\u043e\u0441\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u044e MQTT-\u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0448\u043b\u0451\u0442 \u043d\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c).<\/p>\n<details class=\"spoiler\">\n<summary>MQTT-\u043a\u043b\u0438\u0435\u043d\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code>sudo apt-get update sudo apt install -y mosquitto mosquitto-clients<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c systemd \u0442\u0430\u0439\u043c\u0435\u0440: <code>\/etc\/systemd\/system\/mqtt.timer<\/code><\/p>\n<pre><code>[Unit] Description=run mqtt.service every minute  [Timer] AccuracySec=1 OnCalendar=*:*:0\/30 Unit=mqtt.service  [Install] WantedBy=multi-user.target<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c mqtt.timer: <code>\/etc\/systemd\/system\/mqtt.service<\/code><\/p>\n<pre><code>[Unit] Description=mqtt publisher service  [Service] Type=simple ExecStart=\/home\/pi\/mosquitto_pub.sh  [Install] WantedBy=multi-user.target<\/code><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c mqtt.service: <code>\/home\/pi\/mosquitto_pub.sh<\/code><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash tcpu=$(&lt;\/sys\/class\/thermal\/thermal_zone0\/temp) mosquitto_pub -h test.mosquitto.org -t \"habr\/$(cat \/data\/important_file.txt)\" -m \"{\\\"tcpu\\\": $((tcpu\/1000))}\"<\/code><\/pre>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c:<\/p>\n<pre><code class=\"bash\">chmod +x \/home\/pi\/mosquitto_pub.sh<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440:<\/p>\n<pre><code>sudo systemctl enable mqtt.timer sudo systemctl start mqtt.timer<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043d\u043e\u0432\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u0441 \u043a\u0430\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo dd if=\/dev\/sda of=golden-image-2.img bs=4M status=progress<\/code><\/pre>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert:<\/p>\n<pre><code class=\"bash\">sudo MENDER_ARTIFACT_NAME=release-2 .\/docker-mender-convert --disk-image input\/golden-image-2.img --config configs\/raspberrypi3_custom_config --overlay rootfs_overlay\/<\/code><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 hosted.mender.io \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 golden-image-2-raspberrypi3-mender.mender. \u0417\u0430\u043e\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h3>8. Deploy<\/h3>\n<p>\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 (deploy) \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043f\u044f\u0442\u0438 \u043c\u0438\u043d\u0443\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0447\u043d\u0451\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2fa\/6ef\/582\/2fa6ef582fbe04fedf6ef5eb05233947.png\" width=\"1295\" height=\"870\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2fa\/6ef\/582\/2fa6ef582fbe04fedf6ef5eb05233947.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e MQTT (\u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c):<\/p>\n<details class=\"spoiler\">\n<summary>MQTT Explorer<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <a href=\"http:\/\/mqtt-explorer.com\/\" rel=\"noopener noreferrer nofollow\">MQTT Explorer<\/a>.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a mqtt:\/\/test.mosquitto.org, \u043f\u043e\u0440\u0442: 1883.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0448\u0438\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u043e\u043f\u0438\u043a habr\/#<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0430\u043f\u0434\u0435\u0439\u0442\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/63e\/1bd\/c58\/63e1bdc58a8d97a2768f327fa0343e8b.png\" width=\"840\" height=\"515\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63e\/1bd\/c58\/63e1bdc58a8d97a2768f327fa0343e8b.png\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>Mender \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Mender \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u043e \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0430\u0440\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439. \u042d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u043b\u0443\u0436\u0438\u0442 \u043b\u0438\u0448\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>Open-source \u0432\u0435\u0440\u0441\u0438\u044f Mender \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/docs.mender.io\/artifact-creation\/state-scripts\" rel=\"noopener noreferrer nofollow\">state-scripts<\/a>, <a href=\"https:\/\/docs.mender.io\/client-installation\/identity\" rel=\"noopener noreferrer nofollow\">identy<\/a> \u0438 <a href=\"https:\/\/docs.mender.io\/client-installation\/inventory\" rel=\"noopener noreferrer nofollow\">inventory<\/a> \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0442.\u0434. Open-source \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Mender \u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"https:\/\/docs.mender.io\/3.0\/server-installation\/production-installation-with-kubernetes\" rel=\"noopener noreferrer nofollow\">Kubernetes<\/a>.<\/p>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c <a href=\"https:\/\/mender.io\/plans\/features\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0438\u0447<\/a> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432 open-source \u0438 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445. Open-source \u0432\u0435\u0440\u0441\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430, \u043d\u043e \u0435\u0451 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043d\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, <a href=\"https:\/\/docs.mender.io\/3.0\/overview\/delta-update\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u043b\u044c\u0442\u0430-\u0430\u043f\u0434\u0435\u0439\u0442\u043e\u0432<\/a>, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0442.\u0434.).<\/p>\n<p>\u0411\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c Mender c <a href=\"https:\/\/github.com\/rauc\/rauc\" rel=\"noopener noreferrer nofollow\">RAUC<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/sbabic\/swupdate\" rel=\"noopener noreferrer nofollow\">swupdate<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 <a href=\"https:\/\/github.com\/eclipse\/hawkbit\" rel=\"noopener noreferrer nofollow\">hawkBit<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u0430.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435, \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/582554\/\"> https:\/\/habr.com\/ru\/articles\/582554\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>TL;DR:<\/h2>\n<p><abbr title=\"\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 (\u0430\u043d\u0433\u043b. over-the-air, OTA)\">\u043b. over-the-air, OTA)&#187;>OT<\/abbr> A\/B \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 rootfs \u0434\u043b\u044f IoT \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 Linux \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/mender.io\/\" rel=\"noopener noreferrer nofollow\">Mender<\/a>.<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0432\u0443\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e IoT-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 Linux \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0417\u0430\u0434\u0430\u0447\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u0412\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c.\u00a0\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e ssh \u2014 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u043e ssh \u0442\u043e\u0436\u0435, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0442\u0435\u0440\u044f\u0442\u044c \u0441\u0435\u0442\u044c. <\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e IoT \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 Mender:<\/p>\n<ul>\n<li>\n<p>end-to-end \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 + \u0441\u0435\u0440\u0432\u0435\u0440 + \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/p>\n<\/li>\n<li>\n<p>A\/B \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 rootfs \u2014 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 rootfs A \u0438 B. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 A, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b B, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 B \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b A.<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 debian \u0438 yocto<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u0442\u044c open-source \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache v2<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e <a href=\"https:\/\/mender.io\/how-it-works\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, Mender \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/deutschetelekomitsolutions\/blog\/520406\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> <a class=\"mention\" href=\"\/users\/moooom\">@MooooM<\/a>, \u043d\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<h2>Workflow<\/h2>\n<p>\u042f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Raspberry Pi 3B c Raspberry Pi OS. \u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 8 \u0413\u0411 \u0438 \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Mender \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0434\u0435\u043c\u043e-\u0441\u0435\u0440\u0432\u0435\u0440 <a href=\"https:\/\/hosted.mender.io\" rel=\"noopener noreferrer nofollow\">hosted.mender.io<\/a> (\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u044b). <\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0441 Ubuntu 20.04. <\/p>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Mender \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/docs.mender.io\/3.0\/system-updates-debian-family\/convert-a-mender-debian-image#recommended-workflow\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0445\u043e\u0434<\/a> \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 debian:<\/p>\n<ol>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u041e\u0421<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u041f\u041a<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (provisioning)<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (artifact)<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (deploy)<\/p>\n<\/li>\n<\/ol>\n<h3>0. \u0421\u0435\u0440\u0432\u0435\u0440<\/h3>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 <a href=\"https:\/\/hosted.mender.io\" rel=\"noopener noreferrer nofollow\">hosted.mender.io<\/a>.<\/p>\n<h3>1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u041e\u0421<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/\" rel=\"noopener noreferrer nofollow\">Raspberry Pi OS Lite<\/a> \u043f\u043e <a href=\"https:\/\/www.raspberrypi.org\/documentation\/computers\/getting-started.html#installing-images-on-linux\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>.<\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c <code>\/boot\/config.txt<\/code>: <code>enable_uart=1<\/code><\/p>\n<h3>2. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e (golden) \u043e\u0431\u0440\u0430\u0437\u0430<\/h3>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c SD-\u043a\u0430\u0440\u0442\u0443 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e(Raspberry Pi 3B) \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043f\u043e uart \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 minicom.<\/p>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>raspi-config<\/code>. <\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u042f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u0441\u0432\u043e\u044e Raspberry \u043f\u043e ethernet (\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c over-the-air, \u0437\u043d\u0430\u044e).<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>\/data<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u041f\u043e\u043b\u043e\u0436\u0438\u043c \u0442\u0443\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>important_file.txt<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 <code>hello_habr<\/code>.<\/p>\n<h3>3. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430<\/h3>\n<p>\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c SD-\u043a\u0430\u0440\u0442\u0443 \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440:<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432:<\/p>\n<pre><code class=\"bash\">lsblk -p \/dev\/sda           8:0    1   7,4G  0 disk \u251c\u2500\/dev\/sda1        8:1    1   256M  0 part \u2514\u2500\/dev\/sda2        8:2    1   7,1G  0 part <\/code><\/pre>\n<p>\u0420\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u044b:<\/p>\n<pre><code class=\"bash\">umount \/dev\/sdX1 umount \/dev\/sdX2<\/code><\/pre>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u0441 \u043a\u0430\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo dd if=\/dev\/sdX of=golden-image-1.img bs=4M status=progress<\/code><\/pre>\n<h3>4. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert<\/h3>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/mendersoftware\/mender-convert\" rel=\"noopener noreferrer nofollow\">mender-convert<\/a> \u0438 <a href=\"https:\/\/docs.mender.io\/system-updates-debian-family\/convert-a-mender-debian-image#docker\" rel=\"noopener noreferrer nofollow\">Docker<\/a>.<\/p>\n<pre><code class=\"bash\">git clone -b 2.5.0 https:\/\/github.com\/mendersoftware\/mender-convert.git cd mender-convert .\/docker-build<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0451\u043c\u043a\u043e\u0441\u0442\u044c SD-\u043a\u0430\u0440\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<pre><code class=\"bash\">sudo fdisk -l Disk \/dev\/sda: 7,38 GiB, 7910457344 bytes, 15450112 sectors<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0431\u0430\u0439\u0442\u044b \u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b: 7910457344 \/ 1024 \/ 1024 = 7544 MB<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 mender-convert <code>.\/configs\/raspberrypi3_custom_config<\/code> \u0441 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code>RASPBERRYPI_CONFIG=\"raspberrypi3\" RASPBERRYPI_KERNEL_IMAGE=\"kernel7.img\" MENDER_KERNEL_IMAGETYPE=\"zImage\" MENDER_DEVICE_TYPE=\"raspberrypi3\" MENDER_STORAGE_TOTAL_SIZE_MB=\"7500\" MENDER_DATA_PART_SIZE_MB=\"1000\" IMAGE_ROOTFS_SIZE=\"-1\" MENDER_ADDON_CONNECT_INSTALL=\"y\"  source configs\/raspberrypi_config<\/code><\/pre>\n<p><code>MENDER_STORAGE_TOTAL_SIZE_MB<\/code> \u2014 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 SD \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435<\/p>\n<p><code>MENDER_DATA_PART_SIZE_MB<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \/data<\/p>\n<p><code>MENDER_ADDON_CONNECT_INSTALL<\/code> \u2014 \u0444\u043b\u0430\u0433 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <a href=\"https:\/\/docs.mender.io\/add-ons\/overview\" rel=\"noopener noreferrer nofollow\">mender-connect<\/a> (\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b)<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>.\/rootfs_overlay\/etc\/mender<\/code>. \u042d\u0442\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043d\u0430\u0448 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 mender-convert.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 mender-client <code>.\/rootfs_overlay\/etc\/mender\/mender.conf<\/code>:<\/p>\n<pre><code class=\"json\">{ \u00a0\u00a0\"ServerURL\": \"https:\/\/hosted.mender.io\/\", \u00a0\u00a0\"TenantToken\": \"XXXX\", \u00a0\u00a0\"UpdatePollIntervalSeconds\": 300, \u00a0\u00a0\"InventoryPollIntervalSeconds\":\u00a0 300 }<\/code><\/pre>\n<p><code>TenantToken<\/code> &#8212; \u0442\u043e\u043a\u0435\u043d \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e <a href=\"https:\/\/hosted.mender.io\/ui\/#\/settings\/organization-and-billing\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/a> \u0432 hosted.mender.io (Settings->Organization and billing->Organization token).<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 mender-connect <code>.\/rootfs_overlay\/etc\/mender\/mender-connect.conf<\/code>:<\/p>\n<pre><code class=\"json\">{ \u00a0\u00a0\"ShellCommand\": \"\/bin\/bash\", \u00a0\u00a0\"User\": \"pi\" }<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u0433\u0440\u0443\u043f\u043f\u0443 \u043e\u0432\u0435\u0440\u043b\u0435\u044f:<\/p>\n<pre><code class=\"bash\">sudo chown -R 0 .\/rootfs_overlay\/ sudo chgrp -R 0 .\/rootfs_overlay\/<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>.\/input<\/code> \u0438 \u043a\u043b\u0430\u0434\u0451\u043c \u0432 \u043d\u0435\u0451 \u043e\u0431\u0440\u0430\u0437 <code>golden-image-1.img<\/code> \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c mender-convert. \u00a0<\/p>\n<pre><code class=\"bash\">MENDER_ARTIFACT_NAME=release-1 .\/docker-mender-convert --disk-image input\/golden-image-1.img --config configs\/raspberrypi3_custom_config --overlay rootfs_overlay\/<\/code><\/pre>\n<p><code>MENDER_ARTIFACT_NAME<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043b\u0438\u0437\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 hosted.mender.io.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0433\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043e\u0431\u0440\u0430\u0437 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f U-Boot<\/p>\n<\/li>\n<li>\n<p>\u0432 Raspberry OS \u0434\u043e\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f mender-client \u0438 mender-connect<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f A \u0438 B \u0440\u0430\u0437\u0434\u0435\u043b\u044b rootfs \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 SD-\u043a\u0430\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 data<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>\/data<\/code> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <code>.\/logs\/convert.log.XXXX<\/code>.<\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<p><code>.\/deploy\/golden-image-1-raspberrypi3-mender.img<\/code> &#8212; \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0443<\/p>\n<p><code>.\/deploy\/golden-image-1-raspberrypi3-mender.mender<\/code> &#8212; \u0430\u0440\u0445\u0438\u0432 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 Mender(519\u041c\u0411) \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<h3>5. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (provisioning)<\/h3>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 <code>golden-image-1-raspberrypi3-mender.img<\/code> \u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0443:<\/p>\n<pre><code class=\"bash\">sudo dd if=.\/deploy\/golden-image-1-raspberrypi3-mender.img of=\/dev\/sdX bs=4M oflag=sync status=progress<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>\/dev\/sda           8:0    1   7,4G  0 disk \u251c\u2500\/dev\/sda1        8:1    1   256M  0 part \u251c\u2500\/dev\/sda2        8:2    1     3G  0 part \u251c\u2500\/dev\/sda3        8:3    1     3G  0 part \u2514\u2500\/dev\/sda4        8:4    1  1000M  0 part<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0432\u043e\u0434 uart \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 (\u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c U-Boot):\u00a0<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>U-Boot 2020.01-g83cf4883ec (Jul 09 2021 - 14:23:27 +0000)  DRAM:  948 MiB RPI 3 Model B (0xa02082) MMC:   mmc@7e202000: 0, sdhci@7e300000: 1 Loading Environment from MMC... OK In:    serial Out:   serial Err:   serial Net:   No ethernet found. Hit any key to stop autoboot:  0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... Found U-Boot script \/boot.scr 568 bytes read in 10 ms (54.7 KiB\/s) ## Executing script at 02400000 switch to partitions #0, OK mmc0 is current device 6320888 bytes read in 538 ms (11.2 MiB\/s) Kernel image @ 0x080000 [ 0x000000 - 0x6072f8 ] ## Flattened Device Tree blob at 2eff8c00    Booting using the fdt blob at 0x2eff8c00    Using Device Tree in place at 2eff8c00, end 2f002f2b  Starting kernel ...  [    0.000000] Booting Linux on physical CPU 0x0<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>6. \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/h3>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 hosted.mender.io \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441 pending \u043d\u0430 accepted.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b Troubleshoot \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 mender-connect). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d ssh-\u0441\u0435\u0440\u0432\u0435\u0440. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0447\u0435\u0440\u0435\u0437 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 File transfer.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<h3>7. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (artifact)<\/h3>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443 (golden-image-1.img). \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u041e\u0421 \u0438 \u0432\u043d\u043e\u0441\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u044e MQTT-\u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0448\u043b\u0451\u0442 \u043d\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c).<\/p>\n<details class=\"spoiler\">\n<summary>MQTT-\u043a\u043b\u0438\u0435\u043d\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code>sudo apt-get update sudo apt install -y mosquitto mosquitto-clients<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c systemd \u0442\u0430\u0439\u043c\u0435\u0440: <code>\/etc\/systemd\/system\/mqtt.timer<\/code><\/p>\n<pre><code>[Unit] Description=run mqtt.service every minute  [Timer] AccuracySec=1 OnCalendar=*:*:0\/30 Unit=mqtt.service  [Install] WantedBy=multi-user.target<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c mqtt.timer: <code>\/etc\/systemd\/system\/mqtt.service<\/code><\/p>\n<pre><code>[Unit] Description=mqtt publisher service  [Service] Type=simple ExecStart=\/home\/pi\/mosquitto_pub.sh  [Install] WantedBy=multi-user.target<\/code><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c mqtt.service: <code>\/home\/pi\/mosquitto_pub.sh<\/code><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash tcpu=$(&lt;\/sys\/class\/thermal\/thermal_zone0\/temp) mosquitto_pub -h test.mosquitto.org -t \"habr\/$(cat \/data\/important_file.txt)\" -m \"{\\\"tcpu\\\": $((tcpu\/1000))}\"<\/code><\/pre>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c:<\/p>\n<pre><code class=\"bash\">chmod +x \/home\/pi\/mosquitto_pub.sh<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440:<\/p>\n<pre><code>sudo systemctl enable mqtt.timer sudo systemctl start mqtt.timer<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043d\u043e\u0432\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u0441 \u043a\u0430\u0440\u0442\u044b:<\/p>\n<pre><code class=\"bash\">sudo dd if=\/dev\/sda of=golden-image-2.img bs=4M status=progress<\/code><\/pre>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 mender-convert:<\/p>\n<pre><code class=\"bash\">sudo MENDER_ARTIFACT_NAME=release-2 .\/docker-mender-convert --disk-image input\/golden-image-2.img --config configs\/raspberrypi3_custom_config --overlay rootfs_overlay\/<\/code><\/pre>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 hosted.mender.io \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 golden-image-2-raspberrypi3-mender.mender. \u0417\u0430\u043e\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h3>8. Deploy<\/h3>\n<p>\u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 (deploy) \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043f\u044f\u0442\u0438 \u043c\u0438\u043d\u0443\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0447\u043d\u0451\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043d\u0430\u0447\u0430\u043b\u043e \u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e MQTT (\u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c):<\/p>\n<details class=\"spoiler\">\n<summary>MQTT Explorer<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <a href=\"http:\/\/mqtt-explorer.com\/\" rel=\"noopener noreferrer nofollow\">MQTT Explorer<\/a>.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a mqtt:\/\/test.mosquitto.org, \u043f\u043e\u0440\u0442: 1883.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0448\u0438\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u043e\u043f\u0438\u043a habr\/#<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0430\u043f\u0434\u0435\u0439\u0442\u0430:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>Mender \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Mender \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u043e \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-414288","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/414288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=414288"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/414288\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=414288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=414288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=414288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}