diff --git a/conf/includes/legos_vm_win7.conf.sh b/conf/includes/legos_vm_win7.conf.sh new file mode 100644 index 0000000..5d5c62b --- /dev/null +++ b/conf/includes/legos_vm_win7.conf.sh @@ -0,0 +1,19 @@ +# legos_vm_win7.conf.sh: Configuration d'une VM standard Windows 7 + +# Chemin racine de vbox +export VM_ROOT=/local/vmguests + +# Nombre de vCPU +export VM_CPU=2 + +# Taille de la RAM en Mo +export VM_MEM=4096 + +# Taille di disque en Go +export VM_DISK_SIZE=42 + +# Nom de l'interface de l'hôte à bridger +export VM_IF_BRIDGE=eth1 + +# Liste des répertoire de l'hote à partager avec la VM (séparé par des virgules) +export VM_SHARES="/home,/media,/calcul/$HOSTNAME" diff --git a/conf/init.conf.sh b/conf/init.conf.sh index efe4b72..d04240a 100644 --- a/conf/init.conf.sh +++ b/conf/init.conf.sh @@ -25,9 +25,6 @@ export MAINUSER="levasseur" # Interface réseau principale export MAINIF="eth0" -# Booléen indiquant une ou plusieurs futures VM -export WITH_VM="true" - # Pilotes X11 non libre à installer ? export X11_DRV="nvidia-drivers" @@ -39,6 +36,19 @@ export X11_DRV="nvidia-drivers" # * lubuntu : bureau LXQT très léger export UBUNTU_FLAVOR=xubuntu +# Booléen indiquant une ou plusieurs futures VM +# Les lignes suivantes devraient être commentés si à false +export WITH_VM="true" +. $MYPATH/conf/includes/legos_vm_win7.conf.sh + +# Nom de la VM +VM_NAME=vm-levasseur + +# Logiciels optionnels non packagé Debian +# export WITH_MATLAB="true" +# export WITH_IDL="true" +# export WITH_="true" + # Mode d'installation : # * dev : installe les paquets un par un avec apt (lent) # * full : envoie d'un seul coup la liste de tous les paquets à apt (rapide) @@ -65,4 +75,5 @@ export FORCEBLANK=false # Liste des modules à executer (surchargeable en ligne de commande) export MODULE_LIST="upgrade_dist conf_disks conf_locale conf_ntp conf_ssh \ - conf_mail install_desktop install_pkg install_chromium" + conf_mail install_desktop install_pkg install_chromium \ + install_profile" diff --git a/init.sh b/init.sh index c7edc05..863c53c 100755 --- a/init.sh +++ b/init.sh @@ -59,66 +59,13 @@ export KEEPGOING=false export RESUME=false export STAGE_FILE="$MYPATH/stage" -# Processing command line options -want_module=false -for opt in $@; do - if [[ $want_module == false ]]; then - case $opt in - "-h"|"--help") - disp_help - exit 0 - ;; - "-v"|"--version") - show_version - exit 0 - ;; - "-m"|"--module") - want_module=true - ;; - "-c"|"--check-only") - export CHECK_ONLY=true - ;; - "-j"|"--jump") - export JUMP=true - ;; - "-k"|"--keep-going") - export KEEPGOING=true - ;; - "-r"|"--resume") - if [[ -s $STAGE_FILE ]]; then - export RESUME=true - else - prnt E "Le fichier d'état n'existe pas ou est vide !" - prnt E "Sans ce fichier, la reprise n'est pas possible." - die 1 --force - fi - ;; - *) - prnt E "Paramètre \'$opt\' non géré." - disp_help - exit 1 - ;; - esac - else - if [[ ! $MANUAL_MODULE_LIST ]]; then - MANUAL_MODULE_LIST=$opt - want_module=false - else - prnt E "Une liste de module à déjà été fournie !" - prnt E "La ligne de commande ne tolère qu'un paramètre --module." - die 1 --force - fi - fi -done +read_commandline # After this we need to be root # (--help and --version are allowed as unprivileged user) -if [[ $EUID -ne 0 ]]; then - prnt E "Ce script doit être démarré en tant que root. Arrêt." - die 4 --force -fi +check_root -# Logfile variable treatment +# Logfile variable treatment -- cannot be a function export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"} prnt I "Création du répertoire d'accueil du fichier log..." @@ -131,64 +78,11 @@ exec > >(tee -a $LOGFILE) exec 2> >(tee -a $LOGFILE >&2) prnt I "Démarrage d'init version $VERSION." -# Load configuration -prnt I "Chargement de la configuration..." -if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then - prnt I "Une configuration spécifique sera utilisé." - . $MYPATH/conf/$HOSTNAME.conf -else - if [[ -e $MYPATH/conf/init.conf.sh ]]; then - prnt I "Une configuration générique sera utilisé." - . $MYPATH/conf/init.conf.sh - else - prnt E "Aucune configuration trouvée, impossible de continuer." - die 2 --force - fi -fi +# -- Cannot be a function ends here -if [[ $want_module == true ]]; then - prnt E "La liste des modules à exécuter est manquante !" - die 1 --force -fi +load_configuration -# Check unconsistant parameters -if [[ $CHECK_ONLY == true ]]; then - [[ $JUMP == true ]] && ( - prnt E "Les options --check-only et --jump s'excluent mutuellement !" - die 1 --force - ) - [[ $KEEPGOING == true ]] && ( - prnt E "Les options --keep-going et --check-only sont incompatible !" - die 1 --force - ) -fi -if [[ $RESUME == true ]]; then - [[ $CHECK_ONLY == true ]] && ( - prnt E "La reprise n'a pas de sens avec --check-only." - die 1 --force - ) - [[ $MANUAL_MODULE_LIST ]] && ( - prnt E "Le mode reprise ne fonctionne pas avec une liste de modules passé manuellement." - die 1 --force - ) -fi - -# Configure module list -if [[ $MANUAL_MODULE_LIST ]]; then - prnt W "Une liste de modules manuelle sera utilisé." - export MODULE_LIST=$(echo $MANUAL_MODULE_LIST | sed "s/,/ /g") -fi - -# Check for module list existance en basic syntax -if [[ -n $MODULE_LIST ]]; then - if [[ $(echo $MODULE_LIST | grep '-') ]]; then - prnt E "Le tiret est interdit dans les noms de module." - die 5 - fi -else - prnt E "Aucun module à exécuter !" - die 5 -fi +process_commandline_and_vars # Run prechecks [[ JUMP != true ]] && for mod in $MODULE_LIST; do diff --git a/lib/aaa_errors.sh b/lib/aaa_errors.sh index 59aabb3..995d2df 100644 --- a/lib/aaa_errors.sh +++ b/lib/aaa_errors.sh @@ -80,3 +80,11 @@ function backtrace (( i=i++ )) done } + +check_root() +{ + if [[ $EUID -ne 0 ]]; then + prnt E "Ce script doit être démarré en tant que root. Arrêt." + die 4 --force + fi +} diff --git a/lib/zzz_main_fct.sh b/lib/zzz_main_fct.sh new file mode 100644 index 0000000..36074e2 --- /dev/null +++ b/lib/zzz_main_fct.sh @@ -0,0 +1,119 @@ + +read_commandline() +{ + # Processing command line options + want_module=false + for opt in $@; do + if [[ $want_module == false ]]; then + case $opt in + "-h"|"--help") + disp_help + exit 0 + ;; + "-v"|"--version") + show_version + exit 0 + ;; + "-m"|"--module") + want_module=true + ;; + "-c"|"--check-only") + export CHECK_ONLY=true + ;; + "-j"|"--jump") + export JUMP=true + ;; + "-k"|"--keep-going") + export KEEPGOING=true + ;; + "-r"|"--resume") + if [[ -s $STAGE_FILE ]]; then + export RESUME=true + else + prnt E "Le fichier d'état n'existe pas ou est vide !" + prnt E "Sans ce fichier, la reprise n'est pas possible." + die 1 --force + fi + ;; + *) + prnt E "Paramètre \'$opt\' non géré." + disp_help + exit 1 + ;; + esac + else + if [[ ! $MANUAL_MODULE_LIST ]]; then + MANUAL_MODULE_LIST=$opt + want_module=false + else + prnt E "Une liste de module à déjà été fournie !" + prnt E "La ligne de commande ne tolère qu'un paramètre --module." + die 1 --force + fi + fi + done +} + +load_configuration() +{ + prnt I "Chargement de la configuration..." + if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then + prnt I "Une configuration spécifique sera utilisé." + . $MYPATH/conf/$HOSTNAME.conf + else + if [[ -e $MYPATH/conf/init.conf.sh ]]; then + prnt I "Une configuration générique sera utilisé." + . $MYPATH/conf/init.conf.sh + else + prnt E "Aucune configuration trouvée, impossible de continuer." + die 2 --force + fi + fi +} + +process_commandline_and_vars() +{ + if [[ $want_module == true ]]; then + prnt E "La liste des modules à exécuter est manquante !" + die 1 --force + fi + + # Check unconsistant parameters + if [[ $CHECK_ONLY == true ]]; then + [[ $JUMP == true ]] && ( + prnt E "Les options --check-only et --jump s'excluent mutuellement !" + die 1 --force + ) + [[ $KEEPGOING == true ]] && ( + prnt E "Les options --keep-going et --check-only sont incompatible !" + die 1 --force + ) + fi + if [[ $RESUME == true ]]; then + [[ $CHECK_ONLY == true ]] && ( + prnt E "La reprise n'a pas de sens avec --check-only." + die 1 --force + ) + [[ $MANUAL_MODULE_LIST ]] && ( + prnt E "Le mode reprise ne fonctionne pas avec une liste de modules passé manuellement." + die 1 --force + ) + fi + + # Configure module list + if [[ $MANUAL_MODULE_LIST ]]; then + prnt W "Une liste de modules manuelle sera utilisé." + export MODULE_LIST=$(echo $MANUAL_MODULE_LIST | sed "s/,/ /g") + fi + + # Check for module list existance en basic syntax + if [[ -n $MODULE_LIST ]]; then + if [[ $(echo $MODULE_LIST | grep '-') ]]; then + prnt E "Le tiret est interdit dans les noms de module." + die 5 + fi + else + prnt E "Aucun module à exécuter !" + die 5 + fi +} diff --git a/modules/create_vm.sh b/modules/create_vm.sh new file mode 100644 index 0000000..d3fba83 --- /dev/null +++ b/modules/create_vm.sh @@ -0,0 +1,31 @@ +# ------------------------------------------------------------------------------ +# create vm module +# ------------------------------------------------------------------------------ +# Variable: +# To be defined +# ------------------------------------------------------------------------------ + +export VER_create_vm="0.0.1" + +create_vm() +{ + if [[ WITH_VM != "yes" ]]; then + prnt I "Cette machine n'est pas configurée pour la virtualisation, rien à faire." + return 0 + fi + + pkginst virtualbox + # to be continued +} + +precheck_create_vm() +{ + if [[ $WITH_VM == "true" ]]; then + : #todo + else + prnt I "Aucune machine virtuelle à installer." + fi +} + +export -f create_vm +export -f precheck_create_vm