diff --git a/meteor/client/lib/virtualbox.js b/meteor/client/lib/virtualbox.js
index 4000289978..6d362492a9 100644
--- a/meteor/client/lib/virtualbox.js
+++ b/meteor/client/lib/virtualbox.js
@@ -1,5 +1,5 @@
var fs = require('fs');
-var exec = require('exec');
+var child_process = require('child_process');
var path = require('path');
isVirtualBoxInstalled = function (callback) {
@@ -24,22 +24,15 @@ isResolverSetup = function (callback) {
});
};
-setupVirtualBoxAndResolver = function (skipVirtualBox, callback) {
+setupResolver = function (callback) {
var installFile = path.join(getBinDir(), 'install');
var cocoaSudo = path.join(getBinDir(), 'cocoasudo');
var execCommand = cocoaSudo + ' --prompt="Kitematic Setup wants to make changes. Type your password to allow this." ' + installFile;
- console.log(execCommand);
- var env = {
- VIRTUALBOX_PKG_PATH: path.join(getBinDir(), 'virtualbox-4.3.12.pkg')
- };
- if (!skipVirtualBox) {
- env.INSTALL_VIRTUALBOX = true;
- }
- exec(execCommand, {env: env}, function (err, stdout) {
+ child_process.exec(execCommand, function (error, stdout, stderr) {
console.log(stdout);
- if (err) {
- console.log(err);
- callback(err);
+ if (error) {
+ console.log(error);
+ callback(error);
return;
}
console.log('Virtualbox Installation & Resolver config complete.');
@@ -47,3 +40,16 @@ setupVirtualBoxAndResolver = function (skipVirtualBox, callback) {
});
};
+setupVirtualBox = function (callback) {
+ child_process.exec('open -W ' + path.join(getBinDir(), 'virtualbox-4.3.12.pkg'), function (error, stdout, stderr) {
+ console.log(stdout);
+ if (error) {
+ console.log(error);
+ callback(error);
+ return;
+ }
+ console.log('Virtualbox Installation running.');
+ callback();
+ });
+};
+
diff --git a/meteor/client/views/dashboard/setup/setup-install.html b/meteor/client/views/dashboard/setup/setup-install.html
index 62f666f6fa..b179a4f7d2 100644
--- a/meteor/client/views/dashboard/setup/setup-install.html
+++ b/meteor/client/views/dashboard/setup/setup-install.html
@@ -21,10 +21,17 @@
{{/if}}
{{#if $eq this.index currentInstallStep}}
- {{> spinner}}
+ {{#if $eq this.index failedStep}}
+
+ {{else}}
+ {{> spinner}}
+ {{/if}}
{{this.message}}
+ {{#if $eq this.index failedStep}}
+
{{failedError}}
+ {{/if}}
{{/if}}
diff --git a/meteor/client/views/dashboard/setup/setup-install.js b/meteor/client/views/dashboard/setup/setup-install.js
index 5ff517fa80..af562d2b91 100644
--- a/meteor/client/views/dashboard/setup/setup-install.js
+++ b/meteor/client/views/dashboard/setup/setup-install.js
@@ -8,13 +8,18 @@ var async = require('async');
// - imperativeMessage: Message to show before running
var steps = [
- // Step 0, set up VirtualBox
+ // Set up VirtualBox
{
install: function (callback) {
isVirtualBoxInstalled(function (err, virtualBoxInstalled) {
- setupVirtualBoxAndResolver(virtualBoxInstalled, function () {
+ var installedYet = false;
+ if (!virtualBoxInstalled) {
+ setupVirtualBox(function (err) {
+ callback(err);
+ });
+ } else {
callback();
- });
+ }
});
},
pastMessage: 'VirtualBox installed',
@@ -22,7 +27,19 @@ var steps = [
imperativeMessage: 'Install VirtualBox if necessary'
},
- // Step 1: Set up the VM for running Kitematic apps
+ // Set up the routing.
+ {
+ install: function (callback) {
+ setupResolver(function (err) {
+ callback(err);
+ });
+ },
+ pastMessage: 'Container routing set up (root required).',
+ message: 'Setting up container routing (root required).',
+ imperativeMessage: 'Set up container routing to VM (root required).'
+ },
+
+ // Set up the VM for running Kitematic apps
{
install: function (callback) {
console.log('Checking if vm exists...');
@@ -49,7 +66,7 @@ var steps = [
imperativeMessage: 'Set up the Kitematic VM'
},
- // Step 2: Start the Kitematic VM
+ // Start the Kitematic VM
{
install: function (callback) {
startBoot2Docker(function (err) {
@@ -61,7 +78,7 @@ var steps = [
imperativeMessage: 'Start the Kitematic VM'
},
- // Step 3: Set up the default Kitematic images
+ // Set up the default Kitematic images
{
install: function (callback) {
Meteor.call('reloadDefaultContainers', function (err) {
@@ -93,8 +110,10 @@ runSetup = function (callback) {
}, function (err) {
if (err) {
// if any of the steps fail
- console.log('Kitematic setup failed at step' + currentStep);
+ console.log('Kitematic setup failed at step ' + currentStep);
console.log(err);
+ Session.set('failedStep', currentStep);
+ Session.set('failedError', err);
callback(err);
} else {
// Setup Finished
@@ -121,10 +140,6 @@ Template.setup_install.rendered = function() {
}
};
-Template.setup_install.events({
-
-});
-
Template.setup_install.steps = function () {
return steps.map(function (step, index) {
step.index = index;
@@ -135,11 +150,15 @@ Template.setup_install.steps = function () {
Template.setup_install.helpers({
currentInstallStep: function () {
return Session.get('currentInstallStep');
+ },
+ installComplete: function () {
+ return Session.get('currentInstallStep') === steps.length;
+ },
+ failedStep: function () {
+ return Session.get('failedStep');
+ },
+ failedError: function () {
+ return Session.get('failedError');
}
});
-Template.setup_install.helpers({
- installComplete: function () {
- return Session.get('currentInstallStep') === steps.length;
- }
-});
diff --git a/meteor/public/step_failed.png b/meteor/public/step_failed.png
new file mode 100644
index 0000000000..d8b8fb64bb
Binary files /dev/null and b/meteor/public/step_failed.png differ
diff --git a/meteor/public/step_failed@2x.png b/meteor/public/step_failed@2x.png
new file mode 100644
index 0000000000..47ef272a64
Binary files /dev/null and b/meteor/public/step_failed@2x.png differ
diff --git a/resources/install b/resources/install
index ab0ae8eb4f..ad6951aebf 100755
--- a/resources/install
+++ b/resources/install
@@ -3,10 +3,8 @@
# Lookup the Kitematic VM resolver for .dev domains
echo "nameserver 172.17.42.1" > /etc/resolver/dev
-# Install virtualbox
-if [ -n "$INSTALL_VIRTUALBOX" ]; then
- /usr/sbin/installer -pkg $VIRTUALBOX_PKG_PATH -target /
-fi
+DIR=$(dirname "$0")
+USER=`w -h | sort -u -t' ' -k1,1 | awk '{print $1}'`
/bin/rm -rf /Library/LaunchAgents/com.kitematic.route.plist
@@ -37,9 +35,6 @@ echo '
' > /Library/LaunchAgents/com.kitematic.route.plist
-DIR=$(dirname "$0")
-USER=`w -h | sort -u -t' ' -k1,1 | awk '{print $1}'`
-
sudo -u $USER $DIR/boot2docker init --lowerip=192.168.59.103 --upperip=192.168.59.103
# Add entries to routing table for Kitematic VM