blob: 3c9f389fa533ce4330f7f44a6848f52edf12efb3 (
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
143
144
145
146
147
148
149
150
151
|
SYSLINUX=$IMGPATH/usr/lib/syslinux/syslinux-nomtools
if [ ! -f $SYSLINUX ]; then
echo "Warning: nomtools syslinux doesn't exist"
SYSLINUX=$IMGPATH/usr/bin/syslinux
if [ ! -f $SYSLINUX ]; then
echo "$SYSLINUX doesn't exist"
exit 1
fi
fi
prepareBootImage() {
dd if=/dev/zero bs=1k count=$BOOTDISKSIZE of=/$MBD_TMPIMAGE 2>/dev/null
mkdosfs -r 16 -C $MBD_TMPIMAGE $BOOTDISKSIZE >/dev/null
$SYSLINUX $MBD_TMPIMAGE
mount -o loop -t msdos $MBD_TMPIMAGE $MBD_BOOTTREE
prepareBootTree
}
# prepare a directory with the kernel, initrd, and various message files
# used to populate a boot image
prepareBootTree() {
(cd $BOOTDISKDIR; find . ! -name "*.msg" -maxdepth 1 ! -type d | cpio --quiet -p $MBD_BOOTTREE)
cp $MBD_FSIMAGE $MBD_BOOTTREE/initrd.img
cp $KERNELROOT/boot/vmlinuz-* $MBD_BOOTTREE/vmlinuz
pngtopnm $BOOTDISKDIR/syslinux-splash.png | ppmtolss16 \#000000=0 \#cdcfd5=7 \#c90000=2 \#ffffff=15 \#5b6c93=9 > $BOOTDISKDIR/splash.lss
if [ $? != 0 ]; then
echo $0: Failed to create splash.lss
exit 1
fi
cp $BOOTDISKDIR/splash.lss $MBD_BOOTTREE/splash.lss
rm -f $MBD_BOOTTREE/syslinux-splash.png
rm -f $MBD_BOOTTREE/memtest*
for file in $BOOTDISKDIR/*.msg; do
filename=`basename $file`
sed -e "s/@VERSION@/$VERSION/g" $file > $MBD_BOOTTREE/$filename
done
if [ $? != 0 ]; then
echo $0: Failed to copy messages from $BOOTDISKDIR to $MBD_BOOTTREE.
umount $MBD_BOOTTREE
rm -rf $MBD_BOOTTREE $MBD_TMPIMAGE
exit 1
fi
}
mkdir -p $TOPDESTPATH/images/pxeboot
cat > $TOPDESTPATH/images/README <<EOF
This directory contains image files that can be used to create media
capable of starting the $PRODUCT installation process.
The boot.iso file is an ISO 9660 image of a bootable CD-ROM. It is useful
in cases where the CD-ROM installation method is not desired, but the
CD-ROM's boot speed would be an advantage.
To use this image file, burn the file onto CD-R (or CD-RW) media as you
normally would.
The diskboot.img file is a VFAT filesystem image that can be written to a
USB pendrive or other bootable media larger than a floppy. Note that
booting via USB is dependent on your BIOS supporting this. It should
be written to the device using dd.
EOF
makeBootImages() {
if [ "$kerneltag" != "guest" ]; then
echo "Building $KERNELARCH initrd.img"
makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd.img \
--initrdsize 7000 \
--loaderbin loader \
--modules "$INITRDMODS"
[ $? = 0 ] || exit 1
if [ -f $IMGPATH/usr/lib/syslinux/isolinux.bin ]; then
echo "Building isolinux directory"
MBD_BOOTTREE=$TOPDESTPATH/isolinux
MBD_FSIMAGE=$TOPDESTPATH/images/pxeboot/initrd.img
mkdir $MBD_BOOTTREE 2>/dev/null
cp $IMGPATH/usr/lib/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin
prepareBootTree
# isolinux needs the config file to be isolinux.cfg
mv $MBD_BOOTTREE/syslinux.cfg $MBD_BOOTTREE/isolinux.cfg
# copy in memtest if present
if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then
cp $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* $MBD_BOOTTREE/memtest
echo -e "label memtest86\n kernel memtest\n append -\n" >> $MBD_BOOTTREE/isolinux.cfg
fi
else
echo "No isolinux binaries. Skipping isolinux creation"
fi
# clean up time -- being very explicit about what's linked
if [ -f $TOPDESTPATH/isolinux/vmlinuz -a -f $TOPDESTPATH/isolinux/initrd.img ] ;then
echo "Cleaning up images"
# links for the pxeboot bits
rm -f $TOPDESTPATH/images/pxeboot/*
ln $TOPDESTPATH/isolinux/vmlinuz $TOPDESTPATH/images/pxeboot/vmlinuz
ln $TOPDESTPATH/isolinux/initrd.img $TOPDESTPATH/images/pxeboot/initrd.img
# links for the autoboot bits
if [ -f $TOPDESTPATH/dosutils/loadlin.exe ]; then
rm -f $TOPDESTPATH/dosutils/autoboot/*
mkdir -p $TOPDESTPATH/dosutils/autoboot/
ln $TOPDESTPATH/isolinux/vmlinuz $TOPDESTPATH/dosutils/autoboot/vmlinuz
ln $TOPDESTPATH/isolinux/initrd.img $TOPDESTPATH/dosutils/autoboot/initrd.img
fi
fi
# now make a boot iso
mkdir -p $TOPDESTPATH/images/isopath
cp -rl $TOPDESTPATH/isolinux $TOPDESTPATH/images/isopath
mkisofs -quiet -o $TOPDESTPATH/images/boot.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V "$PRODUCT" -T $TOPDESTPATH/images/isopath
rm -rf $TOPDESTPATH/images/isopath
# now make a boot pendrive image
mkdir -p $TOPDESTPATH/images/fobpath
dd if=/dev/zero of=$TOPDESTPATH/images/diskboot.img bs=1M count=8 2>/dev/null
mkdosfs $TOPDESTPATH/images/diskboot.img
$SYSLINUX $TOPDESTPATH/images/diskboot.img
mount -o loop $TOPDESTPATH/images/diskboot.img $TOPDESTPATH/images/fobpath
cp -r $TOPDESTPATH/isolinux/* $TOPDESTPATH/images/fobpath/
grep -v local $TOPDESTPATH/images/fobpath/isolinux.cfg > $TOPDESTPATH/images/fobpath/syslinux.cfg
rm -f $TOPDESTPATH/images/fobpath/isolinux.cfg
umount -f $TOPDESTPATH/images/fobpath
rmdir $TOPDESTPATH/images/fobpath
cat > $TOPDESTPATH/images/pxeboot/README <<EOF
The files in this directory are useful for booting a machine via PXE.
The following files are available:
vmlinuz - the BOOT kernel used for the installer
initrd.img - an initrd with support for all install methods and
drivers supported for installation of $PRODUCT
EOF
else # set up the boot stuff for the xen guest kernel
echo "Building $KERNELARCH guest initrd.img"
mkdir -p $TOPDESTPATH/images/xen
makeinitrd --initrdto $TOPDESTPATH/images/xen/initrd.img \
--initrdsize 7000 \
--loaderbin loader \
--modules "$INITRDMODS"
[ $? = 0 ] || exit 1
cp $KERNELROOT/boot/vmlinuz-* $TOPDESTPATH/images/xen/vmlinuz
fi
}
|