154 lines
4.2 KiB
Bash
Executable File
154 lines
4.2 KiB
Bash
Executable File
#!/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
|
|
|
|
# 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/..
|
|
|
|
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
|