#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) # Run this script to unpack a new noobs release # # usage (to unpack a 9.0.2 release and update JSON files) "sudo bash noobs_unpack.sh 9.0.2" if [ $# -eq 0 ]; then echo "usage: $0 VERSION [devices...]" exit 1 fi # Abort at first error set -e # Get input VERSION="$1" shift if [ $# -eq 0 ]; then DEVICES="RPi4" IMAGER_JSON="os_list_imagingutility_le.json" else DEVICES="$@" IMAGER_JSON="os_list_imagingutility_le.json.partial" fi # Compare input against regex if [[ $VERSION =~ ^[0-9]{1,2}.[0-9].[0-9]{1,3}$ ]]; then echo "Creating NOOBS files for LibreELEC $VERSION" else echo "ERROR: Not a valid release number!" >&2; exit 1 fi # Create noobs dir mkdir -p noobs # Unpack for DEVICE in $DEVICES; do if [ -f LibreELEC-${DEVICE}.arm-"$VERSION"-noobs.tar ]; then tar -xvf LibreELEC-${DEVICE}.arm-"$VERSION"-noobs.tar rm -rf noobs/LibreELEC_${DEVICE} mv LibreELEC-${DEVICE}.arm-"$VERSION"-noobs/LibreELEC_${DEVICE} noobs/ rm -rf LibreELEC-${DEVICE}.arm-"$VERSION"-noobs else echo "ERROR: No ${DEVICE} noobs file present!" >&2; exit 1 fi done # Create symlinks to support old noobs NOOBS="/var/www/releases/noobs" for DEVICE in $DEVICES; do ln -sf $NOOBS/LibreELEC_${DEVICE}/System.tar.xz $NOOBS/LibreELEC_${DEVICE}/LibreELEC_${DEVICE}_System.tar.xz ln -sf $NOOBS/LibreELEC_${DEVICE}/Storage.tar.xz $NOOBS/LibreELEC_${DEVICE}/LibreELEC_${DEVICE}_Storage.tar.xz done # perms chown -R www-data:www-data noobs # Update mirrorbrain /usr/local/bin/mb makehashes /var/www/releases -t /var/www/mirrorbrain-hashes # NEXT, UPDATE THE 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 # Generate SHA256 rpi_sha256="$(gzip -d -c LibreELEC-${DEVICE}.arm-${VERSION}.img.gz | sha256sum | cut -d ' ' -f 1)" # Generate SIZE rpi_size="$(stat -c %s LibreELEC-${DEVICE}.arm-${VERSION}.img.gz)" # Generate CREATE DATE rpi_date="$(stat -c %y LibreELEC-${DEVICE}.arm-${VERSION}.img.gz | cut -d ' ' -f 1)" # Generate EXTRACTED SIZE rpi_extracted="$(gzip -l LibreELEC-${DEVICE}.arm-${VERSION}.img.gz | sed -n '2p' | awk '{print $2}')" case "$DEVICE" in RPi) DESC="RPi0/RPi1" ;; RPi2) DESC="RPi2/RPi3" ;; RPi4) DESC="RPi4" ;; *) echo "ERROR: unknown device ${DEVICE}!" >&2; exit 1 ;; esac if [ "$FIRST_DEVICE" = "no" ]; then cat >> "${IMAGER_JSON}" << EOL }, EOL fi cat >> "${IMAGER_JSON}" << EOL { "url": "https://releases.libreelec.tv/LibreELEC-${DEVICE}.arm-${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}", "website": "https://libreelec.tv" EOL FIRST_DEVICE="no" done cat >> "${IMAGER_JSON}" << EOL } ] } EOL exit