#!/bin/sh

# clone.sh --
#
#   This file allows the automatic reconditionning of a computer
#   by automating the installation with Clonezilla
#
#   Created on 2010-20 by collectif Emmabuntüs (contact@emmabuntus.org).
#
#   It was tested and validated on Clonezilla live 2.6.7-28 i686/amd64
#
#   Home web site : https://emmabuntus.org/
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# 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 <http://www.gnu.org/licenses/>.


################################################################################

NAME_CLONE=img_EmmaDE3_FC
SEARCH_FILE=clonezilla-img
HARD_DRIVE=sda
KEY_DRIVE=$(sudo blkid | grep LABEL=\"IMAGES\" | cut  -d ':' -f1)
UEFI_ON=0
LANGUE=$(echo ${LANG} | cut -d _ -f1)

if [ ${LANGUE} = fr ]
then

    message_info_emmabuntus="Clé USB de réemploi pour Emmabuntüs (https://emmabuntus.org)"
    message_info_sources="Les sources sont sur http://usb-reemploi.emmabuntus.org"
    message_identification_usb_ko="Warning : La clé USB avec l'étiquette \"IMAGES\" n'a pas été indentifiée. Taper sur une touche quelconque pour sortir du script"
    message_trouve_usb_avant="Clé USB trouvée sur"
    message_trouve_usb_apres=", mais ce n'est pas son emplacement habituel, ce qui signifie que vous avez plusieurs disques durs sur ce système."
    message_selection_usb="Veuillez entrer le numéro correspondant au disque cible de l'installation :"
    message_mauvais_nombre_disque_dur="Attention : Vous n'avez pas entré un nombre pour selectionner le disque. Taper sur une touche quelconque pour sortir du script"
    message_mauvais_selection_disque_dur="Attention : Vous n'avez pas entré un nombre correspondant à un disque. Taper sur une touche quelconque pour sortir du script"
    message_usb_disque_dur_avant="Clé USB trouvée sur"
    message_usb_disque_dur_apres="et disque sélectionné sur /dev/"
    message_recherche_clone_uefi="Patientez un moment, nous recherchons les clones de type UEFI présents dans la clé de réemploi sur"
    message_recherche_clone_legacy="Patientez un moment, nous recherchons les clones de type Legacy présents dans la clé de réemploi sur"
    message_clone_abscent="Attention : Aucun clone n'a été trouvé sur la clé USB. Taper sur une touche quelconque pour sortir du script"
    message_clone_trouve="Ce clone a été trouvé sur la clé USB :"
    message_plusieurs_clones="Plusieurs clones ont été trouvés sur la clé USB, veuillez indiquer le numéro du clone à installer :"
    message_mauvais_nombre_clone="Attention : Vous n'avez pas entré un nombre correspondant à un clone. Taper sur une touche quelconque pour sortir du script"
    message_nom_clone="Nom du clone : "
    message_mauvais_nombre="Attention : Vous n'avez pas entré un nombre correspondant à un clone. Taper sur une touche quelconque pour sortir du script"
    message_clone_non_present="Attention : ce clone n'esite pas. Taper sur une touche quelconque pour sortir du script"
    message_info_partition_avant="/!\ Attention : voulez vous partitionner le disque /dev/"
    message_info_partition_apres=", toutes les données seront détruites ? [O/n]"
    message_partition_ko="Abandon du partionnement !!!"
    CODE_OK_MINUSCULE="o"
    CODE_OK_MAJUSCULE="O"

else

    message_info_emmabuntus="Emmabuntüs reusable USB key (https://emmabuntus.org)"
    message_info_sources="Sources are on http://usb-reemploi.emmabuntus.org"
    message_identification_usb_ko="Warning : The identification of the USB key with the LABEL \"IMAGES\" failed, click any key to exit the script"
    message_trouve_usb_avant="Found a USB Key on"
    message_trouve_usb_apres=", but it is not in a normal location, which means that there are several hard drives on your computer."
    message_selection_usb="Please enter the number corresponding to the disk where you want to install :"
    message_mauvais_nombre_disque_dur="Warning : You did not enter a number to select the disk. Type any key to exit the script"
    message_mauvais_selection_disque_dur="Warning : You did not enter a number corresponding to a disk. Type any key to exit the script"
    message_usb_disque_dur_avant="Found a USB Key on"
    message_usb_disque_dur_apres="and selected hard drive on /dev/"
    message_recherche_clone_uefi="Please wait, we are looking for UEFI clones present on your reused USB key sitting on"
    message_recherche_clone_legacy="Please wait, we are looking for Legacy clones present on your reused USB key sitting on "
    message_clone_abscent="Warning : No clone was found on the USB key, click any key to exit the script"
    message_clone_trouve="This clone was found on the USB key:"
    message_plusieurs_clones="Several clones were found on the USB key, please type the number of the clone you want to install :"
    message_mauvais_nombre_clone="Warning : You did not enter a number to select a clone, click any key to exit the script"
    message_nom_clone="Clone name : "
    message_mauvais_nombre="Warning : You did not enter a number corresponding to a clone, click any key to exit the script"
    message_clone_non_present="Warning : This clone does not exist, click any key to exit the script"
    message_info_partition_avant="/!\ Warning : Do you want to partition the disk /dev/"
    message_info_partition_apres=", all data will be erased ? [Y/n]"
    message_partition_ko="Partitionning aborted !!!"
    CODE_OK_MINUSCULE="y"
    CODE_OK_MAJUSCULE="Y"

fi

echo ""
echo ${message_info_emmabuntus}
echo ${message_info_sources}
echo ""


# Identification de la clé USB et du disque dur
# Finding out the USB Key and the hard drive
if [ -z ${KEY_DRIVE} ] ; then

   echo -n ${message_identification_usb_ko}
   echo ""

   read read_no_correct_label_key

   exit 0

elif [ ${KEY_DRIVE} = /dev/sdb2 ] ; then

    HARD_DRIVE=sda

elif [ ${KEY_DRIVE} = /dev/sda2 ] ; then

    HARD_DRIVE=sdb

elif [ ${KEY_DRIVE} != "" ] ; then

   echo "${message_trouve_usb_avant} ${KEY_DRIVE}${message_trouve_usb_apres}"
   echo ${message_selection_usb}
   echo ""

   find_disk=$(sudo fdisk -l | grep 'Disk /dev/sd\|Disk /dev/hd' | cut -d : -f1 | cut -d " " -f2)
    i=1

    for disk_name in ${find_disk}
    do
        if [ "${disk_name}2" != ${KEY_DRIVE} ] ; then
            disk_model=$(sudo fdisk -l ${disk_name} | grep "Disk model" | cut -d : -f2)
            disk_size=$(sudo fdisk -l ${disk_name} | grep "Disk " | grep sector | cut -d : -f2 | cut -d B -f1)
            echo "${i} - ${disk_name} - model: ${disk_model} - size: ${disk_size}B"
            i=$(($i+1))
        fi

    done

    read read_disk_number

    # Test si c'est un nombre
    # Check if the entry is a number
    if echo ${read_disk_number} | grep -qE '^[0-9]+$'; then

        echo ""

    else

        echo -n ${message_mauvais_nombre_disque_dur}
        echo ""

        read read_no_correct_number

        exit 0
    fi

    i=1
    macth_number=0

    for disk_name in ${find_disk}
    do
        if [ "${disk_name}2" != ${KEY_DRIVE} ] ; then
            if [ ${read_disk_number} -eq $i ] ; then
                HARD_DRIVE=${disk_name}
                macth_number=1
            fi
            i=$(($i+1))
        fi
    done

    if [  ${macth_number} -eq 1 ] ; then

        HARD_DRIVE=$(echo ${HARD_DRIVE} | cut -d / -f3)

    else

        echo -n ${message_mauvais_selection_disque_dur}
        echo ""

        read read_no_correct_number

        exit 0

    fi

fi

echo "${message_usb_disque_dur_avant} ${KEY_DRIVE} ${message_usb_disque_dur_apres}${HARD_DRIVE}"
echo ""

if test -d /sys/firmware/efi/ ; then
    # Mode UEFI
    UEFI_ON=1
    echo "${message_recherche_clone_uefi} ${KEY_DRIVE} ..."
else
    echo "${message_recherche_clone_legacy} ${KEY_DRIVE} ..."
fi

echo ""


# Positionnement sur la clé USB au niveau de clones
# Go to clones top dir
cd /home/partimag


# Recherche des dossiers contenant des clones
# Looking for clone folders
if test -d /sys/firmware/efi/ ; then
    # Mode UEFI
    find_clone_directory=$(find . -type f -name ${SEARCH_FILE} | grep -i UEFI | cut  -d '/' -f2)
else
    find_clone_directory=$(find . -type f -name ${SEARCH_FILE} | grep -vi UEFI | cut  -d '/' -f2)
fi

nb_clone_directory=$(echo ${find_clone_directory} | wc -w)


if [ ${nb_clone_directory} -eq 0 ] ; then

    echo -n ${message_clone_abscent}
    echo ""

    read read_no_clone

    exit 0

elif [ ${nb_clone_directory} -eq 1 ] ; then

    echo -n "${message_clone_trouve} ${find_clone_directory}"
    echo ""

    NAME_CLONE=${find_clone_directory}

else

    echo ${message_plusieurs_clones}
    echo ""

    i=1

    for clone_name in ${find_clone_directory}
    do
        echo "${i} - ${clone_name}"
        i=$(($i+1))
    done

    read read_clone_number

    # echo "Clone number : ${read_clone_number}"


    # Test si c'est un nombre
    # Check if entry is a number
    if echo ${read_clone_number} | grep -qE '^[0-9]+$'; then

        echo ""

    else

        echo -n ${message_mauvais_nombre_clone}
        echo ""

        read read_no_correct_number

        exit 0
    fi

    i=1
    macth_number=0

    for clone_name in ${find_clone_directory}
    do
        if [ ${read_clone_number} -eq $i ] ; then
            NAME_CLONE=${clone_name}
            macth_number=1
        fi
        i=$(($i+1))
    done

    if [  ${macth_number} -eq 1 ] ; then

        echo "${message_nom_clone} ${NAME_CLONE}"
        echo ""

    else

        echo -n ${message_mauvais_nombre}
        echo ""

        read read_no_correct_number

        exit 0

    fi

fi


# Test si le répertoire du clone existe sinon fin du script
# Chek if clone directory exists, else end of script

if ! test -d ./${NAME_CLONE} ; then

    echo -n ${message_clone_non_present}
    echo ""

    read read_no_clone_directory

    exit 0

fi


# Partie active du script
# The active part of the script

 echo -n "${message_info_partition_avant}${HARD_DRIVE}${message_info_partition_apres}"

 read read_1

if [ "$read_1" = ${CODE_OK_MINUSCULE} ] || [ "$read_1" = ${CODE_OK_MAJUSCULE} ] ; then

     echo -n "${message_info_partition_avant}${HARD_DRIVE}${message_info_partition_apres}"

     read read_2

     if [ "$read_2" = ${CODE_OK_MINUSCULE} ] || [ "$read_2" =  ${CODE_OK_MAJUSCULE} ] ;  then

        /home/partimag/parted.sh ${HARD_DRIVE} ${UEFI_ON}

        sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -r -j2 -k -r -scr -p reboot restoredisk ${NAME_CLONE} ${HARD_DRIVE}

     else

        echo ${message_partition_ko}

     fi

else

     echo ${message_partition_ko}

fi


