#!/bin/sh /etc/rc.common
# (C) 2016 - 2023 Fernao Vellozo | fernao@disroot.org
# This is free software under the terms of GPLv3
# v 1.0.5

# Service priority in the system
START=90

EXTRA_COMMANDS="status create"
EXTRA_HELP="	status 	Check service status
	create 	Create a swapfile"
# if version is 19 or lower, use spaces on the help menu above
# if version 21 or higher, use tabs
#
# overlay partition is the default value
# it's better to change it and use other place to store the swapfile

SWPATH="/overlay/swapfile"

boot() {
	if [ -f $SWPATH ]; then
		swapon $SWPATH
		logger "swapfile started on boot"
	else
		logger "ERROR: swapfile not found"
	fi
}

start() {
	if [ -f $SWPATH ]; then
		swapon $SWPATH
		logger "swapfile started"
		echo "SwapFile started"
	else
		logger "ERROR: swapfile not found"
		echo "ERROR: SwapFile not found at "$SWPATH
	fi
}

restart() {
	if [ -f $SWPATH ]; then
		swapoff $SWPATH
		swapon $SWPATH
		logger "swapfile stopped, reloading..."
		echo "SwapFile Reloaded"
	else
		logger "ERROR: swapfile not found"
		echo "ERROR: SwapFile not found at "$SWPATH
	fi
}

stop() {
	if [ -f $SWPATH ]; then
		swapoff $SWPATH
		logger "swapfile stopped"
		echo "SwapFile stopped "$SWPATH
	else
		logger "ERROR: swapfile not found"
		echo "ERROR: SwapFile not found at "$SWPATH
	fi
}

create() {
	RAMTOTAL=`fgrep MemTotal /proc/meminfo | awk '{print $2}'`
	SWAPTOTAL=`fgrep SwapTotal /proc/meminfo | awk '{print $2}'`
	OVERLAYSIZE=`df | grep overlayfs | awk '{print $4}'`

	if [ "$OVERLAYSIZE" -lt "$RAMTOTAL" ]; then
		echo "ERROR: Not enough storage for a swapfile, quitting..."
		exit 1
	elif [ $SWAPTOTAL != 0 ]; then                      
		echo "ERROR: Swap already in use, quitting..."
		exit 1
	elif [ -f $SWPATH ]; then
		echo "ERROR: File already exists, quitting..."
		exit 1
	else
		echo "Creating Swap File of "$RAMTOTAL
		echo "Please wait..."
		dd if=/dev/zero of=$SWPATH bs=1024 count=$RAMTOTAL
		mkswap -L SWAPFILE $SWPATH
		chmod 600 $SWPATH
		/etc/init.d/swapfile enable
		logger "SwapFile created"
		echo "SwapFile successfully created and enabled to run after the next reboot"
		/etc/init.d/swapfile start
		echo; free
	fi
}

status() {
	SWAPTOTAL=`fgrep SwapTotal /proc/meminfo | awk '{print $2}'`
	if [ $SWAPTOTAL == 0 ]; then
		echo "No swap memory available"
	else
		echo $SWAPTOTAL "KB of swap are available"
		if [ -f $SWPATH ]; then
			echo "Swapfile is located at "$SWPATH
		else
			echo "Swap memory has been loaded, but not from here"
		fi
	fi
}