mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
A download might succeed from, say, github, but have an invalid checksum. In this case it would not attempt the alternative download from the mirror (which might have the correct checksum), but instead it would repeatedly download from github until the download limit is exceeded, and then fail completely.
99 lines
3.3 KiB
Bash
Executable File
99 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
################################################################################
|
|
# This file is part of LibreELEC - https://libreelec.tv
|
|
# Copyright (C) 2017-present Team LibreELEC
|
|
#
|
|
# LibreELEC is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# LibreELEC is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with LibreELEC. If not, see <http://www.gnu.org/licenses/>.
|
|
################################################################################
|
|
|
|
. config/options $1
|
|
|
|
_get_file_already_downloaded() {
|
|
if [ -f $PACKAGE ]; then
|
|
if [ "$(cat $STAMP_URL 2>/dev/null)" == "${PKG_URL}" ]; then
|
|
[ -z "${PKG_SHA256}" -o "$(cat $STAMP_SHA 2>/dev/null)" == "${PKG_SHA256}" ] && return 0
|
|
fi
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
if [ -z "$1" ]; then
|
|
for i in `find packages/ -type f -name package.mk`; do
|
|
GET_PKG=`grep ^PKG_NAME= $i | sed -e "s,\",,g" -e "s,PKG_NAME=,,"`
|
|
$SCRIPTS/get $GET_PKG
|
|
done
|
|
fi
|
|
|
|
[ -z "$PKG_URL" -o -z "$PKG_SOURCE_NAME" ] && exit 0
|
|
|
|
mkdir -p $SOURCES/$1
|
|
|
|
PACKAGE="$SOURCES/$1/$PKG_SOURCE_NAME"
|
|
PACKAGE_MIRROR="$DISTRO_MIRROR/$PKG_NAME/$PKG_SOURCE_NAME"
|
|
[ "$VERBOSE" != "yes" ] && WGET_OPT=-q
|
|
WGET_CMD="wget --timeout=30 --tries=3 --passive-ftp --no-check-certificate -c $WGET_OPT -O $PACKAGE"
|
|
|
|
STAMP_URL="$PACKAGE.url"
|
|
STAMP_SHA="$PACKAGE.sha256"
|
|
|
|
# Latest file already present, exit now...
|
|
_get_file_already_downloaded $1 && exit 0
|
|
|
|
# Avoid concurrent downloads of the same package
|
|
_isblocked=N
|
|
exec 99<$SOURCES/$1
|
|
while ! flock --nonblock --exclusive 99; do
|
|
[ ${_isblocked} == N ] && { echo "Project/Device ${DEVICE:-${PROJECT}} waiting, to avoid concurrent download of ${1}..."; _isblocked=Y; }
|
|
sleep 1
|
|
done
|
|
|
|
# Check again in case of concurrent access - if nothing needs to be downloaded, exit now...
|
|
_get_file_already_downloaded $1 && exit 0
|
|
|
|
# At this point, we need to download something...
|
|
printf "%${BUILD_INDENT}c $(print_color CLR_GET "GET") $1\n" ' '>&$SILENT_OUT
|
|
export BUILD_INDENT=$((${BUILD_INDENT:-1}+$BUILD_INDENT_SIZE))
|
|
|
|
# unset LD_LIBRARY_PATH to stop wget from using toolchain/lib and loading libssl.so/libcrypto.so instead of host libraries
|
|
unset LD_LIBRARY_PATH
|
|
|
|
rm -f $STAMP_URL $STAMP_SHA
|
|
|
|
NBWGET=10
|
|
while [ $NBWGET -gt 0 ]; do
|
|
for url in "$PKG_URL" "$PACKAGE_MIRROR"; do
|
|
rm -f $PACKAGE
|
|
if $WGET_CMD "$url"; then
|
|
CALC_SHA256="$(sha256sum $PACKAGE | cut -d" " -f1)"
|
|
|
|
[ -z "${PKG_SHA256}" -o "${PKG_SHA256}" == "${CALC_SHA256}" ] && break 2
|
|
|
|
printf "%${BUILD_INDENT}c $(print_color CLR_WARNING "WARNING") Incorrect checksum calculated on downloaded file: got ${CALC_SHA256}, wanted ${PKG_SHA256}\n\n" ' '>&$SILENT_OUT
|
|
fi
|
|
done
|
|
NBWGET=$((NBWGET - 1))
|
|
done
|
|
|
|
if [ $NBWGET -eq 0 ]; then
|
|
echo -e "\nCant't get $1 sources : $PKG_URL\n Try later !!"
|
|
exit 1
|
|
else
|
|
printf "%${BUILD_INDENT}c $(print_color CLR_INFO "INFO") Calculated checksum: ${CALC_SHA256}\n\n" ' '>&$SILENT_OUT
|
|
echo "${PKG_URL}" > $STAMP_URL
|
|
echo "${CALC_SHA256}" > $STAMP_SHA
|
|
fi
|
|
|
|
exit 0
|