-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathrpi-imager-json.sh
executable file
·116 lines (104 loc) · 3.31 KB
/
rpi-imager-json.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv)
# Run this script to generate a json file compatible with the RPi Imager Tool
#
# example: "./rpi-imager-json.sh 10.0.4"
if [ $# -eq 0 ]; then
echo "usage: ${0} VERSION"
exit 1
fi
# Abort at first error
set -e
VERSION="$1"
# assumes 3 group version string (ex: 12.0.0)
VERSION_MAJOR="${VERSION%%.*}"
RELEASES_DIR="/var/www/releases"
# order here will be the order devices appear in json
DEVICES="RPi5 RPi4 RPi2 RPi"
ARCHES="aarch64 arm"
IMAGER_JSON="${RELEASES_DIR}/os_list_imagingutility_le.json"
# Compare input against regex
if [[ $VERSION =~ ^[0-9]{1,2}.[0-9].[0-9]{1,3}$ ]]; then
echo "Creating compatible rpi-imager json file for LibreELEC $VERSION"
else
echo "ERROR: Not a valid release number!" >&2; exit 1
fi
# CREATE JSON FILE USED BY THE Pi Foundation IMAGER TOOL
# Header
cat > "${IMAGER_JSON}" << EOL
{
"os_list": [
EOL
FIRST_DEVICE="yes"
for DEVICE in $DEVICES; do
for ARCH in $ARCHES; do
if [ -f ${RELEASES_DIR}/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz ]; then
# Generate SHA256
rpi_sha256="$(gzip -d -c ${RELEASES_DIR}/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz | sha256sum | cut -d ' ' -f 1)"
# Generate SIZE
rpi_size="$(stat -c %s ${RELEASES_DIR}/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz)"
# Generate CREATE DATE
rpi_date="$(stat -c %y ${RELEASES_DIR}/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz | cut -d ' ' -f 1)"
# Generate EXTRACTED SIZE
rpi_extracted="$(gzip -l ${RELEASES_DIR}/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz | sed -n '2p' | awk '{print $2}')"
case "$DEVICE" in
RPi)
DESC="RPi0/RPi1"
rpi_device_compat='"pi1-32bit"'
;;
RPi2)
DESC="RPi2/RPi3"
rpi_device_compat='"pi2-32bit", "pi3-32bit"'
;;
RPi4)
DESC="RPi4"
if [ ${VERSION_MAJOR} -ge 12 ]; then
rpi_device_compat='"pi4-64bit"'
else
rpi_device_compat='"pi4-32bit"'
fi
;;
RPi5)
DESC="RPi5"
if [ ${VERSION_MAJOR} -ge 12 ]; then
rpi_device_compat='"pi5-64bit"'
else
rpi_device_compat='"pi5-32bit"'
fi
;;
*)
echo "ERROR: unknown device ${DEVICE}!" >&2; exit 1
;;
esac
else
echo "INFO: no ${VERSION} image file found for ${DEVICE}.${ARCH}"
continue
fi
if [ "$FIRST_DEVICE" = "no" ]; then
cat >> "${IMAGER_JSON}" << EOL
},
EOL
fi
cat >> "${IMAGER_JSON}" << EOL
{
"url": "https://releases.libreelec.tv/LibreELEC-${DEVICE}.${ARCH}-${VERSION}.img.gz",
"extract_size": ${rpi_extracted},
"extract_sha256": "${rpi_sha256}",
"image_download_size": ${rpi_size},
"description": "A fast and user-friendly Kodi mediacenter distro for ${DESC}",
"icon": "https://releases.libreelec.tv/noobs/LibreELEC_RPi/LibreELEC_RPi.png",
"name": "LibreELEC (${DESC})",
"release_date": "${rpi_date}",
"devices": [${rpi_device_compat}],
"website": "https://libreelec.tv"
EOL
FIRST_DEVICE="no"
done
done
cat >> "${IMAGER_JSON}" << EOL
}
]
}
EOL
exit