Migrando discos virtuais do VMware para o VirtualBox

Neste fim de ano conheci o Contiki, um sistema operacional aberto voltado para dispositivos embarcados.

Uma das coisas legais dele é que é possível baixar o ambiente de desenvolvimento que nada mais é que uma VM do Ubuntu com ferramentas e um simulador muito interessante, o Cooja.

O problema é que essa VM foi criada com o VMware e por razões diversas eu queria utilizá-la no VirtualBox.

Pesquisando pela internet, encontrei vários textos falando que o VirtualBox reconhece os discos virtuais do VMware, bem como várias receitas para converter de um formato para outro.

Como não sou nenhum expert no assunto, acabei utilizando a solução que pareceu mais lógica pra mim, mas não quer dizer que seja a mais simples. Basicamente eu segui os passos descritos aqui e aqui que consistem em:

  1. Utilizar o vmware-vdiskmanager para converter os múltiplos arquivos do disco virtual da VM original para um único arquivo vmdk;
  2. Utilizar o qemu-img para converter o arquivo vmdk para o formato raw;
  3. Finalmente utilizar o VBoxManage para converter do formato raw para um disco virtual vdi.
[user@host]$ vmware-vdiskmanager -r /path/to/vmdk_files/myfile.vmdk -t 2 mysinglefile.vmdk
 
...
 
[user@host]$ qemu-img convert -O raw myfile.vmdk myfile.bin
 
...
 
[user@host]$ VBoxManage convertfromraw myfile.bin myfile.vdi –variant standard
 
...

Extras:

  • Eu demorei pra achar o vmware-vdiskmanager. Ele vem junto com o VMware Workstation e possivelmente em algum outro pacote, mas eu não fui conferir;
  • qemu images;
  • Depois do disco virtual convertido, ainda achei mais duas formas de fazer a mesma coisa. Não testei nenhuma delas.

E você? Já usou alguma abordagem mais simples? Compartilhe na área de comentários!

Perl cada vez mais fácil

A minha diversão remunerada favorita é programar em Modern::Perl, algo que a cada dia fica ainda mais divertido e simples.

Uma das facilidades das quais estou tirando proveito hoje é o App::cpanminus do Miyagawa. Esse aplicativo foi criado para facilitar a instalação de módulos em ambientes com restrições de recursos, portanto ele não possui muitas dependências e tem um baixo footprint.

Em alguns posts antigos eu mostrei como configurar o aplicativo cpan, instalar módulos no home do usuário e criar um mini mirror local com CPAN::mini, então como aquecimento para o Equinócio que se aproxima eu vou atualizar esses tutoriais tornando os posts anteriores obsoletos.

Para contextualizar os novos leitores vamos a um rápido overview das ferramentas abordadas:

  • cpanm e cpanm: são aplicativos que automatizam a instalação de módulos Perl publicados no repositório www.cpan.org.
  • www.cpan.org: É o repositório de módulos Perl onde podemos encontrar (hoje) cerca de 89768 módulos escritos por cerca de 8734 autores, para as mais diversas finalidades. Frequentemente alternamos o significado da palavra cpan entre "o repositório da web" e o "aplicativo de instalação de módulos".
  • local::lib: é um módulo (ou biblioteca) que facilita a instalação de outros módulos em diretórios que não os da instalação padrão, o que é útil quando você não possui privilégios administrativos e precisa de alguns módulos extras.
  • CPAN::Mini: é outro módulo que permite a criação de um mini repositório local com a última versão de cada módulo do cpan. Isso é muito útil quando você precisa instalar módulos em um ambiente que não possui acesso à internet.

Mão na massa

Bom o primeiro passo agora, ao invés de configurar o aplicativo cpan é baixar e instalar o cpanm. Quando essa etapa é feita em conjunto com o sudo, o cpanm é instalando na árvore padrão de instalação do Perl. Para instalar no seu home basta executar:

curl -L http://cpanmin.us | perl - App::cpanminus

Entretanto isso ainda não configurou o seu ambiente. O cpanm foi instalado em $HOME/perl5/bin, mas seu $PATH, as variáveis de ambiente e o local::lib ainda não estão prontas.

Para instalar o módulo local::lib faça:

$HOME/perl5/bin/cpanm local::lib

Especificar o caminho completo é necessário porque ainda não adicionamos o diretório de instalação local na variável de ambiente $PATH. Para fazer isso executamos:

echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >> ~/.bashrc

Nota: No Mac o arquivo é o .profile ao invés do .bashrc.

Isso faz com que a cada login, o ambiente pergunte ao módulo local::lib onde estão os outros módulos. Note que desta vez não precisamos exportar a variável PERL_MM_USE_DEFAULT porque o cpanm resolve as dependências de uma forma um pouco mais esperta que o seu irmão mais velho.

Para finalizar esta etapa, feche o terminal e abra novamente para carregar as variáveis ou execute:

. ~/.bashrc

Agora, se você quiser configurar o mini repositório, os passos são os mesmos:

  1. Instalar o módulo CPAN::Mini;
  2. Criar o arquivo de configuração para ele;
  3. Executar o comando minicpan;

A instalação pode ser feita com o comando:

cpanm CPAN::Mini

O arquivo de configuração (~/.minicpanrc) pode ser criado com o conteúdo:

local: ~/minicpan
remote: http://www.cpan.org

Daí é só executar o comando minicpan e esperar o repositório ser baixado (aproximadamente 1.5 GB).

Para que o cpanm aponte para o repositório local você deve invocá-lo passando com o seguinte parâmetro extra:

cpanm --mirror ~/minicpan --mirror-only

Ou para maior conveniência criar um alias:

echo "alias cpanmm='cpanm --mirror ~/minicpan --mirror-only'" >> ~/.bashrc

Após recarregar o .bashrc você terá disponíveis os comandos cpanm que baixa os módulos diretamente da internet e o cpanmm que instala os módulos a partir do seu repositório local.

Não se esqueça de executar o comando minicpan pelo menos uma vez por semana para manter o seu repositório local atualizado.

Referências:

Magic Survey

Olá queridos fãs de Magic: The Gathering, MTG para os íntimos :)

A Lulu Eller está fazendo seu Projeto de Graduação e a temática aborda o nosso amado e idolatrado card game.

Para isso ela está colhendo informações através de uma pesquisa web rápida e indolor. Se puderem tirar uns minutinhos para responder eu ficaria muito agradecido.

Caso conheçam algum parente, amigo, vizinho ou cunhado chato que tenha contato com o jogo, ou não, podem passar o link adiante :)

A pesquisa pode ser respondida seguindo o link:

http://bit.ly/MTGsurvey