Add support for auto-growing the root partition. Enable it for rpi.img.
This commit is contained in:
parent
8c877c0d3d
commit
d32faae6e2
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue