Bug in Easy Installer when loading images from an image server

Hello,

I have found a bug / problem in the Toradex Easy Installer which occurs only when downloading an image via ethernet instead of copying the image onto a USB drive. Since I am using a custom setup with multiple images, I have put them into their own folder. So my directory structure is as follows:

> top_folder
    > binaries
         [images]
    image.json
    [other files]

In the image.json, I have specified the relative path of the images to load, as in the following example:

{
            "name": "mmcblk2boot0",
            "erase": true,
            "content": {
                "filesystem_type": "raw",
                "rawfiles": [
                    {
                        "filename": "binaries/imx-boot",
                        "dd_options": "seek=0"
                    }
                ]
            }
        }

When I copy top_folder onto a USB driver and install it using the easy installer it works just fine. However, when I do it via ethernet, it fails to download the images (while all other files download without problems) because of the additional directory. The following error message occurrs:
tezi_error

Seemingly because it fails to create the additional directory. If I place the files in the same directory as image.json it works without problems.

Would be nice to fix this in upcoming versions of the Toradex Easy Installer.

Greetings

Hi @martin.schoenstedt ,

Sorry for the delay. The europe team was attending the Embedded World in Nuremberg.

I asked the Toradex Easy Installer team to have a look at it.

They’ll come back to you.

One question at this point, does your webserver grant access to someone from outside to access the image?

Best Regards
Kevin

Hi @kevin.tx

Thanks for the reply. I only have the webserver running while flashing and it is only locally using the connection provided by the board via the USB connection. Since I am developing software on the board I didn’t want to plug and unplug a USB drive every time I make a change, so I came up with this solution.

Greetings
Martin

Hi @martin.schoenstedt!

I would like to share with you how I do it. Maybe it can help you.

I place all the uncompressed Toradex Easy Installer images in some folder. E.g.:

$ pwd
tezi-server-feed 
$ tree
.
├── image_list.json
└── images_uncompressed
    ├── colirbi-imx6-5.7.0
    │   └── Colibri-iMX6_Reference-Minimal-Image-upstream-Tezi_5.7.0+build.20
    │       ├── image.json
    │       ├── ...
    │       └── wrapup.sh
    ├── torizon-core-docker-apalis-imx8-Tezi_5.7.0+build.17
    │   ├── image.json
    │   ├── ...
    │   └── wrapup.sh
    └── torizon-core-docker-verdin-imx8mp-Tezi_6.1.0-devel-20230102164202+build.0
        ├── image.json
        ├── ...
        └── wrapup.sh

And set the contents of my image_list.json with paths relative to the image_list.json location:

{
	"config_format": 1,
	"images": [
		"images_uncompressed/colirbi-imx6-5.7.0/Colibri-iMX6_Reference-Minimal-Image-upstream-Tezi_5.7.0+build.20/image.json",
		"images_uncompressed/torizon-core-docker-verdin-imx8mp-Tezi_6.1.0-devel-20230102164202+build.0/image.json",
		"images_uncompressed/torizon-core-docker-apalis-imx8-Tezi_5.7.0+build.17/image.json"
	]
}

From the folder above, I run the following to start an HTTP server:

$ pwd
tezi-server-feed
$ python3 -m http server 8080 # sudo is needed for port number < 1024

Then from Toradex Easy Installer UI, I add my server:

And I can see my images:

Let me know if this helps you :slight_smile:

Best regards,

Hi @henrique.tx

Thanks for your insights. I think my usage of the word “Image” is not very precise. Having multiple Toradex Easy Installer Images in separate folders is not a problem and I do it as you do. The problem I am describing occurs when I have a folder inside of the folder of my Toradex Easy Installer Image in which I store all files that shall be installed onto the board (which I called images in my post). I prefer having images in a folder instead of a flat structure since for one Easy Installer Image I need a lot of files and having them mixed up with the wrapup script, marketing, image.json etc. is not very appealing. Using such a structure for USB install works without problems, as referencing the filenames in the image.json works with a relative path, as shown in my initial post.

However, when using the same folder structure for Ethernet install it fails as described above because curl wants to download the file into /run/media/tmp/[filename as taken from image.json] and if the filename contains a relative path, curl fails because the path does not exist on the board yet. So a fix would be to create the parent folders of the file beforehand.

Hope this is helpful

Kind Regards
Martin

Hi @martin.schoenstedt !

Sorry for the delay.

Now I understand how your issue happens.

But I fail to understand how you end up with this folder with your ““images””. Do you edit Toradex Easy Installer images manually?

When you use Yocto or TorizonCore Builder to build your images, you should not need to touch the Toradex Easy Installer images as they are designed as a ready-to-install output from the build process.

Therefore, could you please explain your use case? Maybe you are choosing the hard path?

Best regards,

Hi @henrique.tx

Yes I edit the Toradex Easy Installer images manually. We use a custom build system (neither Yocto nor TorizonCore Builder) but still I appreciate the ease of using TEZI to get my images onto the board. An images folder is also used by Kynetics in their Android images for Toradex boards and I thought it was a good idea to seperate images from the other files that form the image for TEZI. That’s when I stumbled upon the bug.

I understand that it is probably a rare use-case (especially if the typical ready-to-use TEZI images have a flat structure) and a fix has low priority but still wanted to report it as it appears to be a relatively easy thing to fix and it would be nice to have this fixed.

Greetings
Martin S.

Hi @martin.schoenstedt!

Unfortunately you are most probably right.

It is always good to report and we thank you for it. In the end, it is anyway a use-case :slight_smile:

Now, what you could do is follow the way Yocto layers/recipes from Toradex build Toradex Easy Installer images and do the same thing in your build system. This way you would be “out-of-the-box covered”.

Best regards,