File: //proc/400/root/lib/inithooks/firstboot.d/05autogrow-fs
#!/bin/bash
# auto grow filesystem for block device based appliances - (c) Aug/2014 by Peter Lieven <pl@kamp.de>
[ -n "$_TURNKEY_INIT" ] && exit 0
. /etc/default/inithooks
[ -e $INITHOOKS_CONF ] && . $INITHOOKS_CONF
[ "$AUTOGROW" != "ONCE" ] && [ "$AUTOGROW" != "ALWAYS" ] && exit 0
[ $(dirname $0) = "/usr/lib/inithooks/everyboot.d" ] && [ "$AUTOGROW" != "ALWAYS" ] && exit 0
[ -z "$AUTOGROW_DEV" ] && AUTOGROW_DEV=/dev/vda
[ -z "$AUTOGROW_PART" ] && AUTOGROW_PART="${AUTOGROW_DEV}2"
[ -z "$AUTOGROW_FS" ] && AUTOGROW_FS=/dev/turnkey/root
[ -z "$AUTOGROW_FS_ALWAYS" ] && AUTOGROW_FS_ALWAYS=TRUE
DEVSIZE=$(blockdev --getsize $AUTOGROW_DEV)
[ "0$DEVSIZE" -eq 0 ] && exit 1
PARTINFO=$(sfdisk -d -uS $AUTOGROW_DEV | grep -A1 $AUTOGROW_PART | grep -v $AUTOGROW_PART)
if [ -n "$PARTINFO" ]; then
PARTINFO=${PARTINFO/:/ }
PARTINFO=${PARTINFO//,/ }
PARTINFO=${PARTINFO//=/ }
X=$(echo $PARTINFO | grep "start 0 size 0 Id 0")
[ $? -ne 0 ] && exit 1
fi
PARTINFO=$(sfdisk -d -uS $AUTOGROW_DEV | grep $AUTOGROW_PART)
[ -z "$PARTINFO" ] && exit 1
PARTINFO=${PARTINFO/:/ }
PARTINFO=${PARTINFO//,/ }
PARTINFO=${PARTINFO//=/ }
PARTINFOX=(${PARTINFO})
[ "${PARTINFOX[0]}" != "$AUTOGROW_PART" ] && exit 1
[ "${PARTINFOX[1]}" != "start" ] && exit 1
[ "${PARTINFOX[3]}" != "size" ] && exit 1
[ "${PARTINFOX[5]}" != "Id" ] && [ "${PARTINFOX[5]}" != "type" ] && exit 1
START=${PARTINFOX[2]}
SIZE=${PARTINFOX[4]}
ID=${PARTINFOX[6]}
[ "$ID" != "8e" ] && exit 1
if [ $((START + SIZE + 65536)) -lt $DEVSIZE ]; then
[ -e /var/tmp/autogrow.size ] && [ $(cat /var/tmp/autogrow.size) -eq $DEVSIZE ] && exit 1
echo $DEVSIZE >/var/tmp/autogrow.size
sfdisk -d -uS $AUTOGROW_DEV | grep "${AUTOGROW_DEV}1" >/tmp/sfdisk.dump
echo "$AUTOGROW_PART : start= $START, size= $((DEVSIZE - START)), ${PARTINFOX[5]}= $ID">>/tmp/sfdisk.dump
cat /tmp/sfdisk.dump | sfdisk -uS --no-reread --force $AUTOGROW_DEV
exit 42
else
if [ "$AUTOGROW_FS" != "SKIP" ]; then
[ -e /var/tmp/autogrow_fs.size ] && [ $(cat /var/tmp/autogrow_fs.size) -eq $DEVSIZE ] && exit 0
echo $DEVSIZE >/var/tmp/autogrow_fs.size
pvresize $AUTOGROW_PART
[ $(dirname $0) = "/usr/lib/inithooks/everyboot.d" ] && [ "$AUTOGROW_FS_ALWAYS" != "TRUE" ] && exit 0
lvextend -l+100%FREE $AUTOGROW_FS 2>/dev/null
ERR=$?
[ $ERR -eq 3 ] && exit 0
[ $ERR -eq 0 ] && resize2fs $AUTOGROW_FS && touch /forcefsck && exit 42
fi
fi
exit 1