Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Mar 2011 01:38:24 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r219584 - in head/release: . amd64 i386 scripts
Message-ID:  <201103130138.p2D1cOLc035974@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sun Mar 13 01:38:24 2011
New Revision: 219584
URL: http://svn.freebsd.org/changeset/base/219584

Log:
  Add generation of memstick images to the bsdinstall release makefile for
  i386 and amd64. This involved moving the memstick generation script to
  the arch directories from scripts/, in analogy to mkisoimages.sh. This
  script was never called from /usr/src/release/Makefile, so that hasn't
  been updated.

Added:
  head/release/amd64/make-memstick.sh
     - copied unchanged from r219487, head/release/scripts/make-memstick.sh
  head/release/i386/make-memstick.sh
     - copied unchanged from r219487, head/release/scripts/make-memstick.sh
Deleted:
  head/release/scripts/make-memstick.sh
Modified:
  head/release/Makefile.bsdinstall

Modified: head/release/Makefile.bsdinstall
==============================================================================
--- head/release/Makefile.bsdinstall	Sat Mar 12 22:48:51 2011	(r219583)
+++ head/release/Makefile.bsdinstall	Sun Mar 13 01:38:24 2011	(r219584)
@@ -41,6 +41,14 @@ EXTRA_PACKAGES+= src.txz
 EXTRA_PACKAGES+= reldoc
 .endif
 
+RELEASE_TARGETS= ftp
+.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
+RELEASE_TARGETS+= cdrom
+.endif
+.if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
+RELEASE_TARGETS+= memstick
+.endif
+
 .include <bsd.obj.mk>
 
 base.txz:
@@ -70,9 +78,9 @@ reldoc:
 	cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc
 	-mkdir ${.OBJDIR}/reldoc
 .for i in hardware readme relnotes errata
-	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/$i/article.txt \
+	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.txt \
 	    ${.OBJDIR}/reldoc/${i:U}.TXT
-	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/$i/article.html \
+	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.html \
 	    ${.OBJDIR}/reldoc/${i:U}.HTM
 .endfor
 	@cp ${.OBJDIR}/rdoc/${RELNOTES_LANG}/readme/docbook.css ${.OBJDIR}/reldoc
@@ -99,18 +107,22 @@ system: packagesystem
 
 release.iso: system
 	echo kernel_options=\"-C\" > ${.OBJDIR}/release/boot/loader.conf
-	sh /usr/src/release/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
+	sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
 	rm ${.OBJDIR}/release/boot/loader.conf
 
+memstick: system
+	sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick
+
 packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
 	touch ${.OBJDIR}/${.TARGET}
 
 cdrom: release.iso
 ftp: packagesystem
+	rm -rf ${.OBJDIR}/ftp
 	mkdir ${.OBJDIR}/ftp
 	cp ${.OBJDIR}/*.txz ${.OBJDIR}/ftp
 
-release: cdrom ftp
+release: ${RELEASE_TARGETS}
 
 clean:
 	chflags -R noschg ${.OBJDIR}
@@ -119,5 +131,5 @@ clean:
 	rm -f ${.OBJDIR}/*.txz
 	rm -f system
 	rm -rf ${.OBJDIR}/release
-	rm -f ${.OBJDIR}/release.iso
+	rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick
 

Copied: head/release/amd64/make-memstick.sh (from r219487, head/release/scripts/make-memstick.sh)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/release/amd64/make-memstick.sh	Sun Mar 13 01:38:24 2011	(r219584, copy of r219487, head/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}
+

Copied: head/release/i386/make-memstick.sh (from r219487, head/release/scripts/make-memstick.sh)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/release/i386/make-memstick.sh	Sun Mar 13 01:38:24 2011	(r219584, copy of r219487, head/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}
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103130138.p2D1cOLc035974>