Che cos’è Vagrant?
Lanciato per la prima volta nel marzo 2010 da Mitchell Hashimoto di Hashicorp e il suo socio in affari John Bender, Vagrant è uno strumento da riga di comando open-source per la gestione del ciclo di vita delle macchine virtuali (VM). L’utility mira a aumentare la produttività dello sviluppo rendendo questo processo molto più semplice. Mentre Vagrant era originariamente legato a Oracle VirtualBox, dalla versione 1.1, ha incluso anche il supporto per VMware, KVM e altri. Tuttavia, per quanto utile sia la virtualizzazione nello sviluppo web, l’uso di Vagrant non è sempre un’opzione infallibile.
Perché usare Vagrant? Ne Vale La Pena?
Prima di tutto, Vagrant offre molta più flessibilità con un ambiente basato su hypervisor immutabile. Questo consente agli sviluppatori di costruire ambienti che richiedono funzionalità disponibili solo su altri sistemi.
Ad esempio, se fosse necessario sviluppare un’applicazione che supportasse una varietà di sistemi operativi e kernel, potresti facilmente creare numerose macchine virtuali che potrebbero eseguire test utilizzando Vagrant. Allo stesso modo, se volessi replicare l’ambiente del tuo cliente (sistema operativo, risorse, ecc.), combinare VM e Vagrant potrebbe essere particolarmente utile.
Installazione di Vagrant su un Workstation
Per iniziare con Vagrant, scarica l’installer o il pacchetto appropriato dalla pagina ufficiale Scaricamenti Vagrant. Le istruzioni seguenti sono per Vagrant v2.3.3 (la versione più recente a dicembre 2022).
Installazione di Vagrant su Windows
Per installare Vagrant su Windows, è necessario innanzitutto scaricare il pacchetto MSI. Successivamente, puoi semplicemente eseguire il file e procedere attraverso un processo di installazione normale.
Nota: L’installer aggiungerà automaticamente ‘vagrant’ al percorso del sistema, quindi sarà disponibile anche nei terminali. Se Vagrant non viene trovato, tuttavia, prova a disconnetterti e a riconnetterti al sistema, poiché questo è un evento comune su Windows.
Installazione di Vagrant su MacOS Catalina
Supponendo che tu abbia già installato un gestore di pacchetti ‘brew’, per configurare rapidamente Vagrant su Mac, puoi eseguire l’installazione con questo comando a riga di comando:
```bash
$> brew install vagrant
```
In alternativa, puoi installare Vagrant da binari.
Installazione di Vagrant su Linux
Per i sistemi Linux, dimostreremo il processo di installazione per Vagrant su Ubuntu 20.04:
Installa la chiave:
```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
Aggiungi il repository:
```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
```
Ricevi gli aggiornamenti e esegui l’installazione:
```bash
$> sudo apt update && sudo apt install vagrant
```
Questo è tutto! Ora tutto ciò che devi fare è aprire il tuo terminale e digitare “vagrant”. Vale anche la pena sottolineare, tuttavia, che se esegui Vagrant da solo, riceverai un elenco con i sottocomandi disponibili.
I principali problemi che puoi riscontrare durante l’installazione di Vagrant
Mentre errori di installazione di Vagrant sono piuttosto rari, la probabilità di questo aumenta significativamente se sono installati più hypervisori sul tuo computer. Dopotutto, gli hypervisors non tendono ad consentire la creazione di macchine virtuali quando più di uno di loro è già in uso.
Di seguito sono riportati un paio di soluzioni rapide tratte dalla documentazione ufficiale di Vagrant che possono aiutarti a utilizzare Vagrant e VirtualBox quando è presente un altro hypervisor:
Su Linux
Quando si utilizza un altro hypervisor, potresti incontrare l’errore seguente:
```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
```
Per far funzionare correttamente VirtualBox, tutti gli altri hypervisors dovranno essere aggiunti alla tua lista di rifiuto del sistema.
Per fare ciò, scopri innanzitutto come si chiama l’hypervisor:
```bash
$> lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm
```
Quindi, aggiungi semplicemente l’hypervisor alla tua lista di rifiuto utilizzando il comando “blacklist”.
```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```
Infine, riavvia il tuo computer e usa di nuovo il comando “vagrant”.
Su Windows
Su Windows, se stai cercando di avviare una macchina virtuale VirtualBox, potresti imbatterti in uno schermo blu sconcertante.
Per utilizzare VirtualBox normalmente, devi assicurarti che Hyper-V sia disabilitato. Usa il seguente semplice comando per disattivare la funzionalità su Windows 10:
```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```
Su Windows 11, puoi anche utilizzare un Powershell elevato:
```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```
In alternativa, puoi disabilitare Hyper-V dalle impostazioni del tuo sistema Windows.
- Fai clic destro sel pulsante di Windows e scegli “App e funzionalità”
- Apri “Attiva o disattiva le funzionalità di Windows”
- Disattiva Hyper-V e infine clicca su OK
Riavvia il tuo computer per applicare queste modifiche.
Su MacOS
Se incontri il seguente messaggio di errore durante l’esecuzione di VBoxManage:
Impossibile aprire /dev/vboxnetctl: File o directory non esistente
Rieseguire completamente la installazione di Virtualbox o utilizzare semplicemente i comandi seguenti:
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
oppure
sudo /Library/StartupItems/VirtualBox/VirtualBox start
Nota che in versioni più recenti, il file /Library/StartupItems/VirtualBox/VirtualBox
non esiste, quindi dovrai utilizzare il seguente comando:
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl
MacOS Catalina: Ma Funziona Sul Mio Macchina
Un altro problema che può verificarsi su Mac è quel classico problema quando senti un’applicazione “funziona bene sul mio computer”, e nessuna quantità di suppliche o pianti può farla funzionare allo stesso modo altrove. Anche il mio team da SPG aveva affrontato questo problema in precedenza.
Immagina di attualmente distribuire e testare ambienti locali con Vagrant + VirtualBox. Uno degli ingegneri del software nel tuo team utilizza una versione personalizzata di VagrantBox, che finora funziona bene per loro. Saranno conosciuti come Developer 1. Sul loro workstation, VirtualBox v6.1.34, Vagrant 2.2 e Ubuntu funzionano tutti senza problemi.
D’altra parte, è chiaro che Developer 2 deve aggiornare il loro ambiente locale. Attualmente utilizzano una miscela di MacOS, VirtualBox v6.1.24 e Vagrant 2.1.x sul loro workstation.
Di conseguenza, almeno a prima vista, la strategia di Developer 2 sembra semplice:
- Step 1: Aggiornare le versioni di VirtualBox e Vagrant (è cruciale utilizzare versioni unificate)
- Step 2: Installare tutti i componenti aggiuntivi del progetto
Entrambe le operazioni vengono completate con successo, ma l’esito è certamente inaspettato — per qualche motivo, il sito web che è stato installato su VirtualBox ora è completamente irraggiungibile. Ma che cavolo!?
Quando si affronta un enigma del genere, è fondamentale mettersi a brainstormare una soluzione e intraprendere azioni sensate come quelle elencate di seguito:
- Esaminare i file di log
- Verificare che tutti i servizi di VirtualBox, come PHP, Nginx e MySQL siano operativi
- Utilizzare curl per accedere alla pagina
In questo caso, tuttavia, tutto sembra funzionare come dovrebbe, senza problemi evidenti all’interno dell’istanza di VirtualBox.
Il tuo team decide quindi di cambiare strategia e verificare se il host di VirtualBox è raggiungibile dall’esterno. Dopo aver utilizzato un semplice comando ping, rimangono impreparati nel scoprire che il 100% dei pacchetti viene perso. Sebbene questa notizia sia un po’ preoccupante, potrebbe anche essere la causa di tutta la situazione.
Seguendo questa pista, alla fine scoprono che gli adattatori HostOnly devono ora ricevere un diverso intervallo di indirizzi IP. Questo è iniziato con l’aggiornamento VirtualBox v6.1.30 (un aggiornamento di patch, tra tutte le cose):
192.168.55.х prior to the update
192.168.56.х. after the update.
Eccolo, chiaro come il sole, nel recentemente rivisto manuale utente di VirtualBox user manual:
“Su Linux, Mac OS X e Solaris, Oracle VM VirtualBox consentirà solo l’assegnazione di indirizzi IP nell’intervallo 192.168.56.0/21 agli adattatori host-only.”
Tutti nel tuo team eseguono un sospiro collettivo di sollievo. Il problema scompare improvvisamente dopo aver creato un nuovo adattatore HostOnly e aver modificato quello nell’istanza di VirtualBox. Il componente web critico della soluzione è finalmente accessibile e il Developer 2 è infine felice.
Vagrant o…? Quali alternative ci sono? In che modo sono migliori?
Con così tanta emozione, potresti essere perdonato per cercare alternative a Vagrant. Tuttavia, se lo facessi, probabilmente troveresti diversi siti web che confrontano l’utility con i container (più spesso, Docker). Ma è davvero un confronto valido? A quanto pare, lo è, a patto che tu sia consapevole della differenza tra i due.
Molti dei vantaggi che Docker ha rispetto agli hypervisors possono anche essere considerati svantaggi, dipende solo da ciò di cui hai bisogno. Quindi, iniziamo con un grande vantaggio: il tempo di caricamento. Mentre i container possono avviarsi rapidamente perché sono fondamentalmente solo un insieme di processi, ciò significa anche che utilizzano il kernel dell’host. Di conseguenza, invece di fare affidamento su hardware virtualizzato, i container utilizzeranno direttamente l’hardware dell’host.
Gli hypervisors possono anche avere risorse dedicate sotto forma di memoria, tempo di CPU, spazio su disco e altri. I container, al contrario, condividono risorse con altri processi sul computer host. Allo stesso modo, mentre Vagrant ti consente di creare un’intera macchina virtuale, che richiederà più tempo e risorse, l’approccio containerizzato di Docker ti consente di distribuire più velocemente con meno risorse.
Quindi, tenendo presente questo, ricorda solo che questa non è una competizione. Riguarda semplicemente le esigenze della tua azienda.
Conclusione
Mentre Vagrant è indiscutibilmente uno strumento formidabile, non è immune ai problemi. Se la tua azienda manca di competenza o conoscenza, una squadra dedicata di sviluppatori software potrebbe essere in grado di aiutare. Dopotutto, anche quando funziona solo “sul mio computer”, esiste una soluzione per ogni problema.
Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o