#!/bin/sh
#181212 sfs
ROOT_MNT="/new_root"
OFS_DIRS="/run/archroot"
OFS_HOME="${OFS_DIRS}/root_ro"
OFS_COWSPACE="${OFS_DIRS}/cowspace"
run_hook() {
    [ "${ofs}" ] || return
    if [ ! "${rootdir}" ]; then
        err " rootdir= not defined"
        launch_interactive_shell
    fi
    export aufs="${ofs}"
    mount_handler="ofs_mount_handler"
    export mount_handler
}

STEP(){
    [ "${step}" = "y" ] || return
        echo -e  "[1;33m"":: ${@}""[0m" 
        echo -e "[1;33m"":: Debugging shell started. Ctrl+D: continue booting. Ctrl+Alt+Del: reboot""[0m" 
        sh 2>/dev/null 
}

ofs_mount_handler(){
    mkdir -p "${OFS_HOME}"
    default_mount_handler "${OFS_HOME}" && 
    	OFS_LOWER="${OFS_HOME}/${rootdir}"

	if [ "${aufs}" != "y" ]; then 
	    case ${aufs} in
	    /dev/* | LABEL=* | UUID=* | PARTLABEL=* | PARTUUID=* )
		#aufs=/dev/sda1:dir
		device="${aufs%%:*}"
		path="${aufs##*:}"
		STEP "$device"
	      if [[ "${device}" = "${path}" ]]; then
		    err "Syntax error while parsing '$aufs' argument..."
		    err "Example: aufs=/dev/sda1:dir"
		    launch_interactive_shell
	      elif [[ "${device}" = "${root}" ]]; then
		    err "Syntax error while parsing '$aufs' argument..."
		    err "root= & aufs= equal. Use: aufs=dir"
		    launch_interactive_shell
	      else
		msg ":: Trying to mount (${device})"
		mkdir -p  "${OFS_COWSPACE_DEV}" 
		mount "${device}" "${OFS_COWSPACE_DEV}" 
		if [[ ! $? -eq 0 ]]; then
		    err "Unable to mount '$aufs' source: ${device}"
		    echo "You are being dropped to a recovery shell"
		    echo " Try to mount $device in ${OFS_COWSPACE_DEV}"
		    launch_interactive_shell
		    msg "Trying to continue..."
		fi
		STEP "mount ${device} ${OFS_COWSPACE_DEV} "
	      fi
		
		OFS_COWSPACE="${OFS_COWSPACE_DEV}/${path}"
		mkdir -p ${OFS_COWSPACE}
		;;
	    * )
		OFS_COWSPACE="${OFS_LOWER}-${aufs}"
		mkdir -p ${OFS_COWSPACE}
		;;
	    esac
	    STEP "$aufs"
	else
	    mkdir -p ${OFS_COWSPACE}
	    mount -t tmpfs cowspace ${OFS_COWSPACE}
	fi

	OFS_UPPER="${OFS_COWSPACE}/upper"
	[ -d ${OFS_UPPER} ] || mkdir -p ${OFS_UPPER}
	OFS_WORK="${OFS_COWSPACE}/work"
	[ -d ${OFS_WORK} ] || mkdir -p ${OFS_WORK}


	mount -t overlay -o lowerdir=${OFS_LOWER},upperdir=${OFS_UPPER},workdir=${OFS_WORK} rootfs ${ROOT_MNT}

     if [ $? != 0 ]; then
	err "$aufs : mount -t overlay -o lowerdir=${OFS_LOWER},upperdir=${OFS_UPPER},workdir=${OFS_WORK} rootfs ${ROOT_MNT} "
        launch_interactive_shell
#        return
     fi
#porteus initrd like
LNK(){
	    rmdir "${2}" 2>/dev/null
	    [ -L "${2}" ] && rm "${2}"
	    mkdir -p "`dirname "$2"`"
	    [ -d "$1" ] && ln -sf "${1}" "${2}"
}
newroot="/new_root"
LNK "${OFS_HOME}" "${newroot}/mnt/home"
LNK "${OFS_COWSPACE}/upper" "${newroot}/mnt/live/memory/changes"

}