UNPKG

pooliot-client

Version:
158 lines (128 loc) 5.37 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _child_process = require('child_process'); var _path = require('path'); var _inquirer = require('inquirer'); var _createSystemdService = require('./createSystemdService'); var _createSystemdService2 = _interopRequireDefault(_createSystemdService); var _detectBoard = require('../../utils/detectBoard'); var _detectBoard2 = _interopRequireDefault(_detectBoard); var _parseHostPort = require('../../utils/parseHostPort'); var _parseHostPort2 = _interopRequireDefault(_parseHostPort); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _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 */ exports.default = (() => { var _ref = _asyncToGenerator(function* (options, pkg) { const board = (0, _detectBoard2.default)(); if (process.env.USER !== 'root') { throw new Error('The install script must be run with root user. Use : sudo pooliot-client install'); } const defaults = Object.assign({}, options, { user: options.user !== 'root' && options.user || board.user }); const webPort = options.webPort || 80; const answers = yield (0, _inquirer.prompt)([{ type: 'input', name: 'address', message: 'Address (https://host:port)', when: !options.address, default: defaults.address, validate: function (address) { if (!address) return 'address cannot be empty'; const [host, port] = (0, _parseHostPort2.default)(address); if (!host) return 'host is invalid'; if (!port || !Number.isInteger(Number(port))) return 'port must be an integer'; return true; } }, { type: 'input', name: 'token', message: 'Token', when: !options.token, default: defaults.token }, { type: 'input', name: 'user', message: 'User', when: !options.user, default: defaults.user, validate: function (user) { if (!user) return 'user must be provided'; if (user === 'root') return 'root is not allowed'; return true; } }, { type: 'confirm', name: 'useDisplay', message: 'Use your device for display ?', default: true, when: options.interactive }, { type: 'checkbox', name: 'displays', message: 'What displays do you want to install ?', choices: [{ value: 'chromium', name: 'chromium: a web browser', checked: true }, { value: 'firefox', name: 'firefox: a web browser' }, { value: 'livestreamer', name: 'livestreamer: video streams - http://docs.livestreamer.io/', checked: true }, board.os.id === 'raspbian' && { value: 'omxplayer', name: 'omxplayer: video player - https://github.com/popcornmix/omxplayer', checked: true }].filter(Boolean), when: function (answers) { return options.interactive && answers.useDisplay; } }]); const { address, token, user, useDisplay, displays } = Object.assign({}, defaults, answers); console.log(`Add user ${user} if missing`); try { (0, _child_process.execSync)(`useradd ${user} --create-home`, { stdio: 'inherit' }); } catch (err) {} const clientDirectory = (0, _path.dirname)((0, _path.dirname)((0, _path.dirname)(__dirname))); const scriptsDirectory = `${clientDirectory}/scripts/install/`; const execScript = function (script) { return (0, _child_process.execSync)(`sh ${script}.sh`, { stdio: 'inherit', cwd: scriptsDirectory, env: Object.assign({}, process.env, { POOLIOT_USER: user }) }); }; execScript('essentials'); if (board.id === 'rpi' && board.osInfo.id === 'raspbian') { execScript('raspbian/prepare'); } else if (board.id === 'tkb') { // TODO detect tinker os execScript('tinker-os/prepare'); } if (useDisplay) { execScript('display/essentials', { env: { BOARD_ID: board.id } }); displays.forEach(function (display) { execScript(`display/${display}`); }); } console.log(`Write /etc/systemd/system/${pkg.name}.service`); (0, _createSystemdService2.default)(clientDirectory, pkg, { address, token, user, webPort }); console.log('Enable and start systemctl service'); (0, _child_process.execSync)(`systemctl enable ${pkg.name}`, { stdio: 'inherit' }); (0, _child_process.execSync)(`systemctl start ${pkg.name}`, { stdio: 'inherit' }); if (options.interactive) { const confirmReboot = yield (0, _inquirer.prompt)([{ type: 'confirm', name: 'reboot', message: 'reboot ?' }]); if (confirmReboot.reboot) { (0, _child_process.execSync)('reboot'); } } }); return function () { return _ref.apply(this, arguments); }; })(); //# sourceMappingURL=run.js.map