414 lines
12 KiB
Bash
Executable File
414 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# start_new_disc
|
|
#
|
|
# Start a new temporary disc tree, including all the basic metadata
|
|
# needed
|
|
|
|
set -e
|
|
#set -x
|
|
|
|
BASEDIR=$1
|
|
MIRROR=$2
|
|
TDIR=$3
|
|
CODENAME=$4
|
|
ARCHES="$5"
|
|
DISKNUM=$6
|
|
SOURCEDISK=0
|
|
BINARYDISK=0
|
|
|
|
BDIR=$TDIR/$CODENAME
|
|
CDDIR=$BDIR/CD${DISKNUM}
|
|
DATE=`cat $BDIR/DATE`
|
|
DI_DATA_DIR=$BASEDIR/data/$DI_CODENAME
|
|
|
|
CAPCODENAME=`perl -e "print ucfirst("$CODENAME")"`
|
|
|
|
NUM_ARCHES=`echo $ARCHES | wc -w`
|
|
|
|
if [ $NUM_ARCHES = 1 ] ; then
|
|
case $ARCHES in
|
|
source)
|
|
SOURCEDISK=1
|
|
export DISKINFO="Debian GNU/Linux $DEBVERSION \"$CAPCODENAME\" - $OFFICIAL $DISKTYPE Source-$DISKNUM $BUILD_DATE"
|
|
export VOLID="Debian $DEBVERSION Src-$DISKNUM"
|
|
export SOURCEONLY=yes
|
|
;;
|
|
*)
|
|
BINARYDISK=1
|
|
export DISKINFO="Debian GNU/Linux $DEBVERSION \"$CAPCODENAME\" - $OFFICIAL $ARCHES $DISKTYPE Binary-$DISKNUM $BUILD_DATE"
|
|
if [ $ARCHES = powerpc ] ; then
|
|
export VOLID="Debian $DEBVERSION ppc Bin-$DISKNUM"
|
|
else
|
|
export VOLID="Debian $DEBVERSION $ARCHES Bin-$DISKNUM"
|
|
fi
|
|
;;
|
|
esac
|
|
export ARCHDEF=$ARCHES
|
|
else
|
|
BINARYDISK=1
|
|
case "$ARCHES" in
|
|
*source*) SOURCEDISK=1;;
|
|
esac
|
|
export ARCHDEF=`echo $ARCHES | sed 's? ?/?g'`
|
|
export DISKINFO="Debian GNU/Linux $DEBVERSION \"$CAPCODENAME\" - $OFFICIAL Multi-architecture $ARCHDEF $DISKTYPE #$DISKNUM $BUILD_DATE"
|
|
export VOLID="Debian $DEBVERSION M-A $DISKNUM"
|
|
fi
|
|
|
|
echo "Starting new $ARCHDEF $DISKTYPE $DISKNUM at $CDDIR"
|
|
|
|
mkdir -p $CDDIR
|
|
echo " Adding the required directories"
|
|
|
|
if [ ! -e $CDDIR/debian ] ; then
|
|
ln -sf . $CDDIR/debian
|
|
fi
|
|
|
|
if [ ! -d $CDDIR/dists/$CODENAME ] ; then
|
|
mkdir -p $CDDIR/dists/$CODENAME
|
|
for name in stable unstable frozen testing; do
|
|
ln -sf $CODENAME $CDDIR/dists/$name
|
|
done
|
|
fi
|
|
|
|
# Commodity link for tools which want local in dists/local/local ...
|
|
if [ -n "$LOCAL" ]
|
|
then
|
|
ln -sf $CODENAME $CDDIR/dists/local
|
|
fi
|
|
|
|
if [ ! -d $CDDIR/.disk ] ; then
|
|
mkdir $CDDIR/.disk
|
|
fi
|
|
|
|
if [ "$DISC_START_HOOK"x != ""x ] ; then
|
|
echo " Calling start hook: $DISC_START_HOOK"
|
|
$DISC_START_HOOK $TDIR $MIRROR $DISKNUM $CDDIR "$ARCHES"
|
|
fi
|
|
|
|
echo " Generating the image label and volume id"
|
|
echo -n $DISKINFO > $CDDIR/.disk/info
|
|
echo -n "$DISKINFO ($DATE)" > $BDIR/$DISKNUM.diskinfo
|
|
echo '#define DISKNAME ' $DISKINFO > $CDDIR/README.diskdefines
|
|
echo '#define ARCH ' $ARCHDEF >> $CDDIR/README.diskdefines
|
|
for ARCH in $ARCHES
|
|
do
|
|
echo '#define ARCH'$ARCH ' 1' >> $CDDIR/README.diskdefines
|
|
done
|
|
echo '#define DISKNUM ' $DISKNUM >> $CDDIR/README.diskdefines
|
|
echo '#define DISKNUM'$DISKNUM ' 1' >> $CDDIR/README.diskdefines
|
|
echo -n $VOLID > $BDIR/$DISKNUM.volid
|
|
|
|
if [ $BINARYDISK = 1 ] ; then
|
|
echo '#define TYPEbinary 1' >> $CDDIR/README.diskdefines
|
|
$BASEDIR/tools/set_mkisofs_opts bin $DISKNUM >> $BDIR/$DISKNUM.mkisofs_opts
|
|
fi
|
|
if [ $SOURCEDISK = 1 ] ; then
|
|
echo '#define TYPEsource 1' >> $CDDIR/README.diskdefines
|
|
$BASEDIR/tools/set_mkisofs_opts src $DISKNUM >> $BDIR/$DISKNUM.mkisofs_opts
|
|
fi
|
|
|
|
if [ $DISKNUM = 1 ] ; then
|
|
if [ "$OMIT_DOC_TOOLS" != "1" ]; then
|
|
if [ ! -e $MIRROR/doc ]; then
|
|
echo "You need a Debian mirror with the doc directory!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo " Adding .disk/base_components"
|
|
echo "main" > $CDDIR/.disk/base_components
|
|
if [ -n "$LOCAL" ] ; then
|
|
echo "local" >> $CDDIR/.disk/base_components
|
|
fi
|
|
|
|
echo " Adding .disk/cd_type"
|
|
if [ "$COMPLETE"x = "1"x ]; then
|
|
if [ $DISKTYPE = DVD ]; then
|
|
if [ "$MAXCDS"x = "1"x ]; then
|
|
echo "dvd/single" > $CDDIR/.disk/cd_type
|
|
else
|
|
echo "dvd" > $CDDIR/.disk/cd_type
|
|
fi
|
|
else
|
|
if [ "$MAXCDS"x = "1"x ]; then
|
|
echo "full_cd/single" > $CDDIR/.disk/cd_type
|
|
else
|
|
echo "full_cd" > $CDDIR/.disk/cd_type
|
|
fi
|
|
fi
|
|
else
|
|
echo "not_complete" > $CDDIR/.disk/cd_type
|
|
fi
|
|
|
|
if [ $NUM_ARCHES -gt 1 ]; then
|
|
echo " Adding .disk/multi_arch"
|
|
touch $CDDIR/.disk/multi_arch
|
|
fi
|
|
|
|
echo " Adding udeb/base includes/excludes"
|
|
|
|
for ARCH in $ARCHES
|
|
do
|
|
if [ $ARCH != source ] ; then
|
|
# Netinst/businesscard CD have different
|
|
# udeb_include and udeb_exclude files
|
|
if [ -z "$UDEB_INCLUDE" ] ; then
|
|
case "$INSTALLER_CD"x in
|
|
"1"x)
|
|
UDEB_INCLUDE=$DI_DATA_DIR/"$ARCH"_businesscard_udeb_include;;
|
|
"2"x)
|
|
UDEB_INCLUDE=$DI_DATA_DIR/"$ARCH"_netinst_udeb_include;;
|
|
*)
|
|
UDEB_INCLUDE=$DI_DATA_DIR/"$ARCH"_udeb_include;;
|
|
esac
|
|
fi
|
|
|
|
if [ -z "$UDEB_EXCLUDE" ] ; then
|
|
case "$INSTALLER_CD"x in
|
|
"1"x)
|
|
UDEB_EXCLUDE=$DI_DATA_DIR/"$ARCH"_businesscard_udeb_exclude;;
|
|
"2"x)
|
|
UDEB_EXCLUDE=$DI_DATA_DIR/"$ARCH"_netinst_udeb_exclude;;
|
|
*)
|
|
UDEB_EXCLUDE=$DI_DATA_DIR/"$ARCH"_udeb_exclude;;
|
|
esac
|
|
fi
|
|
|
|
# Sort out the udeb include and exclude files
|
|
if [ -n "$UDEB_INCLUDE" ] ; then
|
|
if [ -r "$UDEB_INCLUDE" ] ; then
|
|
cat "$UDEB_INCLUDE" >> "$CDDIR/.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
|
|
cat "$UDEB_EXCLUDE" >> "$CDDIR/.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
|
|
cat "$BASE_INCLUDE" >> "$CDDIR/.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
|
|
cat "$BASE_EXCLUDE" >> "$CDDIR/.disk/base_exclude"
|
|
else
|
|
echo "ERROR: Unable to read BASE_EXCLUDE file $BASE_EXCLUDE"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "$OMIT_DOC_TOOLS" != "1" ]; then
|
|
echo " Adding docs to CD1"
|
|
$BASEDIR/tools/add_files $CDDIR $MIRROR doc
|
|
find $CDDIR/doc -name "dedication-*" | grep -v "$DEBVERSION" | xargs rm -f
|
|
find $CDDIR/doc -name "debian-keyring.tar.gz" | xargs rm -f
|
|
|
|
if [ ! -e $CDDIR/doc/FAQ/html ] ; then
|
|
echo " Extracting FAQ on CD1"
|
|
mkdir $CDDIR/doc/FAQ/html
|
|
cd $CDDIR/doc/FAQ/html
|
|
if [ -e "../debian-faq.en.html.tar.gz" ] ; then
|
|
tar xzf ../debian-faq.en.html.tar.gz
|
|
else
|
|
tar xzf ../debian-faq.html.tar.gz
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Installtools
|
|
mkdir $CDDIR/install
|
|
if [ -x "$BASEDIR/tools/$CODENAME/installtools.sh" ] ; then
|
|
echo " Adding installtools"
|
|
$BASEDIR/tools/$CODENAME/installtools.sh $CDDIR "$ARCHES"
|
|
fi
|
|
|
|
for ARCH in $ARCHES
|
|
do
|
|
if [ -e $MIRROR/dists/$DI_CODENAME/main/disks-$ARCH ] ; then
|
|
echo " Adding disks-$ARCH stuff ..."
|
|
mkdir -p $CDDIR/dists/$DI_CODENAME/main/disks-$ARCH
|
|
$BASEDIR/tools/add_files $CDDIR/dists/$DI_CODENAME/main/disks-$ARCH $MIRROR/dists/$DI_CODENAME/main/disks-$ARCH .
|
|
touch $CDDIR/.disk/kernel_installable
|
|
cd $CDDIR/dists/$DI_CODENAME/main/disks-$ARCH
|
|
rm -rf base-images-*
|
|
if [ -L current ] ; then
|
|
CURRENT_LINK=`readlink current`
|
|
mv $CURRENT_LINK .tmp_link
|
|
rm -rf [0123456789]*
|
|
mv .tmp_link $CURRENT_LINK
|
|
elif [ -d current ] ; then
|
|
rm -rf [0123456789]*
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Create an empty dirs file; will be appended to later if needed
|
|
> $BDIR/$DISKNUM.mkisofs_dirs
|
|
|
|
echo " Adding common docs on CD$DISKNUM"
|
|
$BASEDIR/tools/add-bin-doc $DISKNUM "$ARCHES"
|
|
|
|
# Common stuff for all disks in the set
|
|
if [ "$SOURCEONLY"x = "yes"x ] ; then
|
|
echo -n "-J " >> $BDIR/$DISKNUM.mkisofs_opts
|
|
fi
|
|
|
|
echo " Adding Release files"
|
|
# Release files
|
|
cd $CDDIR
|
|
|
|
SECTIONS="main"
|
|
if [ "${NONFREE:-0}" != "0" -o "${EXTRANONFREE:-0}" != "0" ] ; then
|
|
SECTIONS="${SECTIONS} non-free"
|
|
fi
|
|
if [ "${CONTRIB:-0}" != "0" ] ; then
|
|
SECTIONS="${SECTIONS} contrib"
|
|
fi
|
|
|
|
if [ -n "$LOCAL" ] ; then
|
|
SECTIONS="$SECTIONS local"
|
|
fi
|
|
|
|
# these two lines can be inserted below the "Architectures" line below,
|
|
# to sort out broken Release files just after the testing --> stable
|
|
# transition
|
|
# sed -e "s/^Suite: .*$/Suite: stable/" | \
|
|
# sed -e "s/^Description: .*$/Description: Debian $DEBVERSION/" | \
|
|
|
|
if [ -e "$MIRROR/dists/$CODENAME/Release" ] ; then
|
|
# Strip the MD5Sum and SHA1 fields
|
|
# Update some other information as well
|
|
sed -e "s/^Architectures: .*$/Architectures: $ARCHES/" \
|
|
$MIRROR/dists/$CODENAME/Release | \
|
|
sed -e "s|^Components: .*$|Components: $SECTIONS|" | \
|
|
perl -ne 'if (/^(MD5Sum|SHA1|SHA256):/i) { $f=1; next }
|
|
if ($f) {
|
|
unless (/^ /) { print; $f=0 }
|
|
} else { print }' > dists/$CODENAME/Release
|
|
if [ "$EARLY_BUILD_HACK"x = "1"x ] ; then
|
|
RDATE=`awk '/^Date:/ { print $2,$3,$4,$5}' dists/$CODENAME/Release`
|
|
sed -i -e "s/^Suite: .*$/Suite: stable/" dists/$CODENAME/Release
|
|
sed -i -e "s/^Description: .*$/Description: Debian $DEBVERSION Released $RDATE/" dists/$CODENAME/Release
|
|
fi
|
|
else
|
|
echo "ERROR: Release file ($MIRROR/dists/$CODENAME/Release) is missing !"
|
|
exit 1
|
|
fi
|
|
|
|
# Copying individual release files
|
|
for ARCH in $ARCHES
|
|
do
|
|
for SECT in $SECTIONS
|
|
do
|
|
# Install the release files
|
|
if [ -e "$MIRROR/dists/$CODENAME/$SECT/binary-$ARCH/Release" ] ; then
|
|
mkdir -p dists/$CODENAME/$SECT/binary-$ARCH
|
|
cp $MIRROR/dists/$CODENAME/$SECT/binary-$ARCH/Release \
|
|
dists/$CODENAME/$SECT/binary-$ARCH/
|
|
if [ "$DEBVERSION" != "testing" ] ; then
|
|
sed -i "s/^Archive:.*$/Archive: stable/" dists/$CODENAME/$SECT/binary-$ARCH/Release
|
|
fi
|
|
fi
|
|
if [ -n "$NONUS" -a -e "$NONUS/dists/$CODENAME/non-US/$SECT/binary-$ARCH/Release" ] ; then
|
|
mkdir -p dists/$CODENAME/non-US/$SECT/binary-$ARCH
|
|
cp $NONUS/dists/$CODENAME/non-US/$SECT/binary-$ARCH/Release \
|
|
dists/$CODENAME/non-US/$SECT/binary-$ARCH/
|
|
if [ "$DEBVERSION" != "testing" ] ; then
|
|
sed -i "s/^Archive:.*$/Archive: stable/" dists/$CODENAME/non-US/$SECT/binary-$ARCH/Release
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ -n "$LOCALDEBS" -a -n "$LOCAL" ] ; then
|
|
if [ -e $LOCALDEBS/dists/$CODENAME/local/binary-$ARCH/Release ] ; then
|
|
mkdir -p dists/$CODENAME/local/binary-$ARCH
|
|
cp $LOCALDEBS/dists/$CODENAME/local/binary-$ARCH/Release \
|
|
dists/$CODENAME/local/binary-$ARCH/
|
|
fi
|
|
fi
|
|
|
|
if [ -e "$MIRROR/dists/$DI_CODENAME/main/debian-installer/binary-$ARCH/Release" ] ; then
|
|
mkdir -p dists/$CODENAME/main/debian-installer/binary-$ARCH
|
|
cp $MIRROR/dists/$DI_CODENAME/main/debian-installer/binary-$ARCH/Release \
|
|
dists/$CODENAME/main/debian-installer/binary-$ARCH/
|
|
if [ "$DEBVERSION" != "testing" ] ; then
|
|
sed -i "s/^Archive:.*$/Archive: stable/" dists/$CODENAME/main/debian-installer/binary-$ARCH/Release
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Upgrade packages / kernels
|
|
if [ "$SOURCEONLY"x != "yes"x ] ; then
|
|
echo " Trying to add upgrade* directories"
|
|
if [ -x "$BASEDIR/tools/$CODENAME/upgrade.sh" ] ; then
|
|
$BASEDIR/tools/$CODENAME/upgrade.sh
|
|
fi
|
|
fi
|
|
|
|
for ARCH in $ARCHES
|
|
do
|
|
export ARCH=$ARCH
|
|
if [ $ARCH != source ] ; then
|
|
if [ -x "$BASEDIR/tools/$CODENAME/upgrade-$ARCH.sh" ] ; then
|
|
$BASEDIR/tools/$CODENAME/upgrade-$ARCH.sh $DISKNUM $CDDIR
|
|
fi
|
|
|
|
echo " (Optionally) making the image bootable for $ARCH:"
|
|
if [ -f $BASEDIR/tools/boot/$DI_CODENAME/boot-$ARCH ] ; then
|
|
cd $TDIR
|
|
echo " Running tools/boot/$DI_CODENAME/boot-$ARCH $DISKNUM $CDDIR"
|
|
$BASEDIR/tools/boot/$DI_CODENAME/boot-$ARCH $DISKNUM $CDDIR || booterror=$?
|
|
if [ "$booterror"x != ""x ] ; then
|
|
echo " FAILED: error $booterror"
|
|
exit $booterror
|
|
fi
|
|
else
|
|
if [ "${IGNORE_MISSING_BOOT_SCRIPT:-0}" = "0" ] ; then
|
|
echo " No script to make CDs bootable for $ARCH"
|
|
echo " We've not been asked to ignore this. Aborting."
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# If we've had to extract any files from packages to put them onto the
|
|
# CD (e.g. bootloader files), then we will have listed them in
|
|
# $BDIR/$DISKNUM.pkgs_extracted. If that file exists, add a README.source
|
|
# to the root of the CD
|
|
if [ -e $BDIR/$DISKNUM.pkgs_extracted ] && \
|
|
[ ""x != "$ARCHIVE_EXTRACTED_SOURCES"x ] ; then
|
|
echo " Adding README.source"
|
|
cat > $CDDIR/README.source <<EOF
|
|
Creation of this disk image included extracting files from some Debian
|
|
packages. In case you do not have those packages already, both the
|
|
binary and source packages are archived at
|
|
|
|
EOF
|
|
echo "$ARCHIVE_EXTRACTED_SOURCES" >> $CDDIR/README.source
|
|
echo "" >> $CDDIR/README.source
|
|
echo "The following binary/source packages were used:" >> $CDDIR/README.source
|
|
sort $BDIR/$DISKNUM.pkgs_extracted | uniq | \
|
|
xargs -n1 basename >> $CDDIR/README.source
|
|
fi
|
|
|
|
if [ "$DISC_PKG_HOOK"x != ""x ] ; then
|
|
echo " Calling pkg hook: $DISC_PKG_HOOK"
|
|
$DISC_PKG_HOOK $TDIR $MIRROR $DISKNUM $CDDIR "$ARCHES"
|
|
fi
|
|
|
|
exit 0
|