#!/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=Etch-and-a-half 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 $BUILD_DATE" if [ $ARCHES = powerpc ] ; then export VOLID="Debian $DEBVERSION ppc" else export VOLID="Debian $DEBVERSION $ARCHES" 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 and" echo "indices directories ! " 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 if [ $DISKTYPE = NETINST ]; then # ATTENTION: Exception for etchnhalf netinst which can be # used as "CD0" for the regular full CD set. echo "full_cd" > $CDDIR/.disk/cd_type else echo "not_complete" > $CDDIR/.disk/cd_type fi 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 <> $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