#!/bin/sh
### BEGIN INIT INFO
# Provides:          ramdisk
# Required-Start:    $local_fs $remote_fs $syslog
# Required-Stop:     $local_fs $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: RAMdisk RPL script with restore after reboot/halt
# Description:       Use './ramdisk help' or after install '/etc/init.d/ramdisk help' or 'ramdisk help' for help. This revision use rsync to backup/restore RAMdisk
### END INIT INFO

# Author: WebInsider.pl
# RAMdisk info URL: https://webinsider.pl/raspberry-pi-ramdisk
# Revision: 201710181644


### START config here:

# Size in KB
RAMDISK_SIZE="2048"

RAMDISK_MNT_DIR=/mnt
RAMDISK_TEMP_DIR=/mnt
RAMDISK_NAME=ramdisk
RAMDISK_TEMP_NAME=ramdisk_temp

RAMDISK_TEMP_FULL=$RAMDISK_TEMP_DIR/$RAMDISK_TEMP_NAME/
RAMDISK_MNT_FULL=$RAMDISK_MNT_DIR/$RAMDISK_NAME/

RAMDISK_DEV=/dev/ram1

# Auto BackUp RAMdisk (RAMDISK_MNT_FULL > RAMDISK_TEMP_FULL), every RAMDISK_AUTO_BACKUP_TIME minute(s) if RAMDISK_AUTO_BACKUP=1
RAMDISK_AUTO_BACKUP=1
#RAMDISK_AUTO_BACKUP_SET 1=minute(s) 0-59, 2=hour(s) 0-23
RAMDISK_AUTO_BACKUP_SET=2
RAMDISK_AUTO_BACKUP_TIME=1
RAMDISK_AUTO_BACKUP_USER=root

# Use "cp" or "rsync"
RAMDISK_BACKUP_RSYNC=1

### END config here.

DOWNLOAD_URL=https://webinsider.pl/add/download/?link=raspberrypi_ramdisk

COMMANDS="{start|stop|restart|status|backup|restore|config|install|uninstall|clear|update|help}"

NAME=ramdisk
SCRIPTNAME=/etc/init.d/$NAME



f_start()
{
		sudo mkfs -q $RAMDISK_DEV $RAMDISK_SIZE
		sudo mount $RAMDISK_DEV $RAMDISK_MNT_FULL
		if [ "$RAMDISK_BACKUP_RSYNC" = "1" ]
		then
			sudo rsync -avzil --delete --progress $RAMDISK_TEMP_FULL $RAMDISK_MNT_FULL  > /dev/null
		else
			sleep 2
			sudo rm -rf $RAMDISK_MNT_FULL*
			sleep 1
			sudo cp -rf $RAMDISK_TEMP_FULL* $RAMDISK_MNT_FULL
		fi
		echo "RAMdisk START OK"
}

f_stop()
{
		if [ "$RAMDISK_BACKUP_RSYNC" = "1" ]
		then
			sudo rsync -avzil --delete --progress $RAMDISK_MNT_FULL $RAMDISK_TEMP_FULL
		else
			sudo rm -rf $RAMDISK_TEMP_FULL*
			sleep 2
			sudo cp -rf $RAMDISK_MNT_FULL* $RAMDISK_TEMP_FULL
		fi
		sudo umount $RAMDISK_MNT_FULL
		echo "RAMdisk STOP OK"
}

# f_restart() only restart) ...

f_backup()
{
		if [ "$RAMDISK_BACKUP_RSYNC" = "1" ]
		then
			sudo rsync -avzil --delete --progress $RAMDISK_MNT_FULL $RAMDISK_TEMP_FULL
		else
			sudo rm -rf $RAMDISK_TEMP_FULL*
			sudo cp -rf $RAMDISK_MNT_FULL* $RAMDISK_TEMP_FULL
		fi
		echo "RAMdisk BackUp OK"
}

f_restore()
{
		if [ "$RAMDISK_BACKUP_RSYNC" = "1" ]
		then
			sudo rsync -avzil --delete --progress $RAMDISK_TEMP_FULL $RAMDISK_MNT_FULL
		else
			sudo rm -rf $RAMDISK_MNT_FULL*
			sudo cp -rf $RAMDISK_TEMP_FULL* $RAMDISK_MNT_FULL
		fi
		echo "RAMdisk restore OK"
}

f_install()
{
		sudo mkdir $RAMDISK_MNT_FULL
		sudo mkdir $RAMDISK_TEMP_FULL
		sudo cp -r $NAME /etc/init.d
		sudo update-rc.d $NAME defaults
		sudo /etc/init.d/$NAME start
		
		if [ "$RAMDISK_AUTO_BACKUP" = "1" ]
		then
			if [ "$RAMDISK_AUTO_BACKUP_SET" = "1" ]
			then
				echo "# RAMdisk AutoBackup START" | sudo tee -a /etc/crontab > /dev/null
				echo "*/"$RAMDISK_AUTO_BACKUP_TIME" * * * * "$RAMDISK_AUTO_BACKUP_USER" /etc/init.d/"$NAME" backup" | sudo tee -a /etc/crontab > /dev/null
				echo "# RAMdisk AutoBackup END" | sudo tee -a /etc/crontab > /dev/null
				echo "Auto BackUp set, run every "$RAMDISK_AUTO_BACKUP_TIME" minute(s)"
			fi
			if [ "$RAMDISK_AUTO_BACKUP_SET" = "2" ]
			then
				echo "# RAMdisk AutoBackup START" | sudo tee -a /etc/crontab > /dev/null
				echo "0 */"$RAMDISK_AUTO_BACKUP_TIME" * * * "$RAMDISK_AUTO_BACKUP_USER" /etc/init.d/"$NAME" backup" | sudo tee -a /etc/crontab > /dev/null
				echo "# RAMdisk AutoBackup END" | sudo tee -a /etc/crontab > /dev/null
				echo "Auto BackUp set, run every "$RAMDISK_AUTO_BACKUP_TIME" hour(s)"
			fi
		fi
		
		sudo ln -s /etc/init.d/$NAME /bin/$NAME
		
		rm ramdisk
		echo ""
		echo "Script installed OK, see 'df -h'"
}

f_uninstall()
{
		echo "Script deletes the following directories with the entire contents:"
		echo ""
		echo $RAMDISK_MNT_FULL" & "$RAMDISK_TEMP_FULL
		echo ""
		echo "If you do not want to delete them break (CTRL+C) and run:"
		echo "/etc/init.d/"$NAME" help"
		echo "for more information"
		echo ""
		read -p 'Press [Y] to continue: ' uninstall_yes

		if [ "$uninstall_yes" = "Y" ] || [ "$uninstall_yes" = "y" ]
		then
			echo ""
			sudo /etc/init.d/$NAME stop
			sudo update-rc.d $NAME remove
			sudo rm -rf $RAMDISK_MNT_FULL/*
			sudo rmdir $RAMDISK_MNT_FULL
			sudo rm -rf $RAMDISK_TEMP_FULL/*
			sudo rmdir $RAMDISK_TEMP_FULL
			sudo rm /etc/init.d/$NAME
			sudo rm /bin/$NAME
			echo ""
			echo "You must manually remove CRON Auto BackUp"
			echo "Run: 'sudo nano /etc/crontab'"
			echo ""
			echo "Please restart to finish"
		else
			echo "Exit without uninstall"
			echo "Command '/etc/init.d/"$NAME" help' show help"
			exit
		fi
}

f_update()
{
		sudo update-rc.d ramdisk remove
		sudo wget $DOWNLOAD_URL -O /etc/init.d/$NAME
		sudo chmod +x /etc/init.d/$NAME
		sudo update-rc.d $NAME defaults
		echo ""
		echo "Check RAMdisk size, now is: "$RAMDISK_SIZE"KB"
		echo "If want change type: 'sudo nano /etc/init.d/"$NAME"'"
		echo "Change value 'RAMDISK_SIZE'"
		echo "Next restart RAMdisk: '/etc/init.d/"$NAME" restart'"
		echo ""
		echo "Script update. If see error update again: '/etc/init.d/"$NAME" update'"
}

f_clear()
{
		sudo umount $RAMDISK_MNT_FULL
		sudo mkfs -q $RAMDISK_DEV $RAMDISK_SIZE
		sudo mount $RAMDISK_DEV $RAMDISK_MNT_FULL
		echo "RAMdisk clear OK"
}

f_status()
{
		echo "RAMdisk @ Crontab:"
		cat /etc/crontab | grep $NAME
		echo ""
		echo "RAMdisk:"
		df -h | grep $NAME
		echo ""
		echo "RAMdisk patch: "$RAMDISK_MNT_FULL
		echo "RAMdisk dev: "$RAMDISK_DEV
		echo "RAMdisk BackUp patch: "$RAMDISK_TEMP_FULL	
}

f_config()
{
		sudo nano /etc/init.d/$NAME
		echo "Changes will take effect after reboot. You can also restart only ramdisk:"
		echo $NAME" restart"
}

f_help()
{
		echo "RAMdisk script with restore after reboot/halt"
		echo ""
		echo "Script make RAMdisk, use "$RAMDISK_DEV
		echo "Also use "$RAMDISK_TEMP_FULL" for backup file when Pi halt/reboot."
		echo "Default RAMdisk size is "$RAMDISK_SIZE", and patch is "$RAMDISK_MNT_FULL
		
		if [ "$RAMDISK_AUTO_BACKUP" = "1" ]
		then
			if [ "$RAMDISK_AUTO_BACKUP_SET" = "1" ]
			then
				echo "Auto BackUp set, run every "$RAMDISK_AUTO_BACKUP_TIME" minute(s)"
			fi
			if [ "$RAMDISK_AUTO_BACKUP_SET" = "2" ]
			then
				echo "Auto BackUp set, run every "$RAMDISK_AUTO_BACKUP_TIME" hour(s)"
			fi
		fi
		
		echo ""
		echo "Use: "$SCRIPTNAME $COMMANDS
		echo ""
		echo "[RAMdisk RPL]"
		echo "1. Download: wget "$DOWNLOAD_URL" -O ramdisk"
		echo "2. Config: nano ramdisk"
		echo "3. Next: sudo chmod +x ramdisk"
		echo "4. Install: ./ramdisk install"
		echo "[RAMdisk RPL]"
		echo ""
		echo "Press any [ENTER] to continue..."
		read any_key
		echo ""
		echo "Commands after install:"
		echo "Use: "$NAME" COMMAND"
		echo "Start RAMdisk: "$NAME" start"
		echo "Stop RAMdisk: "$NAME" stop"
		echo "Restart RAMdisk: "$NAME" restart"
		echo "RAMdisk status: "$NAME" status"
		echo "Backup RAMdisk to "$RAMDISK_TEMP_FULL": "$NAME" backup"
		echo "Restore RAMdisk from "$RAMDISK_TEMP_FULL": "$NAME" restore"
		echo "Clear RAMdisk: "$NAME" clear"
		echo "Install RAMdisk: "$NAME" install"
		echo "Uninstall RAMdisk: "$NAME" uninstall"
		echo "Update RAMdisk script: "$NAME" update"
		echo "Edit options after install: sudo nano /etc/init.d/"$NAME
		echo "or: "$NAME" config"
		echo "Show help: "$NAME" help"
		echo ""
		echo "More info info go to: https://webinsider.pl/raspberry-pi-ramdisk"
		echo "Command '"$NAME" help' show this help"
}


case "$1" in
  start)
	f_start
	;;
  stop)
	f_stop
	;;
  restart)
	f_stop
	f_start
	;;
  status)
	f_status
	;;
  backup)
	f_backup
	;;
  restore)
	f_restore
	;;	
  install)
	f_install
	;;
  uninstall)
	f_uninstall
	;;
  config)
	f_config
	;;
  clear)
	f_clear
	;;
  update)
	f_update
	;;
  help)
	f_help
	;;
  *)
	echo "Use: "$SCRIPTNAME $COMMANDS
	exit
	;;
esac

exit 0
