mirror of https://github.com/docker/docs.git
219 lines
6.7 KiB
JavaScript
219 lines
6.7 KiB
JavaScript
var React = require('react/addons');
|
|
var Router = require('react-router');
|
|
var Radial = require('./Radial.react.js');
|
|
var async = require('async');
|
|
var assign = require('object-assign');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var boot2docker = require('./boot2docker.js');
|
|
var virtualbox = require('./virtualbox.js');
|
|
var util = require('./util.js');
|
|
var docker = require('./docker.js');
|
|
var ContainerStore = require('./ContainerStore.js');
|
|
|
|
var setupSteps = [
|
|
{
|
|
run: function (callback, progressCallback) {
|
|
console.log(util.supportDir());
|
|
var installed = virtualbox.installed();
|
|
if (!installed) {
|
|
util.download('https://s3.amazonaws.com/kite-installer/' + virtualbox.INSTALLER_FILENAME, path.join(util.supportDir(), virtualbox.INSTALLER_FILENAME), virtualbox.INSTALLER_CHECKSUM, function (err) {
|
|
if (err) {callback(err); return;}
|
|
virtualbox.install(function (err) {
|
|
if (!virtualbox.installed()) {
|
|
callback('VirtualBox could not be installed. The installation either failed or was cancelled. Please try closing all VirtualBox instances and try again.');
|
|
} else {
|
|
callback(err);
|
|
}
|
|
});
|
|
}, function (progress) {
|
|
progressCallback(progress);
|
|
});
|
|
} else {
|
|
virtualbox.version(function (err, installedVersion) {
|
|
if (err) {callback(err); return;}
|
|
if (util.compareVersions(installedVersion, virtualbox.REQUIRED_VERSION) < 0) {
|
|
// Download a newer version of Virtualbox
|
|
util.downloadFile(Setup.BASE_URL + virtualbox.INSTALLER_FILENAME, path.join(util.getResourceDir(), virtualbox.INSTALLER_FILENAME), virtualbox.INSTALLER_CHECKSUM, function (err) {
|
|
if (err) {callback(err); return;}
|
|
virtualbox.kill(function (err) {
|
|
if (err) {callback(err); return;}
|
|
virtualbox.install(function (err) {
|
|
if (err) {callback(err); return;}
|
|
virtualbox.version(function (err, installedVersion) {
|
|
if (err) {callback(err); return;}
|
|
if (util.compareVersions(installedVersion, virtualbox.REQUIRED_VERSION) < 0) {
|
|
callback('VirtualBox could not be installed. The installation either failed or was cancelled. Please try closing all VirtualBox instances and try again.');
|
|
} else {
|
|
callback(err);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}, function (progress) {
|
|
progressCallback(progress);
|
|
});
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
},
|
|
message: 'Downloading VirtualBox...'
|
|
},
|
|
{
|
|
run: function (callback) {
|
|
virtualbox.deleteVM('kitematic-vm', function (err, removed) {
|
|
if (err) {
|
|
console.log(err);
|
|
}
|
|
callback();
|
|
});
|
|
},
|
|
message: 'Cleaning up existing Docker VM...'
|
|
},
|
|
|
|
// Initialize Boot2Docker if necessary.
|
|
{
|
|
run: function (callback) {
|
|
boot2docker.exists(function (err, exists) {
|
|
if (err) { callback(err); return; }
|
|
if (!exists) {
|
|
boot2docker.init(function (err) {
|
|
callback(err);
|
|
});
|
|
} else {
|
|
if (!boot2docker.sshKeyExists()) {
|
|
callback('Boot2Docker SSH key doesn\'t exist. Fix by removing the existing Boot2Docker VM and re-run the installer. This usually occurs because an old version of Boot2Docker is installed.');
|
|
} else {
|
|
boot2docker.isoVersion(function (err, version) {
|
|
if (err || util.compareVersions(version, boot2docker.version()) < 0) {
|
|
boot2docker.stop(function(err) {
|
|
boot2docker.upgrade(function (err) {
|
|
callback(err);
|
|
});
|
|
});
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
message: 'Setting up the Docker VM...'
|
|
},
|
|
{
|
|
run: function (callback) {
|
|
boot2docker.waitWhileStatus('saving', function (err) {
|
|
boot2docker.status(function (err, status) {
|
|
if (err) {callback(err); return;}
|
|
if (status !== 'running') {
|
|
boot2docker.start(function (err) {
|
|
callback(err);
|
|
});
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
});
|
|
},
|
|
message: 'Starting the Docker VM...'
|
|
},
|
|
{
|
|
run: function (callback) {
|
|
boot2docker.ip(function (err, ip) {
|
|
if (err) {callback(err); return;}
|
|
console.log('Setting host IP to: ' + ip);
|
|
docker.setHost(ip);
|
|
callback(err);
|
|
});
|
|
},
|
|
message: 'Detecting Docker VM...'
|
|
}
|
|
];
|
|
|
|
var Setup = React.createClass({
|
|
mixins: [ Router.Navigation ],
|
|
getInitialState: function () {
|
|
return {
|
|
message: '',
|
|
progress: 0
|
|
};
|
|
},
|
|
render: function () {
|
|
var radial;
|
|
if (this.state.progress) {
|
|
radial = <Radial progress={this.state.progress}/>;
|
|
} else if (this.state.error) {
|
|
radial = <Radial error={true} spin="true" progress="100"/>;
|
|
} else {
|
|
radial = <Radial spin="true" progress="100"/>;
|
|
}
|
|
if (this.state.error) {
|
|
return (
|
|
<div className="setup">
|
|
{radial}
|
|
<p className="error">Error: {this.state.error}</p>
|
|
</div>
|
|
);
|
|
} else {
|
|
return (
|
|
<div className="setup">
|
|
{radial}
|
|
<p>{this.state.message}</p>
|
|
</div>
|
|
);
|
|
}
|
|
},
|
|
componentWillMount: function () {
|
|
this.setState({});
|
|
},
|
|
componentDidMount: function () {
|
|
var self = this;
|
|
this.setup(function (err) {
|
|
if (!err) {
|
|
boot2docker.ip(function (err, ip) {
|
|
docker.setHost(ip);
|
|
ContainerStore.init(function () {
|
|
self.transitionTo('containers');
|
|
});
|
|
});
|
|
}
|
|
});
|
|
},
|
|
setup: function (callback) {
|
|
var self = this;
|
|
var currentStep = 0;
|
|
async.eachSeries(setupSteps, function (step, callback) {
|
|
console.log('Performing step ' + currentStep);
|
|
self.setState({progress: 0});
|
|
self.setState({message: step.message});
|
|
step.run(function (err) {
|
|
if (err) {
|
|
callback(err);
|
|
} else {
|
|
currentStep += 1;
|
|
callback();
|
|
}
|
|
}, function (progress) {
|
|
self.setState({progress: progress});
|
|
});
|
|
}, function (err) {
|
|
if (err) {
|
|
// if any of the steps fail
|
|
console.log('Kitematic setup failed at step ' + currentStep);
|
|
console.log(err);
|
|
self.setState({error: err.message});
|
|
callback(err);
|
|
} else {
|
|
// Setup Finished
|
|
console.log('Setup finished.');
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = Setup;
|