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

Backport JSON info files patch #12

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
7 changes: 6 additions & 1 deletion meta
Original file line number Diff line number Diff line change
Expand Up @@ -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"
#)
162 changes: 162 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,162 @@
From c3767e8d7d659e099bb6c23076793ac2cde72663 Mon Sep 17 00:00:00 2001
From: Paul Spooren <mail@aparcar.org>
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 <mail@aparcar.org>
---
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

4 changes: 4 additions & 0 deletions scripts/activate-json-info-files.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash

chmod +x ./scripts/json_*.py
echo "CONFIG_JSON_ADD_IMAGE_INFO=y" >> .config