diff options
32 files changed, 126 insertions, 112 deletions
diff --git a/README.adoc b/README.adoc index 27ecabf..b23f04b 100644 --- a/README.adoc +++ b/README.adoc | |||
@@ -74,6 +74,8 @@ You may take a look into https://github.com/advancedtelematic/meta-updater-minno | |||
74 | 74 | ||
75 | Although we have used U-Boot so far, other boot loaders can be configured work with OSTree as well. | 75 | Although we have used U-Boot so far, other boot loaders can be configured work with OSTree as well. |
76 | 76 | ||
77 | Your images will also need network connectivity to be able to reach an actual OTA backend. Our 'poky-sota' distribution does not mandate or install a default network manager but our supported platforms use the `virtual/network-configuration` recipe, which can be used as a starting example. | ||
78 | |||
77 | == SOTA-related variables in local.conf | 79 | == SOTA-related variables in local.conf |
78 | 80 | ||
79 | * `OSTREE_REPO` - path to your OSTree repository. Defaults to `$\{DEPLOY_DIR_IMAGE}/ostree_repo` | 81 | * `OSTREE_REPO` - path to your OSTree repository. Defaults to `$\{DEPLOY_DIR_IMAGE}/ostree_repo` |
@@ -82,6 +84,7 @@ Although we have used U-Boot so far, other boot loaders can be configured work w | |||
82 | * `OSTREE_COMMIT_SUBJECT` - Commit subject used by OSTree. Defaults to `Commit-id: ${IMAGE_NAME}` | 84 | * `OSTREE_COMMIT_SUBJECT` - Commit subject used by OSTree. Defaults to `Commit-id: ${IMAGE_NAME}` |
83 | * `OSTREE_UPDATE_SUMMARY` - Set this to '1' to update summary of OSTree repository on each commit. '0' by default. | 85 | * `OSTREE_UPDATE_SUMMARY` - Set this to '1' to update summary of OSTree repository on each commit. '0' by default. |
84 | * `OSTREE_DEPLOY_DEVICETREE` - Set this to '1' to include devicetree(s) to boot | 86 | * `OSTREE_DEPLOY_DEVICETREE` - Set this to '1' to include devicetree(s) to boot |
87 | * `GARAGE_SIGN_AUTOVERSION` - Set this to '1' to automatically fetch the last version of the garage tools installed by the aktualizr-native. Otherwise use the fixed version specified in the recipe. | ||
85 | * `INITRAMFS_IMAGE` - initramfs/initrd image that is used as a proxy while booting into OSTree deployment. Do not change this setting unless you are sure that your initramfs can serve as such a proxy. | 88 | * `INITRAMFS_IMAGE` - initramfs/initrd image that is used as a proxy while booting into OSTree deployment. Do not change this setting unless you are sure that your initramfs can serve as such a proxy. |
86 | * `SOTA_PACKED_CREDENTIALS` - when set, your ostree commit will be pushed to a remote repo as a bitbake step. This should be the path to a zipped credentials file in https://github.com/advancedtelematic/aktualizr/blob/master/docs/credentials.adoc[the format accepted by garage-push]. | 89 | * `SOTA_PACKED_CREDENTIALS` - when set, your ostree commit will be pushed to a remote repo as a bitbake step. This should be the path to a zipped credentials file in https://github.com/advancedtelematic/aktualizr/blob/master/docs/credentials.adoc[the format accepted by garage-push]. |
87 | * `SOTA_DEPLOY_CREDENTIALS` - when set to '1' (default value), deploys credentials to the built image. Override it in `local.conf` to built a generic image that can be provisioned manually after the build. | 90 | * `SOTA_DEPLOY_CREDENTIALS` - when set to '1' (default value), deploys credentials to the built image. Override it in `local.conf` to built a generic image that can be provisioned manually after the build. |
@@ -151,6 +154,7 @@ First, you can set `SOTA_CLIENT_PROV` to control which provisioning recipe is us | |||
151 | 154 | ||
152 | Second, you can write recipes to install additional config files with customized options. A few recipes already exist to address common needs and provide an example: | 155 | Second, you can write recipes to install additional config files with customized options. A few recipes already exist to address common needs and provide an example: |
153 | 156 | ||
157 | * link:recipes-sota/config/aktualizr-auto-reboot.bb[aktualizr-auto-reboot.bb] configures aktualizr to automatically reboot after new updates are installed in order to apply the updates immediately. This is only relevant for package managers (such as OSTree) that require a reboot to complete the installation process. If this is not enabled, you will need to reboot the system through other means. | ||
154 | * link:recipes-sota/config/aktualizr-disable-send-ip.bb[aktualizr-disable-send-ip.bb] disables the reporting of networking information to the server. This is enabled by default and supported by https://connect.ota.here.com/[HERE OTA Connect]. However, if you are using a different server that does not support this feature, you may want to disable it in aktualizr. | 158 | * link:recipes-sota/config/aktualizr-disable-send-ip.bb[aktualizr-disable-send-ip.bb] disables the reporting of networking information to the server. This is enabled by default and supported by https://connect.ota.here.com/[HERE OTA Connect]. However, if you are using a different server that does not support this feature, you may want to disable it in aktualizr. |
155 | * link:recipes-sota/config/aktualizr-log-debug.bb[aktualizr-log-debug.bb] sets the log level of aktualizr to 0 (trace). The default is 2 (info). This recipe is intended for development and debugging purposes. | 159 | * link:recipes-sota/config/aktualizr-log-debug.bb[aktualizr-log-debug.bb] sets the log level of aktualizr to 0 (trace). The default is 2 (info). This recipe is intended for development and debugging purposes. |
156 | 160 | ||
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass index 29da78e..41327e1 100644 --- a/classes/image_types_ostree.bbclass +++ b/classes/image_types_ostree.bbclass | |||
@@ -148,6 +148,13 @@ IMAGE_CMD_ostreecommit () { | |||
148 | if [ "${OSTREE_UPDATE_SUMMARY}" = "1" ]; then | 148 | if [ "${OSTREE_UPDATE_SUMMARY}" = "1" ]; then |
149 | ostree --repo=${OSTREE_REPO} summary -u | 149 | ostree --repo=${OSTREE_REPO} summary -u |
150 | fi | 150 | fi |
151 | |||
152 | # To enable simultaneous bitbaking of two images with the same branch name, | ||
153 | # create a new ref in the repo using the basename of the image. (This first | ||
154 | # requires deleting it if it already exists.) Fixes OTA-2211. | ||
155 | ostree --repo=${OSTREE_REPO} refs --delete ${OSTREE_BRANCHNAME}-${IMAGE_BASENAME} | ||
156 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}) | ||
157 | ostree --repo=${OSTREE_REPO} refs --create=${OSTREE_BRANCHNAME}-${IMAGE_BASENAME} ${ostree_target_hash} | ||
151 | } | 158 | } |
152 | 159 | ||
153 | IMAGE_TYPEDEP_ostreepush = "ostreecommit" | 160 | IMAGE_TYPEDEP_ostreepush = "ostreecommit" |
@@ -190,7 +197,7 @@ IMAGE_CMD_garagesign () { | |||
190 | --home-dir ${GARAGE_SIGN_REPO} \ | 197 | --home-dir ${GARAGE_SIGN_REPO} \ |
191 | --credentials ${SOTA_PACKED_CREDENTIALS} | 198 | --credentials ${SOTA_PACKED_CREDENTIALS} |
192 | 199 | ||
193 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}) | 200 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) |
194 | 201 | ||
195 | # Use OSTree target hash as version if none was provided by the user | 202 | # Use OSTree target hash as version if none was provided by the user |
196 | target_version=${ostree_target_hash} | 203 | target_version=${ostree_target_hash} |
@@ -243,7 +250,8 @@ IMAGE_CMD_garagecheck () { | |||
243 | if [ -n "${SOTA_PACKED_CREDENTIALS}" ]; then | 250 | if [ -n "${SOTA_PACKED_CREDENTIALS}" ]; then |
244 | # if credentials are issued by a server that doesn't support offline signing, exit silently | 251 | # if credentials are issued by a server that doesn't support offline signing, exit silently |
245 | unzip -p ${SOTA_PACKED_CREDENTIALS} root.json targets.pub targets.sec tufrepo.url 2>&1 >/dev/null || exit 0 | 252 | unzip -p ${SOTA_PACKED_CREDENTIALS} root.json targets.pub targets.sec tufrepo.url 2>&1 >/dev/null || exit 0 |
246 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}) | 253 | |
254 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) | ||
247 | 255 | ||
248 | garage-check --ref=${ostree_target_hash} \ | 256 | garage-check --ref=${ostree_target_hash} \ |
249 | --credentials=${SOTA_PACKED_CREDENTIALS} \ | 257 | --credentials=${SOTA_PACKED_CREDENTIALS} \ |
diff --git a/classes/image_types_ota.bbclass b/classes/image_types_ota.bbclass index a31cbd1..12375ec 100644 --- a/classes/image_types_ota.bbclass +++ b/classes/image_types_ota.bbclass | |||
@@ -59,7 +59,7 @@ IMAGE_CMD_ota () { | |||
59 | bbfatal "Invalid bootloader: ${OSTREE_BOOTLOADER}" | 59 | bbfatal "Invalid bootloader: ${OSTREE_BOOTLOADER}" |
60 | fi | 60 | fi |
61 | 61 | ||
62 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}) | 62 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) |
63 | 63 | ||
64 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} | 64 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} |
65 | kargs_list="" | 65 | kargs_list="" |
diff --git a/classes/sota_am335x-evm-wifi.bbclass b/classes/sota_am335x-evm-wifi.bbclass index adefb47..1458d44 100644 --- a/classes/sota_am335x-evm-wifi.bbclass +++ b/classes/sota_am335x-evm-wifi.bbclass | |||
@@ -7,7 +7,6 @@ IMAGE_BOOT_FILES_sota = "bootfiles/*" | |||
7 | OSTREE_KERNEL_ARGS ?= "ramdisk_size=16384 root=/dev/ram0 rw rootfstype=ext4 rootwait rootdelay=2 ostree_root=/dev/mmcblk0p2 console=ttyO0,115200n8l" | 7 | OSTREE_KERNEL_ARGS ?= "ramdisk_size=16384 root=/dev/ram0 rw rootfstype=ext4 rootwait rootdelay=2 ostree_root=/dev/mmcblk0p2 console=ttyO0,115200n8l" |
8 | 8 | ||
9 | IMAGE_INSTALL_append_sota = " uim iw wl18xx-calibrator wlconf wl18xx-fw hostapd wpa-supplicant" | 9 | IMAGE_INSTALL_append_sota = " uim iw wl18xx-calibrator wlconf wl18xx-fw hostapd wpa-supplicant" |
10 | IMAGE_INSTALL_remove_sota = " connman connman-client" | ||
11 | 10 | ||
12 | PREFERRED_VERSION_linux-ti-staging_sota = "4.4.54+gitAUTOINC+ecd4eada6f" | 11 | PREFERRED_VERSION_linux-ti-staging_sota = "4.4.54+gitAUTOINC+ecd4eada6f" |
13 | 12 | ||
diff --git a/classes/sota_m3ulcb.bbclass b/classes/sota_m3ulcb.bbclass index 6b63af4..b93cc40 100644 --- a/classes/sota_m3ulcb.bbclass +++ b/classes/sota_m3ulcb.bbclass | |||
@@ -6,3 +6,6 @@ IMAGE_BOOT_FILES_sota += "m3ulcb-ota-bootfiles/*" | |||
6 | 6 | ||
7 | OSTREE_BOOTLOADER ?= "u-boot" | 7 | OSTREE_BOOTLOADER ?= "u-boot" |
8 | UBOOT_MACHINE_sota = "m3ulcb_defconfig" | 8 | UBOOT_MACHINE_sota = "m3ulcb_defconfig" |
9 | |||
10 | PREFERRED_RPROVIDER_virtual/network-configuration ?= "connman" | ||
11 | IMAGE_INSTALL_append_sota = " virtual/network-configuration " | ||
diff --git a/classes/sota_minnowboard.bbclass b/classes/sota_minnowboard.bbclass index 63510e3..a907217 100644 --- a/classes/sota_minnowboard.bbclass +++ b/classes/sota_minnowboard.bbclass | |||
@@ -6,5 +6,7 @@ IMAGE_BOOT_FILES_sota = "" | |||
6 | 6 | ||
7 | IMAGE_FSTYPES_remove_sota = "live hddimg" | 7 | IMAGE_FSTYPES_remove_sota = "live hddimg" |
8 | OSTREE_KERNEL_ARGS ?= "ramdisk_size=16384 rw rootfstype=ext4 rootwait rootdelay=2 console=ttyS0,115200 console=tty0" | 8 | OSTREE_KERNEL_ARGS ?= "ramdisk_size=16384 rw rootfstype=ext4 rootwait rootdelay=2 console=ttyS0,115200 console=tty0" |
9 | |||
10 | IMAGE_INSTALL_append = " minnowboard-efi-startup" | 9 | IMAGE_INSTALL_append = " minnowboard-efi-startup" |
10 | |||
11 | PREFERRED_RPROVIDER_virtual/network-configuration ?= "connman" | ||
12 | IMAGE_INSTALL_append_sota = " virtual/network-configuration " | ||
diff --git a/classes/sota_porter.bbclass b/classes/sota_porter.bbclass index 75ae579..80062e1 100644 --- a/classes/sota_porter.bbclass +++ b/classes/sota_porter.bbclass | |||
@@ -7,3 +7,5 @@ IMAGE_BOOT_FILES_sota += "porter-bootfiles/*" | |||
7 | OSTREE_BOOTLOADER ?= "u-boot" | 7 | OSTREE_BOOTLOADER ?= "u-boot" |
8 | UBOOT_MACHINE_sota = "porter_config" | 8 | UBOOT_MACHINE_sota = "porter_config" |
9 | 9 | ||
10 | PREFERRED_RPROVIDER_virtual/network-configuration ?= "connman" | ||
11 | IMAGE_INSTALL_append_sota = " virtual/network-configuration " | ||
diff --git a/classes/sota_qemux86-64.bbclass b/classes/sota_qemux86-64.bbclass index 0850af6..fc4aa7c 100644 --- a/classes/sota_qemux86-64.bbclass +++ b/classes/sota_qemux86-64.bbclass | |||
@@ -12,3 +12,5 @@ IMAGE_ROOTFS_EXTRA_SPACE = "${@bb.utils.contains('DISTRO_FEATURES', 'sota', '655 | |||
12 | 12 | ||
13 | # fix for u-boot/swig build issue | 13 | # fix for u-boot/swig build issue |
14 | HOSTTOOLS_NONFATAL += "x86_64-linux-gnu-gcc" | 14 | HOSTTOOLS_NONFATAL += "x86_64-linux-gnu-gcc" |
15 | |||
16 | IMAGE_INSTALL_append_sota = " virtual/network-configuration " | ||
diff --git a/classes/sota_raspberrypi.bbclass b/classes/sota_raspberrypi.bbclass index e1c0054..3add247 100644 --- a/classes/sota_raspberrypi.bbclass +++ b/classes/sota_raspberrypi.bbclass | |||
@@ -12,6 +12,9 @@ UBOOT_DTBO_LOADADDRESS = "0x06000000" | |||
12 | # Deploy config fragment list to OSTree root fs | 12 | # Deploy config fragment list to OSTree root fs |
13 | IMAGE_INSTALL_append = " fit-conf" | 13 | IMAGE_INSTALL_append = " fit-conf" |
14 | 14 | ||
15 | DEV_MATCH_DIRECTIVE_pn-networkd-dhcp-conf = "Driver=smsc95xx lan78xx" | ||
16 | IMAGE_INSTALL_append_sota = " virtual/network-configuration " | ||
17 | |||
15 | PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" | 18 | PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" |
16 | UBOOT_ENTRYPOINT_sota ?= "0x00008000" | 19 | UBOOT_ENTRYPOINT_sota ?= "0x00008000" |
17 | 20 | ||
@@ -34,4 +37,3 @@ SOTA_DT_OVERLAYS_raspberrypi3 ?= "vc4-kms-v3d.dtbo rpi-ft5406.dtbo" | |||
34 | OSTREE_KERNEL_ARGS_sota ?= " 8250.nr_uarts=1 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=614 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 dwc_otg.lpm_enable=0 console=ttyS0,115200 usbhid.mousepoll=0 " | 37 | OSTREE_KERNEL_ARGS_sota ?= " 8250.nr_uarts=1 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=614 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 dwc_otg.lpm_enable=0 console=ttyS0,115200 usbhid.mousepoll=0 " |
35 | 38 | ||
36 | SOTA_CLIENT_FEATURES_append = " ubootenv" | 39 | SOTA_CLIENT_FEATURES_append = " ubootenv" |
37 | |||
diff --git a/conf/distro/poky-sota-systemd.conf b/conf/distro/poky-sota-systemd.conf index 7d008a9..b30b322 100644 --- a/conf/distro/poky-sota-systemd.conf +++ b/conf/distro/poky-sota-systemd.conf | |||
@@ -9,5 +9,4 @@ DISTRO_CODENAME = "sota" | |||
9 | 9 | ||
10 | DISTRO_FEATURES_append = " systemd" | 10 | DISTRO_FEATURES_append = " systemd" |
11 | VIRTUAL-RUNTIME_init_manager = "systemd" | 11 | VIRTUAL-RUNTIME_init_manager = "systemd" |
12 | 12 | PREFERRED_RPROVIDER_virtual/network-configuration ??= "networkd-dhcp-conf" | |
13 | IMAGE_INSTALL_append = " connman connman-client" | ||
diff --git a/conf/distro/poky-sota.conf b/conf/distro/poky-sota.conf index 2bbc62b..3fb1d20 100644 --- a/conf/distro/poky-sota.conf +++ b/conf/distro/poky-sota.conf | |||
@@ -5,5 +5,3 @@ DISTRO = "poky-sota" | |||
5 | DISTRO_NAME = "OTA-enabled Linux" | 5 | DISTRO_NAME = "OTA-enabled Linux" |
6 | DISTRO_VERSION = "1.0" | 6 | DISTRO_VERSION = "1.0" |
7 | DISTRO_CODENAME = "sota" | 7 | DISTRO_CODENAME = "sota" |
8 | |||
9 | IMAGE_INSTALL_append = " connman connman-client" | ||
diff --git a/conf/include/bblayers/sota.inc b/conf/include/bblayers/sota.inc index 26eea22..c4ecd4e 100644 --- a/conf/include/bblayers/sota.inc +++ b/conf/include/bblayers/sota.inc | |||
@@ -1,3 +1,4 @@ | |||
1 | BBLAYERS += "${METADIR}/meta-updater" | 1 | BBLAYERS += "${METADIR}/meta-updater" |
2 | BBLAYERS += "${METADIR}/meta-openembedded/meta-filesystems" | 2 | BBLAYERS += "${METADIR}/meta-openembedded/meta-filesystems" |
3 | BBLAYERS += "${METADIR}/meta-openembedded/meta-oe" | 3 | BBLAYERS += "${METADIR}/meta-openembedded/meta-oe" |
4 | BBLAYERS += "${METADIR}/meta-openembedded/meta-python" | ||
diff --git a/conf/include/bblayers/sota_am335x-evm.inc b/conf/include/bblayers/sota_am335x-evm.inc index f2d485d..909a7a4 100644 --- a/conf/include/bblayers/sota_am335x-evm.inc +++ b/conf/include/bblayers/sota_am335x-evm.inc | |||
@@ -1,2 +1 @@ | |||
1 | BBLAYERS += "${METADIR}/meta-ti" | ||
2 | BBLAYERS += " ${METADIR}/meta-ti " | ||
diff --git a/conf/include/bblayers/sota_intel-corei7-64.inc b/conf/include/bblayers/sota_intel-corei7-64.inc index 1771e6c..8e85a6c 100644 --- a/conf/include/bblayers/sota_intel-corei7-64.inc +++ b/conf/include/bblayers/sota_intel-corei7-64.inc | |||
@@ -1,2 +1,2 @@ | |||
1 | 1 | BBLAYERS += "${METADIR}/meta-updater-minnowboard" | |
2 | BBLAYERS += " ${METADIR}/meta-updater-minnowboard ${METADIR}/meta-intel " | 2 | BBLAYERS += "${METADIR}/meta-intel" |
diff --git a/conf/include/bblayers/sota_m3ulcb.inc b/conf/include/bblayers/sota_m3ulcb.inc index 04f78e4..4f2e0a9 100644 --- a/conf/include/bblayers/sota_m3ulcb.inc +++ b/conf/include/bblayers/sota_m3ulcb.inc | |||
@@ -1,2 +1,3 @@ | |||
1 | 1 | BBLAYERS += "${METADIR}/meta-renesas" | |
2 | BBLAYERS += " ${METADIR}/meta-renesas ${METADIR}/meta-renesas-rcar-gen3 ${METADIR}/meta-openembedded/meta-multimedia" | 2 | BBLAYERS += "${METADIR}/meta-renesas-rcar-gen3" |
3 | BBLAYERS += "${METADIR}/meta-openembedded/meta-multimedia" | ||
diff --git a/conf/include/bblayers/sota_porter.inc b/conf/include/bblayers/sota_porter.inc index 6964ef0..a50b71c 100644 --- a/conf/include/bblayers/sota_porter.inc +++ b/conf/include/bblayers/sota_porter.inc | |||
@@ -1,2 +1,4 @@ | |||
1 | 1 | BBLAYERS += "${METADIR}/meta-renesas" | |
2 | BBLAYERS += " ${METADIR}/meta-renesas ${METADIR}/meta-renesas/meta-rcar-gen2 ${METADIR}/meta-openembedded/meta-multimedia ${METADIR}/meta-updater-porter" | 2 | BBLAYERS += "${METADIR}/meta-renesas/meta-rcar-gen2" |
3 | BBLAYERS += "${METADIR}/meta-openembedded/meta-multimedia" | ||
4 | BBLAYERS += "${METADIR}/meta-updater-porter" | ||
diff --git a/conf/include/bblayers/sota_qemux86-64.inc b/conf/include/bblayers/sota_qemux86-64.inc index 12d32ff..9ccbfa6 100644 --- a/conf/include/bblayers/sota_qemux86-64.inc +++ b/conf/include/bblayers/sota_qemux86-64.inc | |||
@@ -1 +1 @@ | |||
BBLAYERS += " ${METADIR}/meta-updater-qemux86-64 " | BBLAYERS += "${METADIR}/meta-updater-qemux86-64" | ||
diff --git a/conf/include/bblayers/sota_raspberrypi2.inc b/conf/include/bblayers/sota_raspberrypi2.inc index cc26679..ea420ba 100644 --- a/conf/include/bblayers/sota_raspberrypi2.inc +++ b/conf/include/bblayers/sota_raspberrypi2.inc | |||
@@ -1,3 +1,2 @@ | |||
1 | BBLAYERS += " ${METADIR}/meta-openembedded/meta-python " | 1 | BBLAYERS += "${METADIR}/meta-updater-raspberrypi" |
2 | 2 | BBLAYERS += "${METADIR}/meta-raspberrypi" | |
3 | BBLAYERS += " ${METADIR}/meta-updater-raspberrypi ${METADIR}/meta-raspberrypi " | ||
diff --git a/conf/include/bblayers/sota_raspberrypi3.inc b/conf/include/bblayers/sota_raspberrypi3.inc index cc26679..ea420ba 100644 --- a/conf/include/bblayers/sota_raspberrypi3.inc +++ b/conf/include/bblayers/sota_raspberrypi3.inc | |||
@@ -1,3 +1,2 @@ | |||
1 | BBLAYERS += " ${METADIR}/meta-openembedded/meta-python " | 1 | BBLAYERS += "${METADIR}/meta-updater-raspberrypi" |
2 | 2 | BBLAYERS += "${METADIR}/meta-raspberrypi" | |
3 | BBLAYERS += " ${METADIR}/meta-updater-raspberrypi ${METADIR}/meta-raspberrypi " | ||
diff --git a/lib/oeqa/selftest/cases/updater.py b/lib/oeqa/selftest/cases/updater.py index 08521d5..898096c 100644 --- a/lib/oeqa/selftest/cases/updater.py +++ b/lib/oeqa/selftest/cases/updater.py | |||
@@ -67,35 +67,6 @@ class GeneralTests(OESelftestTestCase): | |||
67 | self.assertEqual(result.status, 0, | 67 | self.assertEqual(result.status, 0, |
68 | "Java not found. Do you have a JDK installed on your host machine?") | 68 | "Java not found. Do you have a JDK installed on your host machine?") |
69 | 69 | ||
70 | def test_add_package(self): | ||
71 | deploydir = get_bb_var('DEPLOY_DIR_IMAGE') | ||
72 | imagename = get_bb_var('IMAGE_LINK_NAME', 'core-image-minimal') | ||
73 | image_path = deploydir + '/' + imagename + '.ota-ext4' | ||
74 | logger = logging.getLogger("selftest") | ||
75 | |||
76 | logger.info('Running bitbake with man in the image package list') | ||
77 | self.append_config('IMAGE_INSTALL_append = " man "') | ||
78 | bitbake('-c cleanall man-db') | ||
79 | bitbake('core-image-minimal') | ||
80 | result = runCmd('oe-pkgdata-util find-path /usr/bin/man') | ||
81 | self.assertEqual(result.output, 'man-db: /usr/bin/man') | ||
82 | path1 = os.path.realpath(image_path) | ||
83 | size1 = os.path.getsize(path1) | ||
84 | logger.info('First image %s has size %i' % (path1, size1)) | ||
85 | |||
86 | logger.info('Running bitbake without man in the image package list') | ||
87 | self.append_config('IMAGE_INSTALL_remove = " man "') | ||
88 | bitbake('-c cleanall man-db') | ||
89 | bitbake('core-image-minimal') | ||
90 | result = runCmd('oe-pkgdata-util find-path /usr/bin/man', ignore_status=True) | ||
91 | self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output) | ||
92 | self.assertEqual(result.output, 'ERROR: Unable to find any package producing path /usr/bin/man') | ||
93 | path2 = os.path.realpath(image_path) | ||
94 | size2 = os.path.getsize(path2) | ||
95 | logger.info('Second image %s has size %i', path2, size2) | ||
96 | self.assertNotEqual(path1, path2, "Image paths are identical; image was not rebuilt.") | ||
97 | self.assertNotEqual(size1, size2, "Image sizes are identical; image was not rebuilt.") | ||
98 | |||
99 | 70 | ||
100 | class AktualizrToolsTests(OESelftestTestCase): | 71 | class AktualizrToolsTests(OESelftestTestCase): |
101 | 72 | ||
@@ -235,7 +206,6 @@ class RpiTests(OESelftestTestCase): | |||
235 | def setUpLocal(self): | 206 | def setUpLocal(self): |
236 | # Add layers before changing the machine type, otherwise the sanity | 207 | # Add layers before changing the machine type, otherwise the sanity |
237 | # checker complains loudly. | 208 | # checker complains loudly. |
238 | layer_python = "meta-openembedded/meta-python" | ||
239 | layer_rpi = "meta-raspberrypi" | 209 | layer_rpi = "meta-raspberrypi" |
240 | layer_upd_rpi = "meta-updater-raspberrypi" | 210 | layer_upd_rpi = "meta-updater-raspberrypi" |
241 | result = runCmd('bitbake-layers show-layers') | 211 | result = runCmd('bitbake-layers show-layers') |
@@ -244,11 +214,6 @@ class RpiTests(OESelftestTestCase): | |||
244 | # layers we need aren't where we expect them, we are out of luck. | 214 | # layers we need aren't where we expect them, we are out of luck. |
245 | path = os.path.abspath(os.path.dirname(__file__)) | 215 | path = os.path.abspath(os.path.dirname(__file__)) |
246 | metadir = path + "/../../../../../" | 216 | metadir = path + "/../../../../../" |
247 | if re.search(layer_python, result.output) is None: | ||
248 | self.meta_python = metadir + layer_python | ||
249 | runCmd('bitbake-layers add-layer "%s"' % self.meta_python) | ||
250 | else: | ||
251 | self.meta_python = None | ||
252 | if re.search(layer_rpi, result.output) is None: | 217 | if re.search(layer_rpi, result.output) is None: |
253 | self.meta_rpi = metadir + layer_rpi | 218 | self.meta_rpi = metadir + layer_rpi |
254 | runCmd('bitbake-layers add-layer "%s"' % self.meta_rpi) | 219 | runCmd('bitbake-layers add-layer "%s"' % self.meta_rpi) |
@@ -284,8 +249,6 @@ class RpiTests(OESelftestTestCase): | |||
284 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_upd_rpi, ignore_status=True) | 249 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_upd_rpi, ignore_status=True) |
285 | if self.meta_rpi: | 250 | if self.meta_rpi: |
286 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_rpi, ignore_status=True) | 251 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_rpi, ignore_status=True) |
287 | if self.meta_python: | ||
288 | runCmd('bitbake-layers remove-layer "%s"' % self.meta_python, ignore_status=True) | ||
289 | 252 | ||
290 | def test_rpi(self): | 253 | def test_rpi(self): |
291 | logger = logging.getLogger("selftest") | 254 | logger = logging.getLogger("selftest") |
diff --git a/recipes-connectivity/connman/connman_%.bbappend b/recipes-connectivity/connman/connman_%.bbappend new file mode 100644 index 0000000..b3633cc --- /dev/null +++ b/recipes-connectivity/connman/connman_%.bbappend | |||
@@ -0,0 +1 @@ | |||
RPROVIDES_${PN} += "virtual/network-configuration" | |||
diff --git a/recipes-connectivity/networkd-dhcp-conf/files/20-wired-dhcp.network b/recipes-connectivity/networkd-dhcp-conf/files/20-wired-dhcp.network new file mode 100644 index 0000000..edb3678 --- /dev/null +++ b/recipes-connectivity/networkd-dhcp-conf/files/20-wired-dhcp.network | |||
@@ -0,0 +1,5 @@ | |||
1 | [Match] | ||
2 | @MATCH_DIRECTIVE@ | ||
3 | |||
4 | [Network] | ||
5 | DHCP=yes | ||
diff --git a/recipes-connectivity/networkd-dhcp-conf/networkd-dhcp-conf.bb b/recipes-connectivity/networkd-dhcp-conf/networkd-dhcp-conf.bb new file mode 100644 index 0000000..1a515a2 --- /dev/null +++ b/recipes-connectivity/networkd-dhcp-conf/networkd-dhcp-conf.bb | |||
@@ -0,0 +1,28 @@ | |||
1 | SUMMARY = "systemd-networkd config to setup wired interface with dhcp" | ||
2 | DESCRIPTION = "Provides automatic dhcp network configuration for wired \ | ||
3 | interfaces through systemd-networkd" | ||
4 | LICENSE = "MPL-2.0" | ||
5 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" | ||
6 | |||
7 | inherit systemd | ||
8 | |||
9 | RPROVIDES_${PN} = "virtual/network-configuration" | ||
10 | |||
11 | SRC_URI_append = " file://20-wired-dhcp.network" | ||
12 | PR = "r1" | ||
13 | |||
14 | RDEPENDS_${PN} = "systemd" | ||
15 | |||
16 | S = "${WORKDIR}" | ||
17 | |||
18 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
19 | |||
20 | FILES_${PN} = "${systemd_unitdir}/network/*" | ||
21 | |||
22 | DEV_MATCH_DIRECTIVE ?= "Name=en*" | ||
23 | |||
24 | do_install() { | ||
25 | install -d ${D}/${systemd_unitdir}/network | ||
26 | install -m 0644 ${WORKDIR}/20-wired-dhcp.network ${D}/${systemd_unitdir}/network | ||
27 | sed -i -e 's|@MATCH_DIRECTIVE@|${DEV_MATCH_DIRECTIVE}|g' ${D}${systemd_unitdir}/network/20-wired-dhcp.network | ||
28 | } | ||
diff --git a/recipes-sota/aktualizr/aktualizr-auto-prov-creds.bb b/recipes-sota/aktualizr/aktualizr-auto-prov-creds.bb index 34460af..0628a61 100644 --- a/recipes-sota/aktualizr/aktualizr-auto-prov-creds.bb +++ b/recipes-sota/aktualizr/aktualizr-auto-prov-creds.bb | |||
@@ -11,9 +11,14 @@ require credentials.inc | |||
11 | do_install() { | 11 | do_install() { |
12 | if [ -n "${SOTA_PACKED_CREDENTIALS}" ]; then | 12 | if [ -n "${SOTA_PACKED_CREDENTIALS}" ]; then |
13 | install -m 0700 -d ${D}${localstatedir}/sota | 13 | install -m 0700 -d ${D}${localstatedir}/sota |
14 | cp ${SOTA_PACKED_CREDENTIALS} ${D}${localstatedir}/sota/sota_provisioning_credentials.zip | 14 | cp "${SOTA_PACKED_CREDENTIALS}" ${D}${localstatedir}/sota/sota_provisioning_credentials.zip |
15 | # Device should not be able to push data to treehub | 15 | # Device should not be able to push data to treehub |
16 | zip -d ${D}${localstatedir}/sota/sota_provisioning_credentials.zip treehub.json | 16 | zip -d ${D}${localstatedir}/sota/sota_provisioning_credentials.zip treehub.json |
17 | # Device has no use for the API Gateway. Remove if present. See: | ||
18 | # https://github.com/advancedtelematic/ota-plus-server/pull/1913/ | ||
19 | if unzip -l ${D}${localstatedir}/sota/sota_provisioning_credentials.zip api_gateway.url > /dev/null; then | ||
20 | zip -d ${D}${localstatedir}/sota/sota_provisioning_credentials.zip api_gateway.url | ||
21 | fi | ||
17 | fi | 22 | fi |
18 | } | 23 | } |
19 | 24 | ||
diff --git a/recipes-sota/aktualizr/aktualizr-ca-implicit-prov-creds.bb b/recipes-sota/aktualizr/aktualizr-ca-implicit-prov-creds.bb index 7420983..b9bb1f6 100644 --- a/recipes-sota/aktualizr/aktualizr-ca-implicit-prov-creds.bb +++ b/recipes-sota/aktualizr/aktualizr-ca-implicit-prov-creds.bb | |||
@@ -3,6 +3,10 @@ SECTION = "base" | |||
3 | LICENSE = "MPL-2.0" | 3 | LICENSE = "MPL-2.0" |
4 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" | 4 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" |
5 | 5 | ||
6 | # WARNING: it is NOT a production solution. The secure way to provision devices | ||
7 | # is to create certificate request directly on the device (either with HSM/TPM | ||
8 | # or with software) and then sign it with a CA stored on a disconnected machine. | ||
9 | |||
6 | DEPENDS = "aktualizr aktualizr-native" | 10 | DEPENDS = "aktualizr aktualizr-native" |
7 | ALLOW_EMPTY_${PN} = "1" | 11 | ALLOW_EMPTY_${PN} = "1" |
8 | 12 | ||
diff --git a/recipes-sota/aktualizr/aktualizr-ca-implicit-prov.bb b/recipes-sota/aktualizr/aktualizr-ca-implicit-prov.bb index 8dcda99..a932475 100644 --- a/recipes-sota/aktualizr/aktualizr-ca-implicit-prov.bb +++ b/recipes-sota/aktualizr/aktualizr-ca-implicit-prov.bb | |||
@@ -1,9 +1,6 @@ | |||
1 | SUMMARY = "Aktualizr configuration for implicit provisioning with CA" | 1 | SUMMARY = "Aktualizr configuration for implicit provisioning with CA" |
2 | DESCRIPTION = "Configuration for implicitly provisioning Aktualizr using externally provided or generated CA" | 2 | DESCRIPTION = "Configuration for implicitly provisioning Aktualizr using externally provided or generated CA" |
3 | 3 | ||
4 | # WARNING: it is NOT a production solution. The secure way to provision devices is to create certificate request directly on the device | ||
5 | # (either with HSM/TPM or with software) and then sign it with a CA stored on a disconnected machine | ||
6 | |||
7 | HOMEPAGE = "https://github.com/advancedtelematic/aktualizr" | 4 | HOMEPAGE = "https://github.com/advancedtelematic/aktualizr" |
8 | SECTION = "base" | 5 | SECTION = "base" |
9 | LICENSE = "MPL-2.0" | 6 | LICENSE = "MPL-2.0" |
diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index fbc1bca..2c27935 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb | |||
@@ -5,8 +5,6 @@ SECTION = "base" | |||
5 | LICENSE = "MPL-2.0" | 5 | LICENSE = "MPL-2.0" |
6 | LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=9741c346eef56131163e13b9db1241b3" | 6 | LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=9741c346eef56131163e13b9db1241b3" |
7 | 7 | ||
8 | require garage-sign-version.inc | ||
9 | |||
10 | DEPENDS = "boost curl openssl libarchive libsodium sqlite3 asn1c-native" | 8 | DEPENDS = "boost curl openssl libarchive libsodium sqlite3 asn1c-native" |
11 | RDEPENDS_${PN}_class-target = "aktualizr-check-discovery aktualizr-configs lshw" | 9 | RDEPENDS_${PN}_class-target = "aktualizr-check-discovery aktualizr-configs lshw" |
12 | RDEPENDS_${PN}-secondary = "aktualizr-check-discovery" | 10 | RDEPENDS_${PN}-secondary = "aktualizr-check-discovery" |
@@ -15,15 +13,22 @@ RDEPENDS_${PN}-host-tools = "aktualizr aktualizr-repo aktualizr-cert-provider ${ | |||
15 | PV = "1.0+git${SRCPV}" | 13 | PV = "1.0+git${SRCPV}" |
16 | PR = "7" | 14 | PR = "7" |
17 | 15 | ||
16 | GARAGE_SIGN_PV = "0.6.0-3-gc38b9f3" | ||
17 | |||
18 | SRC_URI = " \ | 18 | SRC_URI = " \ |
19 | gitsm://github.com/advancedtelematic/aktualizr;branch=${BRANCH} \ | 19 | gitsm://github.com/advancedtelematic/aktualizr;branch=${BRANCH} \ |
20 | file://aktualizr.service \ | 20 | file://aktualizr.service \ |
21 | file://aktualizr-secondary.service \ | 21 | file://aktualizr-secondary.service \ |
22 | file://aktualizr-secondary.socket \ | 22 | file://aktualizr-secondary.socket \ |
23 | file://aktualizr-serialcan.service \ | 23 | file://aktualizr-serialcan.service \ |
24 | ${@ d.expand("https://ats-tuf-cli-releases.s3-eu-central-1.amazonaws.com/cli-${GARAGE_SIGN_PV}.tgz;unpack=0") if d.getVar('GARAGE_SIGN_AUTOVERSION') != '1' else ''} \ | ||
24 | " | 25 | " |
25 | 26 | ||
26 | SRCREV = "1cad6d10286ade64b24021ca0e23de0d3b64f520" | 27 | # for garage-sign archive |
28 | SRC_URI[md5sum] = "30d7f0931e2236954679e75d1bae174f" | ||
29 | SRC_URI[sha256sum] = "46d8c6448ce14cbb9af6a93eba7e29d38579e566dcd6518d22f723a8da16cad5" | ||
30 | |||
31 | SRCREV = "ea03a5cf57def6b8d368f783cb12b91255365a80" | ||
27 | BRANCH ?= "master" | 32 | BRANCH ?= "master" |
28 | 33 | ||
29 | S = "${WORKDIR}/git" | 34 | S = "${WORKDIR}/git" |
@@ -36,9 +41,7 @@ SYSTEMD_SERVICE_${PN}-secondary = "aktualizr-secondary.socket" | |||
36 | 41 | ||
37 | EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DAKTUALIZR_VERSION=${PV}" | 42 | EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release -DAKTUALIZR_VERSION=${PV}" |
38 | 43 | ||
39 | GARAGE_SIGN_OPS = "${@ '-DGARAGE_SIGN_VERSION=%s' % d.getVar('GARAGE_SIGN_VERSION') if d.getVar('GARAGE_SIGN_VERSION') is not None else ''} \ | 44 | GARAGE_SIGN_OPS = "${@ d.expand('-DGARAGE_SIGN_ARCHIVE=${WORKDIR}/cli-${GARAGE_SIGN_PV}.tgz') if d.getVar('GARAGE_SIGN_AUTOVERSION') != '1' else ''}" |
40 | ${@ '-DGARAGE_SIGN_SHA256=%s' % d.getVar('GARAGE_SIGN_SHA256') if d.getVar('GARAGE_SIGN_SHA256') is not None else ''} \ | ||
41 | " | ||
42 | 45 | ||
43 | PACKAGECONFIG ?= "ostree ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} ${@bb.utils.filter('SOTA_CLIENT_FEATURES', 'hsm serialcan ubootenv', d)}" | 46 | PACKAGECONFIG ?= "ostree ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} ${@bb.utils.filter('SOTA_CLIENT_FEATURES', 'hsm serialcan ubootenv', d)}" |
44 | PACKAGECONFIG_class-native = "sota-tools" | 47 | PACKAGECONFIG_class-native = "sota-tools" |
@@ -66,14 +69,14 @@ do_install_append () { | |||
66 | install -m 0700 -d ${D}${sysconfdir}/sota/conf.d | 69 | install -m 0700 -d ${D}${sysconfdir}/sota/conf.d |
67 | 70 | ||
68 | if [ -n "${SOTA_HARDWARE_ID}" ]; then | 71 | if [ -n "${SOTA_HARDWARE_ID}" ]; then |
69 | echo "[provision]\nprimary_ecu_hardware_id = ${SOTA_HARDWARE_ID}\n" > ${D}${libdir}/sota/conf.d/40-hardware-id.toml | 72 | echo -e "[provision]\nprimary_ecu_hardware_id = ${SOTA_HARDWARE_ID}\n" > ${D}${libdir}/sota/conf.d/40-hardware-id.toml |
70 | fi | 73 | fi |
71 | 74 | ||
72 | if [ -n "${SOTA_SECONDARY_CONFIG_DIR}" ]; then | 75 | if [ -n "${SOTA_SECONDARY_CONFIG_DIR}" ]; then |
73 | if [ -d "${SOTA_SECONDARY_CONFIG_DIR}" ]; then | 76 | if [ -d "${SOTA_SECONDARY_CONFIG_DIR}" ]; then |
74 | install -m 0700 -d ${D}${sysconfdir}/sota/ecus | 77 | install -m 0700 -d ${D}${sysconfdir}/sota/ecus |
75 | install -m 0644 "${SOTA_SECONDARY_CONFIG_DIR}"/* ${D}${sysconfdir}/sota/ecus/ | 78 | install -m 0644 "${SOTA_SECONDARY_CONFIG_DIR}"/* ${D}${sysconfdir}/sota/ecus/ |
76 | echo "[uptane]\nsecondary_configs_dir = /etc/sota/ecus/\n" > ${D}${libdir}/sota/conf.d/30-secondary-configs-dir.toml | 79 | echo -e "[uptane]\nsecondary_configs_dir = /etc/sota/ecus/\n" > ${D}${libdir}/sota/conf.d/30-secondary-configs-dir.toml |
77 | else | 80 | else |
78 | bbwarn "SOTA_SECONDARY_CONFIG_DIR is set to an invalid directory (${SOTA_SECONDARY_CONFIG_DIR})" | 81 | bbwarn "SOTA_SECONDARY_CONFIG_DIR is set to an invalid directory (${SOTA_SECONDARY_CONFIG_DIR})" |
79 | fi | 82 | fi |
diff --git a/recipes-sota/aktualizr/garage-sign-version.inc b/recipes-sota/aktualizr/garage-sign-version.inc deleted file mode 100644 index 2cea6c9..0000000 --- a/recipes-sota/aktualizr/garage-sign-version.inc +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | |||
2 | python () { | ||
3 | if d.getVar("GARAGE_SIGN_VERSION") or not d.getVar("SOTA_PACKED_CREDENTIALS"): | ||
4 | return | ||
5 | import json | ||
6 | import urllib.request | ||
7 | import zipfile | ||
8 | with zipfile.ZipFile(d.getVar("SOTA_PACKED_CREDENTIALS"), 'r') as zip_ref: | ||
9 | try: | ||
10 | with zip_ref.open('tufrepo.url', mode='r') as url_file: | ||
11 | url = url_file.read().decode().strip(' \t\n') + '/health/version' | ||
12 | except (KeyError, ValueError, RuntimeError): | ||
13 | return | ||
14 | connected = False | ||
15 | tries = 3 | ||
16 | for i in range(tries): | ||
17 | try: | ||
18 | r = urllib.request.urlopen(url) | ||
19 | if r.code == 200: | ||
20 | connected = True | ||
21 | break | ||
22 | else: | ||
23 | print('Bad return code from server ' + url + ': ' + str(r.code) + | ||
24 | ' (attempt ' + str(i + 1) + ' of ' + str(tries) + ')') | ||
25 | except urllib.error.URLError as e: | ||
26 | print('Error connecting to server ' + url + ': ' + str(e) + | ||
27 | ' (attempt ' + str(i + 1) + ' of ' + str(tries) + ')') | ||
28 | if not connected: | ||
29 | return | ||
30 | resp = r.read().decode('utf-8') | ||
31 | j = json.loads(resp) | ||
32 | version = 'cli-' + j['version'] + '.tgz' | ||
33 | d.setVar("GARAGE_SIGN_VERSION", version) | ||
34 | } | ||
35 | |||
36 | # vim:set ts=4 sw=4 sts=4 expandtab: | ||
diff --git a/recipes-sota/config/aktualizr-auto-reboot.bb b/recipes-sota/config/aktualizr-auto-reboot.bb new file mode 100644 index 0000000..ad4d17c --- /dev/null +++ b/recipes-sota/config/aktualizr-auto-reboot.bb | |||
@@ -0,0 +1,21 @@ | |||
1 | SUMMARY = "Enable auto reboot to apply updates" | ||
2 | DESCRIPTION = "Configures aktualizr to automatically reboot after new updates are installed in order to apply the updates immediately" | ||
3 | HOMEPAGE = "https://github.com/advancedtelematic/aktualizr" | ||
4 | SECTION = "base" | ||
5 | LICENSE = "MPL-2.0" | ||
6 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" | ||
7 | |||
8 | SRC_URI = " \ | ||
9 | file://35-enable-auto-reboot.toml \ | ||
10 | " | ||
11 | |||
12 | do_install_append () { | ||
13 | install -m 0700 -d ${D}${libdir}/sota/conf.d | ||
14 | install -m 0644 ${WORKDIR}/35-enable-auto-reboot.toml ${D}${libdir}/sota/conf.d/35-enable-auto-reboot.toml | ||
15 | } | ||
16 | |||
17 | FILES_${PN} = " \ | ||
18 | ${libdir}/sota/conf.d/35-enable-auto-reboot.toml \ | ||
19 | " | ||
20 | |||
21 | # vim:set ts=4 sw=4 sts=4 expandtab: | ||
diff --git a/recipes-sota/config/files/35-enable-auto-reboot.toml b/recipes-sota/config/files/35-enable-auto-reboot.toml new file mode 100644 index 0000000..f83810e --- /dev/null +++ b/recipes-sota/config/files/35-enable-auto-reboot.toml | |||
@@ -0,0 +1,2 @@ | |||
1 | [uptane] | ||
2 | force_install_completion = true | ||
diff --git a/recipes-sota/fit-conf/fit-conf.bb b/recipes-sota/fit-conf/fit-conf.bb index c6cecec..f24a94a 100644 --- a/recipes-sota/fit-conf/fit-conf.bb +++ b/recipes-sota/fit-conf/fit-conf.bb | |||
@@ -2,6 +2,8 @@ SUMMARY = "FIT image configuration for u-boot to use" | |||
2 | LICENSE = "MIT" | 2 | LICENSE = "MIT" |
3 | LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" | 3 | LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" |
4 | 4 | ||
5 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
6 | |||
5 | do_install() { | 7 | do_install() { |
6 | mkdir -p ${D}${libdir} | 8 | mkdir -p ${D}${libdir} |
7 | echo -n "fit_conf=" >${D}${libdir}/fit_conf | 9 | echo -n "fit_conf=" >${D}${libdir}/fit_conf |
diff --git a/recipes-test/images/secondary-image.bb b/recipes-test/images/secondary-image.bb index 1a41169..61df85b 100644 --- a/recipes-test/images/secondary-image.bb +++ b/recipes-test/images/secondary-image.bb | |||
@@ -15,8 +15,7 @@ IMAGE_INSTALL_remove = " \ | |||
15 | aktualizr-ca-implicit-prov-creds \ | 15 | aktualizr-ca-implicit-prov-creds \ |
16 | aktualizr-hsm-prov \ | 16 | aktualizr-hsm-prov \ |
17 | aktualizr-uboot-env-rollback \ | 17 | aktualizr-uboot-env-rollback \ |
18 | connman \ | 18 | virtual/network-configuration \ |
19 | connman-client \ | ||
20 | " | 19 | " |
21 | 20 | ||
22 | IMAGE_INSTALL_append = " \ | 21 | IMAGE_INSTALL_append = " \ |