156 lines
3.9 KiB
Bash
Executable File
156 lines
3.9 KiB
Bash
Executable File
#!/bin/sh -e
|
|
|
|
download="$( cat "$__object/parameter/download" )"
|
|
|
|
state_is="$( cat "$__object/explorer/state" )"
|
|
|
|
if [ "$download" != 'local' ] || [ "$state_is" = 'present' ]
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
url="$( cat "$__object/parameter/url" )"
|
|
|
|
if [ -f "$__object/parameter/destination" ]
|
|
then
|
|
dst="$( cat "$__object/parameter/destination" )"
|
|
else
|
|
dst="/$__object_id"
|
|
fi
|
|
|
|
if [ -f "$__object/parameter/cmd-get" ]
|
|
then
|
|
cmd="$( cat "$__object/parameter/cmd-get" )"
|
|
|
|
elif command -v curl > /dev/null
|
|
then
|
|
cmd="curl -sSL -o - '%s'"
|
|
|
|
elif command -v fetch > /dev/null
|
|
then
|
|
cmd="fetch -o - '%s'"
|
|
|
|
elif command -v wget > /dev/null
|
|
then
|
|
cmd="wget -O - '%s'"
|
|
|
|
else
|
|
echo 'local download failed, no usable utility' >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "download_tmp=\"\$( mktemp )\""
|
|
|
|
# shellcheck disable=SC2059
|
|
printf "$cmd > \"\$download_tmp\"\n" "$url"
|
|
|
|
if [ -f "$__object/parameter/sum" ]
|
|
then
|
|
sum_should="$( cat "$__object/parameter/sum" )"
|
|
|
|
if [ -f "$__object/parameter/cmd-sum" ]
|
|
then
|
|
local_cmd_sum="$( cat "$__object/parameter/cmd-sum" )"
|
|
else
|
|
if echo "$sum_should" | grep -Fq ':'
|
|
then
|
|
sum_hash="$( echo "$sum_should" | cut -d : -f 1 )"
|
|
|
|
sum_should="$( echo "$sum_should" | cut -d : -f 2 )"
|
|
else
|
|
if echo "$sum_should" | grep -Eq '^[0-9]+\s[0-9]+$'
|
|
then
|
|
sum_hash='cksum'
|
|
elif
|
|
echo "$sum_should" | grep -Eiq '^[a-f0-9]{32}$'
|
|
then
|
|
sum_hash='md5'
|
|
elif
|
|
echo "$sum_should" | grep -Eiq '^[a-f0-9]{40}$'
|
|
then
|
|
sum_hash='sha1'
|
|
elif
|
|
echo "$sum_should" | grep -Eiq '^[a-f0-9]{64}$'
|
|
then
|
|
sum_hash='sha256'
|
|
else
|
|
echo 'hash format detection failed' >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
case "$sum_hash" in
|
|
cksum)
|
|
local_cmd_sum="cksum %s | awk '{print \$1\" \"\$2}'"
|
|
;;
|
|
md5)
|
|
if command -v md5 > /dev/null
|
|
then
|
|
local_cmd_sum="md5 -q %s"
|
|
elif
|
|
command -v md5sum > /dev/null
|
|
then
|
|
local_cmd_sum="md5sum %s | awk '{print \$1}'"
|
|
fi
|
|
;;
|
|
sha1)
|
|
if command -v sha1 > /dev/null
|
|
then
|
|
local_cmd_sum="sha1 -q %s"
|
|
elif
|
|
command -v sha1sum > /dev/null
|
|
then
|
|
local_cmd_sum="sha1sum %s | awk '{print \$1}'"
|
|
fi
|
|
;;
|
|
sha256)
|
|
if command -v sha256 > /dev/null
|
|
then
|
|
local_cmd_sum="sha256 -q %s"
|
|
elif
|
|
command -v sha256sum > /dev/null
|
|
then
|
|
local_cmd_sum="sha256sum %s | awk '{print \$1}'"
|
|
fi
|
|
;;
|
|
*)
|
|
# we arrive here only if --sum is given with unknown format prefix
|
|
echo "unknown hash format: $sum_hash" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ -z "$local_cmd_sum" ]
|
|
then
|
|
echo 'local checksum verification failed, no usable utility' >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# shellcheck disable=SC2059
|
|
echo "sum_is=\"\$( $( printf "$local_cmd_sum" "\"\$download_tmp\"" ) )\""
|
|
|
|
echo "if [ \"\$sum_is\" != '$sum_should' ]; then"
|
|
|
|
echo "echo 'local download checksum mismatch' >&2"
|
|
|
|
echo "rm -f \"\$download_tmp\""
|
|
|
|
echo 'exit 1; fi'
|
|
fi
|
|
|
|
if echo "$__target_host" | grep -Eq '^[0-9a-fA-F:]+$'
|
|
then
|
|
target_host="[$__target_host]"
|
|
else
|
|
target_host="$__target_host"
|
|
fi
|
|
|
|
# shellcheck disable=SC2016
|
|
printf '%s "$download_tmp" %s:%s\n' \
|
|
"$__remote_copy" \
|
|
"$target_host" \
|
|
"$dst"
|
|
|
|
echo "rm -f \"\$download_tmp\""
|