mirror of https://github.com/docker/docs.git
Opt in binary setup
This commit is contained in:
parent
5b5c3e9c07
commit
ac3b7ef4f6
|
@ -3,6 +3,7 @@ var app = remote.require('app');
|
|||
var shell = require('shell');
|
||||
var router = require('./router');
|
||||
var util = require('./utils/Util');
|
||||
var setupUtil = require('./utils/SetupUtil');
|
||||
var metrics = require('./utils/MetricsUtil');
|
||||
var machine = require('./utils/DockerMachineUtil');
|
||||
import docker from './utils/DockerUtil';
|
||||
|
@ -20,6 +21,23 @@ var MenuTemplate = function () {
|
|||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Install Docker Commands',
|
||||
enabled: true,
|
||||
click: function () {
|
||||
metrics.track('Installed Docker Commands');
|
||||
if (!setupUtil.shouldUpdateBinaries()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (setupUtil.needsBinaryFix()) {
|
||||
let cmd = setupUtil.copyBinariesCmd() + ' && ' + setupUtil.fixBinariesCmd();
|
||||
util.exec(setupUtil.macSudoCmd(cmd)).catch(() => {});
|
||||
} else {
|
||||
util.exec(setupUtil.copyBinariesCmd());
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Preferences',
|
||||
accelerator: util.CommandOrCtrl() + '+,',
|
||||
|
|
|
@ -33,8 +33,6 @@ describe('SetupStore', function () {
|
|||
|
||||
describe('install step', function () {
|
||||
util.exec.mockReturnValue(Promise.resolve());
|
||||
setupUtil.copyBinariesCmd.mockReturnValue(Promise.resolve());
|
||||
setupUtil.fixBinariesCmd.mockReturnValue(Promise.resolve());
|
||||
virtualBox.killall.mockReturnValue(Promise.resolve());
|
||||
setupUtil.installVirtualBoxCmd.mockReturnValue(Promise.resolve());
|
||||
setupUtil.macSudoCmd.mockImplementation(cmd => 'macsudo ' + cmd);
|
||||
|
@ -44,22 +42,9 @@ describe('SetupStore', function () {
|
|||
util.exec.mockReturnValue(Promise.resolve());
|
||||
return setupStore.steps().install.run().then(() => {
|
||||
expect(virtualBox.killall).toBeCalled();
|
||||
expect(setupUtil.copyBinariesCmd).toBeCalled();
|
||||
expect(setupUtil.fixBinariesCmd).toBeCalled();
|
||||
expect(setupUtil.installVirtualBoxCmd).toBeCalled();
|
||||
});
|
||||
});
|
||||
|
||||
pit('only installs binaries if virtualbox is installed', function () {
|
||||
virtualBox.installed.mockReturnValue(true);
|
||||
util.compareVersions.mockReturnValue(0);
|
||||
setupUtil.needsBinaryFix.mockReturnValue(true);
|
||||
return setupStore.steps().install.run().then(() => {
|
||||
expect(setupUtil.copyBinariesCmd).toBeCalled();
|
||||
expect(setupUtil.fixBinariesCmd).toBeCalled();
|
||||
expect(setupUtil.installVirtualBoxCmd).not.toBeCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('init step', function () {
|
||||
|
|
|
@ -37,20 +37,14 @@ var _steps = [{
|
|||
percent: 0,
|
||||
seconds: 5,
|
||||
run: Promise.coroutine(function* (progressCallback) {
|
||||
var cmd = setupUtil.copyBinariesCmd() + ' && ' + setupUtil.fixBinariesCmd();
|
||||
if (!virtualBox.installed()) {
|
||||
yield virtualBox.killall();
|
||||
cmd += ' && ' + setupUtil.installVirtualBoxCmd();
|
||||
} else {
|
||||
if (!setupUtil.needsBinaryFix()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
try {
|
||||
progressCallback(50); // TODO: detect when the installation has started so we can simulate progress
|
||||
yield util.exec(setupUtil.macSudoCmd(cmd));
|
||||
} catch (err) {
|
||||
throw null;
|
||||
try {
|
||||
yield util.exec(setupUtil.macSudoCmd(setupUtil.installVirtualBoxCmd()));
|
||||
} catch (err) {
|
||||
throw null;
|
||||
}
|
||||
}
|
||||
})
|
||||
}, {
|
||||
|
@ -159,7 +153,7 @@ var SetupStore = assign(Object.create(EventEmitter.prototype), {
|
|||
var vboxNeedsInstall = !virtualBox.installed();
|
||||
|
||||
required.download = vboxNeedsInstall && (!fs.existsSync(vboxfile) || setupUtil.checksum(vboxfile) !== virtualBox.checksum());
|
||||
required.install = vboxNeedsInstall || setupUtil.needsBinaryFix();
|
||||
required.install = vboxNeedsInstall;
|
||||
required.init = required.install || !(yield machine.exists()) || (yield machine.state()) !== 'Running' || !isoversion || util.compareVersions(isoversion, packagejson['docker-version']) < 0;
|
||||
|
||||
var exists = yield machine.exists();
|
||||
|
@ -176,20 +170,10 @@ var SetupStore = assign(Object.create(EventEmitter.prototype), {
|
|||
});
|
||||
return Promise.resolve(_requiredSteps);
|
||||
}),
|
||||
updateBinaries: function () {
|
||||
if (setupUtil.needsBinaryFix()) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if (setupUtil.shouldUpdateBinaries()) {
|
||||
return util.exec(setupUtil.copyBinariesCmd());
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
run: Promise.coroutine(function* () {
|
||||
metrics.track('Started Setup', {
|
||||
virtualbox: virtualBox.installed() ? yield virtualBox.version() : 'Not Installed'
|
||||
});
|
||||
yield this.updateBinaries();
|
||||
var steps = yield this.requiredSteps();
|
||||
for (let step of steps) {
|
||||
_currentStep = step;
|
||||
|
|
|
@ -156,7 +156,7 @@ var DockerMachine = {
|
|||
});
|
||||
} else {
|
||||
this.info().then(machine => {
|
||||
var cmd = [resources.terminal(), `DOCKER_HOST=${machine.url} DOCKER_CERT_PATH=${path.join(util.home(), '.docker/machine/machines/' + machine.name)} DOCKER_TLS_VERIFY=1 $SHELL`];
|
||||
var cmd = [resources.terminal(), `PATH=${resources.resourceDir()}:$PATH DOCKER_HOST=${machine.url} DOCKER_CERT_PATH=${path.join(util.home(), '.docker/machine/machines/' + machine.name)} DOCKER_TLS_VERIFY=1 $SHELL`];
|
||||
util.exec(cmd).then(() => {});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,16 +12,19 @@ var virtualBox = require ('./VirtualBoxUtil');
|
|||
var SetupUtil = {
|
||||
needsBinaryFix() {
|
||||
return this.pathDoesNotExistOrDenied(util.binsPath()) ||
|
||||
this.pathDoesNotExistOrDenied(util.dockerBinPath()) ||
|
||||
this.pathDoesNotExistOrDenied(util.dockerMachineBinPath());
|
||||
(fs.existsSync(util.dockerBinPath()) && this.pathDenied(util.dockerBinPath())) ||
|
||||
(fs.existsSync(util.dockerMachineBinPath()) && this.pathDenied(util.dockerMachineBinPath()));
|
||||
},
|
||||
pathDoesNotExistOrDenied: function (path) {
|
||||
if(util.isWindows()) {
|
||||
return (!fs.existsSync(path));
|
||||
} else {
|
||||
return (!fs.existsSync(path) || fs.statSync(path).gid !== 80 || fs.statSync(path).uid !== process.getuid());
|
||||
return (!fs.existsSync(path) || this.pathDenied(path));
|
||||
}
|
||||
},
|
||||
pathDenied: function (path) {
|
||||
return fs.statSync(path).gid !== 80 || fs.statSync(path).uid !== process.getuid();
|
||||
},
|
||||
shouldUpdateBinaries: function () {
|
||||
return !fs.existsSync(util.dockerBinPath()) ||
|
||||
!fs.existsSync(util.dockerMachineBinPath()) ||
|
||||
|
|
Loading…
Reference in New Issue