Installing Image without User interaction

I want to evaluate the different methods to flash our own image to the SOM with Easyinstaller.
I want to flash Images with Zero user interaction (UI-Clicks)
Also, I would prefer to have the image in a central place (Web server). If I want to parallelize this, I need to keep multiple USB-Sticks in Sync. So, no full Image on a USB Stick.
I am able to false the Image with ZeroConf (Avahi-Serve). So my first question is can I split the avahi server from the static web server. In the documentation there is only a txt record for a path. Is it somehow possible to add a domain/server? Detailed Manual | Toradex Developer Center

The second thinkable option is to put an tezi_config.json to a USB-Stick and add the server there. As an example:

{
  "config_format": 1,
  "image_lists": [
    "http://10.10.10.1:80/zeroconf/image_list.json" 
  ]
}

The Documentation tells me to add a feed, but I do not want to add a feed via UI (see above) Detailed Manual | Toradex Developer Center
So following the Documentation I found this: Documentation witch also works finde for me.

Or is there any alternative way for mass (UI interaction free) load image to the boards.
Thanks a lot in advance.

Hello @Lars_L,

The easiest way to serve images and auto-install them is to use the TorizonCore Builder images serve command (Production Programming for Linux | Toradex Developer Center).

This is true even if you are not using a Torizon OS image, as this command will serve all listed images in a Toradex Easy Installer format on the specified path. By default it will use zeroconf and require no configuration on the devices for the images to be auto-installed.


The images need to be listed in the image-list.json file, as can be seen in the following example:

File Structure:

$  tree -L 1 images_server
images_server
├── image_list.json
└── Verdin-iMX8MP_Reference-Minimal-Image-Tezi_6.6.0+build.12

image_list.json:

{
    "config_format": 1,
    "images": [
        "Verdin-iMX8MP_Reference-Minimal-Image-Tezi_6.6.0+build.12/image.json"
    ]
}

To make the installation unattended, you also need to do two changes to your image:

  1. Add a "autoinstall": true to your image’s image.json file.
  2. Add a reboot -f command to your image’s wrapup.json file.

Here is an example when this is done for the Reference Minimal Image 6.6.0 for the Verdin iMX8MP:

image.json:

{
    "config_format": "4",
    "autoinstall": true,
    "name": "Toradex Embedded Linux Reference Minimal Image",
    "description": "Minimal image without graphical interface that just boots",
    "version": "6.6.0+build.12",
    "release_date": "2024-04-02",
    "u_boot_env": "u-boot-initial-env-sd",
    "prepare_script": "prepare.sh",
    "wrapup_script": "wrapup.sh",
    "marketing": "marketing.tar",
    "icon": "toradexlinux.png",
    "license": "LA_OPT_NXP_SW.html",
    "supported_product_ids": [
        "0058",
        "0061",
        "0063",
        "0064",
        "0065",
        "0066",
        "0070"
    ],
    "blockdevs": [
        {
            "name": "emmc",
            "partitions": [
                {
                    "partition_size_nominal": 48,
                    "want_maximised": false,
                    "content": {
                        "label": "BOOT",
                        "filesystem_type": "FAT",
                        "mkfs_options": "",
                        "filename": "Reference-Minimal-Image-verdin-imx8mp.bootfs.tar.xz",
                        "uncompressed_size": 11.875
                    }
                },
                {
                    "partition_size_nominal": "512",
                    "want_maximised": true,
                    "content": {
                        "label": "RFS",
                        "filesystem_type": "ext4",
                        "mkfs_options": "-E nodiscard",
                        "filename": "Reference-Minimal-Image-verdin-imx8mp.tar.xz",
                        "uncompressed_size": 170.6640625
                    }
                }
            ]
        },
        {
            "name": "emmc-boot0",
            "erase": true,
            "content": {
                "filesystem_type": "raw",
                "rawfiles": [
                    {
                        "filename": "imx-boot",
                        "dd_options": "seek=0"
                    }
                ]
            }
        }
    ]
}

wrapup.sh:

#!/bin/sh

reboot -f
exit 0


The combination of these steps should have the intended effect of an installation with zero user interaction. The only requirement is to turn on the modules on the network with the server running and wait for them to reboot.
Also note that any compatible device running Toradex Easy Installer on this network will automatically install the image, therefore it is important that the network is isolated from other networks used for development.

Best Regards,
Bruno