mirror of https://github.com/docker/docs.git
commit
725d146ec4
13
index.js
13
index.js
|
@ -7,6 +7,9 @@ var path = require('path');
|
||||||
var app = require('app');
|
var app = require('app');
|
||||||
var BrowserWindow = require('browser-window');
|
var BrowserWindow = require('browser-window');
|
||||||
|
|
||||||
|
var dirname = __dirname;
|
||||||
|
console.log(dirname);
|
||||||
|
|
||||||
var freeport = function (callback) {
|
var freeport = function (callback) {
|
||||||
var server = net.createServer();
|
var server = net.createServer();
|
||||||
var port = 0;
|
var port = 0;
|
||||||
|
@ -47,7 +50,7 @@ var start = function (callback) {
|
||||||
console.log('MongoDB: ' + mongoPort);
|
console.log('MongoDB: ' + mongoPort);
|
||||||
console.log('webPort: ' + webPort);
|
console.log('webPort: ' + webPort);
|
||||||
child_process.exec('kill $(ps aux -e | grep PURPOSE=KITEMATIC | awk \'{print $2}\') && rm ' + path.join(dataPath, 'mongod.lock'), function (error, stdout, stderr) {
|
child_process.exec('kill $(ps aux -e | grep PURPOSE=KITEMATIC | awk \'{print $2}\') && rm ' + path.join(dataPath, 'mongod.lock'), function (error, stdout, stderr) {
|
||||||
var mongoChild = child_process.spawn(path.join(__dirname, 'resources', 'mongod'), ['--bind_ip', '127.0.0.1', '--dbpath', dataPath, '--port', mongoPort, '--unixSocketPrefix', dataPath], {
|
var mongoChild = child_process.spawn(path.join(dirname, 'resources', 'mongod'), ['--bind_ip', '127.0.0.1', '--dbpath', dataPath, '--port', mongoPort, '--unixSocketPrefix', dataPath], {
|
||||||
env: {
|
env: {
|
||||||
PURPOSE: 'KITEMATIC'
|
PURPOSE: 'KITEMATIC'
|
||||||
}
|
}
|
||||||
|
@ -71,11 +74,11 @@ var start = function (callback) {
|
||||||
user_env.BIND_IP = '127.0.0.1';
|
user_env.BIND_IP = '127.0.0.1';
|
||||||
user_env.DB_PATH = dataPath;
|
user_env.DB_PATH = dataPath;
|
||||||
user_env.MONGO_URL = 'mongodb://localhost:' + mongoPort + '/meteor';
|
user_env.MONGO_URL = 'mongodb://localhost:' + mongoPort + '/meteor';
|
||||||
user_env.METEOR_SETTINGS = fs.readFileSync(path.join(__dirname, 'resources', 'settings.json'), 'utf8');
|
user_env.METEOR_SETTINGS = fs.readFileSync(path.join(dirname, 'resources', 'settings.json'), 'utf8');
|
||||||
user_env.DIR = __dirname;
|
user_env.DIR = dirname;
|
||||||
user_env.NODE_ENV = 'production';
|
user_env.NODE_ENV = 'production';
|
||||||
user_env.NODE_PATH = path.join(__dirname, 'node_modules');
|
user_env.NODE_PATH = path.join(dirname, 'node_modules');
|
||||||
var nodeChild = child_process.spawn(path.join(__dirname, 'resources', 'node'), [path.join(__dirname, 'bundle', 'main.js')], {
|
var nodeChild = child_process.spawn(path.join(dirname, 'resources', 'node'), [path.join(dirname, 'bundle', 'main.js')], {
|
||||||
env: user_env
|
env: user_env
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ Boot2Docker = {};
|
||||||
Boot2Docker.REQUIRED_IP = '192.168.60.103';
|
Boot2Docker.REQUIRED_IP = '192.168.60.103';
|
||||||
|
|
||||||
Boot2Docker.command = function () {
|
Boot2Docker.command = function () {
|
||||||
return path.join(Util.getBinDir(), 'boot2docker-1.2.0') + ' --vm="kitematic-vm"';
|
return path.join(Util.getBinDir().replace(' ', '\\ '), 'boot2docker-1.2.0') + ' --vm="kitematic-vm"';
|
||||||
};
|
};
|
||||||
|
|
||||||
Boot2Docker.exec = function (command, callback) {
|
Boot2Docker.exec = function (command, callback) {
|
||||||
|
|
|
@ -125,13 +125,13 @@ ImageUtil.rebuild = function (imageId) {
|
||||||
});
|
});
|
||||||
ImageUtil.rebuildHelper(image, function (err) {
|
ImageUtil.rebuildHelper(image, function (err) {
|
||||||
if (err) { console.error(err); }
|
if (err) { console.error(err); }
|
||||||
});
|
|
||||||
_.each(apps, function (app) {
|
_.each(apps, function (app) {
|
||||||
app = Apps.findOne(app._id);
|
app = Apps.findOne(app._id);
|
||||||
AppUtil.run(app, function (err) {
|
AppUtil.run(app, function (err) {
|
||||||
if (err) { console.error(err); }
|
if (err) { console.error(err); }
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
ImageUtil.rebuildHelper(image, function (err) {
|
ImageUtil.rebuildHelper(image, function (err) {
|
||||||
if (err) { console.error(err); }
|
if (err) { console.error(err); }
|
||||||
|
|
|
@ -76,7 +76,7 @@ Installer.steps = [
|
||||||
Boot2Docker.exists(function (err, exists) {
|
Boot2Docker.exists(function (err, exists) {
|
||||||
if (err) { callback(err); return; }
|
if (err) { callback(err); return; }
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
var vmFilesPath = path.join(Util.getHomePath(), 'VirtualBox\ VMs', 'kitematic-vm');
|
var vmFilesPath = path.join(Util.getHomePath(), 'VirtualBox VMs', 'kitematic-vm');
|
||||||
if (fs.existsSync(vmFilesPath)) {
|
if (fs.existsSync(vmFilesPath)) {
|
||||||
Util.deleteFolder(vmFilesPath);
|
Util.deleteFolder(vmFilesPath);
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,7 @@ Installer.steps = [
|
||||||
},
|
},
|
||||||
pastMessage: 'Started the Kitematic VM',
|
pastMessage: 'Started the Kitematic VM',
|
||||||
message: 'Starting the Kitematic VM',
|
message: 'Starting the Kitematic VM',
|
||||||
|
subMessage: '(This may take a few minutes)',
|
||||||
futureMessage: 'Start the Kitematic VM'
|
futureMessage: 'Start the Kitematic VM'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -164,6 +165,7 @@ Installer.steps = [
|
||||||
];
|
];
|
||||||
|
|
||||||
Installer.run = function (callback) {
|
Installer.run = function (callback) {
|
||||||
|
Session.set('installing', true);
|
||||||
var currentStep = 0;
|
var currentStep = 0;
|
||||||
Session.set('currentInstallStep', currentStep);
|
Session.set('currentInstallStep', currentStep);
|
||||||
Session.set('numberOfInstallSteps', this.steps.length);
|
Session.set('numberOfInstallSteps', this.steps.length);
|
||||||
|
@ -191,6 +193,7 @@ Installer.run = function (callback) {
|
||||||
callback(err);
|
callback(err);
|
||||||
} else {
|
} else {
|
||||||
// Setup Finished
|
// Setup Finished
|
||||||
|
Session.set('installing', false);
|
||||||
console.log('Setup finished.');
|
console.log('Setup finished.');
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,10 @@ Router.map(function () {
|
||||||
|
|
||||||
this.route('setup_intro', {
|
this.route('setup_intro', {
|
||||||
path: '/setup/intro',
|
path: '/setup/intro',
|
||||||
controller: 'SetupController'
|
controller: 'SetupController',
|
||||||
|
onBeforeAction: function () {
|
||||||
|
Session.set('installing', true);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.route('setup_install', {
|
this.route('setup_install', {
|
||||||
|
|
|
@ -73,7 +73,7 @@ Sync.addAppWatcher = function (app) {
|
||||||
if (err.indexOf('The archive file is missing on some hosts') !== -1) {
|
if (err.indexOf('The archive file is missing on some hosts') !== -1) {
|
||||||
results = archiveErrorPattern.exec(err);
|
results = archiveErrorPattern.exec(err);
|
||||||
location = results[1].replace(' ', '\\ ');
|
location = results[1].replace(' ', '\\ ');
|
||||||
var fullLocation = path.join(Util.getHomePath(), 'Library/Application\\ Support/Unison', location);
|
var fullLocation = path.join(Util.getHomePath(), 'Library/Application Support/Unison', location);
|
||||||
var cmd = '/bin/rm -rf ' + fullLocation;
|
var cmd = '/bin/rm -rf ' + fullLocation;
|
||||||
exec(cmd, function () {});
|
exec(cmd, function () {});
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ Util.getBinDir = function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
Util.getResourceDir = function () {
|
Util.getResourceDir = function () {
|
||||||
return path.join(Util.getHomePath(), 'Library/Application\ Support/Kitematic/Resources');
|
return path.join(Util.getHomePath(), 'Library/Application Support/Kitematic/Resources');
|
||||||
};
|
};
|
||||||
|
|
||||||
Util.KITE_PATH = path.join(Util.getHomePath(), 'Kitematic');
|
Util.KITE_PATH = path.join(Util.getHomePath(), 'Kitematic');
|
||||||
|
|
|
@ -63,7 +63,7 @@ Handlebars.registerHelper('timeSince', function (date) {
|
||||||
return moment(date).fromNow();
|
return moment(date).fromNow();
|
||||||
});
|
});
|
||||||
|
|
||||||
Handlebars.registerHelper('isUpdating', function (date) {
|
Handlebars.registerHelper('isUpdating', function () {
|
||||||
return Session.get('isUpdating');
|
return Session.get('isUpdating');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ Meteor.setInterval(function () {
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
Meteor.setInterval(function () {
|
Meteor.setInterval(function () {
|
||||||
if (Installer.isUpToDate()) {
|
if (!Session.get('installing')) {
|
||||||
Sync.resolveWatchers(function () {});
|
Sync.resolveWatchers(function () {});
|
||||||
if (!Session.get('boot2dockerOff')) {
|
if (!Session.get('boot2dockerOff')) {
|
||||||
fixBoot2DockerVM(function (err) {
|
fixBoot2DockerVM(function (err) {
|
||||||
|
|
|
@ -52,4 +52,13 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section dashboard-settings">
|
||||||
|
<div class="left-section">
|
||||||
|
<h4>Repair Kitematic</h4>
|
||||||
|
<p class="help-block">You can repair Kitematic installation if the app stops working properly.</p>
|
||||||
|
</div>
|
||||||
|
<div class="right-section">
|
||||||
|
<a onclick="trackLink('repair kitematic')" class="btn btn-negative btn-repair">Repair Kitematic</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
var remote = require('remote');
|
||||||
|
var dialog = remote.require('dialog');
|
||||||
|
|
||||||
Template.dashboard_settings.events({
|
Template.dashboard_settings.events({
|
||||||
'click .btn-start-boot2docker': function (e) {
|
'click .btn-start-boot2docker': function (e) {
|
||||||
var $btn = $(e.currentTarget);
|
var $btn = $(e.currentTarget);
|
||||||
|
@ -36,6 +39,17 @@ Template.dashboard_settings.events({
|
||||||
tracking: false
|
tracking: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
'click .btn-repair': function () {
|
||||||
|
dialog.showMessageBox({
|
||||||
|
message: 'Repairing Kitematic will clear your current Docker VM and the state of the app. Please make sure your work is backed up. Do you wish to continue?',
|
||||||
|
buttons: ['Repair', 'Cancel']
|
||||||
|
}, function (index) {
|
||||||
|
if (index !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Router.go('setup_intro');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Template.setup_finish.events({
|
Template.setup_finish.events({
|
||||||
'click .finish-button': function (e) {
|
'click .finish-button': function (e) {
|
||||||
var enableDiagnostics = $('.install-diagonistics input').attr('checked') ? true : false;
|
var enableDiagnostics = $('.install-diagonistics input').prop('checked');
|
||||||
var status = enableDiagnostics ? 'on' : 'off';
|
var status = enableDiagnostics ? 'on' : 'off';
|
||||||
ga('send', 'event', 'link', 'click', 'turn ' + status + ' usage analytics');
|
ga('send', 'event', 'link', 'click', 'turn ' + status + ' usage analytics');
|
||||||
Installs.insert({version: Installer.CURRENT_VERSION});
|
Installs.insert({version: Installer.CURRENT_VERSION});
|
||||||
|
|
|
@ -52,12 +52,5 @@
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
<div class="install-finish text-center">
|
|
||||||
{{#if installComplete}}
|
|
||||||
<a onclick="trackLink('finish install')" class="btn btn-action" href="/apps">
|
|
||||||
Start Using Kitematic
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,18 +1,3 @@
|
||||||
var installStarted = false;
|
|
||||||
Template.setup_install.rendered = function() {
|
|
||||||
if(!installStarted) {
|
|
||||||
installStarted = true;
|
|
||||||
Installer.run(function (err) {
|
|
||||||
if (err) {
|
|
||||||
console.log('Setup failed.');
|
|
||||||
console.log(err);
|
|
||||||
} else {
|
|
||||||
Router.go('setup_finish');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Template.setup_install.steps = function () {
|
Template.setup_install.steps = function () {
|
||||||
return Installer.steps.map(function (step, index) {
|
return Installer.steps.map(function (step, index) {
|
||||||
step.index = index;
|
step.index = index;
|
||||||
|
@ -27,9 +12,6 @@ Template.setup_install.helpers({
|
||||||
currentInstallStepProgress: function () {
|
currentInstallStepProgress: function () {
|
||||||
return Session.get('currentInstallStepProgress');
|
return Session.get('currentInstallStepProgress');
|
||||||
},
|
},
|
||||||
installComplete: function () {
|
|
||||||
return Session.get('currentInstallStep') === Installer.steps.length;
|
|
||||||
},
|
|
||||||
failedStep: function () {
|
failedStep: function () {
|
||||||
return Session.get('failedStep');
|
return Session.get('failedStep');
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
Template.setup_intro.events({
|
Template.setup_intro.events({
|
||||||
'click .continue-button': function (e) {
|
'click .continue-button': function (e) {
|
||||||
Router.go('setup_install');
|
Router.go('setup_install');
|
||||||
|
Installer.run(function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.log('Setup failed.');
|
||||||
|
console.log(err);
|
||||||
|
} else {
|
||||||
|
Router.go('setup_finish');
|
||||||
|
}
|
||||||
|
});
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Kitematic",
|
"name": "Kitematic",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^0.9.0",
|
"async": "^0.9.0",
|
||||||
"chokidar": "git+https://github.com/usekite/chokidar.git",
|
"chokidar": "git+https://github.com/usekite/chokidar.git",
|
||||||
|
|
Loading…
Reference in New Issue