#!/bin/sh # # Debian-cd helper script for making ISO / jigdo images # set -e DIR=$1 ARCHES="$2" OUT=$3 DEBVERSION=$4 MIRROR=$5 MKISOFS=$6 MKISOFS_OPTS=$7 JIGDO_OPTS=$8 JIGDO_CLEANUP=$9 NUM_ARCHES=`echo $ARCHES | wc -w` if [ "$CD"x = ""x ] ; then echo "Generating the $ARCHES iso/jigdo images ..." FILES=$DIR/*.volid else echo "Generating $ARCHES iso/jigdo image number $CD ..." FILES=$DIR/$CD.volid fi NUM_CDS=`ls -1 $FILES | wc -l` last_minute_update () { echo " Last-minute updates:" # Aaargh. Only now that we know how many CDs we're making can we # fill in the TOTALNUM number in README.{html,txt} (and therefore also # update the md5sum.txt entries for those files) for file in README.html README.txt do echo " $file" OLD_MD5=`md5sum ./$file` sed -i "s?TOTALNUM?$NUM_CDS?" $file NEW_MD5=`md5sum ./$file` sed -i "s?$OLD_MD5?$NEW_MD5?" md5sum.txt done } # Grab the xorriso version and turn it into a number we can use xorriso_version() { $MKISOFS --version 2>&1 | awk ' /^xorriso version/ { split($4, ver, ".") print ver[1]*10000+ver[2]*100+ver[3] }' } for file in $FILES do dir=${file%%.volid} n=${dir##$DIR/} dir=$DIR/CD$n cd $dir # Anything last-minute that can only be done now? last_minute_update cd $dir/.. opts=`cat $DIR/$n.mkisofs_opts` || true dirs=`cat $DIR/$n.mkisofs_dirs` || true volid=`cat $DIR/$n.volid` relname=`echo $DEBVERSION | sed -e 's/ //g'` DISKINFO=`cat $DIR/$n.diskinfo` ARCHLIST=`echo "$ARCHES" | tr ' ' '-'` OUTFILE="${CDNAME:-debian}-$relname-$ARCHLIST-$DISKTYPE-$n" # Clean up any old files rm -f $OUT/$OUTFILE.iso $OUT/$OUTFILE.jigdo $OUT/$OUTFILE.template date # Work out whether we want ISO, jigdo or both if [ "$MAXISOS"x = ""x ] || [ "$MAXISOS" = "all" ] || \ [ "$MAXISOS" = "ALL" ] || [ "$n" -le "$MAXISOS" ] ; then ISO_WANTED=1 else ISO_WANTED=0 fi if [ "$MAXJIGDOS"x = ""x ] || [ "$MAXJIGDOS" = "all" ] || \ [ "$MAXJIGDOS" = "ALL" ] || [ "$n" -le "$MAXJIGDOS" ] ; then JIGDO_WANTED=1 else JIGDO_WANTED=0 fi # Work out common jigdo options if needed if [ $JIGDO_WANTED = 1 ]; then XOR_VER=$(xorriso_version) if [ $XOR_VER -lt 10502 ]; then # Only supports jigdo format v1 case "$JIGDO_CHECKSUM"x in "md5"x|x) JIGDO_CHECKSUM_OPTS="-md5-list $DIR/checksum-check \ -jigdo-force-md5 /pool/" ;; *) echo "Older xorriso version $XOR_VER does not support jigdo checksum algorithm $JIGDO_CHECKSUM" exit 1 ;; esac else JIGDO_CHECKSUM_OPTS="-checksum-list $DIR/checksum-check \ -jigdo-checksum-algorithm $JIGDO_CHECKSUM \ -jigdo-force-checksum /pool/" fi JIGDO_OPTS="$JIGDO_CHECKSUM_OPTS $JIGDO_OPTS \ -jigdo-jigdo $OUT/$OUTFILE.jigdo \ -jigdo-template $OUT/$OUTFILE.template \ -jigdo-map Debian=$MIRROR/ \ -jigdo-exclude boot$n" fi # Actually make the ISO/jigdo images. Long command lines # here, with lots of stuff included :-( CMD= if [ $JIGDO_WANTED = 0 ] && [ $ISO_WANTED = 1 ] ; then CMD="$MKISOFS $MKISOFS_OPTS -V '$volid' \ -o $OUT/$OUTFILE.iso $opts $dirs CD$n" elif [ $JIGDO_WANTED = 1 ] && [ $ISO_WANTED = 1 ] ; then CMD="$MKISOFS $MKISOFS_OPTS -V '$volid' \ -o $OUT/$OUTFILE.iso \ $JIGDO_OPTS $opts $dirs CD$n" elif [ $JIGDO_WANTED = 1 ] && [ $ISO_WANTED = 0 ] ; then CMD="$MKISOFS $MKISOFS_OPTS -V '$volid' \ -o /dev/null \ $JIGDO_OPTS $opts $dirs CD$n" else echo "Neither jigdo nor iso wanted for CD$n" fi if [ "$CMD" ]; then echo $CMD echo $CMD > CD$n/.disk/mkisofs eval "$CMD" if [ $ISO_WANTED = 1 ] ; then chmod +r $OUT/$OUTFILE.iso fi # Generate our listfile while we have the information to hand easily find CD$n/pool -type f | sed 's?^.*/??g' | pigz -9nm > $OUT/$OUTFILE.list.gz fi # If we've made jigdo files, tweak them with extra info now if [ "$JIGDO_WANTED" = 1 ] ; then SNAPSHOT_DATE=`cat $DIR/DATE-zulu` if [ "$SNAPURL"x != ""x ] ; then SNAPSHOTURL=`echo "$SNAPURL" | sed "s/SNAPDATETIME/$SNAPSHOT_DATE/g"` fi $JIGDO_CLEANUP $OUT/$OUTFILE.jigdo \ $OUTFILE.iso $DIR/CD$n \ "`echo "$JIGDOTEMPLATEURL" | sed -e 's|%ARCH%|$ARCH|g'`$OUTFILE.template" \ "$DISKINFO" \ "$SNAPSHOTURL" \ $JIGDOFALLBACKURLS if [ "$ISO_WANTED" = 1 ] ; then # Make sure that the ISO is as new/newer than the jigdo file; #587774 touch $OUT/$OUTFILE.iso fi fi done