Utilizando a caixa virtual a seu favor

Antes de começar…

Creio que muitos aqui já conheçam o excelente software de virtualização VirtualBox.
O que muitos desconhecem é o poder que ele tem. Poder que vai muito além do que vemos em sua interface gráfica.
Este software contém poderosos utilitários que podem ser utilizados via linha-de-comando, ou até nos seus programas em shell-script.
Neste artigo serão abordados os dois principais:
VBoxManage, que tem por função o gerenciamento das máquinas virtuais, bem como discos e imagens virtuais.
VBoxSDL, que é uma interface simples para a execução das máquinas Virtuais, mas que não necessita da biblioteca Qt.

Antes de começar, tenha a certeza de já ter o VirtualBox devidamente instalado. Não vou abordar aqui este processo, mas você certamente encontrará vários tutoriais na Internet.

E, antes de começar, dou uma mini-dica para você não ficar com dor-de-cabeça quando atualizar o kernel e perceber que o VirtualBox não funciona mais.

Isto acontece porque para funcionar, o VirtualBox necessita que um módulo especial, chamado vboxdrv. Mas normalmente este módulo não é automaticamente atualizado quando instalamos um novo kernel. Isto não é necessariamente um problema, já que é muito fácil compilar e instalar este módulo. Para isso, tenha a certeza de ter os programas de desenvolvimento (compiladores, etc) corretamente instalados, além do código-fonte da versão do kernel Linux que você utiliza também instalados.

Estando satisfeitos estes requerimentos, execute:

# /etc/rc.d/rc.vboxdrv setup

Espere uns instantes até que o módulo seja instalado, e corra pro abraço:

# /etc/rc.d/rc.vboxdrv start

Lembrando que “/etc/rc.d/rc.vboxdrv” é o script de inicialização VirtualBox no Slackware. Em outras distros, como Debian e Fedora, este script normalmente se chama “/etc/init.d/vboxdrv”. A sintaxe é a mesma.

Também faremos algumas convenções:
Quando um comando inicia com um cifrão ($), significa que o comando pode ser executado como usuário comum. Quando iniciar com um jogo-da-velha (#) – eu chamo de jogo-da-velha, e daí? ;-) -, significa que deve ser executado como root.
Também digo desde já que, para que os comandos sejam executados é necessário que você esteja no diretório onde está instalado o VirtualBox. No meu caso, o diretório em questão é o /usr/lib/virtualbox. É perfeitamente possível contornar isto (alguns links simbólicos aqui e acolá), mas isto foge do escopo deste tutorial.
Além disso, você deve incluir este diretório na variável de ambiente LD_LIBRARY_PATH:

$ cd /usr/lib/virtualbox
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/virtualbox/

Outro dia eu explico para que serve esta variável e como utilizá-la.

Feito isto, vamos começar logo o tutorial:

Criando, modificando e Iniciando

Para criar uma Máquina Virtual com o nome Ubuntu 7.10 Gusty, tecle:

$ ./VBoxManage createvm -name “Ubuntu 7.10 Gusty” -register

E serão ecoados na tela algumas informações sobre a máquina criada.

VirtualBox Command Line Management Interface Version 1.5.4_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.

Virtual machine ‘Ubuntu 7.10 Gusty’ is created and registered.
UUID: 35362bb9-19ef-4ee5-8daf-256cff87146a
Settings file: ‘/home/tenchi/.VirtualBox/Machines/Ubuntu 7.10 Gusty/Ubuntu 7.10 Gusty.xml’

As informações úteis aqui serão o nome da máquina virtual, uma identificação única, por meio de uma sentença composta por números e letras, além do arquivo de configuração da máquina virtual. Sendo um arquivo XML, pode ser modificado manualmente pelo usuário.

A sintaxe deste comando é simples. O parâmetro ‘-name’ serve para você especificar o nome da máquina virtual e o parâmetro ‘-register’ para registrar a máquina virtual nas configurações do VirtualBox.

Mas esta máquina é muito “crua”. Não dizemos para o VirtualBox qual sistema operacional será hospedado na máquina virtual, nem a quantidade de memória ou discos utilizados.

Por isso vamos criar um disco que será utilizado pela máquina:

$ ./VBoxManage createvdi -filename “Disco do Ubuntu” -size 5000 -register

Com este comando, criamos um disco com o nome (-filename) Disco do Ubuntu, tamanho (-size) de 5000MB (~5GB) e o registramos (-register) nas configurações do VirtualBox.

Vamos também registrar uma imagem ISO de CDROM/DVDROM para iniciarmos a máquina virtual.

$ ./VBoxManage registerimage dvd /imagens/Imagem-do-Ubuntu.iso

Com este comando estamos dizendo que estamos registrando uma imagem de DVD (dvd) e, e indicamos o caminho do arquivo da imagem.

Como já temos uma imagem de CDROM e um disco virtual, vamos configurar a máquina virtual.
Precisaremos definir alguns recursos que serão utilizados pelo hospedeiro:
Memória que iremos utilizar: 300MB.
Memória de vídeo: 8MB
Utilizar dispositivos USB nos hospedeiro: Sim
Ativar o dispositivo de som no hospedeiro: Sim

Precisaremos também da identificação dos discos. Para isso, utilizaremos o comando ‘VBoxManage list’:

$ ./VBoxManage list dvds

VirtualBox Command Line Management Interface Version 1.5.4_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.

UUID: a8279467-0fa2-4bb8-d6ab-f51706e0c5d4
Path: /imagens/Imagem-do-Ubuntu.iso
Accessible: yes

$ ./VBoxManage list hdds

VirtualBox Command Line Management Interface Version 1.5.4_OSE
(C) 2005-2007 innotek GmbH
All rights reserved.

UUID: ca9a8150-8971-4526-deaf-fd84db389fe8
Storage type: Virtual Disk Image
Path: /home/tenchi/.VirtualBox/VDI/Disco do Ubuntu
Accessible: yes

Com isso, teremos a identificação da imagem do Ubuntu e do disco.

Assim, finalmente executamos:

$ ./VBoxManage modifyvm “Ubuntu 7.10 Gusty” -memory 300 -vram 8 -hda ca9a8150-8971-4526-deaf-fd84db389fe8 -dvd a8279467-0fa2-4bb8-d6ab-f51706e0c5d4 -boot1 dvd -usb on -audio alsa -ostype linux26

Agora vamos destrinchar cada “palavrinha” deste comando:
* modifyvm é o comando para que indica que queremos modificar a máquina virtual. Seguido dele vem o nome ou o UUID da máquina virtual que está sendo modificada.
* -memory define a quantidade de memória dedicada à máquina. A unidade utilizada é o megabyte.
* -vram define a quantidade de memória de vídeo dedicada à máquina. A unidade utilizada é o megabyte.
* -hda define qual vai ser o disco utilizado como HD principal. Você pode utilizar como argumento o UUID do dispositivo ou o nome do arquivo. No exemplo foi utilizado o UUID. O mesmo vale para ‘-hdb’, se desejar utilizar uma imagem como disco secundário.
* -dvd define qual imagem será utilizada como HD principal
* -usb define se utilizaremos (on) ou não (off) dispositivos usb no sistema hospedado
* -audio define qual será o método utilizado para executarmos áudio no sistema hospedado. As possíveis opções são alsa, null, oss ou none.
* -ostype define qual sistema operacional irá rodar na máquina virtual. Para saber as possíveis opções, execute “./VBoxManage list ostypes”. No exemplo foi utilizado linux26, que significa linux-2.6.
* -boot1 diz qual será o primeiro dispositivo na ordem de boot. O mesmo vale para o segundo, que seria -boot2, e assim sucessivamente. As possíveis opções são: none floppy dvd disk net.

Com a máquina virtual configurada, podemos utiliza-la sem problema. Vamos inicialmente iniciá-la:

$ ./VBoxManage startvm “35362bb9-19ef-4ee5-8daf-256cff87146a” -type gui

Vamos esmiuçar de novo o comando:
* startvm é o comando para iniciar uma máquina virtual. Ele vem seguido do nome ou UUID da máquina em questão
* -type define como será executada a máquina. As possíveis opções são: gui e vrdp. Com a opção gui, a máquina visualmente será executada numa janela, como a que estamos acostumados no VirtualBox, com menus e necessitando da biblioteca Qt3. Já com a opção vrdp, ela será executada “em plano-de-fundo”, não sendo exibida nenhuma janela. Desta forma a máquina pode ser acessada remotamente numa rede. Deixo claro que eu ainda não testei este método, portanto não posso dizer ao certo qual é o comportamento do sistema nesta condição.

Estes não são todos os recursos do VirtualBox, mas somente o suficiente para colocar uma máquina virtual para funcionar. Ainda pretendo abordar, quem sabe num outro texto, neste mesmo batpost, neste mesmo batblog, mais alguns recursos, como configurar a rede e controlar a máquina virtual.

Mas isto não significa que este texto pare por aqui. Não senhor (ou senhora ;-)).

Compartilhando arquivos

É perfeitamente possível acessar, da máquina virtual, arquivos do hospedeiro. Este processo não é lá muito simples – utilizei dois bonequinhos de vudu e meio -, mas no final do processo ninguém chega a sair ferido ;-)

A única coisa que precisaremos é instalar um módulo especial na máquina virtual, para que ela enxergue uma ou mais pastas configuradas no hospedeiro como compartilháveis.

Vamos começar neste ponto: definir as pastas compartilháveis.

Para isso, vamos ao comando:

$ ./VBoxManage sharedfolder add “Ubuntu 7.10 Gusty” -name “Pasta HTDOCS” -hostpath /var/www/htdocs/

* sharedfolder indica a configuração de pastas compartilhadas
* add indica que estamos adicionando uma pasta
* Ubuntu 7.10 Gusty é o nome da máquina virtual
* -name é como a pasta em questão será reconhecido na máquina virtual, como um volume próprio
* -hostpath define a pasta que será compartilhada, na máquina real

Para remover uma pasta compartilhada,

$ ./VBoxManage sharedfolder remove “Ubuntu 7.10 Gusty” -name “Pasta HTDOCS”

Acho que não é preciso explicar como funciona o comando ;-)

Feito isto, inicializaremos a máquina virtual. Mas vou fazer algo diferente aqui. É que para que o módulo poder ser instalado no sistema da máquina virtual, é necessário que você tenha o código-fonte do kernel (linux) instalado no sistema virtual. Como atualmente eu estou com uma relativa preguiça para instalá-lo no Ubuntu, utilizarei uma máquina virtual com o Slackware 12.0 já pronto para o processo.

Também precisaremos da imagem ISO com os utilitários do VirtualBox para a máquina Virtual, que normalmente faz parte do pacote do VirtualBox, mas pode ser obtido separadamente no link:

http://www.virtualbox.org/download/1.5.4/VBoxGuestAdditions_1.5.4.iso

No meu caso, ele está no arquivo /usr/lib/virtualbox/VBoxGuestAdditions.iso. Verifique na sua distro onde está este arquivo. Feito isto, iremos registrar esta imagem nas configurações do VirtualBox:

$ ./VBoxManage registerimage dvd /usr/lib/virtualbox/VBoxGuestAdditions.iso

É possível que você receba uma mensagem de erros justamente pela imagem já estar registrada no VirtualBox. Ignore.

Modificaremos a máquina Virtual para utilizar a imagem acima como CDROM:

$ ./VBoxManage modifyvm Slackware-Test -dvd 58e8fa4f-b93a-4a85-f2b5-c199ec035f3e -memory 64

Onde 58e8fa4f-b93a-4a85-f2b5-c199ec035f3e é a UUID da imagem, e Slackware-Test é a máquina onde o Slackware já está instalado, e ‘-m 64’ é para eu utilizar somente 64MB de memória na máquina Virtual, o que é o suficiente para o Slackware rodar bem.

Iniciando…

$ ./VBoxManage startvm Slackware-Test -type gui

Já dentro da máquina Virtual, monte a imagem:

# mount /dev/cdrom /mnt/cdrom -t iso9660

Em seguida, execute o arquivo /mnt/cdrom/VBoxLinuxAdditions.run:

# /mnt/cdrom/VBoxLinuxAdditions.run
VBox Build Module

Se tudo ocorrer bem, reinicie a máquina virtual:

# reboot

Nesta máquina eu coloquei a pasta /home/ do hospedeiro correspondente ao volume ‘masaki‘ da máquina virtual. Vamos agora montar esta imagem:

Na máquina virtual, execute…

# modprobe vboxsf

… para carregar o módulo.

Para montar a pasta compatilhada:

# mount masaki /mnt/masaki -t vboxsf

A partir deste ponto, todos os arquivos da pasta compartilhada estarão em /mnt/masaki

Mas todos sabemos que é bem chato ficar montando manualmente o volume a cada inicialização. Para contornar isto, podemos agir de duas formas: colocar os comandos acima num arquivo de inicialização, ou fazer do método tradicional, pelo arquivo /etc/fstab.

Confesso que a primeira maneira é meio “porca”, por isso utilizaremos a segunda.

Mas vejam que, se simplesmente adicionarmos uma linha no arquivo fstab, o volume não será montado, basicamente porque ele necessita de um módulo especial, que é carregado somente depois que o kernel monta os volumes definidos no arquivo fstab.

Para consertar isto, execute:

# echo /sbin/modprobe vboxvfs >> /etc/rc.d/rc.modules

Depois abra para edição o arquivo /etc/rc.d/rc.S, e localize a linha (padrão no Slackware 12: 299)

/sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts

E deixe-a da seguinte forma:

/sbin/mount -a -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts

Feito isto, vamos editar o arquivo /etc/fstab. Adicione a seguinte linha no arquivo:

masaki /mnt/masaki vboxsf rw,auto 0 0

Onde masaki é o nome do volume e /mnt/masaki é onde eu quero que ele seja montado; vboxsf é um sistema de arquivos próprio do virtualbox. Nas opções de montagem eu coloquei rw,auto, para que a partição funcione em modo leitura-escrita e seja montada durante o boot. Personalize estas opções a seu gosto.

Salve e feche o arquivo.

Pronto, agora reinicie a máquina virtual rezando para que o volume seja montado durante o boot ;-)

Neste modo, as mudanças feitas na pasta compartilhada são aplicadas na pasta real. Num próximo texto explico como fazer para que tais mudanças sejam “esquecidas” depois que a máquina virtual for desligada (modo transiente). Também explicarei como utilizar um disco ou partição real numa máquina virtual.

E eu fiz o teste de compartilhamento somente utilizando Linux como hospedeiro e sistema virtualizado. Mais informações sobre como proceder em outros sistemas operacionais são encontrados na documentação do Virtualbox.

Utilizando uma interface mais simples: VBoxSDL

Como disse lá no início, a Interface em Qt não é obrigatória. Existe uma interface bem mais simples para o VirtualBox, chamada VBoxSDL. Você verá que ela lembra muito o QEMU, tanto no seu uso quanto na aparência.

Aqui serei breve.

Para iniciar uma máquina Virtual, utilize o comando:

$ ./VBoxSDL -vm Slackware-Test

Cito aqui os parâmetros mais comuns para este comando:
-vm <Nome ou UUID da Máquina>, define qual máquina virtual inicializaremos
-fullscreen, para iniciar em modo tela-cheia
-m define a quantidade de memória a ser utilizada. Esta quantidade será utilizada somente durante esta execução da máquina virtual
-boot, define o dispositivo inicialização. As possíveis opções são: ‘a‘, para disquete; ‘c‘, para HD; e ‘d‘, para CD-ROM/DVD-ROM.

VBoxSDL

Para mais informações, utilize o parâmetro –help

Conclusão

Acredito que, depois do exposto, o VirtualBox passe a ser visto como uma solução profissional – e livre – para quem necessitar deste maravilhoso recurso chamado virtualização.
O que este artigo abordou foi somente uma gota perto de todos os recursos que esta ferramenta nos apresenta. Mas deixo para um outro dia um maior aprofundamento destes recursos, em parte por este texto já ter ficado demasiado grande :-)

Observações: este texto demorou mais de uma semana para ser escrito. Aconselho vocês a não terem irmã(o)(s) chatos que te interrompam toda hora ;-)
Ele também foi feito à base de muita bolacha de água e sal com geléia de acerola (receita da minha mãe, outro dia posto) e ao som de Legião Urbana, Radiohead e Os Seminovos!

Referência

Documentação do VirtualBox: http://www.virtualbox.org/wiki/Documentation

E aqui também vai um link interessante sobre redes no VirtualBox:
http://www.ubuntero.com.br/?p=450

Até próxima!

8 Comments

  1. Posted fevereiro 11, 2008 at 10:08 | Permalink

    Artigo linkado o Ubuntero.

  2. Posted fevereiro 11, 2008 at 16:34 | Permalink

    Tutorial bem completo e com ótimas informações!!!
    Parabéns!

  3. Posted fevereiro 28, 2008 at 9:59 | Permalink

    Muito bom, parabéns.

    Valeu pela dica. ;)

  4. Weliton
    Posted maio 9, 2008 at 12:21 | Permalink

    formas de contato servslack@yahoo.com.br ou msn wisckey_24anos@hotmail.com

  5. Weliton
    Posted maio 9, 2008 at 12:24 | Permalink

    Muito bom tutorial leandro… Parabéns pela insistência e teimosia ao ficar horas e horas ao computador pra descobrir o conteúdo do seu post. Estou com uma dúvida que ao menos pra mim que não tenho tanto tempo quanto gostaria de ficar fuçando que é o seguinte: inicializo o linux e dai tenho no rc.local uma linha que puxa um pequeno executável as linhas são estas abaixo:

    modprobe tun
    tunctl -t tap1 -u root
    ifconfig eth0 0.0.0.0
    ip link set up dev tap1
    brctl addbr br0
    brctl addif br0 tap1
    brctl addif br0 eth0
    ip link set up dev br0
    ip addr add 192.168.254.10/24 dev br0
    ip route add 192.168.254.0/24 dev br0
    route add -net default gw 192.168.254.3

    Então abro o VIRTUALBOX e mando o “START”, antes é claro já havia configurado a interface TAP1 que já está gerada.

    O problema é que quando eu reinicializo a máquina virtual ela simplesmnete perde a conexão criada e mesmo que eu rode novamente o script está não é retomada.

    Pra que eu volte a ter acesso a maquina virtual tenho que reinializar o slack pra que seja então rodado o maldito script e somente depois como já dito inicializar a máquina virtual com o virtualbox.

    Se puder me dê uma ajuda… Já estou maluco com isso.

    Um Abraço e espero que continue com tempo… rsrsrsr.

  6. Posted junho 16, 2008 at 13:18 | Permalink

    Um detalhe importante é que somente utilizando o VBoxSDL é que consegui acentuar corretamente na máquina virtual com o Windows XP.

    Parabéns pelo post!

  7. cesaraugustorodriguesdeoliveira
    Posted fevereiro 15, 2010 at 1:49 | Permalink

    Show de bola , sem palavras , material muito bom , parabéns .

  8. mega
    Posted fevereiro 23, 2010 at 12:44 | Permalink

    epa eu preciso do melhor antivirus possivel

4 Trackbacks

  1. By Conhecendo melhor o VirtualBox on fevereiro 11, 2008 at 9:35

    […] por Leandro Santiago (leandrosansilvaΘgmail·com) – referência […]

  2. […] Querendo conhecer mais um pouco sobre o VirtualBox, temos um bom tutorial no blog do Leandro Santiago. […]

  3. […] https://leandrosan.wordpress.com/2008/02/09/utilizando-a-caixa-virtual-a-seu-favor/#comment-412 […]

  4. […] https://leandrosan.wordpress.com/2008/02/09/utilizando-a-caixa-virtual-a-seu-favor/#comment-412 […]

Comente

Required fields are marked *

*
*