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