Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/distrib/common buildfloppies.sh -- build floppy images from ...
details: https://anonhg.NetBSD.org/src/rev/92346091ac25
branches: trunk
changeset: 525714:92346091ac25
user: lukem <lukem%NetBSD.org@localhost>
date: Tue Apr 16 04:28:23 2002 +0000
description:
buildfloppies.sh -- build floppy images from the given files.
It can write multiple disks (up to a maximum number), and optionally
install a bootstrap or pad the last disk to the image size.
diffstat:
distrib/common/buildfloppies.sh | 186 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 186 insertions(+), 0 deletions(-)
diffs (190 lines):
diff -r 1b6d8a9a0857 -r 92346091ac25 distrib/common/buildfloppies.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/distrib/common/buildfloppies.sh Tue Apr 16 04:28:23 2002 +0000
@@ -0,0 +1,186 @@
+#!/bin/sh
+#
+# $NetBSD: buildfloppies.sh,v 1.1 2002/04/16 04:28:23 lukem Exp $
+#
+# Copyright (c) 2002 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Luke Mewburn of Wasabi Systems.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# set defaults
+#
+: ${PAX=pax}
+prog=${0##*/}
+
+
+usage()
+{
+ cat 1>&2 << _USAGE_
+Usage: ${prog} [-i instboot] [-m max] [-p] base size file [...]
+ -i instboot run instboot to install a bootstrap on @IMAGE@
+ -m max maximum number of floppies to build
+ -p pad last floppy to floppy size
+ base basename of generated floppies
+ size size of a floppy in 512 byte blocks
+ file [...] file(s) to build
+_USAGE_
+ exit 1
+}
+
+plural()
+{
+ [ $1 -ne 1 ] && echo "s"
+}
+
+
+# parse and check arguments
+#
+
+while getopts i:m:p opt; do
+ case ${opt} in
+ i)
+ instboot=${OPTARG} ;;
+ m)
+ maxdisks=${OPTARG} ;;
+ p)
+ pad=1 ;;
+ \?|*)
+ usage
+ ;;
+ esac
+done
+
+shift $(( ${OPTIND} - 1 ))
+[ $# -lt 3 ] && usage
+floppybase=$1
+floppysize=$2
+shift 2
+files=$*
+
+# setup temp file, remove existing images
+#
+floppy=floppy.$$.tar
+trap "rm -f ${floppy}" 0 1 2 3 # EXIT HUP INT QUIT
+rm -f ${floppybase}?.fs
+
+
+# create tar file
+#
+dd if=/dev/zero of=${floppy} bs=8k count=1 2>/dev/null
+${PAX} -w ${files} >> ${floppy} || exit 1
+ # XXX: use pax metafile and set perms?
+if [ -n "$instboot" ]; then
+ instboot=$( echo $instboot | sed -e s/@IMAGE@/${floppy}/ )
+ echo "Running instboot: ${instboot}"
+ eval ${instboot}
+fi
+
+# check size against available number of disks
+#
+set -- `ls -l ${floppy}`
+bytes=$5
+blocks=$(( ${bytes} / 512 ))
+numdisks=$(( (${blocks} - 1) / ${floppysize} + 1 ))
+if [ -z "${maxdisks}" ]; then
+ maxdisks=${numdisks}
+fi
+
+if [ ${numdisks} -gt ${maxdisks} ]; then
+ excess=$(( ( ${blocks} - ${floppysize} * ${maxdisks} ) * 512 ))
+ echo 1>&2 \
+ "$prog: Image is ${excess} bytes ($(( ${excess} / 1024 )) KB)"\
+ "too big to fit on ${maxdisks} disk"$(plural ${maxdisks})
+ exit 1
+fi
+
+if [ -n "${pad}" ]; then
+ padsize=$(( ${floppysize} * ${maxdisks} ))
+ padcount=$(( ${padsize} - ${blocks} ))
+ echo \
+ "Writing $(( ${padsize} * 512 )) bytes ($(( ${padsize} / 2 )) KB)" \
+ "on ${numdisks} disk"$(plural ${numdisks})"," \
+ "padded by $(( ${padcount} * 512 )) bytes" \
+ "($(( ${padcount} / 2 )) KB)"
+else
+ echo "Writing ${bytes} bytes ($(( ${blocks} / 2 )) KB)"\
+ "on ${numdisks} disk"$(plural ${numdisks})
+fi
+
+# write disks
+#
+curdisk=1
+image=
+floppysize8k=$(( ${floppysize} / 16 ))
+while [ ${curdisk} -le ${numdisks} ]; do
+ image="${floppybase}${curdisk}.fs"
+ echo "Creating disk ${curdisk} to ${image}"
+ if [ ${curdisk} -eq 1 ]; then
+ seek=0
+ skip=0
+ : > ${image}
+ else
+ seek=1
+ skip=$(( (${curdisk} - 1) * (${floppysize8k} - 1) + 1 ))
+ echo USTARFS ${curdisk} > ${image}
+ fi
+ count=$(( ${floppysize8k} - ${seek} ))
+# echo 1>&2 " DEBUG: disk ${curdisk} seek=${seek} skip=${skip} count=${count}"
+ dd bs=8k conv=sync seek=${seek} skip=${skip} count=${count} \
+ if=${floppy} of=${image} 2>/dev/null
+
+ curdisk=$(( ${curdisk} + 1 ))
+done
+
+#
+# XXX: the old bootfloppy generation code used to zero the last 0.5k of the
+# end of the image in single disk configs; that possibly trashed real
+# data???
+# is that functionality still required?
+#
+
+# pad last disk if necessary
+#
+if [ -n "${pad}" ]; then
+ padseek=$(( ${floppysize} - ${padcount} ))
+# echo 1>&2 " DEBUG: padding ${image} with $(( ${padcount} * 512 )) at offset $(( ${padseek} * 512 ))"
+ dd seek=${padseek} count=${padcount} \
+ if=/dev/zero of=${image} 2>/dev/null
+fi
+
+
+# final status
+#
+echo "Final result:"
+ls -l ${floppybase}?.fs
+
+exit 0
Home |
Main Index |
Thread Index |
Old Index