Skip to content
This repository has been archived by the owner on Feb 25, 2020. It is now read-only.

Commit

Permalink
Backport JSON info files patch
Browse files Browse the repository at this point in the history
While unmerged, patch it here
openwrt/openwrt#2192

Signed-off-by: Paul Spooren <[email protected]>
  • Loading branch information
aparcar committed Aug 22, 2019
1 parent 20e9145 commit 60b2fd0
Show file tree
Hide file tree
Showing 5 changed files with 395 additions and 2 deletions.
4 changes: 2 additions & 2 deletions example-snapshot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 4 additions & 0 deletions meta
Original file line number Diff line number Diff line change
Expand Up @@ -205,3 +205,7 @@ make "$1" \
EXTRA_IMAGE_NAME="$EXTRA_IMAGE_NAME" \
FILES="$FILES"
)

#[ "$1" = "image" ] && (cd "$IB_DIR" &&
#make "jsonmergeimageinfo" OUTPUT_DIR="$ROOT_DIR/bin/$DISTRO/$VERSION_PATH"
#)
156 changes: 156 additions & 0 deletions patches/0001-build-create-JSON-files-containing-image-info.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
From f9777b0434a1854e723026347b3e06b19d8a456b Mon Sep 17 00:00:00 2001
From: Paul Spooren <[email protected]>
Date: Sun, 18 Aug 2019 09:56:45 -1000
Subject: [PATCH 1/2] 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-ath79-generic-tplink_tl-wdr3600-v1.json

{
"id": "tplink_tl-wdr3600-v1",
"image_prefix": "openwrt-ath79-generic-tplink_tl-wdr3600-v1",
"image_size": "7936k",
"images": [
{
"name": "openwrt-ath79-generic-tplink_tl-wdr3600-v1-squashfs-sysupgrade.bin",
"sha256": "60ef977447d57ffe406f1f6170860be8043654d961933b73645850b25c6a1990",
"type": "sysupgrade"
},
{
"name": "openwrt-ath79-generic-tplink_tl-wdr3600-v1-squashfs-factory.bin",
"sha256": "c6fae436b13f512e65ef05c0ae94308dd1cc9e20fd929dd3e0422574fe58d2b5",
"type": "factory"
}
],
"metadata_version": 1,
"model": "TL-WDR3600",
"supported_devices": [
"tplink,tl-wdr3600-v1",
"tl-wdr4300"
],
"target": "ath79/generic",
"title": [
"TP-Link TL-WDR3600 v1"
],
"variant": "v1",
"vendor": "TP-Link",
"version_commit": "r10764-84c103509a",
"version_number": "SNAPSHOT"
}

Signed-off-by: Paul Spooren <[email protected]>
---
config/Config-build.in | 7 +++++
include/image.mk | 25 ++++++++++++++++-
scripts/json_add_image_info.py | 51 ++++++++++++++++++++++++++++++++++
3 files changed, 82 insertions(+), 1 deletion(-)
create mode 100755 scripts/json_add_image_info.py

diff --git a/include/image.mk b/include/image.mk
index c6a6ab7993..cfb2e2a90a 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -554,7 +554,28 @@ 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_SIZE="$(IMAGE_SIZE)" \
+ IMAGE_PREFIX="$(IMAGE_PREFIX)" \
+ DEVICE_TITLE="$(DEVICE_TITLE)" \
+ DEVICE_VENDOR="$(DEVICE_VENDOR)" \
+ DEVICE_MODEL="$(DEVICE_MODEL)" \
+ DEVICE_VARIANT="$(DEVICE_VARIANT)" \
+ DEVICE_ALT0_TITLE="$(DEVICE_ALT0_TITLE)" \
+ DEVICE_ALT1_TITLE="$(DEVICE_ALT1_TITLE)" \
+ DEVICE_ALT2_TITLE="$(DEVICE_ALT2_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
@@ -572,6 +593,8 @@ define Device/Build/artifact
endef

define Device/Build
+ $(if $(CONFIG_JSON_ADD_IMAGE_INFO), $(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..31b8d1c123
--- /dev/null
+++ b/scripts/json_add_image_info.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+
+import json
+import os
+import hashlib
+
+
+def e(variable):
+ return os.environ.get(variable)
+
+
+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()
+
+if not os.path.exists(json_path):
+ device_info = {
+ "id": e("DEVICE_ID"),
+ "image_prefix": e("IMAGE_PREFIX"),
+ "image_size": e("IMAGE_SIZE"),
+ "images": [],
+ "metadata_version": 1,
+ "model": e("DEVICE_MODEL"),
+ "supported_devices": e("SUPPORTED_DEVICES").split(),
+ "target": "{}/{}".format(e("TARGET"), e("SUBTARGET")),
+ "title": list(
+ filter(
+ None,
+ [
+ e("DEVICE_TITLE"),
+ e("DEVICE_ALT0_TITLE"),
+ e("DEVICE_ALT1_TITLE"),
+ e("DEVICE_ALT2_TITLE"),
+ ],
+ )
+ ),
+ "variant": e("DEVICE_VARIANT"),
+ "vendor": e("DEVICE_VENDOR"),
+ "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.20.1

Loading

0 comments on commit 60b2fd0

Please sign in to comment.