#!/bin/bash # mklist v 1.13 (c) Steve McIntyre # Released under GPL 31 Mar 1999 # See the file COPYING for license details # Released as part of the slink_cd package, not much use standalone # # $1 is Debian-mirror location # $2 is start directory location (where the scripts live) # $3 is tmpdir location # $4 is the binary arch # $5 is codename of branch of archive. # $6 is status of branch of archive # $7 is the scanpackages binary. # $8 is debug level VERBOSE=$8 . $2/vecho # Local definitions for vecho, vvecho, vvvecho vecho Creating file lists for CDs 1 and 2 cd $3 rm -rf list mkdir list if [ -f $1/dists/$5/main/binary-$4/Packages.gz ]; then PACKAGES=$1/dists/$5/main/binary-$4/Packages.gz elif [ -f $1/dists/$5/main/binary-$4/Packages ]; then PACKAGES=$1/dists/$5/main/binary-$4/Packages else echo "$0: Could not find packages file. Exit." exit 1 fi # AAAAAAAAaargh! We're f**ked if the Packages file is out-of-date # (e.g. borken mirror), so check if there are any newer files in the # archive _now_. If so, we'll need to create a newer copy for our own # purposes. Warn the user a _lot_, as this may be a symptom of a # really broken setup... find $1/dists/$5/main/binary-$4 -type f -follow -newer $PACKAGES >$3/newer.packages if [ -s $3/newer.packages ] ; then PACKAGES=$3/Packages.regenerated echo " Awooga!" echo " Awooga!" echo " Awooga!" echo " Awooga! The main Packages file in the mirror is out of date." echo " Generating a new one in $PACKAGES." echo " Your md5sums results will be bogus, and so might your images." echo " Awooga!" echo " Awooga!" echo " Awooga!" echo " Awooga!" (cd $1/dists/$5/main && \ $7 binary-$4 $1/indices/override.$5.gz \ dists/$6/main/ > $PACKAGES) ls -al $PACKAGES fi # optional/extra packages that should be on disc 1 should be listed in # cd1.needed. Important/required/standard packages will # automatically go there, and duplication is OK. cd1.needed no # longer needs to be up-to-date with the boot-floppies package, as we # generate it from their master file now. # Remove hashed-out lines to allow hash comments... # And use EOP as a header between sections # the first section should be the list of packages to go on CD 1 # the second section should be the list of packages to remove _completely_ # the third is the Packages file, i.e. the raw data that we're going to use. # Output will go to list1 for CD 1, list2 for CD 2, EXCLUDED for removed. zcat -f $3/cd1.needed $3/cd1.useful $2/EOP $2/exclude-$4 $2/EOP $PACKAGES | grep -v '^#' | awk -v verbose=$VERBOSE ' /END_OF_PROCESSING/ {leave_done++} /.*/ { if(!leave_done) { leave[$1]++ } else { if(leave_done==1) { remove[$1]++ } } } /^Package:/ { if(leave_done==2) { priority="unlisted"; package=$2; list="list2" } } /^Priority:/ { if(leave_done==2) { priority = $2; if(leave[package]) { list="list1" } if(remove[package]) { list="EXCLUDED" } } } /^Section:/ { if(leave_done==2) { section=$2; } } /^Filename:/ { if(leave_done==2) { filename = $2 } } /^Size:/ {if(leave_done==2) { if(match(priority,"^required")) {list="list1"} if(match(priority,"^important")) {list="list1"} if(match(priority,"^standard")) {list="list1"} if(match(section,"^base")) {list="list1"} if(verbose>1) {print priority, section, "package ", package, "moved to", list} print package,filename," ",$2 >>"list/"list print package,filename," ",$2 >>"list/"priority } } ' cd list for file in * do sort $file -o $file.1 mv $file.1 $file done vecho "Sizes for each priority in main binary-$4 (bytes):" for file in required important standard optional extra unlisted do if [ -e $file ] ; then vecho -n $file if [ "$VERBOSE" -gt 0 ] ; then cat $file | awk '{size=size+$3};END{print " ",size}' fi fi done vecho vecho "Sizes for each disc (bytes):" for file in list1 list2 EXCLUDED do touch $file # so we don't get ENOENT vecho -n $file if [ "$VERBOSE" -gt 0 ] ; then cat $file | awk '{size=size+$3};END{print " ",size}' fi done vecho "These only count packages in main binary-$4. Other" vecho "sections will fill these two discs up further" cd $1 for i in 1 2 do vecho "Filling in binary-all links... $i" for file in `cat $3/list/list$i | sed "s/frozen/$CODENAME/g;s/$6/$5/g" | awk -v ARCH=$4 '{print $2; REPL=sprintf("binary-%s/",ARCH);gsub(REPL,"binary-all/",$2); print $2}'` do if [ -f $file ] ; then vvecho $file echo $file >>/$3/list/OUT$i fi done done