#!/bin/bash

# remastersys script can make an installable livecd/dvd 
# from a Debian installed and customized system
# Created by Tony "Fragadelic" Brijeski
# Copyright 2007-2012 Under the GNU GPL2 License
# Originally Created February 12th, 2007
#
# Forked for SparkyLinux as 'Sparky Backup System' by pavroo <pavroo@onet.eu> 2013/06/17
# Copyright 2013-2024 under the GNU GPL2 License
# Additional coding be Piotr "MoroS" Mrożek <dnadesigned@gmail.com>
#
# Last update 2024/04/06 by pavroo

. /etc/sparkybackup/sparkybackup.version

# get default's locale file
DEFLOCDIR="/usr/share/sparky/sparky-backup-core"
. $DEFLOCDIR/en

# set options for dialog
DIALOG="`which dialog`"
HEIGHT="20"
WIDTH="75"
MENUHEIGHT="12"
TITLE="--title "
TEXT=""
MENU="--menu"
YESNO="--yesno "
MSGBOX="--msgbox "
TITLETEXT="Sparky Backup Core"

# exit_with_message usage: exit_with_message "message text" exit_code
function exit_with_message {
	echo $1
	exit $2
}

# output_usage usage: output_usage (no parameters)
function output_usage {
	echo "$LOCAL1 sparkybackup $SPARKYBACKUPVERSION $LOCAL2:"
	echo ""
	echo "sudo sparkybackup info|efi|skel|dist|edit|installer|clean|cache|log"
	echo ""
	echo "$LOCAL4:"
	echo ""
	echo "    sudo sparkybackup info"
	echo "$LOCAL54"
	echo ""
	echo "    sudo sparkybackup efi"
	echo "$LOCAL59"
	echo ""
	echo "    sudo sparkybackup skel"
	echo "$LOCAL75"
	echo ""
	echo "    sudo sparkybackup dist"
	echo "$LOCAL6"
	echo ""
	echo "    sudo sparkybackup edit"
	echo "$LOCAL42"
	echo ""
	echo "    sudo sparkybackup installer"
	echo "$LOCAL46"
	echo ""
	echo "    sudo sparkybackup clean"
	echo "$LOCAL43"
	echo ""
	echo "    sudo sparkybackup cache"
	echo "$LOCAL44"
	echo ""
	echo "    sudo sparkybackup log"
	echo "$LOCAL74"
	echo ""
	exit_with_message " " 1
}

# log_info usage: log_info "message text"
function log_info {
	#echo $1
	if [ ! -d $WORKDIR ]
	then
		mkdir -p $WORKDIR
	fi
	echo "INFO: $1" >> $WORKDIR/sparkybackup.log
}

# log_debug usage: log_debug "message text"
function log_debug {
	if [ ! -d $WORKDIR ]
	then
		mkdir -p $WORKDIR
	fi
	echo "DEBUG: $1" >> $WORKDIR/sparkybackup.log
}

# checking to make sure script is running with root privileges
testroot="`whoami`"
if [ "$testroot" != "root" ]
then
	output_usage
fi

TESTAPTITUDE="`which aptitude`"

# if Live system just quit, do nothing
TESTMODE=`grep "live" /etc/passwd`
if [ "$TESTMODE" != "" ]
then
	exit_with_message "$LOCAL13 $LOCAL14" 1
fi

# load the sparkybackup.conf file 
. /etc/sparkybackup/sparkybackup.conf

# if the sparkybackup.conf file is incorrect or missing, make sure to set defaults
if [ "$LIVEUSER" = "" ]
then
	LIVEUSER="custom"
fi

#make sure live user is all lowercase
LIVEUSER="`echo $LIVEUSER | awk '{print tolower ($0)}'`"

if [ "$WORKDIR" = "" ]
then
	BASEWORKDIR="/home/sparkybackup-sys"
	WORKDIR="$BASEWORDDIR/sparkybackup-sys"
else
	BASEWORKDIR="$WORKDIR"
	WORKDIR="$WORKDIR/sparkybackup-sys"
fi

if [ "$LIVECDLABEL" = "" ]
then
	LIVECDLABEL="Custom Live CD"
fi

if [ "$2" = "cdfs" ]
then
	echo "$LOCAL15"
	log_info "Creating the cd filesystem only"
elif [ "$2" = "iso" ]
then
	echo "$LOCAL16"
	log_info "Creating the iso file only"
elif [ "$2" = "" ]
then
	log_info " "
else
	CUSTOMISO="$2"
fi

if [ "$3" != "" ]
then
	CUSTOMISO="$3"
fi

if [ "$CUSTOMISO" = "" ]
then
	CUSTOMISO="custom$1.iso"
fi

case $1 in
	info)
		echo "$LOCAL47"
		echo "$LOCAL48"
		echo "$LOCAL49"
		echo ""
		echo "$LOCAL50"
		echo "$LOCAL51"
		echo "$LOCAL52"
		echo "$LOCAL53"
		echo ""
		echo "$LOCAL55"
		echo "$LOCAL56"
		echo ""
		echo "$LOCAL57 $SPARKYBACKUPVERSION"
		echo "$LOCAL58 https://forum.sparkylinux.org"
		echo ""
		exit_with_message " " 1
		;;
	efi)
		echo "$LOCAL60"
		echo "$LOCAL61"
		echo "1. $LOCAL62"
		echo "efibootmgr, grub-efi, grub-efi-amd64 ($LOCAL63 ia32), grub-efi-amd64-bin ($LOCAL63 ia32), libefivar1, libefiboot1"
		echo ""
		echo "2. $LOCAL64 /home/offline"
		echo ""
		echo "3. $LOCAL65"
		echo "$LOCAL66"
		echo ""
		echo "$LOCAL67"
		echo "$LOCAL68"
		echo ""
		echo "$LOCAL91"
		echo "$LOCAL92"
		echo ""
		exit_with_message " " 1
		;;
	clean)
		echo "$LOCAL17"
		log_info "Removing the build directory now..."
		rm -rf $BASEWORKDIR
		exit_with_message "$LOCAL18 $LOCAL14" 1
		;;
	skel)
		$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL75 \n$LOCAL76 \n\n$LOCAL77 \n$LOCAL78 \n$LOCAL79 \n$LOCAL80 \n\n$LOCAL81 \n$LOCAL82" $HEIGHT $WIDTH
		if [ "$?" != "0" ]
		then
			$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL83 \n$LOCAL84" $HEIGHT $WIDTH
			log_info "skelcopy launched but not used"
			exit_with_message " " 1
		fi

		MYUSER1=`grep "1000" /etc/passwd | awk -F ":" '{print $1}'`
		MYUSER2=`grep "1001" /etc/passwd | awk -F ":" '{print $1}'`
		MYUSER3=`grep "1002" /etc/passwd | awk -F ":" '{print $1}'`
		if [ "$MYUSER3" != "" ]
		then
			$DIALOG $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"\n$LOCAL85 \n$LOCAL86" $HEIGHT $WIDTH $MENUHEIGHT "$MYUSER1" user1000 "$MYUSER2" user1001 "$MYUSER3" user1002 2>/tmp/choices.$$
		elif [ "$MYUSER3" = "" ] && [ "$MYUSER2" != "" ]
		then
			$DIALOG $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"\n$LOCAL85 \n$LOCAL86" $HEIGHT $WIDTH $MENUHEIGHT "$MYUSER1" user1000 "$MYUSER2" user1001 2>/tmp/choices.$$
		else
			$DIALOG $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"\n$LOCAL85 \n$LOCAL86" $HEIGHT $WIDTH $MENUHEIGHT "$MYUSER1" user1000 2>/tmp/choices.$$
		fi

		if [ "$?" = "0" ]
		then
			SKELUSER=`cat /tmp/choices.$$`
		else
			SKELUSER=""
		fi
		rm /tmp/choices.$$

		SKELUSER=`echo $SKELUSER | cut -d "|" -f 1`
		if [ "$SKELUSER" != "" ]
		then
			cd `grep "^$SKELUSER:" /etc/passwd | awk -F ":" '{print $6}'`
			PWD=`pwd`
			TESTUSER=`grep "$PWD" /etc/passwd | awk -F ":" '{print $1}'`

			if [ "$TESTUSER" != "$SKELUSER" ]
			then
				$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL87 \n$LOCAL14" $HEIGHT $WIDTH
				echo "need to be in the user directory....exiting"
				exit_with_message " " 1
			fi
			sparkybackup-skelcopy $SKELUSER
			$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL88 $SKELUSER $LOCAL89\n\n$LOCAL14" $HEIGHT $WIDTH
			log_info "skelcopy used and user settings been copied to skel"
			exit_with_message " " 1
		else
			$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL90 \n\n$LOCAL14" $HEIGHT $WIDTH
			log_info "skelcopy used but user settings been not copied to skel"
			exit_with_message " " 1
		fi
		;;
	dist)
		echo "$LOCAL19"
		log_info "Distribution Mode Selected"
		;;
	edit)
		nano /etc/sparkybackup/sparkybackup.conf
		exit_with_message " " 1
		;;
	installer)
		nano /etc/sparkybackup/sparkylinux-installer.conf
		exit_with_message " " 1
		;;

	cache)
		apt-get autoremove
		apt-get clean

		if [ "$TESTAPTITUDE" != "" ]
		then
			aptitude purge ~c
		fi
		exit_with_message " " 1
		;;
	log)
		if [ -f "$WORKDIR/sparkybackup.log" ]
		then
			nano $WORKDIR/sparkybackup.log
		else
			echo "$LOCAL45"
		fi
		exit_with_message " " 1
		;;
	*)
		output_usage
		;;
esac

# add info about disk space before starting
log_debug "------------------------------------------------------"
log_debug "df information before starting new build:"
df -h >> $WORKDIR/sparkybackup.log
log_debug "------------------------------------------------------"
# create package-list.txt file even the build will fail
echo "$LOCAL20 $CUSTOMISO.package-list.txt $LOCAL21 $WORKDIR"
log_info "Creating $CUSTOMISO.package-list.txt in $WORKDIR"
dpkg-query -l > $WORKDIR/$CUSTOMISO.package-list.txt
log_debug "------------------------------------------------------"

function cdfs {
	# Step 3 - Create the CD tree in $WORKDIR/ISOTMP
	echo "$LOCAL22 $WORKDIR $LOCAL23"
	log_info "Checking if the $WORKDIR folder has been created"
	if [ -d "$WORKDIR" ]
	then
		rm -rf $WORKDIR/dummysys/var/*
		rm -rf $WORKDIR/dummysys/etc/*
	fi

	# make sure that directories exist
	mkdir -p $WORKDIR/ISOTMP/live
	mkdir -p $WORKDIR/dummysys/dev
	mkdir -p $WORKDIR/dummysys/etc/live
	mkdir -p $WORKDIR/dummysys/home
	mkdir -p $WORKDIR/dummysys/proc
	mkdir -p $WORKDIR/dummysys/tmp
	mkdir -p $WORKDIR/dummysys/sys
	mkdir -p $WORKDIR/dummysys/mnt
	mkdir -p $WORKDIR/dummysys/media
	#mkdir -p $WORKDIR/dummysys/root ### don't create it, starting from Debian Stretch
	mkdir -p $WORKDIR/dummysys/run
	mkdir -p $WORKDIR/dummysys/var
	chmod ug+rwx,o+rwt $WORKDIR/dummysys/tmp
	echo "$LOCAL24"
	log_info "Copying /var and /etc to temp area..."

	#if [ -f $WORKDIR/varexcludes ]
	#then
	#	rm -f $WORKDIR/varexcludes
	#fi

	if [ -f $WORKDIR/etcexcludes ]
	then
		rm -f $WORKDIR/etcexcludes
	fi
		
	VAREXCLUDES="--exclude '*.log' --exclude '*.pid' --exclude '*.bak' --exclude '*.[0-9].gz' --exclude '*.deb' --exclude 'kdecache*' "
	SQUASHEXCLUDES="-e /initrd.img.old /vmlinuz.old /root/.synaptic/log/*.log /root/.bash_history"

	# copy trackerd stuff as live-initramfs disables it
	if [ -f /etc/xdg/autostart/tracker-applet.desktop ]
	then
		cp /etc/xdg/autostart/tracker-applet.desktop /usr/lib/sparkybackup
	fi
	if [ -f /etc/xdg/autostart/trackerd.desktop ]
	then
		cp /etc/xdg/autostart/trackerd.desktop.xdg /usr/lib/sparkybackup
	fi
	if [ -f /usr/share/autostart/trackerd.desktop ]
	then
		cp /usr/share/autostart/trackerd.desktop.share /usr/lib/sparkybackup
	fi

	#cleanup leftover live script if it exists
	if [ -f /etc/profile.d/zz-live.sh ]
	then
		rm -f /etc/profile.d/zz-live.sh
	fi

	# remove live/mount dir which is created by live scripts in live mode
	if [ -d /lib/live/mount ]
	then
		rm -rf /lib/live/mount
	fi

	# copy /var and /etc dirs
	rsync $VAREXCLUDES-a /var/. $WORKDIR/dummysys/var/.
	rsync -a /etc/. $WORKDIR/dummysys/etc/.

	#if [ "$1" = "dist" ]
	#then
		rm -f $WORKDIR/dummysys/etc/X11/xorg.conf
		rm -f $WORKDIR/dummysys/etc/resolv.conf
		# dirty fix resolv.conf
		touch $WORKDIR/dummysys/etc/resolv.conf
		echo "#dirty fix DNS by sparky-backup" >> $WORKDIR/dummysys/etc/resolv.conf
		echo "nameserver 8.8.8.8" >> $WORKDIR/dummysys/etc/resolv.conf
		echo "nameserver 8.8.4.4" >> $WORKDIR/dummysys/etc/resolv.conf
		# end fixing resolv.conf
		rm -f $WORKDIR/dummysys/etc/hosts
		rm -f $WORKDIR/dummysys/etc/hostname
	#fi

	rm -f $WORKDIR/dummysys/etc/mtab
	rm -f $WORKDIR/dummysys/etc/fstab
	rm -f $WORKDIR/dummysys/etc/udev/rules.d/70-persistent*
	if [ -f $WORKDIR/dummysys/etc/initramfs-tools/conf.d/resume ]; then
		rm -f $WORKDIR/dummysys/etc/initramfs-tools/conf.d/resume
	fi
	ls $WORKDIR/dummysys/var/lib/apt/lists | grep -v ".gpg" | grep -v "lock" | grep -v "partial" | xargs -i rm $WORKDIR/dummysys/var/lib/apt/lists/{} ; 

	#if [ "$1" = "dist" ]
	#then
		if [ -f $WORKDIR/dummysys/etc/gdm3/daemon.conf ]
		then
			sed -i -e '/AutomaticLoginEnable/d' $WORKDIR/dummysys/etc/gdm3/daemon.conf
		fi

		if [ ! -d $WORKDIR/dummysys/etc/skel/Desktop ]
		then
			mkdir -p $WORKDIR/dummysys/etc/skel/Desktop
		fi

		rm -f $WORKDIR/dummysys/etc/group
		rm -f $WORKDIR/dummysys/etc/group.org
		rm -f $WORKDIR/dummysys/etc/group-
		rm -f $WORKDIR/dummysys/etc/passwd
		rm -f $WORKDIR/dummysys/etc/passwd-
		rm -f $WORKDIR/dummysys/etc/passwd.org
		rm -f $WORKDIR/dummysys/etc/shadow
		rm -f $WORKDIR/dummysys/etc/shadow-
		rm -f $WORKDIR/dummysys/etc/shadow.org
		rm -f $WORKDIR/dummysys/etc/gshadow
		rm -f $WORKDIR/dummysys/etc/gshadow-
		rm -f $WORKDIR/dummysys/etc/wicd/wired-settings.conf
		rm -f $WORKDIR/dummysys/etc/wicd/wireless-settings.conf
		rm -rf $WORKDIR/dummysys/etc/NetworkManager/system-connections/*
		rm -f $WORKDIR/dummysys/etc/printcap
		if [ -f $WORKDIR/dummysys/etc/cups/printers.conf ]
		then
			rm -f $WORKDIR/dummysys/etc/cups/printers.conf
		fi
		touch $WORKDIR/dummysys/etc/printcap
		if [ ! -d $WORKDIR/dummysys/etc/cups ]
		then
			mkdir -p $WORKDIR/dummysys/etc/cups
		fi
		touch $WORKDIR/dummysys/etc/cups/printers.conf
		rm -rf $WORKDIR/dummysys/var/cache/gdm/*
		rm -rf $WORKDIR/dummysys/var/lib/sudo/*
		rm -rf $WORKDIR/dummysys/var/run/console/*
		rm -f $WORKDIR/dummysys/var/lib/kdm/kdmsts
		rm -f $WORKDIR/dummysys/var/lib/AccountsService/users/*
		rm -f $WORKDIR/dummysys/etc/gdm/gdm.conf-custom
		rm -f $WORKDIR/dummysys/etc/gdm/custom.conf
		rm -f $WORKDIR/dummysys/etc/cups/ssl/server.crt
		rm -f $WORKDIR/dummysys/etc/cups/ssl/server.key
		rm -f $WORKDIR/dummysys/etc/ssh/ssh_host_rsa_key
		rm -f $WORKDIR/dummysys/etc/ssh/ssh_host_dsa_key.pub
		rm -f $WORKDIR/dummysys/etc/ssh/ssh_host_dsa_key
		rm -f $WORKDIR/dummysys/etc/ssh/ssh_host_rsa_key.pub

		find $WORKDIR/dummysys/var/run $WORKDIR/dummysys/var/log $WORKDIR/dummysys/var/mail $WORKDIR/dummysys/var/spool $WORKDIR/dummysys/var/lock $WORKDIR/dummysys/var/backups $WORKDIR/dummysys/var/tmp -type f -exec rm '{}' \;

		#further cleanup
		rm -rf $WORKDIR/dummysys/var/cache/gdm/*
		rm -rf $WORKDIR/dummysys/var/tmp/kdecache*
		rm -rf $WORKDIR/dummysys/var/spool/gfax/*
		rm -rf $WORKDIR/dummysys/var/run/gdm3/*
		rm -rf $WORKDIR/dummysys/var/lib/sudo/*
		rm -rf $WORKDIR/dummysys/var/lib/polkit-1/localauthority/10-vendor.d/10-live-cd.pkla
		
		#fix for live scripts setup Contributed by AnthLee of SalineOS
		rm -rf $WORKDIR/dummysys/var/lib/live/config/*

		for i in dpkg.log lastlog mail.log syslog auth.log daemon.log faillog lpr.log mail.warn user.log boot debug mail.err messages wtmp bootstrap.log dmesg kern.log mail.info
		do
			touch $WORKDIR/dummysys/var/log/${i}
		done

		# remove the non system users on the passwd and group files and copy them to dummysys
		# see if any temp users left over from previous versions of sparkybackup as the process has now changed

		grep '^[^:]*:[^:]*:[5-9][0-9][0-9]:' /etc/passwd | awk -F ":" '{print "/usr/sbin/userdel -f",$1}' | grep -v polkitd > $WORKDIR/cleantmpusers
		. $WORKDIR/cleantmpusers

		grep '^[^:]*:[^:]*:[0-9]:' /etc/passwd >> $WORKDIR/dummysys/etc/passwd
		grep '^[^:]*:[^:]*:[0-9][0-9]:' /etc/passwd >> $WORKDIR/dummysys/etc/passwd
		grep '^[^:]*:[^:]*:[0-9][0-9][0-9]:' /etc/passwd >> $WORKDIR/dummysys/etc/passwd
		grep '^[^:]*:[^:]*:[3-9][0-9][0-9][0-9][0-9]:' /etc/passwd >> $WORKDIR/dummysys/etc/passwd

		grep '^[^:]*:[^:]*:[0-9]:' /etc/group >> $WORKDIR/dummysys/etc/group
		grep '^[^:]*:[^:]*:[0-9][0-9]:' /etc/group >> $WORKDIR/dummysys/etc/group
		grep '^[^:]*:[^:]*:[0-9][0-9][0-9]:' /etc/group >> $WORKDIR/dummysys/etc/group
		grep '^[^:]*:[^:]*:[3-9][0-9][0-9][0-9][0-9]:' /etc/group >> $WORKDIR/dummysys/etc/group

		grep '^[^:]*:[^:]*:[5-9][0-9][0-9]:' /etc/passwd | awk -F ":" '{print $1}' | grep -v polkitd > $WORKDIR/tmpusers1
		grep '^[^:]*:[^:]*:[1-9][0-9][0-9][0-9]:' /etc/passwd | awk -F ":" '{print $1}' | grep -v polkitd > $WORKDIR/tmpusers2
		grep '^[^:]*:[^:]*:[1-2][0-9][0-9][0-9][0-9]:' /etc/passwd | awk -F ":" '{print $1}' | grep -v polkitd > $WORKDIR/tmpusers3

		cat $WORKDIR/tmpusers1 $WORKDIR/tmpusers2 $WORKDIR/tmpusers3 > $WORKDIR/tmpusers
		cat $WORKDIR/tmpusers | while read LINE;
		do
			echo $LINE | xargs -i sed -e 's/,{}//g' $WORKDIR/dummysys/etc/group > $WORKDIR/dummysys/etc/group.new1
			echo $LINE | xargs -i sed -e 's/{},//g' $WORKDIR/dummysys/etc/group.new1 > $WORKDIR/dummysys/etc/group.new2
			echo $LINE | xargs -i sed -e 's/{}//g' $WORKDIR/dummysys/etc/group.new2 > $WORKDIR/dummysys/etc/group
			rm -rf $WORKDIR/dummysys/etc/group.new1 $WORKDIR/dummysys/etc/group.new2
			#grep 'autologin' /etc/group >> $WORKDIR/dummysys/etc/group
		done

		OLDUSER=`grep '^[^:]*:[^:]*:[1-9][0-9][0-9][0-9]:' /etc/passwd | awk -F ":" '{print $1}'`
		cat /etc/shadow | grep -v root | grep -v $OLDUSER > $WORKDIR/dummysys/etc/shadow
		chmod 644 $WORKDIR/dummysys/etc/group
		chown root:root $WORKDIR/dummysys/etc/group
		chmod 644 $WORKDIR/dummysys/etc/passwd
		chown root:root $WORKDIR/dummysys/etc/passwd
		chmod 640 $WORKDIR/dummysys/etc/shadow
		chown root:shadow $WORKDIR/dummysys/etc/shadow
	#fi

	# copy isolinux files
	mkdir -p $WORKDIR/ISOTMP/isolinux
	cp /usr/lib/sparkybackup/isolinux/* $WORKDIR/ISOTMP/isolinux/

	# copy memtest86+ and hdt to all iso images
	#if [ -f /home/extra/memtest86.bin ]
	#then
	#	cp /home/extra/memtest86.bin $WORKDIR/ISOTMP/isolinux/memtest
	#	echo "" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "label memtest" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	menu label Memory Test" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	kernel /isolinux/memtest" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	append -" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#fi
	#if [ -f /home/extra/hdt.c32 ]
	#then
	#	cp /home/extra/hdt.c32 $WORKDIR/ISOTMP/isolinux/hdt.c32
	#	cp /home/extra/libmenu.c32 $WORKDIR/ISOTMP/isolinux/libmenu.c32
	#	cp /home/extra/libgpl.c32 $WORKDIR/ISOTMP/isolinux/libgpl.c32
	#	cp /home/extra/pci.ids $WORKDIR/ISOTMP/isolinux/pci.ids
	#	echo "" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "label hdt" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	menu label Hardware Detection" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	kernel /isolinux/hdt.c32" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	echo "	append -" >> $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#fi

	# set live iso label depends of edition
	CHECKAWESOMEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep awesome`
	CHECKBSPWMISO=`cat /etc/sparkybackup/sparkybackup.conf | grep bspwm`
	CHECKBUDGIEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep budgie`
	CHECKCDEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep cde`
	CHECKCINNAMONISO=`cat /etc/sparkybackup/sparkybackup.conf | grep cinnamon`
	CHECKDRACOISO=`cat /etc/sparkybackup/sparkybackup.conf | grep draco`
	CHECKEDEXISO=`cat /etc/sparkybackup/sparkybackup.conf | grep edex`
	CHECKEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep enlightenment`
	CHECKFLUXBOXISO=`cat /etc/sparkybackup/sparkybackup.conf | grep fluxbox`
	CHECKGAMEOVERISO=`cat /etc/sparkybackup/sparkybackup.conf | grep gameover`
	CHECKGNOMEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep gnome`
	CHECKGRAPHENEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep graphene`
	CHECKI3ISO=`cat /etc/sparkybackup/sparkybackup.conf | grep i3`
	CHECKICEWMISO=`cat /etc/sparkybackup/sparkybackup.conf | grep icewm`
	CHECKJADEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep jade`
	CHECKJWMISO=`cat /etc/sparkybackup/sparkybackup.conf | grep jwm`
	CHECKKDEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep kde`
	CHECKLUMINAISO=`cat /etc/sparkybackup/sparkybackup.conf | grep lumina`
	CHECKLXDEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep lxde`
	CHECKLXQTISO=`cat /etc/sparkybackup/sparkybackup.conf | grep lxqt`
	CHECKMANOKWARIISO=`cat /etc/sparkybackup/sparkybackup.conf | grep manokwari`
	CHECKMATEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep mate`
	CHECKMINIMALCLIISO=`cat /etc/sparkybackup/sparkybackup.conf | grep minimalcli`
	CHECKMINIMALGUIISO=`cat /etc/sparkybackup/sparkybackup.conf | grep minimalgui`
	CHECKMLVWMISO=`cat /etc/sparkybackup/sparkybackup.conf | grep mlvwm`
	CHECKMULTIMEDIAISO=`cat /etc/sparkybackup/sparkybackup.conf | grep multimedia`
	CHECKOPENBOXISO=`cat /etc/sparkybackup/sparkybackup.conf | grep openbox`
	CHECKOPENBOXNOIRISO=`cat /etc/sparkybackup/sparkybackup.conf | grep openbox | grep noir`
	CHECKPANTHEONISO=`cat /etc/sparkybackup/sparkybackup.conf | grep pantheon`
	CHECKPEKWMISO=`cat /etc/sparkybackup/sparkybackup.conf | grep pekwm`
	CHECKRESCUEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep rescue`
	#CHECKSBCLIENTISO=`cat /etc/sparkybackup/sparkybackup.conf | grep client | grep -v light`
	#CHECKSBCLIENTLIGHTISO=`cat /etc/sparkybackup/sparkybackup.conf | grep client | grep light`
	#CHECKSBSERVERISO=`cat /etc/sparkybackup/sparkybackup.conf | grep server`
	CHECKSUGARISO=`cat /etc/sparkybackup/sparkybackup.conf | grep sugar`
	CHECKSWAYISO=`cat /etc/sparkybackup/sparkybackup.conf | grep sway`
	CHECKTRINITYISO=`cat /etc/sparkybackup/sparkybackup.conf | grep trinity`
	CHECKTDEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep tde`
	CHECKUKUIISO=`cat /etc/sparkybackup/sparkybackup.conf | grep ukui`
	CHECKWINDOWMAKERISO=`cat /etc/sparkybackup/sparkybackup.conf | grep windowmaker`
	CHECKWMAKERISO=`cat /etc/sparkybackup/sparkybackup.conf | grep wmaker`
	CHECKXFCEISO=`cat /etc/sparkybackup/sparkybackup.conf | grep xfce`

	CHECKNUMBERISO=`cat /etc/sparkybackup/sparkybackup.conf | grep CUSTOMISO | cut -f2 -d"=" | cut -f2 -d"-"`

	CHECKI686ISO=`cat /etc/sparkybackup/sparkybackup.conf | grep i686`
	CHECKX8664ISO=`cat /etc/sparkybackup/sparkybackup.conf | grep x86_64`

	if [ "$CHECKAWESOMEISO" != "" ]
	then
		LIVEVERSION="Awesome"
	elif [ "$CHECKBSPWMISO" != "" ]
	then
		LIVEVERSION="BSPWM"
	elif [ "$CHECKBUDGIEISO" != "" ]
	then
		LIVEVERSION="Budgie"
	elif [ "$CHECKCDEISO" != "" ]
	then
		LIVEVERSION="CDE"
	elif [ "$CHECKCINNAMONISO" != "" ]
	then
		LIVEVERSION="Cinnamon"
	elif [ "$CHECKDRACOISO" != "" ]
	then
		LIVEVERSION="Draco"
	elif [ "$CHECKEDEXISO" != "" ]
	then
		LIVEVERSION="eDEX-UI"
	elif [ "$CHECKEISO" != "" ]
	then
		LIVEVERSION="Enlightenment"
	elif [ "$CHECKFLUXBOXISO" != "" ]
	then
		LIVEVERSION="Fluxbox"
	elif [ "$CHECKGAMEOVERISO" != "" ]
	then
		LIVEVERSION="GameOver"
	elif [ "$CHECKGNOMEISO" != "" ]
	then
		LIVEVERSION="GNOME"
	elif [ "$CHECKGRAPHENEISO" != "" ]
	then
		LIVEVERSION="Graphene"
	elif [ "$CHECKI3ISO" != "" ]
	then
		LIVEVERSION="i3"
	elif [ "$CHECKICEWMISO" != "" ]
	then
		LIVEVERSION="IceWM"
	elif [ "$CHECKJADEISO" != "" ]
	then
		LIVEVERSION="Jade"
	elif [ "$CHECKJWMISO" != "" ]
	then
		LIVEVERSION="JWM"
	elif [ "$CHECKKDEISO" != "" ]
	then
		LIVEVERSION="KDE"
	elif [ "$CHECKLUMINAISO" != "" ]
	then
		LIVEVERSION="Lumina"
	elif [ "$CHECKLXDEISO" != "" ]
	then
		LIVEVERSION="LXDE"
	elif [ "$CHECKLXQTISO" != "" ]
	then
		LIVEVERSION="LXQt"
	elif [ "$CHECKMANOKWARIISO" != "" ]
	then
		LIVEVERSION="Manokwari"
	elif [ "$CHECKMATEISO" != "" ]
	then
		LIVEVERSION="MATE"
	elif [ "$CHECKMINIMALCLIISO" != "" ]
	then
		LIVEVERSION="MinimalCLI"
		# change isolinux.cfg if CLI image
		rm -f $WORKDIR/ISOTMP/isolinux/isolinux.cfg
		mv $WORKDIR/ISOTMP/isolinux/isolinux-cli.cfg $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	elif [ "$CHECKMINIMALGUIISO" != "" ]
	then
		LIVEVERSION="MinimalGUI"
	elif [ "$CHECKMLVWMISO" != "" ]
	then
		LIVEVERSION="Mlvwm"
	elif [ "$CHECKMULTIMEDIAISO" != "" ]
	then
		LIVEVERSION="Multimedia"
	elif [ "$CHECKOPENBOXISO" != "" ]
	then
		LIVEVERSION="Openbox"
	elif [ "$CHECKOPENBOXNOIRISO" != "" ]
	then
		LIVEVERSION="Openbox Noir"
	elif [ "$CHECKPANTHEONISO" != "" ]
	then
		LIVEVERSION="Pantheon"
	elif [ "$CHECKPEKWMISO" != "" ]
	then
		LIVEVERSION="PekWM"
	elif [ "$CHECKRESCUEISO" != "" ]
	then
		LIVEVERSION="Rescue"
	#elif [ "$CHECKSBCLIENTISO" != "" ]
	#then
	#	LIVEVERSION="Small Business Client"
	#elif [ "$CHECKSBCLIENTLIGHTISO" != "" ]
	#then
	#	LIVEVERSION="Small Business Client Light"
	#elif [ "$CHECKSBSERVERISO" != "" ]
	#then
	#	LIVEVERSION="Small Business Server"
	elif [ "$CHECKSUGARISO" != "" ]
	then
		LIVEVERSION="Sugar"
	elif [ "$CHECKSWAYISO" != "" ]
	then
		LIVEVERSION="Sway"
	elif [ "$CHECKTRINITYISO" != "" ]
	then
		LIVEVERSION="TDE"
	elif [ "$CHECKTDEISO" != "" ]
	then
		LIVEVERSION="TDE"
	elif [ "$CHECKUKUIISO" != "" ]
	then
		LIVEVERSION="UKUI"
	elif [ "$CHECKWINDOWMAKERISO" != "" ]
	then
		LIVEVERSION="WindowMaker"
	elif [ "$CHECKWMAKERISO" != "" ]
	then
		LIVEVERSION="WindowMaker"
	elif [ "$CHECKXFCEISO" != "" ]
	then
		LIVEVERSION="Xfce"
	else
		LIVEVERSION=""
	fi

	if [ "$CHECKNUMBERISO" != "" ]
	then
		LIVENUMBER="$CHECKNUMBERISO"
	else
		LIVENUMBER=""
	fi

	if [ "$CHECKI686ISO" != "" ]
	then
		LIVEARCH="32bit"
	elif [ "$CHECKX8664ISO" != "" ]
	then
		LIVEARCH="64bit"
	else
		LIVEARCH=""
	fi

	ISOLABEL="$LIVECDLABEL $LIVENUMBER $LIVEVERSION $LIVEARCH"
	sed -i -e 's/__LIVECDLABEL__/'"$ISOLABEL"'/g' $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	sed -i -e 's/__LIVELABEL__/'"$LIVECDLABEL"'/g' $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	
	# copy grub-efi live files for dual-booting isolinux and grub-efi
	# but don't need to copy the stuff if building iso with bios support only,
	# but the stuff is required for building sparky rescue edition anyway
	TESTXORRISO="`which xorriso`"
	EFI_PARAMS=
	# Starting from Sparky Backup 20240126 make EFI compatible ISO anyway
	#if [ -f /home/offline/efibootmgr* ] || [ -f /usr/bin/sparky-chrooter ]
	#then
		rsync -a /usr/lib/sparkybackup/boot $WORKDIR/ISOTMP/
		rsync -a /usr/lib/sparkybackup/EFI $WORKDIR/ISOTMP/
		rsync -a /usr/lib/sparkybackup/efi.img $WORKDIR/ISOTMP/
			
		if [ "$TESTXORRISO" = "" ]
		then
			EFI_PARAMS="-eltorito-alt-boot -eltorito-boot boot/grub/efi.img -no-emul-boot"
		else
			EFI_PARAMS="-eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot"
		fi
	#fi
	
	# mv $WORKDIR/ISOTMP/boot/grub/grub.png $WORKDIR/ISOTMP/boot/grub/grub.png
	# mv $WORKDIR/ISOTMP/isolinux/background.png $WORKDIR/ISOTMP/isolinux/background.png

	# replace grub & isolinux background of 100 edition
	#if [ -f /opt/sparky-100-grub.png ]; then
	#	rm -f $WORKDIR/ISOTMP/boot/grub/grub.png
	#	cp /opt/sparky-100-grub.png $WORKDIR/ISOTMP/boot/grub/grub.png
	#	rm -f $WORKDIR/ISOTMP/isolinux/background.png
	#	cp /opt/sparky-100-grub.png $WORKDIR/ISOTMP/isolinux/background.png
	#fi

	# replace isolinux and grub configs for rescue edition
	if [ "$CHECKRESCUEISO" != "" ]
	then		
		if [ -f /usr/share/applications/sparkylinux-installer.desktop* ]
		then
			rm -f /usr/share/applications/sparkylinux-installer.desktop
		fi
		if [ -f /usr/share/menu/sparkylinux-installer* ]
		then
			rm -f /usr/share/menu/sparkylinux-installer
		fi
		if [ -f /usr/share/menu/sparky-installation-guide* ]
		then
			rm -f /usr/share/menu/sparky-installation-guide
		fi
		if [ -f /usr/share/applications/sparky-installation-guide.desktop* ]
		then
			rm -f /usr/share/applications/sparky-installation-guide.desktop
		fi
		if [ -f $WORKDIR/dummysys/etc/Desktop/sparkylinux-installer.desktop* ]
		then
			rm -f $WORKDIR/dummysys/etc/Desktop/sparkylinux-installer.desktop
		fi
		if [ -f $WORKDIR/dummysys/etc/Desktop/sparky-installation-guide.desktop* ]
		then
			rm -f $WORKDIR/dummysys/etc/sparky-installation-guide.desktop
		fi
	fi
	
	# change grub.cfg if CLI image
	CHECKMINIMALCLIISO=`cat /etc/sparkybackup/sparkybackup.conf | grep minimalcli`
	if [ "$CHECKMINIMALCLIISO" != "" ]
	then
		rm -f $WORKDIR/ISOTMP/boot/grub/grub.cfg
		mv $WORKDIR/ISOTMP/boot/grub/grub-cli.cfg $WORKDIR/ISOTMP/boot/grub/grub.cfg
	else
		rm -f $WORKDIR/ISOTMP/boot/grub/grub-cli.cfg
	fi
	# make grub label
	#if [ -f "$WORKDIR/ISOTMP/boot/grub/live-theme/theme.txt" ]
	#then
		sed -i -e 's/GRUBLIVECDLABEL/'"$ISOLABEL"'/g' $WORKDIR/ISOTMP/boot/grub/live-theme/theme.txt
	#fi

	#if [ ! -d /etc/plymouth ]
	#then
	#	sed -i -e 's/ splash//g' $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	sed -i -e 's/ splash//g' $WORKDIR/ISOTMP/boot/grub/sparky.cfg
	#	sed -i -e 's/ quiet//g' $WORKDIR/ISOTMP/isolinux/isolinux.cfg
	#	sed -i -e 's/ quiet//g' $WORKDIR/ISOTMP/boot/grub/sparky.cfg
	#fi

	# add minimal file to the iso to let the netinstall installer detect it
	# and run the advanced installtion in live environment
	CHECKMINIMALISO=`cat /etc/sparkybackup/sparkybackup.conf | grep minimal`
	if [ "$CHECKMINIMALISO" != "" ]
	then
		cp /usr/lib/sparkybackup/live/minimal $WORKDIR/ISOTMP/live/minimal
	fi

	# make sure you have all the efi grub related files and libs in 'offline' dir:
	# efibootmgr, libefiboot1, libefivar1, grub-efi, grub-efi-amd-64|grub-efi-ia32, grub-efi-amd64-bin|grub-efi-ia32-bin
	if [ -f /home/offline/efibootmgr* ]
	then
		rsync -a /home/offline $WORKDIR/ISOTMP/

		# extra debs to install secure boot support
		if [ -d /home/offlinesigned ]
		then
			rsync -a /home/offlinesigned $WORKDIR/ISOTMP/
		fi
	fi

	# do not show pacman's desktop's pref in openbox editions
	if [ -f /usr/bin/openbox-session ] && [ -f /usr/bin/idesk ] && [ -f /usr/share/applications/pcmanfm-desktop-pref.desktop ]
	then
		CHECKPREF=`cat /usr/share/applications/pcmanfm-desktop-pref.desktop | grep NoDisplay`
		if [ "$CHECKPREF" = "" ]
		then
			echo "NoDisplay=true" >> /usr/share/applications/pcmanfm-desktop-pref.desktop
		fi
	fi

	# copy package list to live iso dir
	cp $WORKDIR/$CUSTOMISO.package-list.txt $WORKDIR/ISOTMP/live/$CUSTOMISO.package-list.txt

	# create empty fstab due to issue in live system
	cat > $WORKDIR/dummysys/etc/fstab <<FOO
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

FOO
	
	sleep 1

	# Step 4 - Prepare live.conf
	if [ ! -d /etc/live ]
	then
		mkdir -p /etc/live
	fi

	echo "export LIVE_USERNAME=\"$LIVEUSER\"" > /etc/live/config.conf
	echo "export LIVE_USER_FULLNAME=\"Live session user\"" >> /etc/live/config.conf
	echo "export LIVE_HOSTNAME=\"$LIVEUSER\"" >> /etc/live/config.conf
	#echo "export LIVE_USER_DEFAULT_GROUPS=\"$LIVEUSER,cdrom,floppy,audio,dip,video,plugdev,scanner,netdev,bluetooth,autologin\"" >> /etc/live/config.conf

	#fix for a bug in the debian live boot scripts that starts a second X server
	#if [ "$1" = "dist" ] && [ -f /etc/X11/default-display-manager ]
	if [ -f /etc/X11/default-display-manager ]
	then
		echo "export LIVE_NOCONFIGS=\"xinit\"" >> /etc/live/config.conf
	fi

	cp /etc/live/config.conf $WORKDIR/dummysys/etc/live/

	sleep 1

	#fix for policy kit in live
	sed -i -e 's/ResultAny=no/ResultAny=yes/g' /lib/live/config/*policykit
	sed -i -e 's/ResultInactive=no/ResultInactive=yes/g' /lib/live/config/*policykit

	echo "$LOCAL25 $1 $LOCAL26"
	log_info "Setting up live options for $1 mode"

	# make a new initial ramdisk including the live scripts
	#update-initramfs -t -c -k $(uname -r)
	update-initramfs -t -c -k all

	echo "$LOCAL27"
	log_info "Copying your kernel and initrd for the livecd"
	cp /boot/vmlinuz-$(uname -r) $WORKDIR/ISOTMP/live/vmlinuz
	cp /boot/initrd.img-$(uname -r) $WORKDIR/ISOTMP/live/initrd.img
	# configure it if you want to enable 2nd kernel in live session (example)
	#cp /usr/lib/sparkybackup/live/initrd.img $WORKDIR/ISOTMP/live
	#cp /usr/lib/sparkybackup/live/vmlinuz $WORKDIR/ISOTMP/live
	mkdir -p $WORKDIR/ISOTMP/.disk 
	cp /usr/lib/sparkybackup/.disk/* $WORKDIR/ISOTMP/.disk

	# fix sddm conf
	if [ -f /lib/live/config/0085-sddm ]
	then
		sed -i -e 's/startkde/startplasma-x11/g' /lib/live/config/0085-sddm
	fi
	
	# Step 5 - Make filesystem.squashfs

	if [ -f $WORKDIR/ISOTMP/live/filesystem.squashfs ]
	then
		rm -f $WORKDIR/ISOTMP/live/filesystem.squashfs
	fi

	echo "$LOCAL28"
	log_info "Creating filesystem.squashfs... This will take a while so be patient."

	if [ "$SQUASHFSOPTS" = "" ]
	then
		SQUASHFSOPTS="-no-recovery -comp xz -always-use-fragments -b 1M"
	fi

	REALFOLDERS=""

	for d in `ls -d $WORKDIR/dummysys/*`
	do
		REALFOLDERS="$REALFOLDERS $d"
	done

	for d in `ls / | grep -v etc | grep -v run | grep -v tmp | grep -v sys | grep -v var | grep -v dev | grep -v media | grep -v mnt | grep -v lost+found | grep -v proc | grep -v home`
	do
		REALFOLDERS="$REALFOLDERS /$d"
	done
	
	# Make sure we aren't including a folder the user wants to exclude as it will override the excludes
	for e in $EXCLUDES
	do
		REALFOLDERS=`echo $REALFOLDERS | sed -e 's!'"$e"'!!g'`
	done

	mksquashfs $REALFOLDERS $WORKDIR/ISOTMP/live/filesystem.squashfs -no-duplicates $SQUASHFSOPTS $SQUASHEXCLUDES 2>> $WORKDIR/sparkybackup.log

	sleep 1

	#add some stuff the log in case of problems so I can troubleshoot it easier
	log_debug "------------------------------------------------------"
	log_debug "Mount info"
	mount >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "CPU info"
	lscpu >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "Kernels installed info"
	ls /boot | grep vmlinuz >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "Machine info"
	uname -a >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "Virtual machine detect info"
	VMACHINE=`cat /proc/cpuinfo | grep hypervisor`
	if [ "$VMACHINE" != "" ]
	then
		log_info "Runing sparkybackup on a virtual machine" >> $WORKDIR/sparkybackup.log
	else
		log_info "Runing sparkybackup on a physical machine" >> $WORKDIR/sparkybackup.log
	fi	

	TESTEFI0=`lsmod | grep efi`
	if [ "$TESTEFI0" != "" ]
	then
		log_debug "------------------------------------------------------"
		log_info "TESTEFI=EFI detected" >> $WORKDIR/sparkybackup.log
	else
		log_debug "------------------------------------------------------"
		log_info "TESTEFI=EFI NOT detected" >> $WORKDIR/sparkybackup.log
	fi

	log_debug "------------------------------------------------------"
	log_debug "Check do efi debs exist at offline dir"
	if [ -d /home/offline ]
	then
		ls /home/offline >> $WORKDIR/sparkybackup.log
	else
		log_info "/home/offline dir does not exist" >> $WORKDIR/sparkybackup.log
	fi
	log_debug "------------------------------------------------------"
	log_debug "Check do efi signed debs exist at offlinesigned dir"
	if [ -d /home/offlinesigned ]
	then
		ls /home/offlinesigned >> $WORKDIR/sparkybackup.log
	else
		log_info "/home/offlinesigned dir does not exist" >> $WORKDIR/sparkybackup.log
	fi

	log_debug "------------------------------------------------------"
	log_debug "/etc/sparkybackup/sparkybackup.conf info"
	cat /etc/sparkybackup/sparkybackup.conf >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "/etc/live/config.conf info"
	cat /etc/live/config.conf >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "/etc/passwd info"
	cat $WORKDIR/dummysys/etc/passwd >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "/etc/group info"
	cat $WORKDIR/dummysys/etc/group >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "/etc/skel info"
	find /etc/skel/ >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "/etc/X11/default-display-manager info"
	cat /etc/X11/default-display-manager >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "SparkyBackup Core version info"
	cat /etc/sparkybackup/sparkybackup.version >> $WORKDIR/sparkybackup.log

	log_debug "------------------------------------------------------"
	log_debug "SparkyBackup Sys (GUI) version info"
	if [ -f /usr/bin/sparkybackup-gui ]
	then
		dpkg-query -s sparky-backup-sys | grep Version >> $WORKDIR/sparkybackup.log
	else
		log_debug "sparky-backup-sys not installed"
	fi

	log_debug "------------------------------------------------------"
	log_debug "Command-line options = $@"
	log_debug "------------------------------------------------------"

	#log_debug "------------------------------------------------------"
	#log_debug "memtest info"
	#if [ -f $WORKDIR/ISOTMP/isolinux/memtest ]
	#then
	#	log_debug "memtest copied ok"
	#else
	#	log_debug "memtest not copied"
	#fi
	#log_debug "------------------------------------------------------"
	#log_debug "hdt info"
	#if [ -f $WORKDIR/ISOTMP/isolinux/hdt.c32 ]
	#then
	#	log_debug "hdt copied ok"
	#else
	#	log_debug "hdt not copied"
	#fi

	log_debug "------------------------------------------------------"
	log_debug "User's default locale info"
	cat /etc/default/locale >> $WORKDIR/sparkybackup.log
	log_debug "------------------------------------------------------"

	log_debug "User's session type info"
	echo $XDG_SESSION_TYPE >> $WORKDIR/sparkybackup.log
	log_debug "------------------------------------------------------"

	log_debug "User's desktop environment info"
	echo $DESKTOP_SESSION >> $WORKDIR/sparkybackup.log
	log_debug "------------------------------------------------------"
	
	sleep 1
}

# check disk space again before creating iso
log_debug "------------------------------------------------------"
log_debug "df information after creating squashfs:"
df -h >> $WORKDIR/sparkybackup.log
log_debug "------------------------------------------------------"

function iso {
	TESTXORRISO="`which xorriso`"
	TESTGENISOIMAGE="`which genisoimage`"
	if [ "$TESTXORRISO" != "" ]
	then
		CREATEISO="`which xorriso`"
	elif [ "$TESTGENISOIMAGE" != "" ]
	then
		CREATEISO="`which genisoimage`"
	else
		echo "No xorriso nor genisoimage is installed... exiting..."
		exit 1
	fi

	#checking the size of the compressed filesystem to ensure it meets the iso9660 spec for a single file" 
	SQUASHFSSIZE=`ls -s $WORKDIR/ISOTMP/live/filesystem.squashfs | awk -F " " '{print $1}'`
	if [ "$TESTXORRISO" != "" ]
	then
		if [ "$SQUASHFSSIZE" -gt "3999999" ]
		then
			echo "$LOCAL29"
			log_info "The compressed filesystem is larger than the iso9660 specification allows for a single file. You must try to reduce the amount of data you are backing up and try again. Otherwise, install genisoimage, remove xorriso and try again."
			log_info "The squashfs size is $SQUASHFSSIZE (3999999 maximum)" >> $WORKDIR/sparkybackup.log
			exit 1
		else
			echo "The squashfs size is $SQUASHFSSIZE (3999999 maximum)"
			log_info "The squashfs size is $SQUASHFSSIZE (3999999 maximum)" >> $WORKDIR/sparkybackup.log
		fi
	elif [ "$TESTGENISOIMAGE" != "" ] && [ "$TESTXORRISO" = "" ]
	then
		echo "The squashfs size is $SQUASHFSSIZE so iso image can be larger than 3.99GB"
		log_info "The squashfs size is $SQUASHFSSIZE so iso image can be larger than 3.99GB" >> $WORKDIR/sparkybackup.log
	fi
	
	ARCH=`uname -r | grep "amd64" | awk '{print $1}'`

	# check to see if the cd filesystem exists
	if [ ! -f "$WORKDIR/ISOTMP/live/filesystem.squashfs" ]
	then
		echo "$LOCAL30"
		log_info "The cd filesystem is missing. Either there was a problem creating the compressed filesystem or you are trying to run sudo sparkybackup dist iso before sudo sparkybackup dist cdfs"
		exit 1
	fi

	sleep 1

	# Step 6 - Make the ISO file
	echo "$LOCAL20 $CUSTOMISO $LOCAL21 $WORKDIR $LOCAL31 $CREATEISO"
	log_info "Creating $CUSTOMISO in $WORKDIR using $CREATEISO"
	cd $WORKDIR/ISOTMP

	if [ "$ARCH" = "" ]
	then
		MYVOLID="$VOLID32BIT"
		MYARCH="32bit"
	else
		MYVOLID="$VOLID64BIT"
		MYARCH="64bit"
	fi

	# create iso image
	echo "$LOCAL20 $MYARCH $LOCAL32"
	if [ "$TESTXORRISO" != "" ]
	then
		# create iso image via xorriso up to 4GB (default)
		log_info "Creating $MYARCH iso image with $CREATEISO"
		echo "Creating the iso file using xorriso"
		$CREATEISO -as mkisofs -rock -omit-version-number -disable-deep-relocation -joliet -volid "$MYVOLID" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $EFI_PARAMS -o "$WORKDIR/$CUSTOMISO" "$WORKDIR/ISOTMP"
	else
		# create iso image via genisoimage which can be larger than 4GB (xorriso has to be removed from your system)
		log_info "Creating $MYARCH iso image with $CREATEISO"
		echo "Creating the iso file using genisoimage"
		$CREATEISO -r -V "$MYVOLID" -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $EFI_PARAMS -allow-limited-size -udf -o $WORKDIR/$CUSTOMISO "$WORKDIR/ISOTMP"
	fi

	# check to see if the iso image exists
	if [ ! -f "$WORKDIR/$CUSTOMISO" ]
	then
		echo "The iso image is missing... exiting..."
		log_info "The iso image is missing... exiting..."
		exit 1
	fi

	# create hybrid iso so it can be dd installed to a usb flash drive
	echo "$LOCAL33"
	log_info "Creating iso into a hybrid image so it can be imaged to a usb key or burned to optical media"
	isohybrid -u $WORKDIR/$CUSTOMISO
	ISOSIZE=`ls -s $WORKDIR/$CUSTOMISO | awk -F " " '{print $1}'`
	log_debug "iso size: $ISOSIZE"

	# create the md5, sha1, sha256 and sha512 sums file so the user doesn't have to - this is good so the iso file can later be tested to ensure it hasn't become corrupted
	echo "$LOCAL20 $CUSTOMISO.allsums.txt $LOCAL21 $WORKDIR"
	log_info "Creating $CUSTOMISO.allsums.txt in $WORKDIR"

	cd $WORKDIR
	echo "# md5sum:" >> $WORKDIR/$CUSTOMISO.allsums.txt
	md5sum $CUSTOMISO >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "md5sum $LOCAL34"
	log_info "md5sum done"

	echo "" >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "# sha1sum:" >> $WORKDIR/$CUSTOMISO.allsums.txt
	sha1sum $CUSTOMISO >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "sha1sum $LOCAL34"
	log_info "sha1sum done"

	echo "" >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "# sha256sum:" >> $WORKDIR/$CUSTOMISO.allsums.txt
	sha256sum $CUSTOMISO >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "sha256sum $LOCAL34"
	log_info "sha256sum done"

	echo "" >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "# sha512sum:" >> $WORKDIR/$CUSTOMISO.allsums.txt
	sha512sum $CUSTOMISO >> $WORKDIR/$CUSTOMISO.allsums.txt
	echo "sha512sum $LOCAL34"
	log_info "sha512sum done"

	sleep 1

	echo "$WORKDIR/$CUSTOMISO $LOCAL35"
	echo "$LOCAL36"
	log_info "$WORKDIR/$CUSTOMISO is ready to be burned or tested in a virtual machine."
	log_info "Check the size and if it is larger than 700MB you will need to burn it to a DVD or copy to a USB stick."
	ls -hs $WORKDIR/$CUSTOMISO
	ls -hs $WORKDIR/$CUSTOMISO >> $WORKDIR/sparkybackup.log
	echo "$LOCAL37 'sudo sparkybackup clean' $LOCAL38 $CUSTOMISO"
	echo " "
	log_info "It is recommended to run 'sudo sparkybackup clean' once you have tested the $CUSTOMISO"
}

# check to see if either iso or cdfs options have been invoked and proceed accordingly
if [ "$2" = "iso" ]
then
	iso $@
elif [ "$2" = "cdfs" ]
then
	cdfs $@
else
	cdfs $@
	iso $@
fi

exit 0
