Browse Source

[build] Merge util/geniso and util/genliso

Rework geniso and genliso to provide a single merged utility for
generating ISO images.

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Christian Hesse 10 years ago
parent
commit
a8f037a275
3 changed files with 125 additions and 137 deletions
  1. 4
    4
      src/arch/i386/Makefile.pcbios
  2. 121
    59
      src/util/geniso
  3. 0
    74
      src/util/genliso

+ 4
- 4
src/arch/i386/Makefile.pcbios View File

49
 NON_AUTO_MEDIA	+= iso
49
 NON_AUTO_MEDIA	+= iso
50
 %iso:	%lkrn util/geniso
50
 %iso:	%lkrn util/geniso
51
 	$(QM)$(ECHO) "  [GENISO] $@"
51
 	$(QM)$(ECHO) "  [GENISO] $@"
52
-	$(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) bash util/geniso $@ $<
52
+	$(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) VERSION="$(VERSION)" bash util/geniso -o $@ $<
53
 
53
 
54
 # rule to make a floppy emulation ISO boot image
54
 # rule to make a floppy emulation ISO boot image
55
 NON_AUTO_MEDIA	+= liso
55
 NON_AUTO_MEDIA	+= liso
56
-%liso:	%lkrn util/genliso
57
-	$(QM)$(ECHO) "  [GENLISO] $@"
58
-	$(Q)bash util/genliso $@ $<
56
+%liso:	%lkrn util/geniso
57
+	$(QM)$(ECHO) "  [GENISO] $@"
58
+	$(Q)VERSION="$(VERSION)" bash util/geniso -l -o $@ $<
59
 
59
 
60
 # rule to make a syslinux floppy image (mountable, bootable)
60
 # rule to make a syslinux floppy image (mountable, bootable)
61
 NON_AUTO_MEDIA	+= sdsk
61
 NON_AUTO_MEDIA	+= sdsk

+ 121
- 59
src/util/geniso View File

1
 #!/bin/bash
1
 #!/bin/bash
2
 #
2
 #
3
 # Generate a isolinux ISO boot image
3
 # Generate a isolinux ISO boot image
4
-#
5
-# geniso foo.iso foo.lkrn
6
-#
7
-# the ISO image is the first argument so that a list of .lkrn images
8
-# to include can be specified
9
-#
10
-case $# in
11
-0|1)
12
-	echo Usage: $0 foo.iso foo.lkrn ...
13
-	exit 1
14
-	;;
15
-esac
16
 
4
 
17
-# This should be the default location of the isolinux.bin file
18
-isolinux_bin=${ISOLINUX_BIN:-util/isolinux.bin}
19
-if [ ! -r $isolinux_bin ]
20
-then
21
-	echo $0: $isolinux_bin not found, please install, or set ISOLINUX_BIN in arch/i386/Makefile correctly
5
+function help() {
6
+	echo "usage: ${0} [OPTIONS] foo.lkrn [bar.lkrn,...]"
7
+	echo
8
+	echo "where OPTIONS are:"
9
+	echo " -h       show this help"
10
+	echo " -l       build legacy image with floppy emulation"
11
+	echo " -o FILE  save iso image to file"
12
+}
13
+
14
+LEGACY=0
15
+FIRST=""
16
+
17
+while getopts "hlo:" opt; do
18
+	case ${opt} in
19
+		h)
20
+			help
21
+			exit 0
22
+			;;
23
+		l)
24
+			LEGACY=1
25
+			;;
26
+		o)
27
+			OUT="${OPTARG}"
28
+			;;
29
+	esac
30
+done
31
+
32
+shift $((OPTIND - 1))
33
+
34
+if [ -z "${OUT}" ]; then
35
+	echo "${0}: no output file given" >&2
36
+	help
22
 	exit 1
37
 	exit 1
23
 fi
38
 fi
24
 
39
 
25
 # There should either be mkisofs or the compatible genisoimage program
40
 # There should either be mkisofs or the compatible genisoimage program
26
-mkisofs=`which mkisofs genisoimage 2>/dev/null | head -n1`
27
-if [ -z $mkisofs ]
28
-then
29
-	echo $0: mkisofs or genisoimage not found, please install or set PATH
41
+for command in genisoimage mkisofs; do
42
+	if ${command} --version >/dev/null 2>/dev/null; then
43
+		mkisofs=(${command})
44
+		break
45
+	fi
46
+done
47
+
48
+if [ -z "${mkisofs}" ]; then
49
+	echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2
30
 	exit 1
50
 	exit 1
31
 fi
51
 fi
32
 
52
 
33
-# isohybrid will be used if available
34
-isohybrid=`which isohybrid 2>/dev/null`
53
+dir=$(mktemp -d bin/iso.dir.XXXXXX)
54
+cfg=${dir}/isolinux.cfg
35
 
55
 
36
-out=$1
37
-shift
38
-dir=`mktemp -d bin/iso.dir.XXXXXX`
39
-cfg=$dir/isolinux.cfg
40
-cp $isolinux_bin $dir
56
+mkisofs+=(-quiet -l -volid "iPXE" -preparer "iPXE build system"
57
+	-appid "iPXE ${VERSION} - Open Source Network Boot Firmware"
58
+	-publisher "http://ipxe.org/" -c boot.cat)
41
 
59
 
42
-# syslinux 6.x needs a file called ldlinux.c32
43
-ldlinux_c32=$(dirname ${isolinux_bin})/ldlinux.c32
44
-if [ -s ${ldlinux_c32} ]
45
-then
46
-	cp ${ldlinux_c32} ${dir}
47
-fi
48
-
49
-cat > $cfg <<EOF
60
+# generate the config
61
+cat > ${cfg} <<EOF
50
 # These default options can be changed in the geniso script
62
 # These default options can be changed in the geniso script
51
 SAY iPXE ISO boot image
63
 SAY iPXE ISO boot image
52
 TIMEOUT 30
64
 TIMEOUT 30
53
 EOF
65
 EOF
54
-first=
55
-for f
56
-do
57
-	if [ ! -r $f ]
58
-	then
59
-		echo $f does not exist, skipping 1>&2
66
+for f; do
67
+	if [ ! -r ${f} ]; then
68
+		echo "${f} does not exist, skipping" >&2
60
 		continue
69
 		continue
61
 	fi
70
 	fi
62
-	b=$(basename $f)
71
+	b=$(basename ${f})
63
 	g=${b%.lkrn}
72
 	g=${b%.lkrn}
64
-	g=${g//[^a-z0-9]}.krn
65
-	case "$first" in
66
-	"")
67
-		echo DEFAULT $b
68
-		;;
73
+	g=${g//[^a-z0-9]}
74
+	g=${g:0:8}.krn
75
+	case "${FIRST}" in
76
+		"")
77
+			echo "DEFAULT ${b}"
78
+			FIRST=${g}
79
+			;;
69
 	esac
80
 	esac
70
-	first=$g
71
-	echo LABEL $b
72
-	echo "" KERNEL $g
73
-	cp $f $dir/$g
74
-done >> $cfg
75
-$mkisofs -quiet -l -o $out -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table $dir
76
-rm -fr $dir
77
-if [ -n "$isohybrid" ]
78
-then
79
-    $isohybrid $out >/dev/null
80
-fi
81
+	echo "LABEL ${b}"
82
+	echo " KERNEL ${g}"
83
+	cp ${f} ${dir}/${g}
84
+done >> ${cfg}
85
+
86
+case "${LEGACY}" in
87
+	1)
88
+		# check for mtools
89
+		case "$(mtools -V)" in
90
+			Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
91
+				;;
92
+			*)
93
+				echo "Mtools version 3.9.9 or later is required" >&2
94
+				exit 1
95
+				;;
96
+		esac
97
+
98
+		# generate floppy image
99
+		img=${dir}/boot.img
100
+		mformat -f 1440 -C -i ${img} ::
101
+
102
+		# copy lkrn file to floppy image
103
+		for f in ${dir}/*.krn; do
104
+			mcopy -m -i ${img} ${f} ::$(basename ${g})
105
+			rm -f ${f}
106
+		done
107
+
108
+		# copy config file to floppy image
109
+		mcopy -i ${img} ${cfg} ::syslinux.cfg
110
+		rm -f ${cfg}
111
+
112
+		# write syslinux bootloader to floppy image
113
+		if ! syslinux ${img}; then
114
+			echo "${0}: failed writing syslinux to floppy image ${img}" >&2
115
+			exit 1
116
+		fi
117
+
118
+		# generate the iso image
119
+		"${mkisofs[@]}" -b boot.img -output ${OUT} ${dir}
120
+		;;
121
+	0)
122
+		# copy isolinux bootloader
123
+		cp ${ISOLINUX_BIN} ${dir}
124
+
125
+		# syslinux 6.x needs a file called ldlinux.c32
126
+		LDLINUX_C32=$(dirname ${ISOLINUX_BIN})/ldlinux.c32
127
+		if [ -s ${LDLINUX_C32} ]; then
128
+			cp ${LDLINUX_C32} ${dir}
129
+		fi
130
+
131
+		# generate the iso image
132
+		"${mkisofs[@]}" -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -output ${OUT} ${dir}
133
+
134
+		# isohybrid will be used if available
135
+		if isohybrid --version >/dev/null 2>/dev/null; then
136
+			isohybrid ${OUT} >/dev/null
137
+		fi
138
+		;;
139
+esac
140
+
141
+# clean up temporary dir
142
+rm -fr ${dir}

+ 0
- 74
src/util/genliso View File

1
-#!/bin/bash
2
-#
3
-# Generate a legacy floppy emulation ISO boot image
4
-#
5
-# genliso foo.liso foo.lkrn bar.lkrn ...
6
-#
7
-# The .liso image filename is the first argument followed by
8
-#   a list of .lkrn images  include in .liso image
9
-
10
-case $# in
11
-0|1)
12
-	echo Usage: $0 foo.liso foo.lkrn ...
13
-	exit 1
14
-	;;
15
-esac
16
-
17
-case "`mtools -V`" in
18
-Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
19
-	;;
20
-*)
21
-	echo Mtools version 3.9.9 or later is required
22
-	exit 1
23
-	;;
24
-esac
25
-
26
-out=$1
27
-shift
28
-
29
-dir=`mktemp -d bin/liso.dir.XXXXXX`
30
-
31
-img=$dir/boot.img
32
-mformat -f 1440 -C -i $img ::
33
-
34
-cfg=$dir/syslinux.cfg
35
-cat > $cfg <<EOF
36
-# These default options can be changed in the genliso script
37
-SAY iPXE ISO boot image generated by genliso
38
-TIMEOUT 30
39
-EOF
40
-
41
-first=
42
-for f
43
-do
44
-	if [ ! -r $f ]
45
-	then
46
-		echo $f does not exist, skipping 1>&2
47
-		continue
48
-	fi
49
-	# shorten name for 8.3 filesystem
50
-	b=$(basename $f)
51
-	g=${b%.lkrn}
52
-	g=${g//[^a-z0-9]}
53
-	g=${g:0:8}.krn
54
-	case "$first" in
55
-	"")
56
-		echo DEFAULT $g
57
-		;;
58
-	esac
59
-	first=$g
60
-	echo LABEL $g
61
-	echo "" KERNEL $g
62
-	mcopy -m -i $img $f ::$g
63
-done >> $cfg
64
-
65
-mcopy -i $img $cfg ::syslinux.cfg
66
-
67
-if ! syslinux $img
68
-then
69
-	exit 1
70
-fi
71
-
72
-mkisofs -q -o $out -c boot.cat -b boot.img $dir
73
-
74
-rm -fr $dir

Loading…
Cancel
Save