Skąd Vagrant pobiera pliki .box?


267

Co stanie się z plikiem .box po wykonaniu następującego polecenia?

vagrant box add lucid32 http://files.vagrantup.com/lucid32.box

Nie mogę znaleźć lucid32.boxpliku w systemie plików po zakończeniu pobierania.


Wydaje mi się, że kompletnie mi brakuje twojej uwagi, ponieważ pierwszą rzeczą, która przychodzi mi do głowy, jest sudo find / -name lucid32.box.
irracjonalny Jan

dokładnie to, co zrobiłem, ale muszę coś przeoczyć, ponieważ nie mogłem znaleźć lucid32.boxza pomocą tego dokładnego polecenia ...
Calvin Cheng

3
Być może nie ma takiej nazwy. Wyszukiwanie z użyciem symboli zastępczych, na przykład *.boxmoże? (BTW, czy rozszerzenie nie byłoby .vbox?)
irracjonalne Jan

Tak masz rację. Wyszukiwanie powinno dotyczyć *.vboxi not *.box. Zagadka rozwiązana. :-) Czy chcesz wpisać odpowiedź, aby ją zaakceptować? Dzięki!
Calvin Cheng

1
@CalvinCheng: Myślę, że mylisz się, że jest to tylko obraz .vbox w archiwum tar. Jest to rzeczywiście archiwum tar, ale zawiera pliki takie jak box-disk1.vmdk, box.ovf i Vagrantfile. Nie wiem dokładnie, w jaki sposób są one używane do tworzenia plików używanych przez VirtualBox, ale jeśli otworzysz plik .vbox VB, zobaczysz, że jest to tylko XML. Zakładam, że Vagrant przekształca swoje pliki (także plik binarny i XML oraz Vagrantfile) w pliki XML i binarne używane przez VirtualBox. Jeśli otworzysz pliki binarne, zobaczysz, że są one różne, więc nie jest to prosta kwestia rozpakowywania i zmiany nazwy.
iconoclast

Odpowiedzi:


397

Jak wspomniano w dokumentach , pudełka są przechowywane w:

  • Mac OS X i Linux: ~/.vagrant.d/boxes
  • Windows: C:/Users/USERNAME/.vagrant.d/boxes

1
Ach Dziękuję za wyjaśnienie. Muszę być ślepy, aby przeoczyć to wyjaśnienie w dokumentacji.
Calvin Cheng,

1
@manojlds: patrz mój komentarz do pytania dotyczącego: pliku .vbox. To nie jest sama maszyna wirtualna, to tylko plik XML.
iconoclast

to samo miejsce w systemie operacyjnym Windows?
Arruda

34
Możesz także użyć env var VAGRANT_HOME, aby określić lokalizację .vagrant.d, jak w VAGRANT_HOME = D: \. Vagrant.d (Tak, działa również w systemie Windows).
Sven

5
w systemie C:\Users\{username}\.vagrant.d\boxesWindows znalazłem tylko .vmdkplik, a nie plik .box!!
Bilal

76

W systemie Mac / Linux pomyślnie pobrane skrzynki znajdują się w:

~/.vagrant.d/boxes

i nieudane skrzynki znajdują się w:

~/.vagrant.d/tmp

W systemach Windows znajduje się w folderze Użytkownicy:

C:\Users\%userprofile%\.vagrant.d\boxes

Mam nadzieję, że to pomoże. Dzięki


10
Nie jestem pewien, dlaczego zostało to odrzucone. Informacje o miejscu docelowym nieudanych pobrań były przydatne.
Alex Coventry,

~/.vagrant.d/boxesnigdy nie przechowuje samego pliku .box, tylko jego zawartość. ~/.vagrant/tmpsłuży do tymczasowego przechowywania .box podczas pobierania, ale jest usuwany po instalacji w Vagrant.
Luke Peterson

Trzecia linia (dla Windows) powinna brzmieć%userprofile%\.vagrant.d\boxes
J. Scott Elblein

Ta odpowiedź dotyczy przypadku, w którym naprawdę zależy Ci na miejscu na dysku twardym.
kiltek


20

Rzeczywisty .boxplik jest usuwany przez Vagrant po zakończeniu pobierania i instalacji skrzynki. Jak wspomniano w innych odpowiedziach, podczas pobierania plik .box jest przechowywany jako:

~/.vagrant.d/tmp/boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gdzie nazwa pliku to „box”, po której następuje 40-bajtowy skrót szesnastkowy. Na przykład plik tymczasowy w moim systemie to:

~/.vagrant.d/tmp/boxc74a85fe4af3197a744851517c6af4d4959db77f

O ile wiem, ten plik nigdy nie jest zapisywany z *.boxrozszerzeniem, co wyjaśnia, dlaczego powyższe wyszukiwania nie zlokalizowały go. Istnieją dwa sposoby odzyskania rzeczywistego pliku skrzynki:

  1. Pobierz plik .box ze strony vagrantcloud.com

    1. Znajdź interesujące Cię pudełko w atlasie . Na przykład https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1
    2. Zamień nazwę domeny na vagrantcloud.com. Więc https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1 staje się https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box .
    3. Dodaj /providers/virtualbox.boxna końcu tego adresu URL. Więc https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1 staje się https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box
    4. Zapisz plik .box
    5. Użyj .box, jak chcesz, na przykład, hostując go sam i wskazując config.vm.box_urladres URL. LUB
  2. Pobierz .box bezpośrednio z Vagrant

    Wymaga to zmodyfikowania źródła ruby, aby Vagrant nie usunął skrzynki po pomyślnym pobraniu.

    1. Znajdź plik box_add.rb w katalogu instalacyjnym Vagrant. W moim systemie znajduje się on pod adresem/Applications/Vagrant/embedded/gems/gems/vagrant-1.5.2/lib/vagrant/action/builtin/box_add.rb
    2. Znajdź funkcję box_add. W ramach box_addfunkcji znajduje się blok, który czyta:

      upewnij się # Upewnij się, że usuwamy plik tymczasowy po dodaniu go, # chyba że zostaliśmy przerwani, w takim przypadku trzymamy go w pobliżu #, abyśmy mogli wznowić pobieranie później. if! @download_interrupt @ logger.debug ("Usuwanie tymczasowego pudełka: # {box_url}") rozpocznij box_url.delete jeśli box_url uratuj Errno :: ENOENT # Nie jest to wielka sprawa, plik tymczasowy może nie istnieć koniec

    3. Skomentuj ten blok.
    4. Dodaj kolejne pole za pomocą vagrant add box <boxname>.
    5. Poczekaj na pobranie. Możesz oglądać, jak zapisuje się w ~/.vagrant.d/tmp/katalogu jako boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXplik.
    6. Zmień nazwę pliku na coś bardziej użytecznego. Np mv boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX trusty64.box.

Dlaczego miałbyś tego chcieć?

Dla mnie przydało się pobranie pliku .box, aby można go było przechowywać w lokalnej, szybkiej infrastrukturze, w przeciwieństwie do pobierania z katalogu boxów HashiCorp lub innego dostawcy boxów .

To naprawdę powinno być częścią domyślnej funkcjonalności Vagrant, ponieważ ma bardzo konkretny przypadek użycia.


czy można polubić, spakować lub tarować podfoldery w folderze box, aby utworzyć instalowalny plik box?
ThorSummoner

@ThorSummoner Tak, ale możesz również pozwolić Vagrantowi zająć się tym w takim przypadku, np. Za pomocą vagrant packagepolecenia: docs.vagrantup.com/v2/cli/package.html .
Luke Peterson

15

@Luke Peterson: Istnieje prostszy sposób na uzyskanie pliku .box.

Wystarczy wejść na https://atlas.hashicorp.com/boxes/search , wyszukać pole, które chcesz pobrać. Zwróć uwagę na adres URL skrzynki, np .:

https://atlas.hashicorp.com/ ubuntu / boxes / trusty64 / wersje / 20150530.0.1

Następnie możesz pobrać to pole, używając następującego adresu URL:

https://vagrantcloud.com/ ubuntu / pola / trusty64 / wersje / 20150530.0.1 /providers/virtualbox.box

Próbowałem i udało mi się pobrać wszystkie potrzebne mi pudełka. Mam nadzieję, że to pomoże.


To świetne znalezisko! Dziękuję Ci. ;)
Luke Peterson

Link jest teraz zepsuty - należy go zastąpić: app.vagrantup.com .
RtmY

6

W systemie Windows lokalizację można znaleźć tutaj. Nie znalazłem w Internecie żadnej dokumentacji na ten temat i nie było to dla mnie od razu oczywiste:

C:\Users\\{username}\\.vagrant.d\boxes


Czy więc% userprofile% \. Vagrant.d \ box działa? % userprofile% rozwija się do c: \ users \ {nazwa użytkownika}
TamusJRoyce

2

Oprócz

Mac:
~/.vagrant.d/

Windows:
C:\Users\%userprofile%\.vagrant.d\boxes

Musisz usunąć pliki w VirtualBox / OtherVMprovider, aby rozpocząć od nowa.


0

W systemie Windows 10 z Vagrant 2.2.2 ustawienie zmiennej środowiskowej VAGRANT_HOMEzapewni pobranie skrzynek do podfolderu określonego folderu VAGRANT_HOME.

W moim przypadku mogę ustawić VAGRANT_HOMEaby e:\vagrant_homei skrzynie przechowywane pod e:\vagrant_home\boxes.

To działa dla mnie.

Tam są przechowywane pudełka . Te maszyny wirtualne są tworzone w folderze skonfigurowanym Virtual Box. Aby ustawić folder przechowywania VM VirtualBox, przejdź do: VirtualBox GUI --> File --> Preferences --> General --> Default Machine Folder.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.