File: make_image

package info (click to toggle)
debian-cd 3.2.3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,848 kB
  • sloc: sh: 6,129; perl: 4,129; makefile: 413
file content (153 lines) | stat: -rwxr-xr-x 4,252 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/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