blob: 521c929e1ca3b9d1bb1d5c5b82e0398d7eef10e1 (
plain)
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
|
#!/bin/bash
#
# Generate a isolinux ISO boot image
function help() {
echo "usage: ${0} [OPTIONS] foo.lkrn [bar.lkrn,...]"
echo
echo "where OPTIONS are:"
echo " -h show this help"
echo " -l build legacy image with floppy emulation"
echo " -o FILE save iso image to file"
}
LEGACY=0
FIRST=""
while getopts "hlo:" opt; do
case ${opt} in
h)
help
exit 0
;;
l)
LEGACY=1
;;
o)
OUT="${OPTARG}"
;;
esac
done
shift $((OPTIND - 1))
if [ -z "${OUT}" ]; then
echo "${0}: no output file given" >&2
help
exit 1
fi
# There should either be mkisofs or the compatible genisoimage program
for command in genisoimage mkisofs; do
if ${command} --version >/dev/null 2>/dev/null; then
mkisofs=(${command})
break
fi
done
if [ -z "${mkisofs}" ]; then
echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2
exit 1
fi
dir=$(mktemp -d bin/iso.dir.XXXXXX)
cfg=${dir}/isolinux.cfg
mkisofs+=(-quiet -l -volid "iPXE" -preparer "iPXE build system"
-appid "iPXE ${VERSION} - Open Source Network Boot Firmware"
-publisher "http://ipxe.org/" -c boot.cat)
# generate the config
cat > ${cfg} <<EOF
# These default options can be changed in the geniso script
SAY iPXE ISO boot image
TIMEOUT 30
EOF
for f; do
if [ ! -r ${f} ]; then
echo "${f} does not exist, skipping" >&2
continue
fi
b=$(basename ${f})
g=${b%.lkrn}
g=${g//[^a-z0-9]}
g=${g:0:8}.krn
case "${FIRST}" in
"")
echo "DEFAULT ${b}"
FIRST=${g}
;;
esac
echo "LABEL ${b}"
echo " KERNEL ${g}"
cp ${f} ${dir}/${g}
done >> ${cfg}
case "${LEGACY}" in
1)
# check for mtools
case "$(mtools -V)" in
Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
;;
*)
echo "Mtools version 3.9.9 or later is required" >&2
exit 1
;;
esac
# generate floppy image
img=${dir}/boot.img
mformat -f 1440 -C -i ${img} ::
# copy lkrn file to floppy image
for f in ${dir}/*.krn; do
mcopy -m -i ${img} ${f} ::$(basename ${g})
rm -f ${f}
done
# copy config file to floppy image
mcopy -i ${img} ${cfg} ::syslinux.cfg
rm -f ${cfg}
# write syslinux bootloader to floppy image
if ! syslinux ${img}; then
echo "${0}: failed writing syslinux to floppy image ${img}" >&2
exit 1
fi
# generate the iso image
"${mkisofs[@]}" -b boot.img -output ${OUT} ${dir}
;;
0)
# copy isolinux bootloader
cp ${ISOLINUX_BIN} ${dir}
# syslinux 6.x needs a file called ldlinux.c32
LDLINUX_C32=$(dirname ${ISOLINUX_BIN})/ldlinux.c32
if [ -s ${LDLINUX_C32} ]; then
cp ${LDLINUX_C32} ${dir}
fi
# generate the iso image
"${mkisofs[@]}" -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -output ${OUT} ${dir}
# isohybrid will be used if available
if isohybrid --version >/dev/null 2>/dev/null; then
isohybrid ${OUT} >/dev/null
fi
;;
esac
# clean up temporary dir
rm -fr ${dir}
|