From 74f66a0b136ec59618d519b89bc6b3fa6bc6b212 Mon Sep 17 00:00:00 2001 From: Zee314159 <252806294@qq.com> Date: Mon, 18 Nov 2019 14:43:30 +0100 Subject: Add sanity checks for user-defined SOTA variables Signed-off-by: Zee314159 <252806294@qq.com> --- classes/sota.bbclass | 14 -------------- classes/sota_sanity.bbclass | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/classes/sota.bbclass b/classes/sota.bbclass index 5b06397..4422741 100644 --- a/classes/sota.bbclass +++ b/classes/sota.bbclass @@ -7,20 +7,6 @@ SOTA_CLIENT_PROV ??= "aktualizr-shared-prov" SOTA_DEPLOY_CREDENTIALS ?= "1" SOTA_HARDWARE_ID ??= "${MACHINE}" -# Translate old provisioning recipe names into the new versions. -python () { - prov = d.getVar("SOTA_CLIENT_PROV") - if prov == "aktualizr-auto-prov": - bb.warn('aktualizr-auto-prov is deprecated. Please use aktualizr-shared-prov instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-shared-prov") - elif prov == "aktualizr-ca-implicit-prov": - bb.warn('aktualizr-ca-implicit-prov is deprecated. Please use aktualizr-device-prov instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov") - elif prov == "aktualizr-hsm-prov": - bb.warn('aktualizr-hsm-prov is deprecated. Please use aktualizr-device-prov-hsm instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov-hsm") -} - IMAGE_INSTALL_append_sota = " ostree os-release ${SOTA_CLIENT} ${SOTA_CLIENT_PROV}" IMAGE_CLASSES += " image_types_ostree image_types_ota" diff --git a/classes/sota_sanity.bbclass b/classes/sota_sanity.bbclass index 8e80acb..c6665a2 100644 --- a/classes/sota_sanity.bbclass +++ b/classes/sota_sanity.bbclass @@ -10,6 +10,32 @@ def sota_check_required_variables(status, d): if not d.getVar(var): status.addresult("%s should be set in your local.conf.\n" % var) +def sota_check_variables_validity(status, d): + var = d.getVar("OSTREE_BRANCHNAME") + if var != "": + for ch in var: + if not (ch >= 'a' and ch <= 'z' or ch >= 'A' and ch <= 'Z' or ch >= '0' and ch <= '9' or ch = '_' or ch == '-'): + status.addresult("OSTREE_BRANCHNAME Should only contain characters from the character set [a-zA-Z0-9_-].\n") + break + var = d.getVar("{SOTA_HARDWARE_ID") + if var != "": + for ch in var: + if not (ch >= 'a' and ch <= 'z' or ch >= 'A' and ch <= 'Z' or ch >= '0' and ch <= '9' or ch = '_' or ch == '-'): + status.addresult("SOTA_HARDWARE_ID Should only contain characters from the character set [a-zA-Z0-9_-].\n") + break + var = d.getVar("SOTA_CLIENT_FEATURES") + if var != "hsm" and var != "secondary-network" and var != "": + status.addresult("SOTA_CLIENT_FEATURES should be set to hsm or secondary-network.\n") + var = d.getVar("OSTREE_UPDATE_SUMMARY") + if var != "0" and var != "1" and var != "": + status.addresult("OSTREE_UPDATE_SUMMARY should be set to 0 or 1.\n") + var = d.getVar("OSTREE_DEPLOY_DEVICETREE") + if var != "0" and var != "1" and var != "": + status.addresult("OSTREE_DEPLOY_DEVICETREE should be set to 0 or 1.\n") + var = GARAGE_SIGN_AUTOVERSION + if var != "0" and var != "1" and var != "": + status.addresult("GARAGE_SIGN_AUTOVERSION should be set to 0 or 1.\n") + def sota_raise_sanity_error(msg, d): if d.getVar("SANITY_USE_EVENTS") == "1": bb.event.fire(bb.event.SanityCheckFailed(msg), d) @@ -52,3 +78,19 @@ python sota_check_sanity_eventhandler() { return } + +# Translate old provisioning recipe names into the new versions. +python () { + prov = d.getVar("SOTA_CLIENT_PROV") + if prov == "aktualizr-auto-prov": + bb.warn('aktualizr-auto-prov is deprecated. Please use aktualizr-shared-prov instead.') + d.setVar("SOTA_CLIENT_PROV", "aktualizr-shared-prov") + elif prov == "aktualizr-ca-implicit-prov": + bb.warn('aktualizr-ca-implicit-prov is deprecated. Please use aktualizr-device-prov instead.') + d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov") + elif prov == "aktualizr-hsm-prov": + bb.warn('aktualizr-hsm-prov is deprecated. Please use aktualizr-device-prov-hsm instead.') + d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov-hsm") +} + + -- cgit v1.2.3-54-g00ecf From 2882c94733ca7719c22f28c825cf95b39bdbb614 Mon Sep 17 00:00:00 2001 From: Zee314159 <252806294@qq.com> Date: Tue, 19 Nov 2019 08:02:50 +0100 Subject: Use regex and add some variables Signed-off-by: Zee314159 <252806294@qq.com> --- classes/sota_sanity.bbclass | 75 +++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/classes/sota_sanity.bbclass b/classes/sota_sanity.bbclass index c6665a2..3678e33 100644 --- a/classes/sota_sanity.bbclass +++ b/classes/sota_sanity.bbclass @@ -11,31 +11,47 @@ def sota_check_required_variables(status, d): status.addresult("%s should be set in your local.conf.\n" % var) def sota_check_variables_validity(status, d): - var = d.getVar("OSTREE_BRANCHNAME") - if var != "": - for ch in var: - if not (ch >= 'a' and ch <= 'z' or ch >= 'A' and ch <= 'Z' or ch >= '0' and ch <= '9' or ch = '_' or ch == '-'): - status.addresult("OSTREE_BRANCHNAME Should only contain characters from the character set [a-zA-Z0-9_-].\n") + import re + import os.path + + if d.getVar("OSTREE_BRANCHNAME") and re.match("^[a-zA-Z0-9_-]*$", d.getVar("OSTREE_BRANCHNAME")) is None: + status.addresult("OSTREE_BRANCHNAME Should only contain characters from the character set [a-zA-Z0-9_-].\n") + if d.getVar("SOTA_HARDWARE_ID") and re.match("^[a-zA-Z0-9_-]*$", d.getVar("SOTA_HARDWARE_ID")) is None: + status.addresult("SOTA_HARDWARE_ID Should only contain characters from the character set [a-zA-Z0-9_-].\n") + if d.getVar("SOTA_CLIENT_FEATURES") is not None: + for feat in d.getVar("SOTA_CLIENT_FEATURES").split(' '): + if feat not in ("hsm", "serialcan", "ubootenv", ""): + status.addresult("SOTA_CLIENT_FEATURES should only include hsm, serialcan and bootenv.\n") break - var = d.getVar("{SOTA_HARDWARE_ID") - if var != "": - for ch in var: - if not (ch >= 'a' and ch <= 'z' or ch >= 'A' and ch <= 'Z' or ch >= '0' and ch <= '9' or ch = '_' or ch == '-'): - status.addresult("SOTA_HARDWARE_ID Should only contain characters from the character set [a-zA-Z0-9_-].\n") - break - var = d.getVar("SOTA_CLIENT_FEATURES") - if var != "hsm" and var != "secondary-network" and var != "": - status.addresult("SOTA_CLIENT_FEATURES should be set to hsm or secondary-network.\n") - var = d.getVar("OSTREE_UPDATE_SUMMARY") - if var != "0" and var != "1" and var != "": + if d.getVar("SOTA_CLIENT_PROV") is not None: + prov = d.getVar("SOTA_CLIENT_PROV").strip() + if prov not in ("aktualizr-shared-prov", "aktualizr-device-prov", "aktualizr-device-prov-hsm", ""): + status.addresult("Valid options for SOTA_CLIENT_PROV are aktualizr-shared-prov, aktualizr-device-prov and aktualizr-device-prov-hsm.\n") + if d.getVar("GARAGE_TARGET_URL") and re.match("^(https?|ftp|file)://.+$", d.getVar("GARAGE_TARGET_URL")) is None: + status.addresult("GARAGE_TARGET_URL is set to a bad url.\n") + if d.getVar("SOTA_POLLING_SEC") and re.match("^(0|\+?[1-9][0-9]*)$", d.getVar("SOTA_POLLING_SEC")) is None: + status.addresult("SOTA_POLLING_SEC should be an integer.\n") + if d.getVar("OSTREE_REPO") and re.match("^\/([a-zA-Z0-9_-]+\/?)+$", d.getVar("OSTREE_REPO")) is None: + status.addresult("OSTREE_REPO is not set correctly. Path to your OSTree repository is invalid.\n") + config = d.getVar("SOTA_SECONDARY_CONFIG") + if config is not None and config != "": + path = os.path.abspath(config) + if not os.path.exists(path): + status.addresult("SOTA_SECONDARY_CONFIG is not set correctly. The file containing JSON configuration for secondaries does not exist.\n") + credentials = d.getVar("SOTA_PACKED_CREDENTIALS") + if credentials is not None and credentials != "": + path = os.path.abspath(credentials) + if not os.path.exists(path): + status.addresult("SOTA_PACKED_CREDENTIALS is not set correctly. The zipped credentials file does not exist.\n") + if d.getVar("OSTREE_UPDATE_SUMMARY") and d.getVar("OSTREE_UPDATE_SUMMARY") not in ("0", "1", ""): status.addresult("OSTREE_UPDATE_SUMMARY should be set to 0 or 1.\n") - var = d.getVar("OSTREE_DEPLOY_DEVICETREE") - if var != "0" and var != "1" and var != "": + if d.getVar("OSTREE_DEPLOY_DEVICETREE") and d.getVar("OSTREE_DEPLOY_DEVICETREE") not in ("0", "1", ""): status.addresult("OSTREE_DEPLOY_DEVICETREE should be set to 0 or 1.\n") - var = GARAGE_SIGN_AUTOVERSION - if var != "0" and var != "1" and var != "": + if d.getVar("GARAGE_SIGN_AUTOVERSION") and d.getVar("GARAGE_SIGN_AUTOVERSION") not in ("0", "1", ""): status.addresult("GARAGE_SIGN_AUTOVERSION should be set to 0 or 1.\n") - + if d.getVar("SOTA_DEPLOY_CREDENTIALS") and d.getVar("SOTA_DEPLOY_CREDENTIALS") not in ("0", "1", ""): + status.addresult("SOTA_DEPLOY_CREDENTIALS should be set to 0 or 1.\n") + def sota_raise_sanity_error(msg, d): if d.getVar("SANITY_USE_EVENTS") == "1": bb.event.fire(bb.event.SanityCheckFailed(msg), d) @@ -60,6 +76,7 @@ def sota_check_sanity(sanity_data): sota_check_overrides(status, sanity_data) sota_check_required_variables(status, sanity_data) + sota_check_variables_validity(status, sanity_data) if status.messages != "": sota_raise_sanity_error(sanity_data.expand(status.messages), sanity_data) @@ -78,19 +95,3 @@ python sota_check_sanity_eventhandler() { return } - -# Translate old provisioning recipe names into the new versions. -python () { - prov = d.getVar("SOTA_CLIENT_PROV") - if prov == "aktualizr-auto-prov": - bb.warn('aktualizr-auto-prov is deprecated. Please use aktualizr-shared-prov instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-shared-prov") - elif prov == "aktualizr-ca-implicit-prov": - bb.warn('aktualizr-ca-implicit-prov is deprecated. Please use aktualizr-device-prov instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov") - elif prov == "aktualizr-hsm-prov": - bb.warn('aktualizr-hsm-prov is deprecated. Please use aktualizr-device-prov-hsm instead.') - d.setVar("SOTA_CLIENT_PROV", "aktualizr-device-prov-hsm") -} - - -- cgit v1.2.3-54-g00ecf From 6848a157080b63c340512f63e9ff7f5b70997c6f Mon Sep 17 00:00:00 2001 From: Zee314159 <252806294@qq.com> Date: Wed, 27 Nov 2019 04:47:12 +0100 Subject: keep new name suggestion remove ostree repo check Signed-off-by: Zee314159 <252806294@qq.com> --- classes/sota_sanity.bbclass | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/classes/sota_sanity.bbclass b/classes/sota_sanity.bbclass index 3678e33..1339fb3 100644 --- a/classes/sota_sanity.bbclass +++ b/classes/sota_sanity.bbclass @@ -27,12 +27,16 @@ def sota_check_variables_validity(status, d): prov = d.getVar("SOTA_CLIENT_PROV").strip() if prov not in ("aktualizr-shared-prov", "aktualizr-device-prov", "aktualizr-device-prov-hsm", ""): status.addresult("Valid options for SOTA_CLIENT_PROV are aktualizr-shared-prov, aktualizr-device-prov and aktualizr-device-prov-hsm.\n") + if prov == "aktualizr-auto-prov": + bb.warn('aktualizr-auto-prov is deprecated. Please use aktualizr-shared-prov instead.') + elif prov == "aktualizr-ca-implicit-prov": + bb.warn('aktualizr-ca-implicit-prov is deprecated. Please use aktualizr-device-prov instead.') + elif prov == "aktualizr-hsm-prov": + bb.warn('aktualizr-hsm-prov is deprecated. Please use aktualizr-device-prov-hsm instead.') if d.getVar("GARAGE_TARGET_URL") and re.match("^(https?|ftp|file)://.+$", d.getVar("GARAGE_TARGET_URL")) is None: status.addresult("GARAGE_TARGET_URL is set to a bad url.\n") - if d.getVar("SOTA_POLLING_SEC") and re.match("^(0|\+?[1-9][0-9]*)$", d.getVar("SOTA_POLLING_SEC")) is None: + if d.getVar("SOTA_POLLING_SEC") and re.match("^[1-9]\d*|0$", d.getVar("SOTA_POLLING_SEC")) is None: status.addresult("SOTA_POLLING_SEC should be an integer.\n") - if d.getVar("OSTREE_REPO") and re.match("^\/([a-zA-Z0-9_-]+\/?)+$", d.getVar("OSTREE_REPO")) is None: - status.addresult("OSTREE_REPO is not set correctly. Path to your OSTree repository is invalid.\n") config = d.getVar("SOTA_SECONDARY_CONFIG") if config is not None and config != "": path = os.path.abspath(config) -- cgit v1.2.3-54-g00ecf From c053ab0840f0c7f70a61726c1f7c2861b72a6711 Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Fri, 29 Nov 2019 11:35:21 +0100 Subject: Add --bootloader flag to specify path to a custom u-boot rom. Also should work for other bootloaders. This is intended to help with keeping around older versions of images with a similarly old bootloader. Signed-off-by: Patrick Vacek --- lib/oeqa/selftest/cases/testutils.py | 1 + scripts/qemucommand.py | 2 ++ scripts/run-qemu-ota | 1 + 3 files changed, 4 insertions(+) diff --git a/lib/oeqa/selftest/cases/testutils.py b/lib/oeqa/selftest/cases/testutils.py index 802d665..ea7781b 100644 --- a/lib/oeqa/selftest/cases/testutils.py +++ b/lib/oeqa/selftest/cases/testutils.py @@ -33,6 +33,7 @@ def qemu_boot_image(imagename, **kwargs): # subdirectory. args.dir = 'tmp/deploy/images' args.efi = kwargs.get('efi', False) + args.bootloader = kwargs.get('bootloader', None) args.machine = kwargs.get('machine', None) args.mem = kwargs.get('mem', '128M') qemu_use_kvm = get_bb_var("QEMU_USE_KVM") diff --git a/scripts/qemucommand.py b/scripts/qemucommand.py index 9b23c54..cef434d 100644 --- a/scripts/qemucommand.py +++ b/scripts/qemucommand.py @@ -58,6 +58,8 @@ class QemuCommand(object): if args.efi: self.bios = 'OVMF.fd' else: + if args.bootloader: + uboot_path = args.bootloader uboot_path = abspath(join(args.dir, self.machine, 'u-boot-qemux86-64.rom')) if self.overlay: new_uboot_path = self.overlay + '.u-boot.rom' diff --git a/scripts/run-qemu-ota b/scripts/run-qemu-ota index 232ee11..e2a4103 100755 --- a/scripts/run-qemu-ota +++ b/scripts/run-qemu-ota @@ -20,6 +20,7 @@ def main(): help='Boot using UEFI rather than U-Boot. This requires the image to be built with ' + 'OSTREE_BOOTLOADER = "grub" and OVMF.fd firmware to be installed (try "apt install ovmf")', action='store_true') + parser.add_argument('--bootloader', default=None, help="Path to bootloader, e.g. a u-boot ROM") parser.add_argument('--machine', default=None, help="Target MACHINE") kvm_group = parser.add_argument_group() kvm_group.add_argument('--force-kvm', help='Force use of KVM (default is to autodetect)', -- cgit v1.2.3-54-g00ecf From 0fb36f0039778ba19b1040b38169c392e6102507 Mon Sep 17 00:00:00 2001 From: Laurent Bonnans Date: Wed, 4 Dec 2019 17:21:52 +0100 Subject: Set PKCS11_ENGINE_PATH when using aktualizr with HSM Signed-off-by: Laurent Bonnans --- recipes-sota/aktualizr/aktualizr-device-prov-hsm.bb | 2 +- recipes-sota/aktualizr/aktualizr_git.bb | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/recipes-sota/aktualizr/aktualizr-device-prov-hsm.bb b/recipes-sota/aktualizr/aktualizr-device-prov-hsm.bb index 4eadb77..8f28c03 100644 --- a/recipes-sota/aktualizr/aktualizr-device-prov-hsm.bb +++ b/recipes-sota/aktualizr/aktualizr-device-prov-hsm.bb @@ -14,7 +14,7 @@ DEPENDS = "aktualizr" # If the config file from aktualizr used here is changed, you will need to bump # the version here because of SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS! PV = "1.0" -PR = "6" +PR = "7" SRC_URI = "" diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index cef66ab..c867b6e 100644 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -30,7 +30,7 @@ SRC_URI = " \ SRC_URI[garagesign.md5sum] = "de0877ecb693fd48ec11052e51b0ff1a" SRC_URI[garagesign.sha256sum] = "cf25759574c9c1206835daeaf6fc345f6db7b5ccdb95fb828c86d7451f78f0aa" -SRCREV = "1c2f495e47a41cc7c9ad969ff42496208ad6b23a" +SRCREV = "6b1da3e473f3c9963a3221607dabc4d0cde06968" BRANCH ?= "master" S = "${WORKDIR}/git" @@ -48,12 +48,13 @@ SYSTEMD_SERVICE_${PN}-secondary = "aktualizr-secondary.service" EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release ${@bb.utils.contains('PTEST_ENABLED', '1', '-DTESTSUITE_VALGRIND=on', '', d)}" GARAGE_SIGN_OPS = "${@ d.expand('-DGARAGE_SIGN_ARCHIVE=${WORKDIR}/cli-${GARAGE_SIGN_PV}.tgz') if d.getVar('GARAGE_SIGN_AUTOVERSION') != '1' else ''}" +PKCS11_ENGINE_PATH = "${libdir}/engines-1.1/pkcs11.so" PACKAGECONFIG ?= "ostree ${@bb.utils.filter('SOTA_CLIENT_FEATURES', 'hsm serialcan ubootenv', d)}" PACKAGECONFIG_class-native = "sota-tools" PACKAGECONFIG[warning-as-error] = "-DWARNING_AS_ERROR=ON,-DWARNING_AS_ERROR=OFF," PACKAGECONFIG[ostree] = "-DBUILD_OSTREE=ON,-DBUILD_OSTREE=OFF,ostree," -PACKAGECONFIG[hsm] = "-DBUILD_P11=ON,-DBUILD_P11=OFF,libp11," +PACKAGECONFIG[hsm] = "-DBUILD_P11=ON -DPKCS11_ENGINE_PATH=${PKCS11_ENGINE_PATH},-DBUILD_P11=OFF,libp11," PACKAGECONFIG[sota-tools] = "-DBUILD_SOTA_TOOLS=ON ${GARAGE_SIGN_OPS},-DBUILD_SOTA_TOOLS=OFF,glib-2.0," PACKAGECONFIG[load-tests] = "-DBUILD_LOAD_TESTS=ON,-DBUILD_LOAD_TESTS=OFF," PACKAGECONFIG[serialcan] = ",,,slcand-start" -- cgit v1.2.3-54-g00ecf From 79677fc984628da9576a6a54485e356077789323 Mon Sep 17 00:00:00 2001 From: Laurent Bonnans Date: Thu, 12 Dec 2019 15:11:39 +0100 Subject: Update aktualizr to 2019.11 Signed-off-by: Laurent Bonnans --- recipes-sota/aktualizr/aktualizr_git.bb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index c867b6e..bd9c3f8 100644 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN}-ptest += "bash cmake curl net-tools python3-core python3-misc pyt PV = "1.0+git${SRCPV}" PR = "7" -GARAGE_SIGN_PV = "0.7.0-49-g5ffd420" +GARAGE_SIGN_PV = "0.7.0-61-g909b804" SRC_URI = " \ gitsm://github.com/advancedtelematic/aktualizr;branch=${BRANCH};name=aktualizr \ @@ -27,10 +27,10 @@ SRC_URI = " \ ${@ d.expand("https://ats-tuf-cli-releases.s3-eu-central-1.amazonaws.com/cli-${GARAGE_SIGN_PV}.tgz;unpack=0;name=garagesign") if d.getVar('GARAGE_SIGN_AUTOVERSION') != '1' else ''} \ " -SRC_URI[garagesign.md5sum] = "de0877ecb693fd48ec11052e51b0ff1a" -SRC_URI[garagesign.sha256sum] = "cf25759574c9c1206835daeaf6fc345f6db7b5ccdb95fb828c86d7451f78f0aa" +SRC_URI[garagesign.md5sum] = "3e1ae6d49cc66fda37cef47f849d9609" +SRC_URI[garagesign.sha256sum] = "8d49b83efa222db2f092ee14348459ee1bfd048552b57c3cb5ab48db8e347d82" -SRCREV = "6b1da3e473f3c9963a3221607dabc4d0cde06968" +SRCREV = "6633d0d0e6353fdf8970001dc8da70e6a28203cd" BRANCH ?= "master" S = "${WORKDIR}/git" -- cgit v1.2.3-54-g00ecf