#!/bin/bash # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2020-present Fewtarius . /etc/profile ORGANIZATION="${GIT_ORGANIZATION}" BRANCH="$(get_setting updates.branch)" case ${BRANCH} in dev) PROJECT="${GIT_REPO}-dev" ;; *) PROJECT="${GIT_REPO}" ;; esac FORCE="$(get_setting updates.force)" GIT_REPO="https://github.com/${ORGANIZATION}/${PROJECT}" GIT_API="https://api.github.com/repos/${ORGANIZATION}/${PROJECT}" UPDATE_PATH="/storage/.update" EXTENSION="tar" function check_network() { GW=$(ip route | awk '/eth0/ {a=$0} END{print $1}') if [[ ${GW} =~ [0-9] ]] then echo true else echo false fi } get_available() { echo $(df | awk '/'$1'/ {printf $4; exit}') } get_size() { echo $(df | awk '/'$1'/ {printf $2; exit}') } check_space() { MYSIZE="$(get_$1 $2)" VOLNAME="$3" REQUIRED="$4" if [ "${MYSIZE}" -lt "${REQUIRED}" ] then NEEDED=$(( (${REQUIRED} - ${MYSIZE} ) / 1024 )) echo -e "There is not enough free space available ${VOLNAME} to install this update. Free up an additional ${NEEDED}MB, or reflash the newer version." echo "Exiting in 5 seconds..." && sleep 5 exit 1 fi } get_changelog() { echo "Fetching change log." echo -e "Change Log\n" >/storage/.cache/changelog lynx --dump "${GIT_REPO}/releases/latest" | awk '/Assets [0-9]/ {exit}; /Change Log/{p++;if(p==1){next}}p;' >>/storage/.cache/changelog } ONLINE_STATUS=$(check_network) if [ ! "${ONLINE_STATUS}" == true ] then echo "System not online, cannot continue..." echo "Exiting in 5 seconds..." && sleep 5 exit 0 fi echo -e "=> ${OS_NAME} UPGRADE UTILITY" # Check storage check_space size flash boot 2048000 2>/dev/null if [ "$(mountpoint -q /storage/roms)" ] then check_space available .update GAMES 4096000 2>/dev/null fi # Download LATEST_RELEASE_TAG=$(curl -H 'Cache-Control: no-cache' -Ls "${GIT_API}/releases" | python -c "import sys, json; print(json.load(sys.stdin)[0]['tag_name'])") if [ "${OS_VERSION}" -ge "${LATEST_RELEASE_TAG}" ] && [ ! "${FORCE}" = "1" ] then echo "No new updates are available..." echo "Exiting in 5 seconds..." && sleep 5 exit 0 fi echo -e "\nFetching: ${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION}" curl -Lo "${UPDATE_PATH}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION}" "${GIT_REPO}/releases/download/${LATEST_RELEASE_TAG}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.tar" echo -e "Fetching: ${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION}.sha256" curl -Lo "${UPDATE_PATH}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION}.sha256" "${GIT_REPO}/releases/download/${LATEST_RELEASE_TAG}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.tar.sha256" echo -e "\nVerifying download, please wait..." # Verify MYSUM=$(sha256sum ${UPDATE_PATH}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION} | awk '{print $1}') DLSUM=$(cat ${UPDATE_PATH}/${OS_NAME}-${HW_DEVICE}.${HW_ARCH}-${LATEST_RELEASE_TAG}.${EXTENSION}.sha256 | awk '{print $1}') if [ ! "${MYSUM}" == "${DLSUM}" ] then echo "Verification failed, cleaning up and exiting..." rm -f ${UPDATE_PATH}/* sleep 5 clear exit 1 else echo "Verification successful..." fi get_changelog if [ "${FORCE}" == "1" ] then set_setting updates.force 0 fi echo -e "\nRebooting to complete OS upgrade..." sync sleep 3 reboot