diff --git a/conf/includes/legos_vm_win7.conf.sh b/conf/includes/legos_vm_win7.conf.sh index 5d5c62b..2b54ab9 100644 --- a/conf/includes/legos_vm_win7.conf.sh +++ b/conf/includes/legos_vm_win7.conf.sh @@ -9,11 +9,23 @@ export VM_CPU=2 # Taille de la RAM en Mo export VM_MEM=4096 +# Taille de la mémoire vidéo en Mo +export VM_VID_MEM=128 + # Taille di disque en Go export VM_DISK_SIZE=42 -# Nom de l'interface de l'hôte à bridger -export VM_IF_BRIDGE=eth1 +# Périférique de démarrage (3 maximum), none si aucun +export VM_BOOT1=disk +export VM_BOOT2=none +export VM_BOOT3=none -# Liste des répertoire de l'hote à partager avec la VM (séparé par des virgules) -export VM_SHARES="/home,/media,/calcul/$HOSTNAME" +# Nom de l'interface de l'hôte à bridger +export VM_IF_BRIDGE=¨eth0 + +# OS cible de la future VM ("vboxmanage list ostypes" pour la liste) +export VM_OS=Windows10_64 + +# Liste des répertoire de l'hote à partager avec la VM (séparé par des espaces) +export VM_SHARES_NAME="home media calcul" +export VM_SHARES_PATH="/home /media /calcul/$HOSTNAME" diff --git a/conf/init.conf.sh b/conf/init.conf.sh index d1da515..8627516 100644 --- a/conf/init.conf.sh +++ b/conf/init.conf.sh @@ -40,14 +40,6 @@ LOCAL_USERS="$MAINUSER" # * lubuntu : bureau LXQT très léger UBUNTU_FLAVOR=xubuntu -# Booléen indiquant une ou plusieurs futures VM -# Les lignes suivantes devraient être commentés si à false -#WITH_VM=yes -#. $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" @@ -73,6 +65,18 @@ CALCLEVEL="" # Doit on forcer l'effacement du disque ? FORCEBLANK=false +# ------------------------------------------------------------------------------ +# ------------------------- Section machine virtuelle -------------------------- +# ------------------------------------------------------------------------------ + +# Booléen indiquant une ou plusieurs futures VM +# Les lignes suivantes devraient être commentés si à false +WITH_VM=yes +. $MYPATH/conf/includes/legos_vm_win7.conf.sh + +# Nom de la VM +VM_NAME=vm-levasseur + # ------------------------------------------------------------------------------ # -------------------------- Section modules d'init ---------------------------- # ------------------------------------------------------------------------------ diff --git a/modules/create_vm.sh b/modules/create_vm.sh index 2627291..2780c0c 100644 --- a/modules/create_vm.sh +++ b/modules/create_vm.sh @@ -16,19 +16,110 @@ export DEP_create_vm="upgrade_dist install_pkg" create_vm() { - if [[ WITH_VM != "yes" ]]; then + 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 + + # Create welcoming dirs + mkdir -pv $VM_ROOT/{.config/VirtualBox,vms/$VM_NAME} + + # Create symbolic links (because of rights only main user can start it) + ln -sv $VM_ROOT/.config/VirtualBox /root/.config/VirtualBox + ln -sv $VM_ROOT/.config/VirtualBox /home/$MAINUSER/.config/VirtualBox + + local accel_2d=off + case $VM_OS in + Windows*) + accel_2d=on + ;; + esac + + # Create emty VM + local targetdir=$VM_ROOT/vms/$VM_NAME + vboxmanage createvm --ostype $VM_OS --basefolder $targetdir \ + --name $VM_NAME --register + + # Give main caracteristics + vboxmanage modifyvm $VM_NAME \ + --cpus $VM_CPU --memory $VM_MEM --vram $VM_VID_MEM \ + --boot1 $VM_BOOT1 --VM_BOOT2 $VM_BOOT2 --boot3 $VM_BOOT3 \ + --nic1 bridged --bridgeadapter1 $VM_IF_BRIDGE \ + --accelerate2dvideo $accel_2d \ + --clipboard bidirectional --draganddrop disabled + + # Add a SATA controler + vboxmanage storagectl $VM_NAME \ + --name sata0 --add sata --controller IntelAHCI --bootable on \ + --hostiocache on --portcount 6 + + # Create a virtual HDD + vboxmanage createmedium \ + --size $VM_DISK_SIZE --variant Fixed --filename $targetdir/$VM_NAME.vdi + + # Connect the created HDD to the VM + vboxmanage storageattach $VM_NAME \ + --storagectl sata0 --port 1 --device 0 --type hdd \ + --medium $targetdir/$VM_NAME.vdi + + unset targetdir accel_2d + + # Add empty DVD + vboxmanage storageattach $VM_NAME --storagectl sata0 --port 2 --device 0 \ + --medium emptydrive + + # Add shares + local share= i=0 + for share in $VM_SHARES_NAME; do + (( i+=1 )) + + local j=0 hostpath="" + for path in $VM_SHARES_PATH; do + (( j+=1 )) + if [[ $i -eq $j ]]; then + hostpath=$path + fi + done + unset j + + vboxmanage sharedfolder add $VM_NAME \ + --name ${VM_SHARES_NAME,,} --hostpath $hostpath + done + unset share i } precheck_create_vm() { - if [[ $WITH_VM == "true" ]]; then - : #todo + if [[ $WITH_VM == "yes" ]]; then + if [[ -z $VM_NAME ]]; then + prnt E "La machine virtuelle à créer doit avoir un nom." + die 181 + fi + if [[ -z VM_CPU || -z VM_MEM || -z VM_OS || -z VM_ROOT || \ + -z VM_BOOT1 || -z VM_BOOT2 || -z VM_BOOT3 || -z VM_VID_MEM || + -z VM_IF_BRIDGE || -z VM_DISK_SIZE ]]; then + prnt E "Une variable de description de la machine virtuelle n'est pas déclarée !" + die 181 + else + prnt I "La machine virtuelle \"$VM_NAME\" sera crée dans $VM_ROOT..." + fi + + local share= i=0 j=0 + for share in $VM_SHARES_NAME; do + (( i+=1 )) + done + for share in $VM_SHARES_PATH; do + (( j+=1 )) + done + unset share + if [[ $i -eq $j ]]; then + prnt I "La machine virtuelle aura accès à $i répertoires de l'hôte." + else + prnt E "Le nombre de partage et de chemin à partager diffère !" + die 182 + fi else prnt I "Aucune machine virtuelle à installer." fi