mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
fix: apt-download checksum
support SHA1/SHA256 checksum
This commit is contained in:
parent
76a36a2450
commit
8fd57c3845
@ -36,11 +36,20 @@ function apt-download-binary() {
|
|||||||
|
|
||||||
declare pkgidx_content=""
|
declare pkgidx_content=""
|
||||||
declare cnt_start=false
|
declare cnt_start=false
|
||||||
|
declare -i checksum_len
|
||||||
|
if (grep -e '^SHA256:$' ${release_file} &>/dev/null); then
|
||||||
|
checksum_cmd="sha256sum"; checksum_regex="^SHA256:$"; checksum_len=64
|
||||||
|
elif (grep -e '^SHA1:$' ${release_file} &>/dev/null); then
|
||||||
|
checksum_cmd="sha1sum"; checksum_regex="^SHA1:$"; checksum_len=40
|
||||||
|
elif (grep -e '^MD5Sum:$' ${release_file} &>/dev/null); then
|
||||||
|
checksum_cmd="md5sum"; checksum_regex="^MD5sum:$"; checksum_len=32
|
||||||
|
fi
|
||||||
|
|
||||||
while read line; do
|
while read line; do
|
||||||
if [[ ${cnt_start} = true ]]; then
|
if [[ ${cnt_start} = true ]]; then
|
||||||
read -a tokens <<< $line
|
read -a tokens <<< $line
|
||||||
md5=${tokens[0]}
|
checksum=${tokens[0]}
|
||||||
if [[ ${#md5} != 32 ]]; then
|
if [[ ${#checksum} != ${checksum_len} ]]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
filesize=${tokens[1]}
|
filesize=${tokens[1]}
|
||||||
@ -50,7 +59,7 @@ function apt-download-binary() {
|
|||||||
pkgidx_file="${dest_base_dir}/dists/${dist}/${filename}"
|
pkgidx_file="${dest_base_dir}/dists/${dist}/${filename}"
|
||||||
pkglist_url="${base_url}/dists/${dist}/${filename}"
|
pkglist_url="${base_url}/dists/${dist}/${filename}"
|
||||||
check-and-download "${pkglist_url}" ${pkgidx_file} || true
|
check-and-download "${pkglist_url}" ${pkgidx_file} || true
|
||||||
echo "${md5} ${pkgidx_file}" | md5sum -c -
|
echo "${checksum} ${pkgidx_file}" | ${checksum_cmd} -c -
|
||||||
if [ -z "${pkgidx_content}" -a -f ${pkgidx_file} ]; then
|
if [ -z "${pkgidx_content}" -a -f ${pkgidx_file} ]; then
|
||||||
echo "getting packages index content"
|
echo "getting packages index content"
|
||||||
case $filename in
|
case $filename in
|
||||||
@ -67,7 +76,7 @@ function apt-download-binary() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ "$line" =~ ^MD5Sum:$ ]]; then
|
if [[ "$line" =~ ${checksum_regex} ]]; then
|
||||||
cnt_start=true
|
cnt_start=true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -78,25 +87,34 @@ function apt-download-binary() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set checksum method
|
||||||
|
if (echo -e "${pkgidx_content}" | grep -e '^SHA256' &>/dev/null); then
|
||||||
|
checksum_cmd="sha256sum"; checksum_regex="^SHA256"
|
||||||
|
elif (echo -e "${pkgidx_content}" | grep -e '^SHA1' &>/dev/null); then
|
||||||
|
checksum_cmd="sha1sum"; checksum_regex="^SHA1"
|
||||||
|
elif (echo -e "${pkgidx_content}" | grep -e '^MD5sum' &>/dev/null); then
|
||||||
|
checksum_cmd="md5sum"; checksum_regex="^MD5sum"
|
||||||
|
fi
|
||||||
|
|
||||||
# Download packages
|
# Download packages
|
||||||
(echo -e "${pkgidx_content}" | grep -e '^Filename' -e '^Size' -e '^MD5sum' | cut -d' ' -f 2) | \
|
(echo -e "${pkgidx_content}" | grep -e '^Filename' -e '^Size' -e ${checksum_regex} | cut -d' ' -f 2) | \
|
||||||
while read pkg_filename; read pkg_size; read pkg_md5; do
|
while read pkg_filename; read pkg_size; read pkg_checksum; do
|
||||||
dest_filename="${dest_base_dir}/${pkg_filename}"
|
dest_filename="${dest_base_dir}/${pkg_filename}"
|
||||||
dest_dir=`dirname ${dest_filename}`
|
dest_dir=`dirname ${dest_filename}`
|
||||||
[ ! -d "$dest_dir" ] && mkdir -p "$dest_dir"
|
[ ! -d "$dest_dir" ] && mkdir -p "$dest_dir"
|
||||||
pkg_url="${base_url}/${pkg_filename}"
|
pkg_url="${base_url}/${pkg_filename}"
|
||||||
declare downloaded="false"
|
declare downloaded=false
|
||||||
if [ -f ${dest_filename} ]; then
|
if [ -f ${dest_filename} ]; then
|
||||||
rsize=`stat -c "%s" ${dest_filename}`
|
rsize=`stat -c "%s" ${dest_filename}`
|
||||||
if [ ${rsize} -eq ${pkg_size} ]; then
|
if [ ${rsize} -eq ${pkg_size} ]; then
|
||||||
downloaded="true"
|
downloaded=true
|
||||||
echo "Skipping ${pkg_filename}, size ${pkg_size}"
|
echo "Skipping ${pkg_filename}, size ${pkg_size}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
while [ $downloaded != "true" ]; do
|
while [ $downloaded != true ]; do
|
||||||
echo "downloading ${pkg_url}"
|
echo "downloading ${pkg_url}"
|
||||||
wget -q -O ${dest_filename} ${pkg_url} && {
|
wget -q -O ${dest_filename} ${pkg_url} && {
|
||||||
echo "${pkg_md5} ${dest_filename}" | md5sum -c - && downloaded=true # two space for md5sum check format
|
echo "${pkg_checksum} ${dest_filename}" | ${checksum_cmd} -c - && downloaded=true # two space for md5sum/sha1sum/sha256sum check format
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user