#!/bin/ksh # # Script for creating a Solaris bootable CD-ROM # # Assumes that you have installed cdrecord in your path or /opt/schily/bin. # # Assumes that you have installed sunfdisk in your path (or /opt/schily/bin). # # All partitions (cdrom.s*) should be "whole" (i.e., do not remove # the first 512 bytes of the cdrom.s0 image that you create). # # Written by Eric Negaard (EJN@Negaard.Net) 1999-06-25. # PATH=/opt/schily/bin:$PATH ; export PATH DBG= while getopts dh c ; do case "$c" in d) DBG=true ;; h) echo "Usage: burn [-d]" ; exit 0 ;; \?) echo "Usage: burn [-d]" ; exit 1 ;; esac done # Check all of the partition sizes to make sure they're multiples of 2048 bytes tsize=0 for part in 0 1 2 3 4 5 ; do f=cdrom.s$part bytes=`wc -c "$f"` if [ -z "$bytes" ]; then echo "ERROR: $f: Unable to determine file size" >&2 exit 1 fi sz=`echo "" | nawk -v bytes="$bytes" 'END {printf ("%d\n", bytes / 2048);}'` rem=`echo "" | nawk -v bytes="$bytes" 'END {printf ("%d\n", bytes % 2048);}'` if [ 0 -ne "$rem" ]; then echo "ERROR: $f: Not a multiple of 2k bytes ($sz*2048+$rem)" >&2 exit 1 fi echo "($f: $sz*2K)" # Calculate data size in Kbytes datasz=`expr $sz \* 2` # Fdisk partitions are 1-based instead of 0-based fdiskpart=`expr $part + 1` # Calculate partition size in Kbytes partsz=`sunfdisk -s cdrom.vtoc:$fdiskpart 2>/dev/null` if [ -z "$partsz" ]; then echo "ERROR: $f: Unable to determine partition size from cdrom.vtoc" >&2 exit 1 fi if [ "$datasz" -gt "$partsz" ]; then echo "ERROR: $f: Data size ($datasz) > partition size ($partsz)" >&1 exit 1 elif [ "$datasz" -ne "$partsz" ]; then echo "WARNING: $f: Data size ($datasz) != partition size ($partsz)." pad=`expr $partsz - $datasz` eval "pad_s$part=\"<(dd if=/dev/zero bs=1k count=$pad)\"" echo " PAD with $pad Kbytes" else echo "(data size matches partition size [$datasz/$partsz])" eval "pad_s$part=\"\"" fi tsize=`expr $tsize + $partsz` done cmd="cat cdrom.vtoc <(dd if=cdrom.s0 bs=1b skip=1 count=3) <(dd if=cdrom.s0 bs=2k skip=1) $pad_s0 cdrom.s1 $pad_s1 cdrom.s2 $pad_s2 cdrom.s3 $pad_s3 cdrom.s4 $pad_s4 cdrom.s5 $pad_s5 | cdrecord -v dev=1,6,0 speed=4 fs=8m tsize=${tsize}k -" echo "" echo "Performing: $cmd" [ -n "$DBG" ] && exit 0 eval "$cmd"