2014-07-10 10 views
7

mio ambiente:Vagrant reimposta la directory .vagrant ogni volta che uso vagabondo fino

  • OS: win8.1
  • Vagrant: 1.6.3
  • Virtual Box: 4.3.12r93733
  • OS Vagrant: laravel/Homestead sapore

La situazione: ho notato che dopo un "barbone sospendere" e riavviare il computer (Il giorno dopo' s lavoro) quando eseguo "vagrant up" tutti i file nella directory .vagrant vengono cancellati durante il processo "up" e viene creata una nuova istanza VBox. Ciò significa che perdo tutte le mie precedenti configurazioni come DB, npm installa e monta. Sì, la configurazione persa è in gran parte disponibile tramite script salvati, ma questo è un vero dolore da fare ogni volta!

La mia correzione corrente: Attualmente ogni volta che ciò accade, è necessario eseguire "VBoxManage list vms" per recuperare l'ID corretto. Quindi "sospetto vagamente" la nuova istanza indesiderata, la cancello da Oracle VM VirtualBox Manage, incollo il vecchio ID nel file "id" all'interno di ".vagrant" ed eseguo di nuovo "vagrant up". Questa volta funziona!

Ho controllato il file id ogni volta prima di eseguire "vagrant up" e l'id corretto è lì. Ho anche provato "curriculum vagabondo" ma questo non ha fatto differenza.

I file Vagrant e config sono quasi standard in dotazione con il pacchetto Homestead. L'unico cambiamento che ho apportato è all'interno di Vagrantfile per consentire i collegamenti simbolici (questo è un modo per aggirare un problema completamente separato con NODE, npm e limiti di Windows a 260 percorsi di directory char). Ecco il bit aggiuntivo che ho aggiunto per questo problema di lunghezza dir.

config.vm.provider "virtualbox" do |vb| 
# SEE https://github.com/fideloper/Vaprobash/issues/183 
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"] 
end 

Cosa sto facendo male? Perché Vagrant crea ogni volta una nuova istanza VM?

UPDATE:

ho scoperto che il problema è qualcosa a che fare con la gestione del CLI (Io generalmente uso Cygwin) e direttore Oracoli VBox con privilegi di amministratore. Ho anche scoperto che alcune delle mie VM sono salvate in C: \ cygwin64 \ home ... Posso usarle quando eseguo il terminale cygwin come amministratore. E posso vederli in Oracle VirtualBox Manager se lo eseguo anche come amministratore. Altre macchine virtuali sono memorizzate in C: \ Users .... e posso vederle quando eseguo Oracle VBox Manager come mio normale utente (che ha i privilegi di amministratore).

Sono ancora un po 'confuso come sia successo tutto questo.

+0

Questo è un bernoccolo per la mia domanda. Ho ancora lo stesso problema, Qualcuno ha qualche idea? – Wairowe

risposta

2

ho trovato la risposta al mio problema, speriamo che aiutare gli altri.

Il problema era che alcune VM si trovavano nella mia directory C:/cygwin64/home e appartenevano all'amministratore, potevano essere viste solo su Oracles VirtualBox Manager se l'avessi aperta come "amministratore". Le altre VM erano in C:/Users/[nome utente]/VirtualBox VM, erano di proprietà del mio account utente e potevano essere viste solo se avessi aperto le app normalmente.

Stavo aprendo il mio Cygwin normalmente e quindi non essendo in grado di riportare correttamente la VM (ancora un po 'confuso perché il reset dell'ID ogni volta sembrava funzionare).

La mia soluzione: con l'aiuto di questa risposta da thomthom

Entro Oracoli VirtualBox Mangager ho cambiato la macchina cartella di default (File-> Preferenze> Generale) a C:/Users/[nome utente]/VirtualBox VM . Ho quindi clonato ciascuna VM in modo che finissero nella nuova directory. Ho quindi rimosso completamente la vecchia VM (tasto destro del mouse -> Rimuovi) che si trovavano nella cartella cygwin. Ho quindi chiuso Cygwin e VirtualBox Manager e ho riaperto come utenti normali (VirtualBox Manager non mostrava nulla!)

Infine sono entrato nella nuova directory e ho fatto doppio clic su ogni VM, quindi è stato aggiunto nuovamente al gestore VirtualBox, quindi , dalla riga di comando ho eseguito VBoxManage list vms per ottenere il nuovo ID dei cloni, copiato quell'ID nel file id all'interno del mio progetto (sarà qualcosa come PROJECT \ .vagrant \ machines \ default \ virtualbox \ id

Ora posso correre vagabondi "Vagrant up" comando con cygwin come utente normale e tutto funziona grande

La lezione:. essere molto AWA re di quale utente si eseguono le creazioni VM iniziali come, anche essere molto consapevoli di dove il gestore VirtualBox sta memorizzando le macchine virtuali.

0

Ho un problema simile su Win 7 Professional con le stesse versioni di programmi senza Vagrant OS: laravel/Homestead flavor (non so cosa sia).

Ma ho l'id corretto nei file .vagrant/machines/xxx/virtualbox/id. Quando uso qualsiasi comando vagabondo, tutti i file dalla cartella .vagrant/machines/xxx/virtualbox/ vengono rimossi. Ma per me basta accendere le macchine virtuali in VirtualBox e usare vagrant suspend e vagrant up.

Ecco il mio Vagranfile:

Vagrant.require_version '>= 1.6.0' 
SSH_PORT    = 22 
www, services, upload = {}, {}, {} 

# WWW SERVER 
www[:memory]   = 768 # MB 
www[:cpu]    = 1 # num. cpu cores 
www[:cpuTimeCap]  = 100 # 1-100 % 
www[:alias]    = 'www' 
www[:ip]    = '10.11.5.35' 
www[:sshPort]   = 58501    
www[:vboxName]   = 'WWW-name' 
www[:syncedFolder]  = './master-install' 
www[:box]    = 'freebsd9.2' 
www[:boxUrl]   = 'file:///E:/Virtuals/freebsd-9.2-amd64-wunki.box' 
www[:provisions]  = [] 
www[:provisions]  << 'common/install.sh' 
www[:provisions]  << 'master-install/install.sh' 
www[:provisions]  << 'master-install/name-install.sh' 

services[:memory]...etc. 

machines = [www, services, upload] 

Vagrant.configure('2') do |config| 
    machines.each do |machine| 
    config.vm.define "#{machine[:alias]}" do |node| 
     node.vm.box = machine[:box] 
     node.vm.box_url = machine[:boxUrl] 
     node.vm.hostname = machine[:alias] 
     node.vm.network :private_network, :ip => machine[:ip] 
     node.vm.network :forwarded_port, :guest => SSH_PORT, :host => machine[:sshPort], :id => 'ssh', :auto_correct => true 
     node.vm.synced_folder machine[:syncedFolder], "/vagrant", type: "rsync", rsync__exclude: ".git/" 
     node.vm.provider :virtualbox do |vbconf| 
     vbconf.customize ["modifyvm", :id, "--name", machine[:vboxName]] 
     vbconf.customize ["modifyvm", :id, "--memory", machine[:memory]] 
     vbconf.customize ["modifyvm", :id, "--cpus", machine[:cpu]] 
     vbconf.customize ["modifyvm", :id, "--cpuexecutioncap", machine[:cpuTimeCap]] 
     vbconf.customize ["modifyvm", :id, "--natdnsproxy1", "off"] 
     vbconf.customize ["modifyvm", :id, "--natdnshostresolver1", "off"] 
     vbconf.customize ["modifyvm", :id, "--ioapic", "on"] 
     vbconf.customize ["modifyvm", :id, "--chipset", "ich9"] 
     vbconf.customize ["modifyvm", :id, "--usb", "off"] 
     vbconf.customize ["modifyvm", :id, "--audio", "none"] 
     vbconf.customize ["modifyvm", :id, "--nictype1", "virtio"] 
     vbconf.customize ["modifyvm", :id, "--nictype2", "virtio"] 
     vbconf.customize ["modifyvm", :id, "--pae", "on"] 
     vbconf.customize ["modifyvm", :id, "--acpi", "on"] 
     vbconf.customize ["modifyvm", :id, "--firmware", "bios"] 
     end 

     machine[:provisions].each do |provision| 
     node.vm.provision "shell", path: provision 
     end 
    end 
    end 
end 

ps: questa non è la risposta, ma piuttosto aggiungere più informazioni al problema :)