189 lines
4.7 KiB
Plaintext
189 lines
4.7 KiB
Plaintext
|
#!/bin/bash
|
||
|
# mklist v 1.13 (c) Steve McIntyre <stevem@chiark.greenend.org.uk>
|
||
|
# 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
|
||
|
|
||
|
|