The upgrade scripts goes in a tarball with local.conf at the top level.

log.txt shows what happens when the package is installed.

The script build.sh is used to create the binary update package
used by mlinux-firmware-update.

The tree is a follows:

upgrade-4.0.0-4.0.1/
├── install_list.txt
├── local.conf
└── repo
    ├── arm926ejste
    │   ├── bluez5_5.47-m3.0_arm926ejste.ipk
    │   ├── bluez5-noinst-tools_5.47-m3.0_arm926ejste.ipk
    │   ├── bluez5-obex_5.47-m3.0_arm926ejste.ipk
    │   ├── bluez5-pand_5.47-m3.0_arm926ejste.ipk
    │   ├── bluez5-rfcomm_5.47-m3.0_arm926ejste.ipk
    │   ├── bluez5-testtools_5.47-m3.0_arm926ejste.ipk
    │   ├── libasound-module-bluez_5.47-m3.0_arm926ejste.ipk
    │   ├── libmts-io0_1.0.8-r0.0_arm926ejste.ipk
    │   ├── lora-network-server_2.0.19-r4.0_arm926ejste.ipk
    │   ├── Packages
    │   ├── Packages.gz
    │   ├── Packages.stamps
    │   └── python-pybluez_0.22-r0.0_arm926ejste.ipk
    ├── mtcap
    │   ├── mlinux-version_4.0.1_ea6ba1e5fb287003fea33522af39a771102713b2-r2.0_mtcap.ipk
    │   ├── mts-id-eeprom_0.3.8-r1.0.0_mtcap.ipk
    │   ├── Packages
    │   ├── Packages.gz
    │   └── Packages.stamps
    ├── mtcdt
    │   ├── mlinux-version_4.0.1_ea6ba1e5fb287003fea33522af39a771102713b2-r2.0_mtcdt.ipk
    │   ├── mts-id-eeprom_0.3.8-r1.0.0_mtcdt.ipk
    │   ├── Packages
    │   ├── Packages.gz
    │   └── Packages.stamps
    └── Packages


If one puts the packages in a build tree at build/tmp/deploy/ipk,
and run bitbake package-index, the Packages* files are refreshed.

In this example, all MTCDT-like models as of today are supported.

That is MTCDT, MTCDTIP, MTCDTIPHP, and MTCAP are supported in this
update.

install_list.txt would be a list of extra packages to install.

We should probably have a remove_list.txt for cases where packages
are obsolete.