vagrant.d außerhalb des Home-Ordners

80

Ich habe das Problem, dass sich mein Home-Verzeichnis tatsächlich auf einem Remote-Server befindet und mit ~ / .vagrant.d auf diesem Server die Leistung von Vagrant stark abnimmt (und die Größe der Dateiserver-Sicherung zunimmt).

Gibt es also eine Möglichkeit, mindestens ~ / vagrant.d / boxen aus dem Home-Verzeichnis zu verschieben?

Prost.

pagid
quelle

Antworten:

117

Standardmäßig verwendet Vagrant ~/.vagrant.d. Glücklicherweise bietet vagrant eine Umgebungsvariable, VAGRANT_HOMEmit der Sie vagrant home festlegen können.

Gehen Sie einfach wie folgt vor, um das Vagabundhaus zu wechseln (dies funktioniert nur in der aktuellen Sitzung).

export VAGRANT_HOME=/path/to/vagrant

Um es dauerhaft zu machen, fügen Sie dies Ihrer ~/.bash_profile(für Login-Shell) hinzu.

Update : VAGRANT_HOMEwurde der Dokumentation hinzugefügt - Umgebungsvariablen

VAGRANT_HOMEkann so eingestellt werden, dass das Verzeichnis geändert wird, in dem Vagrant den globalen Status speichert. Standardmäßig ist dies auf eingestellt ~/.vagrant.d. Im Vagrant-Home-Verzeichnis werden beispielsweise Boxen gespeichert, sodass es auf der Festplatte sehr groß werden kann.

Terry Wang
quelle
8
Eigentlich fand ich , dass VAGRANT_HOME eingestellt werden muss und dass die Eigenschaft „machinefolder“ in VirtualBox eingestellt werden muss durch „VBoxManage setproperty machinefolder <path>“ __ Danke für den Hinweis
pagid
1
Meine persönlichen Erkenntnisse: Wenn Sie die Umgebungsvariable dauerhaft machen (in ~/.bash_profileoder wenn Sie ZSH in ~/.zshrcusw. verwenden), stellen Sie sicher, dass Sie auch schreiben export. Überprüfen Sie, ob es in envder Befehlszeile mit gesetzt ist. Wenn Sie virtualbox als Provider verwenden, gibt es in der GUI auch eine Einstellung für den Standardpfad.
Urs
2
Verwenden Sie für Windows das Dialogfeld Umgebungsvariablen und fügen Sie VAGRANT_HOME mit beispielsweise dem Wert d: \ vagrant hinzu. Funktioniert zumindest mit Version 2.2.4 einwandfrei. Denken Sie daran, die vorhandene PowerShell-Konsole zu schließen und eine neue zu öffnen, um die neue Umgebungsvariable zu laden.
Eivind Gussiås Løkseth
Auf WSL2 - Ich hatte ein Problem, bei dem ich eine von Vagrant erstellte virtuelle Box löschte und plötzlich keinen Vagabund mehr erstellen konnte. Ich konnte das Problem beheben, indem ich den Ordner ~ / .vagrant.d auf mein Windows C-Laufwerk kopierte. / mnt / c / Danach konnte ich wieder Vagabund machen
Serup
16

VAGRANT_HOMEfunktioniert nicht gut in meinem Windows 8.1. Es hat bei mir funktioniert, als ich die Datei geändert habe

D: \ HashiCorp \ Vagrant \ embedded \ gems \ gems \ vagrant-1.5.3 \ lib \ vagrant \ environment.rb

in Zeile 117 bis

@home_path = Util::Platform.fs_real_path("D:/vagrant/home/")

wie Steve H sagte und es funktioniert gut.

Genial
quelle
4
Wenn Sie den lokalen Windows-Pfad verwenden, denken Sie daran, dem Backslash zu entgehen (dies hat mich erwischt). Dh "D: \\ vagrant \\ home"
Guerilla
2
Es funktioniert jetzt gut, zumindest mit Version 2.2.4. Ich habe VAGRANT_HOME zum Dialogfeld "Umgebungsvariablen" hinzugefügt und den Wert auf "d: \ vagrant" gesetzt. Dies hat nach dem Schließen und Öffnen einer neuen PowerShell-Konsole einwandfrei funktioniert.
Eivind Gussiås Løkseth
Ja es funktioniert. Keine Notwendigkeit, Backslashes zu entkommen. Einfach VAGRANT_HOME=d:\my\alternative\path. Ich denke, Sie haben die Umgebung nicht neu geladen (z. B. durch Schließen und Neustarten der Konsole), nachdem Sie die Umgebungsvariable erstellt haben.
David Ferenczy Rogožan
Tun Sie niemals genau das, was Sie getan haben (eine Datei geändert, die Teil einer von Ihnen verwendeten Software ist). Sie müssten Ihre Änderung jedes Mal neu anwenden, wenn Sie Vagrant neu installieren oder auf eine neuere Version aktualisieren.
David Ferenczy Rogožan
12

Es kann nützlich sein, dies durch Ausführen dauerhaft auf einer Windows-Box festzulegen

setx VAGRANT_HOME "/d/.vagrant.d/"
ivica
quelle
1
Sie müssen es von dem Pfad ausführen, in dem sich die setx-App befindet. Der häufigste Pfad ist: C: \ Windows \ System32
versedi
setx kann ausgeführt werden, ohne sich bewegen zu müssen C:\Windows\System32, wie C:\Windows\System32es normalerweise auf dem ist %path%.
lucid_dreamer
5

Ändern Sie unter Windows die Zeile 17 von environment.rb unter:
vagrant \ embedded \ gems \ gems \ vagrant-1.xxdev \ lib \ vagrant \ environment.rb

Storsey
quelle
3
Ich bin mir nicht sicher, warum ich abgewählt wurde. Dies ist relevant für die Frage - es wurde nicht als Linux bezeichnet und könnte jemandem helfen, wie ich es getan habe.
Storsey
14
Das Herumspielen in den Ruby-Dateien ist überhaupt kein guter Rat, und die Umgebungsvariable VAGRANT_HOME funktioniert auch unter Windows einwandfrei.
Pagid
Ich wusste nicht, dass die env-Variable unter Win verfügbar ist. Ich habe das richtig geklärt, danke!
Storsey
1
Dies ist eine gültige Antwort. Nicht jeder möchte (oder weiß) Windows neu starten, damit die neuen Umgebungsvariablen wirksam werden. Wenn jemand versucht, die Kerndateien zu ändern, ist dies wahrscheinlich nur vorübergehend oder die Verzweiflung hat sie festgelegt. support.microsoft.com/en-us/kb/821761
TH_
Warum genau sollten Sie Windows neu starten müssen? Das wird definitiv nicht benötigt. Ich habe gerade eine Umgebungsvariable erstellt und sie funktioniert einwandfrei. Kein Neustart. Möglicherweise müssen Sie nur eine Umgebung in einer Konsole neu laden oder sie starten, nachdem Sie die Umgebungsvariable erstellt haben. Ändern Sie nicht die Dateien, die Teil einer Software oder eines Pakets sind.
David Ferenczy Rogožan
2

Ein anderer Ort (der Stammort, an dem ENV-Variablen gelesen werden) befindet sich in shared_helpers.rb, Zeile 71 (vagrant v 1.6.5):

 # This returns the path to the ~/.vagrant.d folder where Vagrant's
  # per-user state is stored.
  #
  # @return [Pathname]
  def self.user_data_path
    # Use user spcified env var if available
    path = ENV["VAGRANT_HOME"]

    # On Windows, we default to the USERPROFILE directory if it
    # is available. This is more compatible with Cygwin and sharing
    # the home directory across shells.
    if !path && ENV["USERPROFILE"]
      path = "#{ENV["USERPROFILE"]}/.vagrant.d"
    end

    # Fallback to the default
    path ||= "~/.vagrant.d"

    Pathname.new(path).expand_path
end

Ich denke, der beste Weg ist, die Umgebungsvariable VAGRANT_HOME zu verwenden, falls die Version aktualisiert wird.

Sie können diese Funktion wie folgt verwenden:

disk_path = self.user_data_path().to_s
Christophe
quelle
Dies war meine bevorzugte Lösung. Es funktioniert in einer vagabundierenden Datei als Vagrant::user_data_path().to_s.
Tomas Creemers
0

Setzen Sie für Windows-Benutzer die Umgebungsvariable VAGRANT_HOMEauf den neuen Speicherort. Möglicherweise müssen Sie Ihren PC neu starten, damit er wirksam wird.

Dalton Tan
quelle