Estou fazendo um descartável (use para uma tarefa / site, em seguida, excluir) Máquina Virtual (VM) é um processo lento para fazê-lo na estação de trabalho VMware. Eu quero automatizá-lo assim é como o rápido ~ 5 segundo DispVM (Disposable VM = DispVM) recurso no Secure OS Qubes. Introdução ao Qubes
É apenas para um caso de uso, uma VM de navegador de site descartável quando você precisa visitar sites da Web com Java frequentemente comprometido, flash de adobe e muito mais. Portanto, se o Adobe Flash tiver outro problema de segurança, não importa, já que a VM desapareceu.
Esboço de idéia
- Verifique se a VM principal mudou desde o último instantâneo
- ... se o instantâneo estiver inalterado, use o instantâneo existente, caso contrário, faça um novo instantâneo
- faça um clone ligado (usa o disco + delta do vm master, por isso não precisamos copiar todo o master vm)
- Nomeie o clone ligado Disp # (número seqüencial gerado automaticamente)
- quando a vm é desligada, em seguida, exclua o vm
Preciso de ajuda para completar toda a solução desejada.
Como faço para verificar se a VM mudou desde o último instantâneo? Os instantâneos da lista de VMs fornecem apenas os nomes que não são carimbos de data / hora.
Variáveis ambientais de bash são limpas quando o script termina / terminal é fechado, então como eu armazeno ou detecto quantos DispVMs estão rodando então eu sei o que nomear o próximo DispVM criado? Eu vi essas variáveis de loja em uma abordagem de arquivo , mas esperando por uma opção melhor:
Como isso pode ser generalizado para trabalhar para múltiplos protocolos de execução e nomear-se exclusivamente ao mesmo tempo?
script bash:
# assume snapshot current, | tail -1 (gives last snapshot name)
$strCurrentSnapshotName = vmrun -T ws listShapshots VMs/Master-Fedora-DVM.vmx | tail -1
# make linked clone
vmrun -T ws clone VMs/Master-Fedora/Master-Fedora-DVM.vmx VMs/DVM1/DVM1.vmx linked strCurrentSnapshotName
vmrun start VMs/DVM1/DVM1.vmx
vmrun -gu <user> -gp <pass> runProgramInGuest VMs/DVM1/DVM1.vmx /usr/bin/firefox --display=:0
# How to check if VM is powered off
# when list of running VMs does not contain DVM then we are ok to break and delete
while [ !(vmrun -T ws list | grep DVM) ]
do
sleep 5
done
# now dispose of and delete vm
vmrun -T ws unregister VMs/DVM1.vmx
# shred directory and delete
find VMs/DVM1/ -type f -exec shred {} \;
vmrun -T ws deleteVM VMs/DVM1/DVM1.vmx
vmrun
e assim por diante. Você só precisa torná-lo um pouco mais robusto. Sua única pergunta que eu poderia inferir seria: "Estou no caminho certo?" ao qual eu responderia "Definitivamente sim".