5 # Written by Erik Troan <ewt@redhat.com>
20 MOUNTDIR=`mktemp -d /tmp/mkbootdisk.XXXXXX`
28 usage: `basename $0` [--version] [--noprompt] [--device <devicefile>]
29 [--verbose -v] [--iso] [--kernelargs <args>] [--size <size>] <kernel>
30 (ex: `basename $0` --device /dev/fd1 2.0.31)
35 while [ $# -gt 0 ]; do
65 echo "mkbootdisk: version $VERSION"
69 if [ -z "$kernel" ]; then
80 [ -z "$kernel" ] && usage 1
82 [ -d /lib/modules/$kernel ] || {
83 echo "/lib/modules/$kernel is not a directory." >&2
87 [ -f /boot/vmlinuz-$kernel ] || {
88 echo "/boot/vmlinuz-$kernel does not exist." >&2
93 rootdev=`awk '$1 ~ /^[^#]/ && $2 ~ /^\/$/ { print $1 ; exit }' /etc/fstab`
95 if [ $(echo $rootdev | cut -c1-6) = "LABEL=" ]; then
96 rootlabel=$(echo $rootdev | cut -c7-)
98 # whee, now we have to look through every partition looking for
99 # the thing called $rootlabel, which could be raid. Ick.
101 list=$(tail +3 /proc/partitions | awk '{ print $4 '} | grep '^md')
102 list="$list $(tail +3 /proc/partitions |
103 awk '{ print $4 '} | grep -v '^md')"
106 if tune2fs -l /dev/$dev >/dev/null 2>/dev/null; then
107 label=$(tune2fs -l /dev/$dev 2>/dev/null |
108 grep "Filesystem volume name" | awk '{print $4}')
109 if [ "$label" = $rootlabel ]; then
117 if [ -z "$kernelargs" -a -x /sbin/grubby -a -f /boot/grub/grub.conf ]; then
118 # sed gross... this grep's for the args= line and removes the args=" and "$
119 defkernel=$(grubby --default-kernel)
120 if [ -n "$defkernel" ]; then
121 kernelargs=$(grubby --info "$defkernel" |
122 sed -n '/^args=/{s/^args="//;s/"$//;p;}')
126 [ -z "$rootdev" ] && {
127 echo 'Cannot find root partition in /etc/fstab.' >&2
133 echo "Failed to create $MOUNTDIR" >&2
136 [ -d $MOUNTDIR ] || {
137 echo "$MOUNTDIR is not a directory!" >&2
141 cfgfile=$MOUNTDIR/isolinux/isolinux.cfg
142 bootmsg=$MOUNTDIR/isolinux/boot.msg
144 # create an iso image; the directory is all we need
145 [ -n "$verbose" ] && echo -n "Installing isolinux... "
146 mkdir $MOUNTDIR/isolinux
147 cp /usr/lib/syslinux/isolinux.bin $MOUNTDIR/isolinux
148 [ -n "$verbose" ] && echo done
151 BOOTDESTDIR=$MOUNTDIR/isolinux
153 [ -n "$verbose" ] && echo -n "Copying /boot/vmlinuz-$kernel... "
154 cp -p /boot/vmlinuz-$kernel $BOOTDESTDIR/vmlinuz
155 [ $? = 0 ] || failed=1
156 [ -n "$verbose" ] && echo "done."
158 [ -n "$verbose" ] && echo -n "Copying /boot/initrd-$kernel.img... "
159 if [ -f /boot/initrd-$kernel.img ]; then
160 cp -p /boot/initrd-$kernel.img $BOOTDESTDIR/initrd.img
162 [ $? = 0 ] || failed=1
163 [ -n "$verbose" ] && echo "done."
165 [ -n "$verbose" ] && echo -n "Configuring bootloader... "
167 [ -f $BOOTDESTDIR/initrd.img ] && INITRDARG="initrd=initrd.img"
169 if [ $(echo $rootdev | cut -b 6-9) = "loop" ]; then
170 rootdev=$(ls -l $rootdev | sed 's/,//' | awk '{ printf("%02x%02x\n", $5, $6); }')
180 append $INITRDARG $kernelargs root=$rootdev
183 [ $? = 0 ] || failed=1
185 [ -n "$verbose" ] && echo "append $INITRDARG kernelargs=$kernlargs root=$rootdev"
190 if [ -f /etc/redhat-release ]; then
191 title="$(sed 's/ release.*$//' < /etc/redhat-release)"
193 title="Red Hat Linux"
197 cat >> $bootmsg <<EOF
199 Press <return> (or wait 10 seconds) to boot your $title system from
200 $rootdev. You may override the default linux kernel parameters by typing
201 "linux <params>", followed by <return> if you like.
205 [ $? = 0 ] || failed=1
207 [ -n "$verbose" ] && echo "done."
210 -A "Red Hat Linux Boot CD" \
211 -V "Red Hat Linux Boot CD" \
214 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
215 -boot-load-size 4 -boot-info-table $MOUNTDIR
220 if [ $failed -eq 1 ]; then