Vagrant+VirtualBox no MacOS Catalina: Mas Funciona no Meu Computador!

O que é Vagrant?

Lançado pela primeira vez em março de 2010 por Mitchell Hashimoto da Hashicorp e seu parceiro John Bender, Vagrant é uma ferramenta de linha de comando open-source para gerenciamento do ciclo de vida de máquinas virtuais (VM). A utilidade visa aumentar a produtividade do desenvolvimento ao tornar esse processo muito mais simples. Embora o Vagrant tenha sido originalmente vinculado ao Oracle VirtualBox, desde a versão 1.1, também inclui suporte para VMware, KVM e outros. No entanto, por mais útil que a virtualização seja no desenvolvimento web, o uso do Vagrant nem sempre é uma opção infalível.

Por que usar Vagrant? Vale a pena?

Em primeiro lugar, o Vagrant oferece muito mais flexibilidade com um ambiente baseado em hipervisor imutável. Isso permite que os desenvolvedores criem ambientes que exigem recursos disponíveis apenas em outros sistemas.

Por exemplo, se você precisasse criar um aplicativo que suportasse uma variedade de sistemas operacionais e kernels, poderia facilmente criar várias máquinas virtuais que pudessem executar testes usando o Vagrant. Da mesma forma, se você quisesse replicar o ambiente do seu cliente (SO, recursos, etc.), combinar VMs e Vagrant também pode ser particularmente útil.

Instalando Vagrant em uma estação de trabalho

Para começar com o Vagrant, faça o download do instalador ou do pacote adequado a partir da página oficial Downloads do Vagrant. As instruções abaixo são para o Vagrant v2.3.3 (a versão mais recente em dezembro de 2022).

Instalação do Vagrant no Windows

Para instalar Vagrant no Windows, você precisa primeiro baixar o pacote MSI. Em seguida, basta executar o arquivo e seguir um processo de instalação regular.

Nota: O instalador adicionará automaticamente ‘vagrant’ ao seu caminho do sistema, portanto, também estará disponível nos terminais. Se o Vagrant não for encontrado, no entanto, tente fazer logout e login novamente no sistema, pois isso é comum no Windows.

Instalação do Vagrant no MacOS Catalina

Supondo que você já tenha um gerenciador de pacotes ‘brew’ instalado, para configurar rapidamente Vagrant no Mac, você pode executar a instalação com este comando em uma única linha:

 

```bash
$> brew install vagrant
```

Alternativamente, você pode instalar o Vagrant a partir de binários.

Instalação do Vagrant no Linux

Para sistemas Linux, demonstraremos o processo de instalação para Vagrant no Ubuntu 20.04:

Instale a chave:

 

```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

Adicione o repositório:

 

```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```

Puxe atualizações e execute a instalação:

 

```bash
$> sudo apt update && sudo apt install vagrant
```

É tudo o que há para isso! Agora tudo o que você precisa fazer é abrir seu terminal e digitar “vagrant”. Vale a pena mencionar, no entanto, que se você executar o Vagrant sozinho, receberá uma lista com os subcomandos disponíveis.

Principais Problemas Que Você Pode Ter Ao Instalar Vagrant

Embora erros de instalação do Vagrant sejam relativamente raros, a probabilidade disso aumenta significativamente se múltiplos hypervisores estiverem instalados em sua máquina. Afinal, os hypervisors não tendem a permitir a criação de máquinas virtuais quando mais de um deles já está em uso.

Os seguintes são alguns soluções rápidas retiradas da documentação oficial do Vagrant que podem ajudá-lo a usar o Vagrant e o VirtualBox quando outro hypervisor está presente:

No Linux

Ao usar outro hypervisor, você pode encontrar o erro abaixo:

 

```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", <ID of the VM>, "--type", "headless"]

Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```

Para que o VirtualBox funcione corretamente, qualquer hypervisor adicional precisará ser adicionado à lista de negação do seu sistema.

Para fazer isso, primeiro descubra qual é o nome do hypervisor:

 

```bash
$> lsmod | grep kvm
kvm_intel             204800  6
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm
```

Em seguida, simplesmente use o comando “blacklist” para adicionar o hypervisor à sua lista de negação.

 

```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```

Finalmente, reinicie sua máquina e use o comando “vagrant” novamente.

No Windows

No Windows, se você está tentando iniciar uma máquina virtual do VirtualBox, pode enfrentar uma tela azul chocante.

Para usar o VirtualBox normalmente, você precisa garantir que o Hyper-V esteja desabilitado. Use o seguinte comando simples para desativar o recurso no Windows 10:

 

```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```

No Windows 11, você também pode usar um Powershell elevado:

 

```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```

Alternativamente, você pode desabilitar o Hyper-V nas configurações do sistema do Windows.

  • Clique com o botão direito no botão do Windows e escolha “Aplicativos e Recursos”
  • Abra “Ativar ou desativar recursos do Windows”
  • Desmarque o Hyper-V e, finalmente, clique em OK

Reinicie o computador para aplicar essas alterações.

No MacOS

Se você encontrar a seguinte mensagem de erro ao tentar executar o VBoxManage:

falha ao abrir /dev/vboxnetctl: Não existe tal arquivo ou diretório

Reinstale o VirtualBox completamente ou simplesmente use os comandos abaixo:

 
sudo /Library/StartupItems/VirtualBox/VirtualBox restart

ou

 
sudo /Library/StartupItems/VirtualBox/VirtualBox start

Note que em versões mais recentes, o arquivo /Library/StartupItems/VirtualBox/VirtualBox não existe, então você terá que usar o seguinte comando:

 
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl

MacOS Catalina: Mas Funciona no Meu Computador

Outro problema que pode ocorrer no Mac é aquele problema clássico quando você ouve que um aplicativo “funciona bem no meu computador”, e nenhuma quantidade de implorar ou chorar pode fazê-lo fazer o mesmo em qualquer outro lugar. Minha equipe do SPG também enfrentou esse problema antes.

Imagine que você está atualmente implantando e testando ambientes locais com Vagrant + VirtualBox. Um dos engenheiros de software em sua equipe usa uma versão personalizada do VagrantBox, que até agora está funcionando bem para eles. Eles serão conhecidos como Desenvolvedor 1. Em seu computador, VirtualBox v6.1.34, Vagrant 2.2 e Ubuntu estão funcionando sem problemas.

Por outro lado, é claro que Desenvolvedor 2 precisa atualizar seu ambiente local. Eles atualmente usam uma mistura de MacOS, VirtualBox v6.1.24 e Vagrant 2.1.x em seu próprio computador.

Como resultado, pelo menos à primeira vista, a estratégia do Desenvolvedor 2 parece ser simples:

  • Passo 1: Atualizar as versões do VirtualBox e Vagrant (é crucial usar versões unificadas)
  • Passo 2: Instalar todos os componentes adicionais do projeto

Ambas as operações são concluídas com sucesso, mas o resultado é certamente inesperado — por algum motivo, o site que foi instalado no VirtualBox agora é totalmente inacessível. Mas que diabos!?

Ao enfrentar tal enigma, é fundamental brainstormar uma solução e tomar ações sensatas como as listadas abaixo:

  • Examinar os arquivos de log
  • Verificar se todos os serviços do VirtualBox, como PHP, Nginx e MySQL estão operacionais
  • Usar curl para acessar a página

Neste caso, no entanto, tudo parece estar funcionando como deveria, sem nenhum problema óbvio dentro da instância do VirtualBox em si.

A sua equipe então decide mudar de estratégia e determinar se o host do VirtualBox é acessível de fora. Após usar um simples comando ping, ficam despreparados ao descobrir que 100% dos pacotes são perdidos. Embora essa notícia seja um tanto desconcertante, pode também ser a causa de toda a confusão.

Seguindo essa linha de raciocínio, eles acabam descobrindo que os adaptadores HostOnly agora devem receber um intervalo diferente de endereços IP. Isso aparentemente começou com a atualização VirtualBox v6.1.30 (uma atualização de patch, de tudo):

 

192.168.55.х prior to the update

192.168.56.х. after the update.

Ali está, claro como o dia, na recentemente revisada manual do usuário do VirtualBox

No Linux, Mac OS X e Solaris, o Oracle VM VirtualBox permitirá apenas endereços IP no intervalo 192.168.56.0/21 a serem atribuídos a adaptadores host-only.”

Todos na sua equipe suspiram de alívio. O problema desaparece de repente após a criação de um novo adaptador HostOnly e a mudança do que estava na instância do VirtualBox. O componente crítico da web da solução finalmente fica acessível, e o Desenvolupador 2 está feliz por fim.

Vagrant Ou…? Quais Alternativas Existem? Como São Melhores?

Com tanta empolgação, você poderia ser perdoado por procurar alternativas a Vagrant. No entanto, se você o fizesse, provavelmente encontraria vários sites que comparam a utilidade a contêineres (mais frequentemente, Docker). Mas essa é realmente uma comparação válida? Como se vê, realmente é, contanto que você esteja ciente da diferença entre os dois.

Muitos dos benefícios que o Docker tem sobre hipervisores também podem ser considerados desvantagens — isso depende do que você precisa. Então, vamos começar com um grande: tempo de carregamento. Enquanto os contêineres podem iniciar rapidamente porque são basicamente apenas um conjunto de processos, isso também significa que usa o kernel do host. Como resultado, em vez de depender de hardware virtualizado, os contêineres usarão o hardware do host diretamente.

Os hipervisores também podem ter recursos dedicados na forma de memória, tempo de CPU, espaço em disco e outros. Por outro lado, os contêineres compartilham recursos com outros processos no computador host. Da mesma forma, enquanto o Vagrant permite criar uma máquina virtual inteira — o que exigirá mais tempo e recursos — a abordagem containerizada do Docker permite implantar mais rapidamente com menos recursos.

Então, tendo isso em mente, lembre-se de que isso não é uma competição. Trata-se simplesmente das necessidades da sua empresa.

Conclusão

Embora o Vagrant seja indiscutivelmente uma ferramenta formidável, também não é imune a problemas. Se a sua empresa carece de expertise ou conhecimento, uma equipe dedicada de desenvolvedores de software pode ajudar. Afinal, mesmo quando apenas “funciona no meu computador”, existe uma solução para cada problema.

Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o