#!/bin/sh

SCRIPT_KEY="9odsFla6knoaluupsusajshredEyatocvokikecunHethyHiyauc1DriDuheOrn0Ogx1twowOnsEjlyiag4OcUgZed"

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/games
TMP_DIR="/tmp/windows7-vm"
LOG_DIR="/var/log/ladn-fsi"
LOG_FILE="windows7-vm.log"
LOG_PATH="$LOG_DIR/$LOG_FILE"
SOURCES_LIST_DIR="/etc/apt/sources.list.d"
SOURCES_LIST_FILE="virtualbox.list"
BASE_URL="https://download.ladn.org/archives/linux/vm"
VM_FILE="windows7.tar.bz2"
VBOX_DIR="Windows 7"
VBOX_FILE="Windows 7.vbox"


SCRIPT_VERSION="1.0 beta"
PACKAGE_NAME="Machine virtuelle Windows 7"
DEVELOPER="James Niogret"
ORGANIZATION="L'Atelier du Nuémrique"
CONTACT="contact@ladn.org"
WEBSITE="www.ladn.org"
MSG_WELCOME="
------------------------------
Script d'installation $PACKAGE_NAME

Version : $SCRIPT_VERSION
Developpeur : $DEVELOPER
Organisation : $ORGANIZATION
Contact : $CONTACT
Site Web : $WEBSITE
------------------------------
"
MSG_ARCH="
Êtes-vous sûr de disposer d'une architecture amd64 ? (tapez oui ou non) ---> "
MSG_SELECT_DISTRIB="
Sélectionnez votre distribution :

 1 - Ubuntu
 2 - Debian

Saisissez le numéro de votre choix et appuyez sur Entrée ---> "
MSG_SELECT_UBUNTU="
Sélectionner votre version d'Ubuntu :

 1 - eoan
 2 - bionic
 3 - xenial
 
Saisissez le numéro de votre choix et appuyez sur Entrée ---> "
MSG_SELECT_DEBIAN="
Sélectionnez votre version de Debian :

 1 - buster
 2 - stretch
 3 - jessie
 
Saisissez le numéro de votre choix et appuyez sur Entrée ---> "
MSG_INST="Voulez-vous installez $PACKAGE_NAME ? (tapez oui ou non) ---> "
MSG_INST_DEP="Installation des dépendances..."
MSG_INST_DEP2="Installation de VirtualBox en cours...
Ceci peut prendre beaucoup de temps, soyez patient !"
MSG_INST_PRE="Préparation"
MSG_INST_DL="Téléchargement..."
MSG_INST_UNCOMP="Décompression..."
MSG_INST_INST="Installation..."
MSG_INST_CLEAN="Nettoyage..."
MSG_INST_OK="Installation terminée (avec succès) !"
MSG_USER_ID="
L'installation de la machine virtuelle va se faire pour 
un utilisateur de ce système.

Merci d'indiquez l'identifiant de cette utilisateur --- > "
MSG_ERR="Erreur lors de l'exécution d'une commande.
Consultez le log dans $LOG_PATH
Abandon."
MSG_ERR2="
apt-get update : la commande retourne des erreurs suite à
l'installation du dépôt VirtualBox. Restauration de la configuration précédente."
MSG_ERR3="
La restauration de la configuration précédente n'a pas résolu le problème,
corrigez le problème manuellement.
Abandon."
MSG_ERR4="
Échec de l'installation de VirtualBox, vérifiez les logs :
$LOG_PATH"
MSG_REFUSED="Abandon."
MSG_UNKNOW="Sélection non reconnue... Abandon."
MSG_EMPTY="Sélection vide... Abandon."
MSG_NOROOT="Vous n'êtes pas root ! Exécutez ce script en tant que root. Abandon."
MSG_UNSUPOORTED="Seule l'architecture amd64 est supportée pour l'installation de VirtualBox.
Abandon."
MSG_FSI_INST="Installez d'abord ladn-fsi !
Tapez la commande : wget -qO- dl1.ladn.org | sh -"
SLEEP_S=".5"
SLEEP_M="1"
SLEEP_L="2"
EXIT_OK="0"
EXIT_USR="0"
EXIT_NOROOT="2"
EXIT_CMD="3"
EXIT_UNK="0"
EXIT_EMPTY="0"
EXIT_UNSUP="0"
EXIT_NOFSI="127"

EXEC_NOFSI() { sleep "$SLEEP_S" && echo "$MSG_FSI_INSTALL" && sleep "$SLEEP_M" && exit "$EXIT_NOFSI"; }
EXEC_NOROOT() { sleep "$SLEEP_S" && echo "$MSG_NOROOT" && sleep "$SLEEP_M" && exit "$EXIT_NOROOT"; }
EXEC_WELCOME() { sleep "$SLEEP_S" && echo "$MSG_WELCOME"; }
EXEC_PROMPT() { sleep "$SLEEP_S" && read -rp "$MSG_INST" INSTALL && sleep "$SLEEP_M"; }
EXEC_PROMPT2() { sleep "$SLEEP_S" && read -rp "$MSG_USER_ID" USER_ID && sleep "$SLEEP_M"; }
EXEC_EMPTY() { sleep "$SLEEP_S" && echo "$MSG_EMPTY" && sleep "$SLEEP_M" && exit "$EXIT_EMPTY"; }
EXEC_REFUSED() { sleep "$SLEEP_S" && echo "$MSG_REFUSED" && sleep "$SLEEP_M" && exit "$EXIT_USR"; }
EXEC_UNKNOW() { sleep "$SLEEP_S" && echo "$MSG_UNKNOW" && sleep "$SLEEP_M" && exit "$EXIT_UNK"; }
EXEC_UNSUPPORTED() { sleep "$SLEEP_S" && echo "$MSG_UNSUPOORTED" && sleep "$SLEEP_M" && "$EXIT_UNSUP"; }
CMD_CHK() { if [ "$?" != "0" ]; then echo "$MSG_ERR" && sleep "$SLEEP_L" && exit "$EXIT_CMD"; fi; }
MK_LOG() { mkdir -p "$LOG_DIR" && touch "$LOG_PATH"; }

EXEC_INST_DEP() {

sleep "$SLEEP_S"
echo "$MSG_INST_DEP"
mkdir -pv "$TMP_DIR" >> "$LOG_PATH" 2>&1
apt-get update >> "$LOG_PATH" 2>&1
apt-get install apt-transport-https >> "$LOG_PATH" 2>&1

	if [ "$?" = "0" ]; then
	
	read -rp "$MSG_ARCH" ARCH

		if [ -n "$ARCH" ]; then
		
			if [ "$ARCH" = "oui" ] || [ "$ARCH" = "OUI" ] || [ "$ARCH" = "o" ] || [ "$ARCH" = "O" ]; then

			read -rp "$MSG_SELECT_DISTRIB" DISTRIB

				if [ -n "$DISTRIB" ]; then
					
					if [ "$DISTRIB" = "1" ]; then
					
					read -rp "$MSG_SELECT_UBUNTU" VERSION
					
						if [ -n "$VERSION" ]; then
						
							if [ "$VERSION" = "1" ]; then VERSION="eoan"
							
							elif [ "$VERSION" = "2" ]; then VERSION="bionic"
							
							elif [ "$VERSION" = "3" ]; then VERSION="xenial"
							
							else EXEC_UNKNOW
							
							fi
						
						else EXEC_EMPTY
						
						fi
						
					elif [ "$DISTRIB" = "2" ]; then

					read -rp "$MSG_SELECT_DEBIAN" VERSION
					
						if [ -n "$VERSION" ]; then
						
							if [ "$VERSION" = "1" ]; then VERSION="buster"
							
							elif [ "$VERSION" = "2" ]; then VERSION="stretch"
							
							elif [ "$VERSION" = "3" ]; then VERSION="jessie"
							
							else EXEC_UNKNOW
							
							fi
						
						else EXEC_EMPTY
						
						fi
						
					else EXEC_UNKNOW
					
					fi
					
				else EXEC_UNKNOW
				
				fi
				
			elif [ "$ARCH" = "non" ] || [ "$ARCH" = "NON" ] || [ "$ARCH" = "n" ] || [ "$ARCH" = "N" ]; then EXEC_UNSUPPORTED
			
			else EXEC_UNKNOW
			
			fi
		
		else EXEC_EMPTY
	
		fi
		
	else echo "apt-get update : la commande à retourné un code d'erreur. Abandon."
	
	fi

wget -qO- https://www.virtualbox.org/download/oracle_vbox_2016.asc | apt-key add -
CMD_CHK
wget -qO- https://www.virtualbox.org/download/oracle_vbox.asc | apt-key add -
CMD_CHK
touch "$SOURCES_LIST_DIR/$SOURCES_LIST_FILE"
echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian $VERSION contrib" > "$SOURCES_LIST_DIR/$SOURCES_LIST_FILE"
apt-get update >> "$LOG_PATH" 2>&1

	if [ "$?" != "0" ]; then
	
		echo "$MSG_ERR2"
		rm "$SOURCES_LIST"
		apt-get update >> "$LOG_PATH" 2>&1
		
			if [ "$?" != "0" ]; then
			
			echo "$MSG_ERR3"
			sleep "$SLEEP_L"
			exit "$EXIT_CMD"
			
			fi
			
	fi
	
echo "$MSG_INST_DEP2"
apt-get -y install virtualbox-6.1 lbzip2 >> "$LOG_PATH" 2>&1
CMD_CHK

}

EXEC_INST_PRE() { 

sleep "$SLEEP_S"
echo "$MSG_INST_PRE"
VM_DEST="/home/$USER_ID/VirtualBox VMs"
mkdir -pv "$VM_DEST" >> "$LOG_PATH" 2>&1
CMD_CHK
chown -Rv "$USER_ID": "$VM_DEST" >> "$LOG_PATH" 2>&1
chmod -Rv 0770 "$VM_DEST" >> "$LOG_PATH" 2>&1
cd "$VM_DEST"

}

EXEC_INST_DL() {

sleep "$SLEEP_S"
echo "$MSG_INST_DL"
wget -qO- "$BASE_URL/$VM_FILE" | pv -s 6G | tar -I lbzip2 -xf -
CMD_CHK

}

EXEC_INST_INST() {

sleep "$SLEEP_S"
echo "$MSG_INST_INST"
chown -R "$USER_ID": "$VBOX_DIR"
chmod -R 0770 "$VBOX_DIR"
vboxmanage createvm --register --name "Windows 7" --basefolder "$VBOX_DIR" --ostype "Windows7_64"

}

EXEC_INST_CLEAN() { sleep "$SLEEP_S" && echo "$MSG_INST_CLEAN" && rm -rf "$TMP_DIR"; }
EXEC_INST_OK() { sleep "$SLEEP_S" && echo "$MSG_INST_OK" && exit "$EXIT_OK"; }
EXEC_INST() { MK_LOG && EXEC_INST_DEP && EXEC_INST_PRE && EXEC_INST_DL && EXEC_INST_INST && EXEC_INST_CLEAN && EXEC_INST_OK; }

	if [ -n "$1" ]; then
		if [ "$1" = "$SCRIPT_KEY" ]; then EXEC_WELCOME
			if [ "$USER" = "root" ] || [ "$HOME" = "/root" ]; then EXEC_PROMPT
				if [ -n "$INSTALL" ]; then
					if [ "$INSTALL" = "oui" ] || [ "$INSTALL" = "OUI" ] || [ "$INSTALL" = "o" ] || [ "$INSTALL" = "O" ]; then EXEC_PROMPT2
						if [ -n "$USER_ID" ]; then EXEC_INST
						else EXEC_EMPTY
						fi
					elif [ "$INSTALL" = "non" ] || [ "$INSTALL" = "NON" ] || [ "$INSTALL" = "n" ] || [ "$INSTALL" = "N" ]; then EXEC_REFUSED
					else EXEC_UNKNOW
					fi
				else EXEC_EMPTY
				fi
			else EXEC_NOROOT
			fi
		else EXEC_NOFSI
		fi
	else EXEC_NOFSI
	fi
