summaryrefslogtreecommitdiffstats
path: root/scripts/mk-images.x86
blob: 083eb9dd1932f52b481e8e38934e91be5f0e91b4 (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
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

# 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
	$IMGPATH/usr/lib/anaconda-runtime/splashtolss.sh $BOOTDISKDIR/syslinux-splash.png $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" != "xenU" ]; then
    echo "Building initrd.img"
    makeinitrd --initrdto $TOPDESTPATH/images/pxeboot/initrd.img \
	--initrdsize 8192 \
	--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
	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

    # symlink the kernel for pxe dir
    ln $TOPDESTPATH/isolinux/vmlinuz $TOPDESTPATH/images/pxeboot/vmlinuz

    # 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 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 8192 \
	--loaderbin loader \
	--modules "$INITRDMODS"
    [ $? = 0 ] || exit 1
    cp $KERNELROOT/boot/vmlinuz-*xenU $TOPDESTPATH/images/xen/vmlinuz
  fi
}