Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/distrib/utils/embedded Add support for auto-growing the root...



details:   https://anonhg.NetBSD.org/src/rev/42fc6db5bf82
branches:  trunk
changeset: 337215:42fc6db5bf82
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Mon Apr 06 20:19:28 2015 +0000

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

diffstat:

 distrib/utils/embedded/conf/evbarm.conf       |  18 ++++++-
 distrib/utils/embedded/conf/rpi.conf          |   3 +-
 distrib/utils/embedded/files/resize_disklabel |  71 +++++++++++++++++++++++++++
 distrib/utils/embedded/mkimage                |   3 +-
 4 files changed, 92 insertions(+), 3 deletions(-)

diffs (143 lines):

diff -r 1e3f71ed994a -r 42fc6db5bf82 distrib/utils/embedded/conf/evbarm.conf
--- a/distrib/utils/embedded/conf/evbarm.conf   Mon Apr 06 17:59:36 2015 +0000
+++ b/distrib/utils/embedded/conf/evbarm.conf   Mon Apr 06 20:19:28 2015 +0000
@@ -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 @@
 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
diff -r 1e3f71ed994a -r 42fc6db5bf82 distrib/utils/embedded/conf/rpi.conf
--- a/distrib/utils/embedded/conf/rpi.conf      Mon Apr 06 17:59:36 2015 +0000
+++ b/distrib/utils/embedded/conf/rpi.conf      Mon Apr 06 20:19:28 2015 +0000
@@ -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
 
diff -r 1e3f71ed994a -r 42fc6db5bf82 distrib/utils/embedded/files/resize_disklabel
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/distrib/utils/embedded/files/resize_disklabel     Mon Apr 06 20:19:28 2015 +0000
@@ -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"
diff -r 1e3f71ed994a -r 42fc6db5bf82 distrib/utils/embedded/mkimage
--- a/distrib/utils/embedded/mkimage    Mon Apr 06 17:59:36 2015 +0000
+++ b/distrib/utils/embedded/mkimage    Mon Apr 06 20:19:28 2015 +0000
@@ -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 @@
 dsets_p=false
 xsets_p=false
 minwrites=false
+resize=false
 rootdev=ld
 
 OPTIND=1



Home | Main Index | Thread Index | Old Index