Hello Ninjas, I am new to Vagrant (and I am already liking it) and I've
bumped into an interesting situation. I've upped hashicorp/precise64 with
my provisioning script on top of macOS Sierra running VirtualBox and
everything seems fine. I am able to run our PHP solution. But when I up the
same box but now on top of Windows running Hyper-V (with the proper
adjustments in the Vagrantfile - see both below) I get now errors in
deploying it, no errors in provisioning it,* but the application
(PHP-based) fails to run with an Exception Handler error.*
Any ideas on how to start the debugging (mostly painful) session? I want to
deploy this box onto Azure (I have received the box from another company
that is leaving the task to us to maintaining it).
Keep in mind that BOTH boxes get upped and provisioned WITHOUT ERRORS (at
least none are shown) during the *vagrant up*.
*Vagrant File (macOS + VirtualBox)*
require "yaml"
require "fileutils"
CONF = YAML.load(File.open(File.join(File.dirname(__FILE__),
"provision/config.yml"), File::RDONLY).read)
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.hostname = CONF['vm']['name']
config.vm.network "private_network", type: "dhcp"
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct:
true
config.vm.provider "virtualbox" do |vb|
vb.name = CONF['vm']['name']
vb.customize ["modifyvm", :id, "--memory", CONF['vm']['memory']]
end
config.vm.define CONF['vm']['name'] do |vb|
end
cache_apt = vcache(config.vm.box)
config.vm.synced_folder cache_apt, "/var/cache/apt/archives/", type:
"nfs", nfs_udp: false
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder ".", "/srv/shared", type: "nfs", nfs_udp: false
config.vm.provision "shell", run: "always", inline: "cat
/etc/network/interfaces | grep -v 'post-up' | tee /etc/network/interfaces
1>/dev/null 2>&1 ; sed -i.bak 's/timeout=-1/timeout=1/'
/etc/grub.d/00_header ; rm /etc/grub.d/00_header.bak"
config.vm.provision "shell", path: "./provision/provisioner.sh"
end
def vcache(box_name)
cache_dir = File.join(File.expand_path("~"), '.vagrant.d', 'cache',
'apt', box_name)
partial_dir = File.join(cache_dir, 'partial')
FileUtils.mkdir_p(partial_dir) unless File.exists? partial_dir
cache_dir
end
*VagrantFile (Windows + Hyper-V)*
require "yaml"
require "fileutils"
CONF = YAML.load(File.open(File.join(File.dirname(__FILE__),
"provision/config.yml"), File::RDONLY).read)
Vagrant.configure("2") do |config|
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
config.vm.box = "hashicorp/precise64"
#config.vm.box_url = "http://files.vagrantup.com/precise64.box";
config.vm.hostname = CONF['vm']['name']
config.vm.network "private_network", type: "dhcp"
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct:
true
#config.vm.network "public_network"
config.vm.provider "hyperv" do |h|
h.vmname = CONF['vm']['name']
h.memory = CONF['vm']['memory']
h.enable_virtualization_extensions = true
h.vm_integration_services = {
guest_service_interface: true,
heartbeat: true,
key_value_pair_exchange: true,
shutdown: true,
time_synchronization: true,
vss: true
}
end
config.vm.define CONF['vm']['name'] do |h|
end
config.vm.synced_folder ".", "/srv/shared", type: "rsync", rsync__exclude:
".git/", rsync__args: ["--verbose", "--rsync-path='rsync'", "--archive",
"--delete", "-z"]
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provision "shell", run: "always", inline: "cat
/etc/network/interfaces | grep -v 'post-up' | tee /etc/network/interfaces
1>/dev/null 2>&1 ; sed -i.bak 's/timeout=-1/timeout=1/'
/etc/grub.d/00_header ; rm /etc/grub.d/00_header.bak"
config.vm.provision "shell", path: "./provision/provisioner.sh"
end
I get no errors from provision.sh on both cases. But just in case, here it
is (attached).
Config.yaml only contains the machine name and the DB name (both the same
and irrelevant here).
Thank you in advance.
Evandro
--
This mailing list is governed under the HashiCorp Community Guidelines -
https://www.hashicorp.com/community-guidelines.html. Behavior in violation of
those guidelines may result in your removal from this mailing list.
GitHub Issues: https://github.com/mitchellh/vagrant/issues
IRC: #vagrant on Freenode
---
You received this message because you are subscribed to the Google Groups
"Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vagrant-up/82a373ce-5a36-4b6a-9bd6-0d45687f2cbc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
rm -rf /vagrant
mkdir -p /srv/shared/.tmp
echo "+ configure profile"
echo "CURRENT_IP=\$(ifconfig eth1 | grep 'inet addr' | awk '{print \$2}')" > /home/vagrant/.bash_profile
echo 'echo -e "\nCurrent IP ${CURRENT_IP}\n"' >> /home/vagrant/.bash_profile
echo "cd /srv/shared" >> /home/vagrant/.bash_profile
echo "+ update apt repository"
apt-get -q -y update 1>/dev/null 2>&1
echo "+ install htop"
apt-get -q -y install htop 1>/dev/null 2>&1
echo "+ install postfix"
debconf-set-selections <<< "postfix postfix/mailname string localhost"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
apt-get install -q -y postfix 1>/dev/null 2>&1
sed -i.bkp -e 's/inet_interfaces.*/inet_interfaces = localhost/' /etc/postfix/main.cf
sed -i.bkp -e 's/mydestination.*/mydestination = /' /etc/postfix/main.cf
rm -f /etc/postfix/*.bkp
service postfix restart 1>/dev/null 2>&1
echo "+ install unzip"
apt-get -q -y install unzip -qq 1>/dev/null 2>&1
echo "+ install apache2"
apt-get -q -y install apache2 1>/dev/null 2>&1
apt-get -q -y install libapache2-mod-php5 1>/dev/null 2>&1
echo "+ enable apache modules"
/usr/sbin/a2enmod rewrite 1>/dev/null 2>&1
echo "+ configure vhost"
rm -f /etc/apache2/sites-enabled/*
ln -sf /srv/shared/provision/httpd/default /etc/apache2/sites-enabled/default
service apache2 restart 1>/dev/null 2>&1
echo "+ install mysql server and client"
apt-get -q -y install mysql-server mysql-client 1>/dev/null 2>&1
service mysql restart 1>/dev/null 2>&1
echo "+ provisioning database"
bash /srv/shared/provision/database.sh
if [ $? -ne 0 ]; then
echo "ERROR: failed on database provisioning"
fi
echo "+ install php5"
apt-get -q -y install php5 php5-mysql php5-json php5-mcrypt 1>/dev/null 2>&1
service apache2 restart 1>/dev/null 2>&1
echo "+ install git, make, imagemagick, curl"
apt-get -q -y install git make imagemagick curl 1>/dev/null 2>&1
echo "+ install node.js and npm"
git clone https://github.com/visionmedia/n.git /opt/n 1>/dev/null 2>&1
cd /opt/n
make install 1>/dev/null 2>&1
n stable 1>/dev/null 2>&1
echo "+ install required global NPM packages"
npm install -g grunt-cli 1>/dev/null 2>&1
echo "+ install composer"
cd /usr/bin/ ; curl -Ss https://getcomposer.org/installer | php 1>/dev/null 2>&1
echo "+ project setup"
cd /srv/shared/src/ ; grunt build 1>/dev/null 2>&1
VM_NAME=$(cat /srv/shared/provision/config.yml | grep name: | head -n 1 | sed -e 's/.*name: \(.*\)/\1/')
sed -i.bak -e "s/your-machine-name/${VM_NAME}/" /srv/shared/server/app/config/app.php
rm -f /srv/shared/server/app/config/app.php.bak
exit 0