#!/bin/bash # Generate mirror lists mirrorpath=~plf/ftp/mandriva generatelist=~plf/bin/generatelist.pl mirrorsxml=~plf/www/mirrors.xml transform=~plf/www/mirrors/list.xsl geoipcitylookup=~plf/geoip-city-lookup move_to=~plf/www/mirrors stabledistros="2011 2010.2 2010.1 2010.0 2009.1 2009.0 2008.1" # Files older than $mirror_age days must be on all mirrors mirror_age=7 # Set to 1 to put mirrorlists into SVN use_svn= workdir="$(mktemp -t -d mirrorlists.XXXXX)" [ -n "$workdir" ] || exit 1 cd $workdir xsltproc -o mirrors.list $transform $mirrorsxml ln -s $geoipcitylookup geoip last_rpm() { local version=$1 local path=$2 local lastfile= for arch in i586 x86_64 ppc; do lastfile=$(find $path/$arch -maxdepth 1 -mtime +${mirror_age} -type f -printf "%T@ %f\n" | sort -rn | head -n1 | cut -f2 -d" ") [ -n "$lastfile" ] || lastfile="media_info/synthesis.hdlist.cz" echo $lastfile > $version.$arch.distrib.lastrpm done } last_rpm cooker $mirrorpath/cooker/free/binary for version in $stabledistros; do last_rpm $version $mirrorpath/$version/free/backports/binary done $generatelist mirrors.list &> $TMPDIR/generatelist.log # FIXME: generatelist.pl seems to return before its children sleep 60 mv fail.cooker.i586.list failed.list rm fail.*.list mirrors.list if [ -n "$use_svn" ]; then svn co -q --non-interactive file:///home/projects/plf/svn/public/www/mirrors mirrors sleep 1 # for timestamps, for SVN changed_type= for file in *.list; do if [ -L $file ]; then if [ ! -L mirrors/$file ]; then changed_type="$changed_type mirrors/$file" svn del -q mirrors/$file &>/dev/null fi mv -f $file mirrors/$file else if [ -L mirrors/$file ]; then changed_type="$changed_type mirrors/$file" svn del -q mirrors/$file &>/dev/null fi # we want a deterministic order for version control sort $file > mirrors/$file fi done # SVN does not seem to handle type change without committing removal first if [ -n "$changed_type" ]; then for file in $changed_type; do mv $file $file.bck done svn commit -q --non-interactive -m "update mirror lists, removing files with changed type" mirrors rename .bck "" mirrors/*.bck fi svn add -q mirrors/*.list &>/dev/null svn commit -q --non-interactive -m "update mirror lists" mirrors else rm -f $move_to/*.list mv *.list $move_to/ fi rm -rf "$workdir"