Skip to content

VM con win seven sotto debian

Nota: questa configurazione è fatta per i labdid per far funzionare vecchi apparati che non è possibile far funzionare con winzows 10.

Alcune configurazioni sono specifiche per le mie macchine e su quelle di altri non funziano

In sostanza sono appunti fatti per me che sono uno smemorato

 

Preparazione della macchina linux

Installazione del software

Probabilmente per quello che mi serve basta installare qemu e poco altro ma installo virt-manager per semplificare la manutenzione della macchina virtuale.

# apt install virt-manager

# apt install spice-vdagent xserver-xorg-video-qxl spice-client-gtk

Spazio disco per la VM

Utilizzo lo spazio che normalmente è destinato a windows come partizione dove mettere il file che costituisce il disco della VM.

Tramite gparted formatto la partizione sda1 in ext4 e la monto in /var/lib/libvirt/images/

Sistemo grub perché ora non c’è più winzoz con il comando

# update-grub

Se serve ricodati anche del FUFI

Monto la partizione aggiungendo in fstab:

# VM partition disk

/dev/sda1 /var/lib/libvirt/images/ ext4 defaults 0 2

Riformatta anche la partizione /dev/sda5 portandola da NFS a Ext4 e montala

Sistemazione utenti

Per far funzionare la macchina virtuale da utente di dominio devo creare un utente locale (LDSSService) per lanciare la VM che sia parte del gruppo libvirt, che non abbia home, che non possa fare il login e che come password abbia “Fisica”.

# useradd LDSSService

# usermod -G libvirt LDSSService

# passwd -d LDSSService 

# passwd -l LDSSService

# passwd LDSSService

 

Preparazione della Rete VM

Non voglio che la macchina virtuale vada in rete quindi preparo una rete Isolata.

Apro virt-manager (anche da terminale), vado in Edit -> Connection Details e aggiungo una nuova rete pigiando il + e gli do un nome (Isolata).

Do dei valori consoni alla sottorete tra guest e host (tipo 10.0.0.0/24); salto la configurazione di IPv6 e mantengo l’opzione Isolated virtual network nello step 4

Lascio la rete di default ma la spengo (Non si sa mai)

Creazione Macchina Virtuale

Copia in /var/lib/libvirt/images/ il disco contenete Winzoz Seven ossia il file VirWin7.qcow2

Crea una Nuova macchina e scegli “Import existing disk Image”; seleziona il disco precedentemente copiato e imposta le altre info in modo consistente

Chiama la macchina win7 ( altrimenti gli script non funzionano) e fai subito la castomizzazione:

  1. Sistema il disco come VirtIO con cache mode writeback
  2. Sistema la rete utilizzando quella “Isolata”creata prima
  3. Rimuovi eventuale Hardware inutile (tipo la scheda audio)
  4. Avvia l’installazione della macchina

Affinchè spice funzioni modifica nel file /etc/libvirt/qemu/win7.xlm le righe da:

<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>

o qualcosa di simile… a:

<graphics type='spice' port='5900' autoport='no' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>

Usa lo script startVM.sh per operare con la VM

Condivisione dati tra guest e host

La condivisione dati avviene il disco Scratch tramite samba:

Prensi l’utente LDSSService a dagli una password per samba

# smbpasswd -a LDSSService

la password è quella storica dei labdid

restarta samba  service smbd restart

In windows crea lo script NetUse.bat mettilo negli script di login dell’utonto tramite policy e infilaci:

net use S: \\10.0.0.1\Scratch /user:LDSSService [la pw di prima!!!]

Aggiunta scheda PCI (Fonte)

Abilita il supporto  VT-d  nel bios. Quindi:

#nano /etc/default/grub

change

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

to

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

then

# update-grub

Required modules

add to /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

run the following script to determine if your system has interrupt remapping support:

#!/bin/sh
if [ $(dmesg | grep ecap | wc -l) -eq 0 ]; then
  echo "No interrupt remapping support found"
  exit 1
fi

for i in $(dmesg | grep ecap | awk '{print $NF}'); do
  if [ $(( (0x$i & 0xf) >> 3 )) -ne 1 ]; then
    echo "Interrupt remapping not supported"
    exit 1
  fi
done

If your system doesn’t support interrupt remapping,

you can allow unsafe interrupts with:

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

Create a file like /etc/modprobe.d/vfio.conf setting the allow_unsafe_interrupts option for the vfio module.

Scrip per utilizzo utente

Quasti scrip sono già caricati nel bin dello share dei labdidi ma tanto per tenerne traccia:

# startVM.sh

ciclo=0
Script=/usr/LDSS/bin/manageVM.sh
User="LDSSService"
Pass="Fisica"
while [ $ciclo -eq 0 ] ; do

clear
echo "###########################################"
echo -e " Main Menu: Cosa Vuoi Fare? "
echo "###########################################"

echo -e "[1] Start VM \t [2] View VM \t [3] Stop VM \r"
echo -e "[q] quit \n"
read -p "" MOD

case "$MOD" in
"q" )
ciclo=1
;;
"1" )
echo $Pass | su - -c "$Script start win7" $User
. $Script view
;;
"2" )
. $Script view
;;
"3" )
echo $Pass | su - -c "$Script stop win7" $User
;;
* )
echo "/r #### Pirla lezi ben /r"
;;
esac
done

#manageVM.sh




#!/usr/bin/env bash
#
# Script to launch/manage the COE VM using libvirt
#
# 2013, 2014 Pietro Pizzo
######################################################################

typeset -l r

# Domain to manage
#DOMAIN=win7
DOMAIN=$2

# Connection to use
CONN=qemu:///system

case "$1" in

"start")
# Make sure the domain is running
if virsh -c $CONN domstate $DOMAIN | grep -qi off; then
echo "$DOMAIN off: starting"
virsh -c $CONN start $DOMAIN || exit 1
elif ! virsh -c $CONN domstate $DOMAIN | grep -qi running; then
echo "$DOMAIN not running: resuming"
virsh -c $CONN resume $DOMAIN || exit 1
fi
;;

"stop")
# Ask to suspend the domain if it is still running
if virsh -c $CONN domstate $DOMAIN |grep -qi running; then
read -p "Do you wish to shutdown ${DOMAIN}? [Y/n] " r
if [[ "$r" == "" || "$r" == "y" || "$r" == "yes" ]]; then
virsh -c $CONN shutdown $DOMAIN || exit 1
fi
fi
;;

"view")

# Fire up spice client (if not running)
if ! ps aux |grep spicy |grep -qv grep; then
spicy -h localhost -p 5900 >/dev/null 2>&1 </dev/null &
fi
;;
* )
# echo "/r #### Pirla lezi ben /r"
echo "Usage: manageVM.sh [start,stop,view] [Machine Name]"
;;
esac

Last updated: 23 Gennaio 2020 by Pierluigi Minati