123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/bin/bash
- ## Iterate through complete package archive to generate a complete list of SHA1
- ## command parameter 'init' will build from scratch. Very slow.
- root=/srv/apt-mirror
- archive=$root/mirror
- dest=/srv/http/htdocs/apt-sec/mirror/Sha1Sums
- var=$root/var
- NEW=$var/NEW
- ALL=$var/ALL
- action="$1"
- echo "Updating Sha1Sums.."
- shalist () {
- pkg="$1"
- tmp=$(mktemp -d)
- ar -t $pkg |grep -q data.tar.gz && ( ar p $pkg data.tar.gz | tar xzC $tmp || echo "Can't extract from $pkg" )
- ar -t $pkg |grep -q data.tar.bz2 && ( ar p $pkg data.tar.bz2 | tar xjC $tmp || echo "Can't extract from $pkg" )
- cd $tmp
- find . -type f -print0 |xargs -0 sha1sum |tee -a $dest.paths | cut -c -42|sed -e "s/ .*/::$(basename $pkg)/" >> $dest.pkgs
- cd /
- rm -rf $tmp || (echo Trying even harder...; chmod -R u+rwx $tmp; rm -rf $tmp)
- }
- case $action in
- "init")
- # delete and rebuild shalist
- echo "Reinit - deleting current SHA1 sums.."
- rm $dest.pkgs
- rm $dest.paths
- echo "Reinitializing SHA1 DB.."
- n=0
- for deb in $(find $archive -type f -iname \*.deb); do
- let n++
- printf "%5d\t$deb\n" $n
- shalist $deb
- done
- ;;
- "update")
- # record removed packets, remove sha1sums of packets recorded *last week*
- # delete packages from last week
- del=$var/DEL-$(date +%w)
- touch $del
- grep -v -F -f $del $dest.pkgs > $dest.pkgs.tmp
- mv $dest.pkgs.tmp $dest.pkgs
- echo -n > $del
- # record newly removed packages, overwriting last week's record
- for pkg in $(cut -c 43- $dest.pkgs|uniq); do
- grep -q \\/$pkg$ $ALL || echo $pkg >> $del
- done
- # add sha sums for new pkgs
- for deb in $(cat $NEW); do
- deb=$(echo $deb|sed 's/.*:\/\/'//);
- echo "Adding $pkg.."
- shalist $archive/$deb
- done
- # delete, so we don't use them again
- # (hopefully, apt-mirror does not need it...?)
- echo -n > $NEW
- ;;
- "nosha1")
- echo > $dest.pkgs
- echo > $dest.paths
- ;;
- *)
- echo
- echo "Usage: $0 (init|update)"
- echo
- exit
- esac
- ln $dest.pkgs $dest
- bzip2 -f $dest
|