From 368453ce383f71c7221988cadd60bb4d261abb47 Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Mon, 5 Aug 2024 21:32:59 -0600 Subject: [PATCH 1/6] Initial commit - Portenta X8 Repo commands and instructions update --- content/hardware/04.pro/boards/portenta-x8/essentials.md | 8 +++++++- .../portenta-x8/tutorials/08.image-building/content.md | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/content/hardware/04.pro/boards/portenta-x8/essentials.md b/content/hardware/04.pro/boards/portenta-x8/essentials.md index 022940bf76..979560cbe2 100644 --- a/content/hardware/04.pro/boards/portenta-x8/essentials.md +++ b/content/hardware/04.pro/boards/portenta-x8/essentials.md @@ -11,9 +11,15 @@ - + + Some containers examples for Portenta X8, these containers are accessible through your Foundries.io factory. + + + This repository contains Yocto recipes for building a Linux image for the Arduino Portenta X8. + + diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md index 00a32bc6b5..198d970f20 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md @@ -14,7 +14,7 @@ hardware: ## Overview -In this tutorial, you will learn how to build an image for the Portenta X8 with the source code provided at our [GitHub repository for lmp-manifest](https://github.com/arduino/lmp-manifest). It is an ideal approach for debugging system elements like the bootloader or kernel support by building images locally. +In this tutorial, you will learn how to build an image for the Portenta X8 with the source code provided at our [GitHub repository for lmp-manifest](https://github.com/arduino/lmp-manifest/). It is an ideal approach for debugging system elements like the bootloader or kernel support by building images locally. ***Images built locally cannot register with FoundriesFactory and will not be OTA compatible, but this is a good alternative for those who do not have a FoundriesFactory subscription.*** @@ -40,9 +40,9 @@ This tutorial targets customers that are not FoundriesFactory subscribers, but s #### Build the Docker Image -You will start by creating a Docker image with the necessary dependencies to build your device image. This involves cloning the [lmp-manifest repository](https://github.com/arduino/lmp-manifest) from Arduino's GitHub. Follow these steps: +You will start by creating a Docker image with the necessary dependencies to build your device image. This involves cloning the [lmp-manifest repository](https://github.com/arduino/lmp-manifest/) from Arduino's GitHub. Follow these steps: -Clone the [lmp-manifest repository](https://github.com/arduino/lmp-manifest) using the command below: +Clone the [lmp-manifest repository](https://github.com/arduino/lmp-manifest/) using the command below: ```bash git clone https://github.com/arduino/lmp-manifest.git @@ -111,7 +111,7 @@ cd /dockerVolume ``` ```bash -repo init -u https://github.com/arduino/lmp-manifest.git -m arduino.xml -b release +repo init -u https://github.com/arduino/lmp-manifest.git -m arduino.xml -b main ``` ![Git-repo initialization](assets/repo_init.png) From 3dcca89fc10da11b2f7e81fa2ed91bbaf8fd5779 Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Fri, 23 Aug 2024 16:16:38 -0600 Subject: [PATCH 2/6] Fleet waves management commands update Foundries --- .../tutorials/06.waves-fleet-managment/content.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/06.waves-fleet-managment/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/06.waves-fleet-managment/content.md index adf4fe68d1..33edc7439e 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/06.waves-fleet-managment/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/06.waves-fleet-managment/content.md @@ -47,15 +47,17 @@ For security purposes, we recommend that you rotate your FoundriesFactory keys. First, we will rotate the root keys. These are the most important keys, as they are used to create new target keys. Rotate them with the command: ```bash -fioctl keys rotate-root --initial /absolute/path/to/root.keys.tgz +fioctl keys tuf rotate-offline-keys -r root -k /absolute/path/to/root.keys.tgz ``` Now we can rotate the target-only keys with following command: ```bash -fioctl keys rotate-targets /absolute/path/to/root.keys.tgz +fioctl keys tuf rotate-offline-keys -r targets -k /absolute/path/to/root.keys.tgz ``` +***The above commands have been updated from the older __fioctl keys rotate-root__ and __fioctl keys rotate-targets__ commands to reflect the latest security practices recommended by [Foundries.io](https://docs.foundries.io/latest/reference-manual/security/offline-keys.html).*** + And finally, for security reasons, we separating the target keys from the root using the following command: ```bash From dbf85395729b5428f43002b98cfb6793f2173477 Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Fri, 23 Aug 2024 16:39:46 -0600 Subject: [PATCH 3/6] RPC content container requirement file updated --- .../assets/py-serialrpc.zip | Bin 2190 -> 1685 bytes .../assets/python-sensor-rpc.zip | Bin 8548 -> 8805 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/04.python-arduino-data-exchange/assets/py-serialrpc.zip b/content/hardware/04.pro/boards/portenta-x8/tutorials/04.python-arduino-data-exchange/assets/py-serialrpc.zip index 11eb4550c1e732d5d40cf2437c215273a0c04142..b79e56f25f34ce76ede2e15f67f7098aa69104ec 100644 GIT binary patch delta 643 zcmeAZoXRT`;LXe;!oa}5!C)C%5fa;1{&+Hw_X&vQ87A9vC`~@aGDRAqgaNDsC<6!L z3=ESeGD*my8nR}`C8ZreH7|i!5u#%9J~pn&>5O|MK~^y^+-wn#Tz9CbSOLfeVReYA ziDw0PL-LFA5>xVRZH@H|xhDRU7G+@Y209F=2o9vds%6k@y*+LES3{s0BOsQCs9@1c z&n%g2&tfA4G@-CeBt(#rf#E+8L+sPoe3eO+E(IX{2cioYdMKK(1RGcr z0|Ur$iA*4?WRP?~9ETQ+U>y+0&4TDK1O+N05FonH0vAaa2Q$bX4Y2@kRyL3@I}j=| KF)+ljfOr6S_iD8O literal 2190 zcmWIWW@h1H00Hl*6(L{-l;CBMVJN87Elw@UOw1`NNY)Px;bdU0TWgcl0K}yg+zgB? zUl|z~SVVvt0^r72q8THOZVZ}%u|UJ(2pPDZdsBfh&>9d{$8BIyYGG++QEF~#UP-ZD zNks|R#UKmfF)hd~PA^DI&ejF`Ot+x2BqKkM3*-rqXE+!@o>;TvlF|+!?cJjglM`2Hw=_7rdHX*J%S7VZsK4?j+7RW8i4@2<*^o9VW264yFS_H#Yu@p*e5 z&G}+bsHfL5lktbdpWB}=C7Xx7UDej-!Z5GxET8E-wQCl~?ySmw-nNeU|GmW<6rSJG zP~BoCF0CQ6*mlFBtM%97-7=sytSiCd7N@T8+xP>C&1TmuFYFoUn>26`O?#Wo4l>t3up6dzu4V% zbDR$8c8JyTU;M@_2Chl?}BI$VWgW`8!~KKJqYvN=D*w04IVEb%lD z?DgIAi9<(fajo+icV6E;4;aqz+^u|e!K`Ub?Yj2bO}lk=sF>{%;y!+_?SJ3q!g+iJ z-xTvEeZGE7AiJmQ*gq!Jlzn^J^sk1%RBZ&r^7x}sFFg~Hi_$Tp()+xQ=SiJSK^HDx zW?%T_jL_dZf2LfTb0z6-)2T^4e{Ak9YD&3#rR&I@ra2*hA1zAJ0~ZvCxR32Ce>@rJ zici>Fk^;_Iy2<&u1^LCPdX>33_~JaY?;>B50gvnbzg=zR&kTen{o`4A;l-q0-Mazb zz8?x`*7tq)@?@^^>B~GaA6W#7WFvVZIS)@`%-g(CxykB(#ld42=YBk|A7i05sm0-& ztEJeqAU6-A&&L;R{65)sQ>CusijvTv50f6%?QL6ib=T3{H{NlR0{(yaxL`-N>=Av* z+3yz3^2@yX=F@|@i!*EgXCH`K;-4Sj&B!FjjH`5&0QwmO1Q^~rf@rj|mK9RgVq_hJ zk(ebdvXSoSM#3`>upkE-4k{K27>-)%LJS9HQidgsGjJP@Sq9^?43QL2i(6#Ncz|}I z1P;O{$b~OHYp}VBUf0W?20PZVr;fBvQ2+L4&GO}gQ rnDP1slCO!g1T~W)TT;M+W(l?|i^~#LHeezG*0mfAGC;S+u!491zPYmn diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/04.python-arduino-data-exchange/assets/python-sensor-rpc.zip b/content/hardware/04.pro/boards/portenta-x8/tutorials/04.python-arduino-data-exchange/assets/python-sensor-rpc.zip index d5133663d727cb92ae66fde1c23d8310276f5849..45f3aa0061eb622e8cc1e01068b4882e55d09a72 100644 GIT binary patch delta 4016 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 delta 4663 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 From d8d4b7175edeb490d736b41aec57d343d90ea58b Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Fri, 23 Aug 2024 16:58:33 -0600 Subject: [PATCH 4/6] Image building content commands additional update --- .../portenta-x8/tutorials/08.image-building/content.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md index 198d970f20..73c20642b9 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/08.image-building/content.md @@ -114,6 +114,14 @@ cd /dockerVolume repo init -u https://github.com/arduino/lmp-manifest.git -m arduino.xml -b main ``` +If no specific branch is mentioned, the command could default to: + +```bash +repo init -u https://github.com/arduino/lmp-manifest.git -m arduino.xml +``` + +This would implicitly use the default branch, which is typically the *main* in repositories these days. + ![Git-repo initialization](assets/repo_init.png) Proceed to download the necessary files by synchronizing the repositories: From d195951f44111c94f7034dc5f2856fe742d75fa9 Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Mon, 26 Aug 2024 12:13:57 -0600 Subject: [PATCH 5/6] Multiprotocol gateway commands minor update --- .../tutorials/12.multi-protocol-gateway/content.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/12.multi-protocol-gateway/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/12.multi-protocol-gateway/content.md index 0d152e7067..1456bb1877 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/12.multi-protocol-gateway/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/12.multi-protocol-gateway/content.md @@ -130,13 +130,13 @@ sudo su - // Head to directory and mount the container cd /home/fio/py-serialrpc #py-serialrpc sudo docker build . -t py-serialrpc -#py-serialrpc sudo docker-compose up -d +#py-serialrpc sudo docker compose up -d ``` To access the logs of `py-serialrpc` service, while maintaining the same directory, execute the following command. ```bash -sudo docker-compose logs -f --tail 20 +sudo docker compose logs -f --tail 20 ``` ***For more details about how data exchange between Arduino and Linux layer works and to understand how to debug, please read [Data Exchange Between Python® on Linux and an Arduino Sketch](https://docs.arduino.cc/tutorials/portenta-x8/python-arduino-data-exchange)*** From f87d74055fde796cb6f8864cd4ddf4b1816b11b7 Mon Sep 17 00:00:00 2001 From: TaddyHC Date: Mon, 26 Aug 2024 12:19:27 -0600 Subject: [PATCH 6/6] Wordpress commands minor update --- .../portenta-x8/tutorials/13.wordpress-webserver/content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/13.wordpress-webserver/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/13.wordpress-webserver/content.md index bd775bb44e..f8251256ad 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/13.wordpress-webserver/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/13.wordpress-webserver/content.md @@ -134,7 +134,7 @@ The `-d` flag runs the containers in the background; omitting it will tie the co The installation of the **WordPress** and **MariaDB** containers will begin and may take some time. To monitor the installation process, use: ```bash -docker-compose logs -f +docker compose logs -f ``` Upon completion, your WordPress site will be accessible from the Portenta X8.