laravel/Homestead
ボックスを here から手動でダウンロードしました。
私はボックスを正常に追加しました:
vagrant box add file:///path/to/the/laravel/Homestead.box --name 'laravel/Homestead'
しかし、vagrant up
を実行すると、Box 'laravel/Homestead' could not be found
にボックスが表示されていても、vagrant box list
と表示されます。
ダウンロードページには、vagrantfile
を生成するvagrant init laravel/Homestead
を実行すると書かれていますが、laravel/Homestead
リポジトリ自体がvagrantfile
を提供しています。
vagrant up
で生成されたvagrantfile
を使用してvagrant init laravel/Homestead
を実行できますが、laravel/Homestead
リポジトリのvagrantfile
内に必須の構成がありません。
これは生成されるvagrantfile
です
# -*- mode: Ruby -*-
# vi: set ft=Ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = "laravel/Homestead"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the Host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, Host: 8080
# Create a private network, which allows Host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the Host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Define a Vagrant Push strategy for pushing to Atlas. Other Push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/Push/atlas.html for more information.
# config.Push.define "atlas" do |Push|
# Push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# Enable provisioning with a Shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "Shell", inline: <<-Shell
# Sudo apt-get update
# Sudo apt-get install -y Apache2
# Shell
end
次の設定があります。
Vagrant.configure(2) do |config|
config.vm.box = "laravel/Homestead"
end
これをデフォルトのlaravel/Homestead
のvagrantfile
に追加しようとしましたが、機能しませんでした。
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION = "2"
confDir = $confDir ||= File.expand_path("~/.Homestead")
homesteadYamlPath = confDir + "/Homestead.yaml"
homesteadJsonPath = confDir + "/Homestead.json"
afterScriptPath = confDir + "/after.sh"
aliasesPath = confDir + "/aliases"
require File.expand_path(File.dirname(__FILE__) + '/scripts/Homestead.rb')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exists? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "~/.bash_aliases"
end
if File.exists? homesteadYamlPath then
Homestead.configure(config, YAML::load(File.read(homesteadYamlPath)))
elsif File.exists? homesteadJsonPath then
Homestead.configure(config, JSON.parse(File.read(homesteadJsonPath)))
end
if File.exists? afterScriptPath then
config.vm.provision "Shell", path: afterScriptPath
end
## HERE I added the setting ############################################
config.vm.box = "laravel/Homestead"
########################################################################
end
私は何をすべきか?
laravel/homstead project によって提供されるVagrantfileは、vagrant init
によって生成される一般的なVagrantfileよりも高度です
Laravel/homsteadプロジェクトによって提供されるVagrantfileは、いくつかのRubyコードを使用して、Vagrant環境のセットアップを支援します。 Homestead Ruby code からわかることは、0.4.0以上のバージョンのボックスがあることを確認していることです。
config.vm.box_version = settings["version"] ||= ">= 0.4.0"
ボックスを手動で追加すると、ローカルマシンに存在することがわかります。
$ vagrant box list
laravel/Homestead (virtualbox, 0)
ただし、プロバイダーの横の番号は0です。その番号はボックスバージョンです。ボックスが手動で追加されたため、ボックスのメタデータは使用できず、デフォルトでバージョン0を取得します。
ここでvagrant up
を実行すると、0.4.0以上のボックスがあるかどうかがコードによってチェックされます。これがないため、Box 'laravel/Homestead' could not be found
を取得しています。次に、必要な最小バージョンでボックスをダウンロードしようとします。
この問題を回避するには、ダウンロードしたボックスファイルと同じディレクトリにローカルでmetadata.jsonファイルを作成します。例えば:
{
"name": "laravel/Homestead",
"versions": [{
"version": "0.4.0",
"providers": [{
"name": "virtualbox",
"url": "file:///path/to/Homestead.box"
}]
}]
}
次にvagrant box add metadata.json
を実行します
これにより、バージョン付きのボックスがインストールされ、次の方法で確認できます。
$ vagrant box list
laravel/Homestead (virtualbox, 0.4.0)
これで、ローカルボックスを使用してvagrant up
を実行できるようになります。
以下の方法で問題を解決しました。 Mac El-capitanでのみテストします。
vagrant box add laravel/Homestead homestead.box
次のように表示されます。
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'laravel/Homestead' (v0) for provider:
box: Unpacking necessary files from: file:///Users/lwinmaungmaung/Vagrant%20Boxes/Homestead/homestead.box
==> box: Successfully added box 'laravel/Homestead' (v0) for 'virtual box'!
そして、私は迷惑なファイルディレクトリに変更しました
cd ~/.vagrant.d/
次に、ファイルを一覧表示すると、ボックスが表示されました
cent hashicorp-VAGRANTSLASH-precise64 laravel-VAGRANTSLASH-Homestead
laravel by cd laravel-VAGRANTSLASH-Homestead
およびlsと0
を参照
mv 0 0.4.0
のコマンド
vagrant box list
でリストした場合
cent (virtualbox, 0)
hashicorp/precise64 (virtualbox, 0)
laravel/Homestead (virtualbox, 0.4.0)
次に、Vagrant Homesteadファイルvi ~/Homestead/Vagrantfile
を編集して、以下を追加します。
config.vm.box = "laravel/Homestead"
config.vm.box_url = "https://atlas.hashicorp.com/laravel/Homestead"
config.vm.box_version = "0.4.0"
config.vm.box_check_update = false
そしてvagrant up
Metadata.jsonで直接追加できない人のために動作することを願っています。ありがとう。
誰かが同じ問題を抱えており、winを使用している場合は、msビジュアルライブラリに問題がないかどうかを確認し、メインはcurlです。
https://www.Microsoft.com/en-us/download/confirmation.aspx?id=5555
Vagrantにすべてを任せることができるのに、なぜボックスを手動でダウンロードするのですか?
ホームステッドのドキュメントで述べたように:vagrant box add laravel/Homestead
は、ボックスを追加してダウンロードします。
「このコマンドが失敗した場合、完全なURLを必要とする古いバージョンのVagrantがある可能性があります:」vagrant box add laravel/Homestead https://atlas.hashicorp.com/laravel/boxes/Homestead
次のように手動でボックスを追加できます:vagrant box add laravel/Homestead path/to/your/box/file.box
私は受け入れられた答えに従いましたが、それでも仮想ボックス「ボックス」をダウンロードしようとしていました。 scripts/Homestead.rbの以下の設定を変更する必要がありました
#config.vm.box_version = settings["version"] ||= ">= 1.0.0"
config.vm.box_url = "file:///home/divick/Homestead/virtualbox.box"
注:次のメッセージで問題があったため、バージョン行をコメントアウトしました。
Bringing machine 'Homestead-7' up with 'virtualbox' provider...
==> Homestead-7: Box 'laravel/Homestead' could not be found. Attempting to find and install...
Homestead-7: Box Provider: virtualbox
Homestead-7: Box Version: >= 1.0.0
==> Homestead-7: Box file was not detected as metadata. Adding it directly...
You specified a box version constraint with a direct box file
path. Box version constraints only work with boxes from Vagrant
Cloud or a custom box Host. Please remove the version constraint
and try again.
この問題に直面している人は、必ず vagrantをアップグレード し、laravel/Homestead
を追加すると問題なくインストールされるはずです。