#!/usr/bin/env bash
#
# Copyright (C) 2021 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# Function to get the vyos version from the commandline.
#
get_version () {
for item in `cat /proc/cmdline`; do
if [ "vyos-union" == "${item%=*}" ]; then
echo ${item#*=}
fi
done
}
#
# VERSION is the output of the get_version output.
# DEVICEPART is the device partition where VyOS is mounted on.
# DEVICEPATH is the path to the device where VyOS is mounted on.
# DEVICE is the device of the device partition.
# PARTNR is the device partition number used for parted.
#
VERSION=$(get_version)
DEVICEPART=$(mount | grep $VERSION/grub | cut -d' ' -f1 | rev | cut -d'/' -f1 | rev)
DEVICEPATH=$(mount | grep $VERSION/grub | cut -d' ' -f1 | rev | cut -d'/' -f2- | rev)
DEVICE=$(lsblk -no pkname $DEVICEPATH/$DEVICEPART)
PARTNR=$(grep -c $DEVICEPART /proc/partitions)
#
# Check if the device really exits.
#
fdisk -l $DEVICEPATH/$DEVICE >> /dev/null 2>&1 || (echo "could not find device $DEVICE" && exit 1)
#
# START is the partition starting sector.
# CURSIZE is the partition start sector + the partition end sector.
# MAXSIZE is the device end sector.
#
START=$(cat /sys/block/$DEVICE/$DEVICEPART/start)
CURSIZE=$(($START+$(cat /sys/block/$DEVICE/$DEVICEPART/size)))
MAXSIZE=$(($(cat /sys/block/$DEVICE/size)-8))
#
# Check if the device size is larger then the partition size
# and if that is the case, resize the partition and grow the filesystem.
#
if [ $MAXSIZE -gt $CURSIZE ]; then
parted "${DEVICEPATH}/${DEVICE}" ---pretend-input-tty > /dev/null 2>&1 < /dev/null 2>&1
resize2fs ${DEVICEPATH}/$DEVICEPART > /dev/null 2>&1
fi