aboutsummaryrefslogtreecommitdiff
path: root/release/scripts/make-memstick.sh
diff options
context:
space:
mode:
authorKen Smith <kensmith@FreeBSD.org>2010-02-18 15:45:43 +0000
committerKen Smith <kensmith@FreeBSD.org>2010-02-18 15:45:43 +0000
commitc0f29c6e1d44b27d1e118443b2df8e0a372c97ac (patch)
tree928f5437f5186a9d6ebb2338f94e49351156fec5 /release/scripts/make-memstick.sh
parent062c8f4c866c2971e1e7721f77773776b5b01947 (diff)
downloadsrc-c0f29c6e1d44b27d1e118443b2df8e0a372c97ac.tar.gz
src-c0f29c6e1d44b27d1e118443b2df8e0a372c97ac.zip
Provide a script that can be used to create the memstick images. For now
it isn't being integrated into 'make release' because for the forseeable future the memstick images will be identical to what's on the DVD except for which package set is provided. If/when what's on the memstick diverges from what's on the DVD it would make more sense to generate a "memstick" directory in $CHROOT/R/cdrom and build the memstick image along with the ISO images. Reviewed by: jhb, ru, Garrett Cooper (yanefbsd at gmail dot com)
Notes
Notes: svn path=/head/; revision=204044
Diffstat (limited to 'release/scripts/make-memstick.sh')
-rwxr-xr-xrelease/scripts/make-memstick.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/release/scripts/make-memstick.sh b/release/scripts/make-memstick.sh
new file mode 100755
index 000000000000..18f9cf1d8d55
--- /dev/null
+++ b/release/scripts/make-memstick.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# This script generates a "memstick image" (image that can be copied to a
+# USB memory stick) from a directory tree. Note that the script does not
+# clean up after itself very well for error conditions on purpose so the
+# problem can be diagnosed (full filesystem most likely but ...).
+#
+# Usage: make-memstick.sh <directory tree> <image filename>
+#
+# $FreeBSD$
+#
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+export PATH
+
+BLOCKSIZE=10240
+
+if [ $# -ne 2 ]; then
+ echo "make-memstick.sh /path/to/directory /path/to/image/file"
+ exit 1
+fi
+
+tempfile="${2}.$$"
+
+if [ ! -d ${1} ]; then
+ echo "${1} must be a directory"
+ exit 1
+fi
+
+if [ -e ${2} ]; then
+ echo "won't overwrite ${2}"
+ exit 1
+fi
+
+rm -f ${tempfile}
+makefs ${tempfile} ${1}
+if [ $? -ne 0 ]; then
+ echo "makefs failed"
+ exit 1
+fi
+
+#
+# Use $BLOCKSIZE for transfers to improve efficiency. When calculating
+# how many blocks to transfer "+ 2" is to account for truncation in the
+# division and to provide space for the label.
+#
+
+filesize=`stat -f "%z" ${tempfile}`
+blocks=$(($filesize / ${BLOCKSIZE} + 2))
+dd if=/dev/zero of=${2} bs=${BLOCKSIZE} count=${blocks}
+if [ $? -ne 0 ]; then
+ echo "creation of image file failed"
+ exit 1
+fi
+
+unit=`mdconfig -a -t vnode -f ${2}`
+if [ $? -ne 0 ]; then
+ echo "mdconfig failed"
+ exit 1
+fi
+
+fdisk -BIq /dev/${unit}
+if [ $? -ne 0 ]; then
+ echo "fdisk failed"
+ exit 1
+fi
+
+bsdlabel -B -w /dev/${unit}
+if [ $? -ne 0 ]; then
+ echo "bsdlabel failed"
+ exit 1
+fi
+
+dd if=${tempfile} of=/dev/${unit}a bs=$BLOCKSIZE conv=sync
+if [ $? -ne 0 ]; then
+ echo "copying filesystem into image file failed"
+ exit 1
+fi
+
+mdconfig -d -u ${unit}
+
+rm -f ${tempfile}
+