Module Name:    src
Committed By:   jmcneill
Date:           Mon Apr  6 20:19:28 UTC 2015

Modified Files:
        src/distrib/utils/embedded: mkimage
        src/distrib/utils/embedded/conf: evbarm.conf rpi.conf
Added Files:
        src/distrib/utils/embedded/files: resize_disklabel

Log Message:
Add support for auto-growing the root partition. Enable it for rpi.img.


To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.55 src/distrib/utils/embedded/mkimage
cvs rdiff -u -r1.20 -r1.21 src/distrib/utils/embedded/conf/evbarm.conf
cvs rdiff -u -r1.27 -r1.28 src/distrib/utils/embedded/conf/rpi.conf
cvs rdiff -u -r0 -r1.1 src/distrib/utils/embedded/files/resize_disklabel

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/utils/embedded/mkimage
diff -u src/distrib/utils/embedded/mkimage:1.54 src/distrib/utils/embedded/mkimage:1.55
--- src/distrib/utils/embedded/mkimage:1.54	Mon Apr  6 17:59:36 2015
+++ src/distrib/utils/embedded/mkimage	Mon Apr  6 20:19:28 2015
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $NetBSD: mkimage,v 1.54 2015/04/06 17:59:36 jmcneill Exp $
+# $NetBSD: mkimage,v 1.55 2015/04/06 20:19:28 jmcneill Exp $
 #
 # Copyright (c) 2013, 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -109,6 +109,7 @@ selected_sets="$sets"
 dsets_p=false
 xsets_p=false
 minwrites=false
+resize=false
 rootdev=ld
 
 OPTIND=1

Index: src/distrib/utils/embedded/conf/evbarm.conf
diff -u src/distrib/utils/embedded/conf/evbarm.conf:1.20 src/distrib/utils/embedded/conf/evbarm.conf:1.21
--- src/distrib/utils/embedded/conf/evbarm.conf:1.20	Thu Jan 29 14:54:06 2015
+++ src/distrib/utils/embedded/conf/evbarm.conf	Mon Apr  6 20:19:28 2015
@@ -1,4 +1,4 @@
-# $NetBSD: evbarm.conf,v 1.20 2015/01/29 14:54:06 skrll Exp $
+# $NetBSD: evbarm.conf,v 1.21 2015/04/06 20:19:28 jmcneill Exp $
 # evbarm shared config
 #
 image=$HOME/${board}.img
@@ -134,9 +134,25 @@ dhcpcd=YES
 ntpd=YES
 ntpd_flags="-g"
 EOF
+
+	if $resize; then
+		cat >> ${mnt}/etc/rc.conf << EOF
+resize_disklabel=YES
+resize_disklabel_disk=ld0
+resize_disklabel_part=a
+resize_root=YES
+resize_root_postcmd="/sbin/reboot -n"
+EOF
+	fi
+
 	echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" \
 	    >> "$tmp/selected_sets"
 
+	mkdir ${mnt}/etc/rc.d
+	cp ${DIR}/files/resize_disklabel ${mnt}/etc/rc.d/resize_disklabel
+	echo "./etc/rc.d/resize_disklabel type=file uname=root gname=wheel mode=0555" \
+	    >> "$tmp/selected_sets"
+
 	if [ ! -f ${release}/dev/MAKEDEV ]; then
 		echo ${PROG}: Missing ${release}/dev/MAKEDEV 1>&2
 		exit 1

Index: src/distrib/utils/embedded/conf/rpi.conf
diff -u src/distrib/utils/embedded/conf/rpi.conf:1.27 src/distrib/utils/embedded/conf/rpi.conf:1.28
--- src/distrib/utils/embedded/conf/rpi.conf:1.27	Fri Mar  6 11:11:55 2015
+++ src/distrib/utils/embedded/conf/rpi.conf	Mon Apr  6 20:19:28 2015
@@ -1,9 +1,10 @@
-# $NetBSD: rpi.conf,v 1.27 2015/03/06 11:11:55 skrll Exp $
+# $NetBSD: rpi.conf,v 1.28 2015/04/06 20:19:28 jmcneill Exp $
 # Raspberry Pi customization script used by mkimage
 #
 
 board=rpi
 kernel=$src/sys/arch/evbarm/compile/RPI/netbsd-RPI.bin
+resize=true
 
 . ${DIR}/conf/evbarm.conf
 

Added files:

Index: src/distrib/utils/embedded/files/resize_disklabel
diff -u /dev/null src/distrib/utils/embedded/files/resize_disklabel:1.1
--- /dev/null	Mon Apr  6 20:19:28 2015
+++ src/distrib/utils/embedded/files/resize_disklabel	Mon Apr  6 20:19:28 2015
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# $NetBSD: resize_disklabel,v 1.1 2015/04/06 20:19:28 jmcneill Exp $
+#
+
+# PROVIDE: resize_disklabel
+# REQUIRE: fsck_root
+# BEFORE: resize_root
+
+$_rc_subr_loaded . /etc/rc.subr
+
+name="resize_disklabel"
+rcvar=$name
+start_cmd="resize_disklabel_start"
+stop_cmd=":"
+
+get_rawpart()
+{
+	partno=$(/sbin/sysctl -n kern.rawpartition)
+	test $partno = 2 && echo c || echo d
+}
+
+get_total_sectors()
+{
+	disk=$1
+	/sbin/drvctl -p $disk disk-info/geometry/sectors-per-unit
+}
+
+get_rawpart_sectors()
+{
+	disk=$1
+	rawpart=$2
+	/sbin/disklabel $disk | grep "^ $rawpart:" | awk '{ print $2; }'
+}
+
+grow_disklabel()
+{
+	disk=$1
+	part=$2
+	rawpart=$(get_rawpart)
+
+	ts=$(get_total_sectors $disk)
+	rs=$(get_rawpart_sectors $disk $rawpart)
+
+	if [ "$ts" = "$rs" ]; then
+		return
+	fi
+
+	oldsize=$(($rs * 512 / 1024 / 1024))
+	newsize=$(($ts * 512 / 1024 / 1024))
+	echo "Growing $disk disklabel (${oldsize}MB -> ${newsize}MB)"
+	printf "A\ny\n$part\n\n\n\$\nc\n\n\n\$\nd\n\n\n\$\nW\ny\nQ\n" | \
+	    disklabel -i $disk >/dev/null
+}
+
+resize_disklabel_start()
+{
+	if [ x"${resize_disklabel_disk}" = "x" ]; then
+		warn "\${resize_disklabel_disk} is not set, not resizing disklabel"
+		return
+	fi
+	if [ x"${resize_disklabel_part}" = "x" ]; then
+		warn "\${resize_disklabel_part} is not set, not resizing disklabel"
+		return
+	fi
+
+	grow_disklabel "${resize_disklabel_disk}" "${resize_disklabel_part}"
+}
+
+load_rc_config $name
+run_rc_command "$1"

Reply via email to