UNPKG

5.96 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _child_process = require('child_process');
8
9var _path = require('path');
10
11var _inquirer = require('inquirer');
12
13var _config = require('../../config');
14
15var _config2 = _interopRequireDefault(_config);
16
17var _createSystemdService = require('./createSystemdService');
18
19var _createSystemdService2 = _interopRequireDefault(_createSystemdService);
20
21var _createConfigFile = require('./createConfigFile');
22
23var _createConfigFile2 = _interopRequireDefault(_createConfigFile);
24
25var _detectBoard = require('../../main-process/utils/detectBoard');
26
27var _detectBoard2 = _interopRequireDefault(_detectBoard);
28
29var _parseHostPort = require('../../main-process/utils/parseHostPort');
30
31var _parseHostPort2 = _interopRequireDefault(_parseHostPort);
32
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } /* eslint-disable no-implied-eval */
36
37
38exports.default = (() => {
39 var _ref = _asyncToGenerator(function* (options, pkg) {
40 const board = (0, _detectBoard2.default)();
41
42 if (process.env.USER !== 'root') {
43 throw new Error('The install script must be run with root user. Use : sudo pooliot-client install');
44 }
45
46 options = {
47 webPort: options.webPort || _config2.default.WEB_PORT || 80,
48 address: options.address || _config2.default.ADDRESS,
49 token: options.token || _config2.default.TOKEN,
50 user: options.user !== 'root' && options.user || _config2.default.USER,
51 interactive: options.interactive
52 };
53
54 const defaults = Object.assign({}, options, {
55 user: options.user || board.user
56 });
57
58 const answers = yield (0, _inquirer.prompt)([{
59 type: 'input',
60 name: 'address',
61 message: 'Address (https://host:port)',
62 when: !options.address,
63 default: defaults.address,
64 validate: function (address) {
65 if (!address) return 'address cannot be empty';
66 const [host, port] = (0, _parseHostPort2.default)(address);
67 if (!host) return 'host is invalid';
68 if (!port || !Number.isInteger(Number(port))) return 'port must be an integer';
69 return true;
70 }
71 }, {
72 type: 'input',
73 name: 'token',
74 message: 'Token',
75 when: !options.token,
76 default: defaults.token
77 }, {
78 type: 'input',
79 name: 'user',
80 message: 'User',
81 when: Boolean(options.interactive && !defaults.user),
82 default: defaults.user,
83 validate: function (user) {
84 if (!user) return 'user must be provided';
85 if (user === 'root') return 'root is not allowed';
86 return true;
87 }
88 }, {
89 type: 'confirm',
90 name: 'useDisplay',
91 message: 'Use your device for display ?',
92 default: true,
93 when: Boolean(options.interactive)
94 }, {
95 type: 'checkbox',
96 name: 'displays',
97 message: 'What displays do you want to install ?',
98 choices: [{ value: 'chromium', name: 'chromium: a web browser', checked: true }, { value: 'firefox', name: 'firefox: a web browser' }, {
99 value: 'livestreamer',
100 name: 'livestreamer: video streams - http://docs.livestreamer.io/',
101 checked: true
102 }, board.os.id === 'raspbian' && {
103 value: 'omxplayer',
104 name: 'omxplayer: video player - https://github.com/popcornmix/omxplayer',
105 checked: true
106 }].filter(Boolean),
107 when: function (answers) {
108 return options.interactive && answers.useDisplay;
109 }
110 }]);
111
112 const { address, token, user, useDisplay, displays } = Object.assign({}, defaults, answers);
113
114 console.log(`Add user ${user} if missing`);
115 try {
116 (0, _child_process.execSync)(`useradd ${user} --create-home`, { stdio: 'inherit' });
117 } catch (err) {}
118
119 const clientDirectory = (0, _path.dirname)((0, _path.dirname)((0, _path.dirname)(__dirname)));
120 const scriptsDirectory = `${clientDirectory}/scripts/install/`;
121
122 const execScript = function (script) {
123 return (0, _child_process.execSync)(`sh ${script}.sh`, {
124 stdio: 'inherit',
125 cwd: scriptsDirectory,
126 env: Object.assign({}, process.env, { POOLIOT_USER: user })
127 });
128 };
129
130 execScript('essentials');
131
132 if (board.id === 'rpi' && board.os.id === 'raspbian') {
133 execScript('raspbian/prepare');
134 } else if (board.id === 'tkb') {
135 // TODO detect tinker os
136 execScript('tinker-os/prepare');
137 }
138
139 if (useDisplay) {
140 execScript('display/essentials', {
141 env: { BOARD_ID: board.id }
142 });
143
144 displays.forEach(function (display) {
145 execScript(`display/${display}`);
146 });
147 }
148
149 console.log(`Write /etc/systemd/system/${pkg.name}.service`);
150 (0, _createSystemdService2.default)(clientDirectory, pkg);
151 (0, _createConfigFile2.default)({ address, token, user, webPort: options.webPort });
152
153 console.log('Enable and start systemctl service');
154 (0, _child_process.execSync)(`systemctl enable ${pkg.name}`, { stdio: 'inherit' });
155 (0, _child_process.execSync)(`systemctl start ${pkg.name}`, { stdio: 'inherit' });
156
157 if (options.interactive) {
158 const confirmReboot = yield (0, _inquirer.prompt)([{
159 type: 'confirm',
160 name: 'reboot',
161 message: 'reboot ?'
162 }]);
163
164 if (confirmReboot.reboot) {
165 (0, _child_process.execSync)('reboot');
166 }
167 }
168 });
169
170 return function () {
171 return _ref.apply(this, arguments);
172 };
173})();
174//# sourceMappingURL=run.js.map
\No newline at end of file