update: apt-download

Use Release file to get URL and md5 of Packages file
This commit is contained in:
bigeagle 2016-01-17 22:34:35 +08:00
parent ec7d039a66
commit e5e2f545f8

View File

@ -29,43 +29,63 @@ function apt-download-binary() {
check-and-download "${base_url}/dists/${dist}/Release" "${dest_dir}/Release" check-and-download "${base_url}/dists/${dist}/Release" "${dest_dir}/Release"
check-and-download "${base_url}/dists/${dist}/Release.gpg" "${dest_dir}/Release.gpg" || true check-and-download "${base_url}/dists/${dist}/Release.gpg" "${dest_dir}/Release.gpg" || true
# Load Package Index URLs from Release file
release_file="${dest_dir}/Release"
dest_dir="${dest_base_dir}/dists/${dist}/${repo}/binary-${arch}" dest_dir="${dest_base_dir}/dists/${dist}/${repo}/binary-${arch}"
[ ! -d "$dest_dir" ] && mkdir -p "$dest_dir" [ ! -d "$dest_dir" ] && mkdir -p "$dest_dir"
pkgidxes=('Packages' 'Packages.gz' 'Packages.bz2' 'Packages.xz') declare pkgidx_content=""
pkgidx_content="" declare cnt_start=false
for pkgidx in ${pkgidxes[@]}; do while read line; do
pkgidx_file="${dest_dir}/${pkgidx}" if [[ ${cnt_start} = true ]]; then
pkglist_url="${base_url}/dists/${dist}/${repo}/binary-${arch}/${pkgidx}" read -a tokens <<< $line
check-and-download "${pkglist_url}" ${pkgidx_file} || true md5=${tokens[0]}
if [ -z "${pkgidx_content}" -a -f ${pkgidx_file} ]; then if [[ ${#md5} != 32 ]]; then
echo "getting packages index content" break
case $pkgidx in fi
"*.bz2") filesize=${tokens[1]}
pkgidx_content=`bunzip2 -c ${pkgidx_file}` filename=${tokens[2]}
;; if [[ "$filename" =~ ${repo}/binary-${arch} ]]; then
"*.gz") # Load package list from Packages file
pkgidx_content=`gunzip -c ${pkgidx_file}` pkgidx_file="${dest_base_dir}/dists/${dist}/${filename}"
;; pkglist_url="${base_url}/dists/${dist}/${filename}"
*) check-and-download "${pkglist_url}" ${pkgidx_file} || true
pkgidx_content=`cat ${pkgidx_file}` echo "${md5} ${pkgidx_file}" | md5sum -c -
;; if [ -z "${pkgidx_content}" -a -f ${pkgidx_file} ]; then
esac echo "getting packages index content"
case $filename in
"*.bz2")
pkgidx_content=`bunzip2 -c ${pkgidx_file}`
;;
"*.gz")
pkgidx_content=`gunzip -c ${pkgidx_file}`
;;
*)
pkgidx_content=`cat ${pkgidx_file}`
;;
esac
fi
fi
else
if [[ "$line" =~ ^MD5Sum:$ ]]; then
cnt_start=true
fi
fi fi
done done < ${release_file}
if [ -z "${pkgidx_content}" ]; then if [ -z "${pkgidx_content}" ]; then
echo "index is empty, failed" echo "index is empty, failed"
return 1 return 1
fi fi
# 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 '^MD5sum' | cut -d' ' -f 2) | \
while read pkg_filename; read pkg_size; read pkg_md5; do while read pkg_filename; read pkg_size; read pkg_md5; 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}"
let 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
@ -82,3 +102,5 @@ function apt-download-binary() {
done done
} }
# vim: ts=4 sts=4 sw=4