From 861982f905756fa719079872e31da948506bc3dc Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Thu, 8 Aug 2019 11:33:09 -1000 Subject: [PATCH] Backport JSON info files patch While unmerged, patch it here https://github.com/openwrt/openwrt/pull/2192 Signed-off-by: Paul Spooren --- example-snapshot.sh | 4 +- meta | 7 +- ...ate-JSON-files-containing-image-info.patch | 162 ++++++++++++++++++ scripts/activate-json-info-files.sh | 4 + 4 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 patches/0001-build-create-JSON-files-containing-image-info.patch create mode 100644 scripts/activate-json-info-files.sh diff --git a/example-snapshot.sh b/example-snapshot.sh index d3dfb31..27fe6d1 100755 --- a/example-snapshot.sh +++ b/example-snapshot.sh @@ -3,5 +3,5 @@ export VERSION="snapshot" export TARGET="ath79/generic" export PROFILE="etactica_eg200" export PACKAGES="tmux htop" - -./meta image +./meta info +#./meta image diff --git a/meta b/meta index 8b23c19..adb7bae 100755 --- a/meta +++ b/meta @@ -203,5 +203,10 @@ make "$1" \ PACKAGES="$PACKAGES" \ BIN_DIR="$BIN_DIR" \ EXTRA_IMAGE_NAME="$EXTRA_IMAGE_NAME" \ - FILES="$FILES" + FILES="$FILES" \ + JSON_ADD_IMAGE_INFO=y ) + +#[ "$1" = "image" ] && (cd "$IB_DIR" && +#make "jsonmergeimageinfo" OUTPUT_DIR="$ROOT_DIR/bin/$DISTRO/$VERSION_PATH" +#) diff --git a/patches/0001-build-create-JSON-files-containing-image-info.patch b/patches/0001-build-create-JSON-files-containing-image-info.patch new file mode 100644 index 0000000..226796f --- /dev/null +++ b/patches/0001-build-create-JSON-files-containing-image-info.patch @@ -0,0 +1,162 @@ +From c3767e8d7d659e099bb6c23076793ac2cde72663 Mon Sep 17 00:00:00 2001 +From: Paul Spooren +Date: Sun, 18 Aug 2019 09:56:45 -1000 +Subject: [PATCH] build: create JSON files containing image info + +The JSON info files contain details about the created firmware images +per device and are stored next to the created images. + +The JSON files are stored as "$(IMAGE_PREFIX).json" and contain some +device/image meta data as well as a list of created firmware images. + +An example of openwrt-ramips-rt305x-aztech_hw550-3g.json + + { + "id": "aztech_hw550-3g", + "image_prefix": "openwrt-ramips-rt305x-aztech_hw550-3g", + "images": [ + { + "name": "openwrt-ramips-rt305x-aztech_hw550-3g-squashfs-sysupgrade.bin", + "sha256": "db2b34b0ec4a83d9bf612cf66fab0dc3722b191cb9bedf111e5627a4298baf20", + "type": "sysupgrade" + } + ], + "metadata_version": 1, + "supported_devices": [ + "aztech,hw550-3g", + "hw550-3g" + ], + "target": "ramips/rt305x", + "titles": [ + { + "model": "HW550-3G", + "vendor": "Aztech" + }, + { + "model": "ALL0239-3G", + "vendor": "Allnet" + } + ], + "version_commit": "r10920+123-0cc87b3bac", + "version_number": "SNAPSHOT" + } + +Signed-off-by: Paul Spooren +--- + include/image.mk | 30 ++++++++++++++++++- + scripts/json_add_image_info.py | 55 ++++++++++++++++++++++++++++++++++ + 3 files changed, 91 insertions(+), 1 deletion(-) + create mode 100755 scripts/json_add_image_info.py + +diff --git a/include/image.mk b/include/image.mk +index 5d54bc7947..7608b86adc 100644 +--- a/include/image.mk ++++ b/include/image.mk +@@ -571,7 +571,33 @@ define Device/Build/image + + $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) + cp $$^ $$@ +- ++ $(if $(CONFIG_JSON_ADD_IMAGE_INFO), \ ++ DEVICE_ID="$(DEVICE_NAME)" \ ++ TOPDIR="$(TOPDIR)" \ ++ BIN_DIR="$(BIN_DIR)" \ ++ IMAGE_NAME="$(IMAGE_NAME)" \ ++ IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \ ++ IMAGE_PREFIX="$(IMAGE_PREFIX)" \ ++ DEVICE_VENDOR="$(DEVICE_VENDOR)" \ ++ DEVICE_MODEL="$(DEVICE_MODEL)" \ ++ DEVICE_VARIANT="$(DEVICE_VARIANT)" \ ++ DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \ ++ DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \ ++ DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \ ++ DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \ ++ DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \ ++ DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \ ++ DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \ ++ DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \ ++ DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \ ++ DEVICE_TITLE="$(DEVICE_TITLE)" \ ++ TARGET="$(BOARD)" \ ++ SUBTARGET="$(SUBTARGET)" \ ++ VERSION_NUMBER="$(VERSION_NUMBER)" \ ++ VERSION_CODE="$(VERSION_CODE)" \ ++ SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \ ++ $(TOPDIR)/scripts/json_add_image_info.py \ ++ ) + endef + + define Device/Build/artifact +@@ -589,6 +615,8 @@ define Device/Build/artifact + endef + + define Device/Build ++ $(shell rm -f $(BIN_DIR)/$(IMG_PREFIX)-$(1).json) ++ + $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1))) + $(call Device/Build/kernel,$(1)) + +diff --git a/scripts/json_add_image_info.py b/scripts/json_add_image_info.py +new file mode 100755 +index 0000000000..44b4031f85 +--- /dev/null ++++ b/scripts/json_add_image_info.py +@@ -0,0 +1,55 @@ ++#!/usr/bin/env python3 ++ ++import json ++import os ++import hashlib ++ ++ ++def e(variable, default=None): ++ return os.environ.get(variable, default) ++ ++ ++json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX")) ++ ++with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file: ++ image_hash = hashlib.sha256(image_file.read()).hexdigest() ++ ++ ++def get_titles(): ++ titles = [] ++ for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]: ++ title = {} ++ for var in ["vendor", "model", "variant"]: ++ if e("DEVICE_{}{}".format(prefix, var.upper())): ++ title[var] = e("DEVICE_{}{}".format(prefix, var.upper())) ++ ++ if title: ++ titles.append(title) ++ ++ if not titles: ++ titles.append({"title": e("DEVICE_TITLE")}) ++ ++ return titles ++ ++ ++if not os.path.exists(json_path): ++ device_info = { ++ "id": e("DEVICE_ID"), ++ "image_prefix": e("IMAGE_PREFIX"), ++ "images": [], ++ "metadata_version": 1, ++ "supported_devices": e("SUPPORTED_DEVICES").split(), ++ "target": "{}/{}".format(e("TARGET"), e("SUBTARGET", "generic")), ++ "titles": get_titles(), ++ "version_commit": e("VERSION_CODE"), ++ "version_number": e("VERSION_NUMBER"), ++ } ++else: ++ with open(json_path, "r") as json_file: ++ device_info = json.load(json_file) ++ ++image_info = {"type": e("IMAGE_TYPE"), "name": e("IMAGE_NAME"), "sha256": image_hash} ++device_info["images"].append(image_info) ++ ++with open(json_path, "w") as json_file: ++ json.dump(device_info, json_file, sort_keys=True, indent=" ") +-- +2.23.0 + diff --git a/scripts/activate-json-info-files.sh b/scripts/activate-json-info-files.sh new file mode 100644 index 0000000..6a5a475 --- /dev/null +++ b/scripts/activate-json-info-files.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +chmod +x ./scripts/json_*.py +echo "CONFIG_JSON_ADD_IMAGE_INFO=y" >> .config