Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Nov 2014 23:57:08 +0000 (UTC)
From:      Colin Percival <cperciva@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r372970 - in head/sysutils: . firstboot-growfs firstboot-growfs/files
Message-ID:  <201411202357.sAKNv8lK093654@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cperciva
Date: Thu Nov 20 23:57:07 2014
New Revision: 372970
URL: https://svnweb.freebsd.org/changeset/ports/372970
QAT: https://qat.redports.org/buildarchive/r372970/

Log:
  Add firstboot-growfs port:
    When the system first boots, resize the (GPT) partition holding the root
    filesystem, then resize the (UFS) root filesystem.  This is intended to be
    used in virtual machines where a VM image is built with one size but may
    be launched onto a larger disk.
  
  This will be used in EC2 images in the near future.

Added:
  head/sysutils/firstboot-growfs/
  head/sysutils/firstboot-growfs/Makefile   (contents, props changed)
  head/sysutils/firstboot-growfs/files/
  head/sysutils/firstboot-growfs/files/firstboot_growfs.in   (contents, props changed)
  head/sysutils/firstboot-growfs/pkg-descr   (contents, props changed)
Modified:
  head/sysutils/Makefile

Modified: head/sysutils/Makefile
==============================================================================
--- head/sysutils/Makefile	Thu Nov 20 23:38:33 2014	(r372969)
+++ head/sysutils/Makefile	Thu Nov 20 23:57:07 2014	(r372970)
@@ -245,6 +245,7 @@
     SUBDIR += filewatcherd
     SUBDIR += finfo
     SUBDIR += firstboot-freebsd-update
+    SUBDIR += firstboot-growfs
     SUBDIR += firstboot-pkgs
     SUBDIR += flasher
     SUBDIR += flashrom

Added: head/sysutils/firstboot-growfs/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/firstboot-growfs/Makefile	Thu Nov 20 23:57:07 2014	(r372970)
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+PORTNAME=	firstboot-growfs
+PORTVERSION=	1.0
+CATEGORIES=	sysutils
+MASTER_SITES=	# none
+DISTFILES=	# none
+
+MAINTAINER=	cperciva@FreeBSD.org
+COMMENT=	Expand / when the system first boots
+
+NO_WRKSUBDIR=	yes
+NO_BUILD=	yes
+
+USE_RC_SUBR=	firstboot_growfs
+
+.include <bsd.port.pre.mk>
+
+.if ${OSVERSION} < 902504 || ( ${OSVERSION} >= 1000000 && ${OSVERSION} < 1000100 ) || ( ${OSVERSION} >= 1000500 && ${OSVERSION} < 1000501 ) || (${OSVERSION} >= 1100000 && ${OSVERSION} < 1100001 )
+IGNORE=	first boot rc.d scripts not supported on this version of FreeBSD
+.endif
+
+do-fetch do-install:
+	@${DO_NADA}
+
+.include <bsd.port.post.mk>

Added: head/sysutils/firstboot-growfs/files/firstboot_growfs.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/firstboot-growfs/files/firstboot_growfs.in	Thu Nov 20 23:57:07 2014	(r372970)
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# $FreeBSD$
+# KEYWORD: firstboot
+# PROVIDE: firstboot_growfs
+# REQUIRE: NETWORKING
+# BEFORE: LOGIN
+
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf (in the disk
+# image, since this only runs on the first boot) to enable this:
+#
+# firstboot_growfs_enable="YES"
+
+. /etc/rc.subr
+
+: ${firstboot_growfs_enable:="NO"}
+: ${firstboot_growfs_fs:="/"}
+
+name="firstboot_growfs"
+rcvar=firstboot_growfs_enable
+start_cmd="firstboot_growfs_run"
+stop_cmd=":"
+
+firstboot_growfs_run()
+{
+	local FSTYPE DISK GPTLABEL GPART GDISK GPARTNO
+
+	FSTYPE=`mount -p | awk "{ if (\\$2 == \"${firstboot_growfs_fs}\") print \\$3 }"`
+	case ${FSTYPE} in
+	ufs)
+		;;
+	*)
+		echo "${firstboot_growfs_fs} is not a UFS volume, cannot resize"
+		;;
+	esac
+
+	DISK=`mount -p | awk "{ if (\\$2 == \"${firstboot_growfs_fs}\") print \\$1 }"`
+	case ${DISK} in
+	/dev/gpt/*)
+		GPTLABEL=${DISK##/dev/gpt/}
+		;;
+	*)
+		echo "${firstboot_growfs_fs} is not on a GPT disk, cannot resize"
+		return 0
+		;;
+	esac
+
+	GPART=`glabel status -s | awk "{ if (\\$1 == \"gpt/${GPTLABEL}\") print \\$3 }"`
+	GDISK=${GPART%p*}
+	GPARTNO=${GPART##*p}
+
+	gpart recover ${GDISK}
+	gpart resize -i ${GPARTNO} ${GDISK}
+	growfs -y ${firstboot_growfs_fs}
+}
+
+load_rc_config $name
+run_rc_command "$1"

Added: head/sysutils/firstboot-growfs/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/firstboot-growfs/pkg-descr	Thu Nov 20 23:57:07 2014	(r372970)
@@ -0,0 +1,4 @@
+When the system first boots, resize the (GPT) partition holding the root
+filesystem, then resize the (UFS) root filesystem.  This is intended to be
+used in virtual machines where a VM image is built with one size but may
+be launched onto a larger disk.



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