Pesquisar este blog

domingo, 25 de novembro de 2018

VirtualBox na linha de comando

virtualbox_maxosx







Para quem (ainda) não conhece o (Oracle VM) Virtualbox é um hipervisor para arquitetura x86 (32-bit e 64-bit) que permite criação e a execução de máquinas virtuais com diversos sistemas operacionais. Ele tanto é  usado como uma uma aplicação desktop  comum ou integrado em outras ferramentas como o Boot2Docker e Vagrant.
Foi originalmente desenvolvido pela alemã Innotek GmbH, que foi adquirida em 2008 pela Sun Microsystems e esta, comprada pela Oracle Corporation em 2010 — ou seja, um destino muito parecido com o que teve o MySQL e outros projetos.

Usando o console

Eu considero o cliente gráfico do VirtualBox muito limitado e como acesso as máquinas virtuais por SSH acabei me habituando a realizar algumas ações diretamente pela linha de comando.
Tanto que montei um pequeno roteiro.

Ligando, desligando etc

A primeira, e a mais óbvia de todas, é iniciar a/as máquina/máquinas virtual/virtuais:
$ vboxmanage startvm --type headless «UUID/Nome da VM»
Waiting for VM "«Nome da VM»" to power on...
VM "«Nome da VM»" has been successfully started.
No parâmetro “–type” a opção “headless” não criará uma janela para a máquina virtual que será executada em segundo plano. Também são são válidas as opções “sdl” que abrirá uma janela mas sem os controles habituais (ou seja, ela não capturará o mouse e outras coisas), e “gui” que abrirá uma janela comum do VirtualBox com todas as opções disponíveis.
O que são “UUID” e “Nome da VM”? Fácil é a forma como cada máquina virtual está registrada no hipervisor, através de um identificador único (UUID) ou de uma string, o nome definido para a máquina virtual na sua criação.
Antes que eu esqueça VBoxManage e vboxmanage são a mesma coisa, ambos são links para o “/usr/share/virtualbox/VBox.sh” — ao menos nas distribuições baseadas em Debian.
Para conhecer as máquinas virtuais registradas digite:
$ vboxmanage list vms
"CentOS_64_WildFly" {30f1efb1-4a58-451f-9827-a4c330091ce4}
"Ubuntu_64_Juju" {b05dd0fc-f80e-4933-b43f-28a4b4d8b1c6}
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}
Para saber quais estão em execução use:
$ vboxmanage list runningvms
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}
Para desligar as máquinas virtuais… A melhor opção é fazer a partir do próprio sistema operacional convidado:
$ sudo poweroff
W: molly-guard: SSH session detected!
Please type in hostname of the machine to poweroff:
Quase todas responderão educada e prontamente a solicitação 🙂
Uma dica bastante útil, sempre instale o pacote molly-guard (é original da Debianmas há uma versão para RHEL) nas instalações,  a função dele é evitar o host errado seja desligado por acidente — visto que você é obrigado a confirmar escrevendo o nome dele.
Mas se algo falhar, pode-se pedir que o hipervisor informe ao sistema operacional convidado que é hora de desligar (enviando o sinal de que o “botão” de liga/desliga foi pressionado):
$ vboxmanage controlvm «UUID/nome da VM» acpipowerbutton
Ou, em um momento de desespero, pedir que o hipervisor desligue e ponto final:
$ vboxmanage controlvm «UUID/nome da VM» poweroff
Também é possível pausar (“pause”), restaurar (“resume”), salvar o estado (“savestate”) e até mesmo reiniciá-la (“reset”), basta substituir a ação no final do comando.

Snapshots

Precisando fazer um “instantâneo” (eu gosto do termo) da máquina virtual o comando é o seguinte:
$  vboxmanage snapshot «UUID/Nome da VM» take "«nome do snapshot»"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Para listar os snapshots em uma máquina virtual:
$ vboxmanage snapshot «UUID/Nome da VM» list
   Name: "snapshot1" (UUID: XX-X-X-X-XX1)
      Name: "snapshot1.1" (UUID: XX-X-X-X-XX2)
         Name: "snapshot1.1.1" (UUID: XX-X-X-X-XX3) *
O asterisco (“*”) serve para indicar qual o snapshot encontra-se em uso no momento, para trocar/usar outro use:
$ vboxmanage snapshot «UUID/Nome da VM» \
  restore «UUID do snapshot/nome do snapshot»
Por exemplo:
$ vboxmanage snapshot "Ubuntu_64_Chef" list
   Name: antes do apache (UUID: f78280ef-...4f)
      Name: antes do mysql (UUID: 99af2405-..8d)
         Name: antes de atualizar (UUID: a3eeff38-..6f) *
$ vboxmanage snapshot "Ubuntu_64_Chef" restore "antes do mysql"
$ vboxmanage snapshot "Ubuntu_64_Chef" list
   Name: antes do apache (UUID: f78280ef-...4f)
      Name: antes do mysql (UUID: 99af2405-..8d) *
         Name: antes de atualizar (UUID: a3eeff38-..6f)
E utilizando:
$ vboxmanage snapshot «UUID/Nome da VM» \
 delete «UUID do snapshot/nome do snapshot»
Você remove um snapshot.

Simplificando

Uma simples constatação:
virtualbox_bash
Após a digitação do terceiro “vboxmanage …” todo mundo já começa a ficar irritado em escrever tanta coisa, eu inclusive, então fiz algo para simplificar um pouco:
#!/bin/bash
#
# vbshortcuts
# VirtualBox shortcuts to an easy VM management, feel free to dix and imporove.
#
# use: "$ source vbshortcuts" or "$ . vbshortcuts"
#
# (c)2015 - Giovanni Nunes <giovanni.nunes@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
VBMAN=$( which vboxmanage | which VBoxManage )
function vbSnapshot(){
${VBMAN} snapshot ${2} ${1} ${3}
}
function vbControlVM(){
${VBMAN} controlvm ${2} ${1}
}
alias vbls="${VBMAN} list vms"
alias vbwho="${VBMAN} list runningvms"
alias vbinfo="${VBMAN} showvminfo"
alias vbrun="${VBMAN} startvm --type headless"
alias vbacpi="vbControlVM acpipowerbutton"
alias vbstop="vbControlVM poweroff"
alias vbreset="vbControlVM reset"
alias vbsave="vbControlVM savestate"
alias vbpause="vbControlVM pause"
alias vbresume="vbControlVM resume"
alias vbsnapshot="IFS='%%' ; vbSnapshot take"
alias vbsnaplist="vbSnapshot list"
alias vbsnapdel="IFS='%%' ; vbSnapshot delete"
alias vbsnaprestore="IFS='%%' ; vbSnapshot restore"
# MSX Rulez!
view rawvbshortcuts hosted with ❤ by GitHub
E o que isto faz? Cria um conjunto de apelidos e duas funções no Bash que simplificam o uso do VBoxManage tornando a vida mais fácil.

Utilização

Salve o arquivo e use-o da seguinte forma:
$ source ~/vbshortcuts
Para testar experimente:
$ vbls
"CentOS_64_WildFly" {30f1efb1-4a58-451f-9827-a4c330091ce4}
"Ubuntu_64_Juju" {b05dd0fc-f80e-4933-b43f-28a4b4d8b1c6}
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}
Melhor que digitar “vboxmanage list vms” ou ficar procurando o comando no histórico.  🙂

Apelidos

Esta é a descrição completa, inclui um análogo aos comandos listados mais acima e alguns outros:
  • Informações:
    • vbls : Mostra todas máquinas virtuais registradas.
    • vbwho : Exibe as máquinas virtuais em execução.
    • vbinfo «UUID/nome da VM» :Lista a configuração e parâmetros da máquina virtual.
  • Ligar, desligar etc:
    • vbrun «UUID/nome da VM» : Inicia uma máquina virtual em segundo plano (modo headless).
    • vbacpi «UUID/nome da VM» : Envia o sinal de desligamento via ACPI para a máquina virtual.
    • vbstop «UUID/nome da VM» : Desliga a máquina virtual.
    • vbreset «UUID/nome da VM» : Reinicia a máquina virtual.
    • vbsave «UUID/nome da VM» :   Salva o estado de execução da máquina virtual.
    • vbpause «UUID/nome da VM» : Pausa a execução de uma máquina virtual.
    • vbresume «UUID/nome da VM» : Tira a máquina pausada virtual da pausa.
  • Snapshots:
    • vbnapshot «UUID/nome da VM» «nome do snapshot» : Criar um snapshotde uma máquina virtual específica.
    • vbsnaplist «UUID/nome da VM» : Lista os snapshots daquela máquina virtual.
    • vbsnapdel «UUID/nome da VM» «UUID do snapshot/nome do snapshot» : Apaga um snapshot específico.
    • vbsnaprestore  «UUID/nome da VM» «UUID do snapshot/nome do snapshot» : Restaura um snapshot específico.
Creio que isto engloba o básico e precisando basta acrescentar o que estiver faltando (e depois compartilhar a melhoria). Testei tanto em Linux quanto em MacOS X e creio que funcionará sem problemas em Windows com Cygwin — ou então convertendo-o para DOSKEY.
Ah, e ainda é possível fazer isto aqui:
$ export _JUJU="Ubuntu_64_Juju"
$ export _CHEF="Ubuntu_64_Chef"
$ export _WYLD="CentOS_64_WildFly"
$ vbrun $_«TAB»
$_CHEF $_JUJU $_WYLD
$ vbrun $_WYLD 
Waiting for VM "CentOS_64_WildFly" to power on...
VM "CentOS_64_WildFly" has been successfully started.
Para usar a tecla «TAB» ao seu favor.

E para fechar

Creio que não cheguei nem em 10% das opções do VBoxManage mas este pouco já é o suficiente para mostrar o que se pode fazer sem precisar usar a interface gráfica do VirtualBox cuja sensação é de que não incorpora novas funcionalidades desde a versão 2!
Basta consultar a documentação para ver a quantidade de recursos interessantes acessíveis somente pelo VBoxManage.

Autor: GIOVANNI NUNES
Retirado de: https://giovannireisnunes.wordpress.com/2015/10/30/virtualbox-na-linha-de-comando/
Em: 25/11/2018

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.