1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#!/bin/sh
#
# Copyright 1999 Raphal Hertzog <hertzog@debian.org>
# Copyright 2011 Steve McIntyre <93sam@debian.org>
# See the README file for the license
#
# This script will create the Packages.gz and Sources.gz files, and
# write matching Release files
# Argument 1 = root directory of the CD
# Argument 2 = architecture we're building for, or "source"
#
# Various other environment vars:
# $BASEDIR
# $MIRROR
# $TDIR
# etc...
#set -e
#set -x
CDDIR=$1
ARCH=$2
cd $CDDIR
DPKG_SCANPACKAGES=$BASEDIR/tools/my-dpkg-scanpackages
BDIR=$TDIR/$CODENAME-$ARCH
PREFIX=`echo $CDDIR | sed "s?$BDIR/CD?$BDIR/?"`
NUM=${PREFIX##$BDIR/}
if [ -n "$NONFREE" -o -n "$EXTRANONFREE" ]; then
SECTIONS="main contrib non-free"
else
SECTIONS="main contrib"
fi
checksum_file () {
CHECK=$1
FILE=$2
case $CHECK in
MD5Sum) prog=md5sum;;
SHA1) prog=sha1sum;;
SHA256) prog=sha256sum;;
SHA512) prog=sha512sum;;
*) echo "Unknown checksum algorithm $CHECK. Exit."; exit 1;;
esac
checksum=`$prog $file | awk '{print $1}'`
echo $checksum
}
case $ARCH in
source)
#### SOURCE
for SECT in $SECTIONS; do
if [ -d "pool/$SECT" ]; then
mkdir -p dists/$CODENAME/$SECT/source
dpkg-scansources pool/$SECT > dists/$CODENAME/$SECT/source/Sources
if [ -f dists/$CODENAME/$SECT/source/Sources ] ; then
gzip --best dists/$CODENAME/$SECT/source/Sources
fi
fi
done
cp $MIRROR/dists/$CODENAME/Release Release.in
;;
*)
#### BINARY
# Create an override file for dpkg-scanpackages
if [ ! -e "../overrides" ]; then
# Create an override file with all sections
for SECT in $SECTIONS; do
zcat $MIRROR/indices/override.$CODENAME.$SECT.gz >> ../overrides
done
fi
# Now create a Packages file for all packages on the CD, just
# looking in pool/
$DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH pool ../overrides > $PREFIX.Packages 2>/dev/null
# Split the Packages file by section, and install matching
# Release files
for SECT in $SECTIONS; do
mkdir -p dists/$CODENAME/$SECT/binary-$ARCH
grep-dctrl -FFilename -e "/$SECT/" $PREFIX.Packages | \
grep -v ^X-Medium > dists/$CODENAME/$SECT/binary-$ARCH/Packages
gzip --best -c < dists/$CODENAME/$SECT/binary-$ARCH/Packages \
> dists/$CODENAME/$SECT/binary-$ARCH/Packages.gz
cp $MIRROR/dists/$CODENAME/$SECT/binary-$ARCH/Release \
dists/$CODENAME/$SECT/binary-$ARCH/
done
rm -f $PREFIX.Packages
sed -e "s/^Architectures: .*$/Architectures: $ARCH/" \
$MIRROR/dists/$CODENAME/Release > Release.in
;;
esac
# Munge the Release file from the archive
if [ -e "$MIRROR/dists/$CODENAME/Release" ]; then
# Strip the MD5Sum and SHA* fields, update some other information
# as well
cat Release.in | sed -e "s|^Components: .*$|Components: $SECTIONS|" | \
perl -ne 'if (/^(MD5Sum|SHA\d+):/i) { $f=1; next }
if ($f) {
unless (/^ /) { print; $f=0 }
} else { print }' > dists/$CODENAME/Release
rm -f Release.in
fi
# Now update the Release file with checksums etc.
cd dists/$CODENAME
for check in MD5Sum SHA1 SHA256 SHA512; do
echo "$check:" >> Release
for SECT in $SECTIONS; do
if [ -d $SECT ] ; then
for file in $SECT/*/*; do
cksum=`checksum_file $check $file`
size=`stat -c %s $file`
printf " %s %8d %s\n" $cksum $size $file >> Release
done
fi
done
done
cd ../..
exit 0
|