Где Vagrant загружает свои файлы .box?

267

Что происходит с файлом .box после выполнения следующей команды?

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

Я не могу найти lucid32.boxфайл в файловой системе после завершения загрузки.

Кельвин Ченг
источник
Я думаю, что полностью упускаю из виду вашу мысль, потому что первое, что приходит мне на ум, - это sudo find / -name lucid32.box.
иррациональный Джон
именно то, что я сделал, но я, должно быть, что-то упустил, потому что не мог найти, lucid32.boxиспользуя эту точную команду ...
Кельвин Ченг
3
Возможно, он не существует с таким именем. Поиски подстановочных знаков, такие как, *.boxможет быть? (Кстати, не будет ли расширение .vbox?)
иррациональный Джон
Да ты прав. Поиск должен быть для *.vboxи not *.box. Тайна разгадана. :-) Хотели бы вы ввести ответ, чтобы я мог его принять? Спасибо!
Кельвин Ченг
1
@CalvinCheng: Я думаю, вы ошибаетесь, считая, что это просто изображение .vbox в архиве tar. Это действительно архив tar, но он содержит файлы, такие как box-disk1.vmdk, box.ovf и Vagrantfile. Я не знаю точно, как они используются для создания файлов, которые использует VirtualBox, но если вы откроете файл .vbox VB, вы увидите, что это просто XML. Я предполагаю, что Vagrant преобразует свои файлы (также двоичный файл и файл XML, плюс Vagrantfile) в XML и двоичные файлы, используемые VirtualBox. Однако, если вы откроете бинарные файлы, вы увидите, что они разные, так что это не просто вопрос распаковки и переименования.
иконоборчество

Ответы:

397

Как уже упоминалось в документах , ящики хранятся по адресу:

  • Mac OS X и Linux: ~/.vagrant.d/boxes
  • Окна: C:/Users/USERNAME/.vagrant.d/boxes
manojlds
источник
1
Ах. Спасибо за разъяснения. Я должен быть слепым, чтобы пропустить это объяснение в документах.
Кельвин Ченг
1
@manojlds: см. мой комментарий по вопросу re: файл .vbox. Это не виртуальная машина сама по себе, это просто файл XML.
иконоборчество
такое же место на ОС Windows?
Арруда
34
Вы также можете использовать env var VAGRANT_HOME, чтобы указать расположение .vagrant.d, как в VAGRANT_HOME = D: \. Vagrant.d (да, это работает и в Windows).
Свен
5
в C:\Users\{username}\.vagrant.d\boxesWindows, я нашел только .vmdkфайл, а не .box!
Билал
76

В системе Mac / Linux успешно загруженные блоки расположены по адресу:

~/.vagrant.d/boxes

и неудачные коробки расположены по адресу:

~/.vagrant.d/tmp

В системах Windows он находится в папке Users:

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

Надеюсь, это поможет. Спасибо

Арбаб Назар
источник
10
Не уверен, почему это было понижено. Информация о месте неудачных загрузок была полезной.
Алекс Ковентри
~/.vagrant.d/boxesникогда не сохраняет сам файл .box, только его содержимое. ~/.vagrant/tmpиспользуется для временного хранения .box во время загрузки, но удаляется при установке в Vagrant.
Люк Петерсон
Третья строка (для Windows) должна быть%userprofile%\.vagrant.d\boxes
J. Scott Elblein
Этот ответ для случая, когда вы действительно заботитесь о своем жестком диске.
Килтек
45

Чтобы изменить путь, вы можете установить новый путь к переменной среды с именем: VAGRANT_HOME

export VAGRANT_HOME=my/new/path/goes/here/

Это может быть хорошо, если вы хотите, чтобы эти бродячие образы были на другом жестком диске.

Более подробная информация здесь в документации: http://docs.vagrantup.com/v2/other/environmental-variables.html

Süther
источник
20

Фактический .boxфайл удаляется Vagrant после завершения загрузки и установки. Как упоминалось в других ответах, при загрузке файл .box хранится как:

~/.vagrant.d/tmp/boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

где имя файла 'box', за которым следует 40-байтовый шестнадцатеричный хеш. Временный файл в моей системе, например:

~/.vagrant.d/tmp/boxc74a85fe4af3197a744851517c6af4d4959db77f

Насколько я могу судить, этот файл никогда не сохраняется с *.boxрасширением, которое объясняет, почему поиск не смог его найти. Есть два способа получить фактический файл коробки:

  1. Загрузите файл .box с vagrantcloud.com

    1. Найдите интересующую вас коробку на атласе . Например, https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1
    2. Заменить доменное имя на vagrantcloud.com. Так https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1 становится https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box .
    3. Добавьте /providers/virtualbox.boxв конец этого URL. Так https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1 становится https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box
    4. Сохраните файл .box
    5. Используйте .box по своему усмотрению, например, разместив его самостоятельно и указав config.vm.box_urlURL. ИЛИ
  2. Получите .box прямо из Vagrant

    Для этого необходимо изменить источник ruby, чтобы Vagrant не удалял ящик после успешной загрузки.

    1. Найдите файл box_add.rb в вашем установочном каталоге Vagrant. В моей системе это находится в/Applications/Vagrant/embedded/gems/gems/vagrant-1.5.2/lib/vagrant/action/builtin/box_add.rb
    2. Найдите функцию box_add. Внутри box_addфункции есть блок, который читает:

      Убедитесь, # что мы удалили временный файл после того, как добавили его, # если мы не были прерваны, и в этом случае мы сохраним его #, чтобы мы могли возобновить загрузку позже. if! @download_interrupted @ logger.debug ("Удаление временного блока: # {box_url}") begin box_url.delete if box_url rescue Errno :: ENOENT # Ничего страшного, временный файл может фактически не существовать end end

    3. Прокомментируйте этот блок.
    4. Добавьте еще одно поле, используя vagrant add box <boxname>.
    5. Подождите, пока он загрузится. Вы можете посмотреть его сохранить в ~/.vagrant.d/tmp/каталоге какboxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX файла.
    6. Переименуйте файл во что-нибудь более полезное. Например, mv boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX trusty64.box.

Зачем тебе это?

Для меня это было полезно для извлечения файла .box, чтобы его можно было разместить в локальной быстрой инфраструктуре, а не загружать его из коробочного каталога HashiCorp Atlas или другого поставщика коробок .

Это действительно должно быть частью функциональности Vagrant по умолчанию, поскольку она имеет очень определенный вариант использования.

Люк Петерсон
источник
Можно ли упаковать, сжать или сжать подпапки в папке коробок, чтобы создать устанавливаемый файл коробки?
ThorSummoner
@ThorSummoner Да, но вы можете также позволить Vagrant обработать его в этом случае, например, с помощью vagrant packageкоманды: docs.vagrantup.com/v2/cli/package.html .
Люк Петерсон
15

@ Люк Петерсон: Есть более простой способ получить файл .box.

Просто зайдите на https://atlas.hashicorp.com/boxes/search и найдите окно, которое вы хотите загрузить. Обратите внимание на URL-адрес поля, например:

https://atlas.hashicorp.com/ ubuntu / boxes / trusty64 / версии / 20150530.0.1

Затем вы можете скачать это поле, используя URL-адрес, например:

https://vagrantcloud.com/ ubuntu / boxes / trusty64 / version / 20150530.0.1 /providers/virtualbox.box

Я попробовал и успешно загрузил все нужные мне коробки. Надеюсь, что поможет.

Хип Хо
источник
Это отличная находка! Спасибо. ;)
Люк Петерсон
Ссылка теперь не работает - необходимо заменить на: app.vagrantup.com .
RtmY
6

В Windows местоположение можно найти здесь. Я не нашел никакой документации в интернете для этого, и это не было сразу очевидно для меня:

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

Марк Лю
источник
Работает ли% userprofile% \. Vagrant.d \ boxes? % userprofile% расширяется до c: \ users \ {username}
TamusJRoyce
2

В дополнении к

Mac:
~/.vagrant.d/

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

Вы должны удалить файлы в VirtualBox / OtherVMprovider, чтобы начать все сначала.

Punnerud
источник
0

В Windows 10 с Vagrant 2.2.2 установка переменной среды VAGRANT_HOMEобеспечит загрузку ящиков в подпапку папки, указанной для VAGRANT_HOME.

В моем случае я установил VAGRANT_HOMEна e:\vagrant_home, и ящики будут храниться под e:\vagrant_home\boxes.

Это работает для меня.

Вот где хранятся коробки . В виртуальных машинах создаются в папке , сконфигурированной в Virtual Box. Для того, чтобы установить папку для хранения VirtualBox VM, перейдите по ссылке: VirtualBox GUI --> File --> Preferences --> General --> Default Machine Folder.

user577736
источник