debian-cd-clone/tools/add_debs

140 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
#
# add_debs
#
# Simple helper script for debian-cd
#
# Split out of the top-level Makefile by SAM 2005/12/10
#
# 1. Check that the lists of packages look valid (e.g. installer
# packages are on CD#1
#
# 2. Add deb files into each CD root
#
# 3. Create Packages files within each CD root
set -e
BDIR=$1
TDIR=$2
FIRSTDISKS=$3
ARCH=$4
BASE_INCLUDE=$5
BASE_EXCLUDE=$6
UDEB_INCLUDE=$7
UDEB_EXCLUDE=$8
ADDPACKAGES=$9
shift
SCANPACKAGES=$9
echo "Current disk usage on the binary CDs (before the debs are added):"
cd $BDIR && du -sm CD[0123456789]*
echo "Adding the selected packages to each CD:"
# Check that all packages required by debootstrap are included
# and create .disk/base_installable if yes
# Also create .disk/base_components
mkdir -p $TDIR
for DISK in $FIRSTDISKS
do
DISK=${DISK##CD}
ok=yes
for p in `debootstrap --arch $ARCH --print-debs $CODENAME $TDIR/debootstrap.tmp file:$MIRROR $DEBOOTSTRAP_SCRIPT`
do
if ! grep -q ^$p$ $BDIR/$DISK.packages ; then
if [ -n "$BASE_EXCLUDE" ] && grep -q ^$p$ $BASE_EXCLUDE ; then
echo "Missing debootstrap-required $p but included in $BASE_EXCLUDE"
continue
fi
ok=no
echo "Missing debootstrap-required $p"
fi
done
rm -rf $TDIR/debootstrap.tmp
if [ "$ok" = "yes" ] ; then
echo "CD$DISK contains all packages needed by debootstrap"
touch $BDIR/CD$DISK/.disk/base_installable
else
echo "CD$DISK missing some packages needed by debootstrap"
fi
echo 'main' > $BDIR/CD$DISK/.disk/base_components
if [ -n "$LOCAL" ] ; then
echo 'local' >> $BDIR/CD$DISK/.disk/base_components
fi
if [ $COMPLETE = 1 ]; then
if [ $DISKTYPE = DVD ]; then
echo "dvd" > $BDIR/CD$DISK/.disk/cd_type
else
echo "full_cd" > $BDIR/CD$DISK/.disk/cd_type
fi
else
echo "not_complete" > $BDIR/CD$DISK/.disk/cd_type
fi
# Sort out the udeb include and exclude files
if [ -n "$UDEB_INCLUDE" ] ; then
if [ -r "$UDEB_INCLUDE" ] ; then
cp -af "$UDEB_INCLUDE" "$BDIR/CD$DISK/.disk/udeb_include"
else
echo "ERROR: Unable to read UDEB_INCLUDE file $UDEB_INCLUDE"
fi
fi
if [ -n "$UDEB_EXCLUDE" ] ; then
if [ -r "$UDEB_EXCLUDE" ] ; then
cp -af "$UDEB_EXCLUDE" "$BDIR/CD$DISK/.disk/udeb_exclude"
else
echo "ERROR: Unable to read UDEB_EXCLUDE file $UDEB_EXCLUDE"
fi
fi
# Ditto the base include and exclude
if [ -n "$BASE_INCLUDE" ] ; then
if [ -r "$BASE_INCLUDE" ] ; then
cp -af "$BASE_INCLUDE" "$BDIR/CD$DISK/.disk/base_include"
else
echo "ERROR: Unable to read BASE_INCLUDE file $BASE_INCLUDE"
fi
fi
if [ -n "$BASE_EXCLUDE" ] ; then
if [ -r "$BASE_EXCLUDE" ] ; then
cp -af "$BASE_EXCLUDE" "$BDIR/CD$DISK/.disk/base_exclude"
else
echo "ERROR: Unable to read BASE_EXCLUDE file $BASE_EXCLUDE"
fi
fi
done
# Copy the debs in place, and generate Packages files as we go
for i in $BDIR/*.packages
do
dir=${i%%.packages}
n=${dir##$BDIR/}
dir=$BDIR/CD$n
echo "$n ... "
# Copy the deb files in; addpackages also creates the Packages
# files as it runs
sort $i | xargs -n 200 -r $ADDPACKAGES $dir
if [ -x "$HOOK" ] ; then
cd $BDIR && $HOOK $n before-scanpackages
fi
# Create the Packages.gz files. Should we also make Packages.bz2?
for file in `find $dir -name Packages`
do
echo " $file.gz"
gzip -9 < $file > $file.gz
done
# Now the Release files; has to be done last, as they contain the
# md5sums of the Packages and Packages.gz files
$SCANPACKAGES $dir
echo "done."
done