Merge pull request #5778 from jbudz/packages

Build package fixes
This commit is contained in:
Rashid Khan 2015-12-29 16:15:10 -07:00
commit 99b7db7106
5 changed files with 52 additions and 33 deletions

View file

@ -110,6 +110,20 @@ The standard `npm run test` task runs several sub tasks and can take several min
</dd>
</dl>
#### OS packages
Packages are built using fpm, pleaserun, dpkg, and rpm. fpm and pleaserun can be installed using gem. Package building has only been tested on Linux and is not supported on any other platform.
```sh
gem install pleaserun
gem install fpm
npm run build:ospackages
```
To specify a package to build you can add `rpm` or `deb` as an argument.
```sh
npm run build:ospackages -- --rpm
```
### Functional UI Testing
#### Handy references

View file

@ -48,6 +48,7 @@
"test:server": "grunt test:server",
"test:coverage": "grunt test:coverage",
"build": "grunt build",
"build:ospackages": "grunt build --os-packages",
"start": "./bin/kibana --dev",
"precommit": "grunt precommit",
"karma": "karma start",

View file

@ -1,22 +1,23 @@
module.exports = function (grunt) {
let { resolve } = require('path');
let { indexBy } = require('lodash');
const { resolve } = require('path');
const { indexBy } = require('lodash');
let { config } = grunt;
let exec = require('../utils/exec');
let targetDir = config.get('target');
let version = config.get('pkg.version');
let userScriptsDir = config.get('userScriptsDir');
let servicesByName = indexBy(config.get('services'), 'name');
const { config } = grunt;
const exec = require('../utils/exec');
const targetDir = config.get('target');
const version = config.get('pkg.version');
const userScriptsDir = config.get('userScriptsDir');
const servicesByName = indexBy(config.get('services'), 'name');
grunt.registerTask('_build:osPackages', function () {
grunt.config.get('platforms').forEach(({ name, buildDir }) => {
// TODO(sissel): Check if `fpm` is available
if (!(/linux-x(86|64)$/.test(name))) return;
let arch = /x64$/.test(name) ? 'x86_64' : 'i686';
let fpm = args => exec('fpm', args);
const arch = /x64$/.test(name) ? 'x86_64' : 'i686';
const fpm = args => exec('fpm', args);
let args = [
const args = [
'--force',
'--package', targetDir,
'-s', 'dir', // input type
@ -27,23 +28,23 @@ module.exports = function (grunt) {
'--config-files', '/opt/kibana/config/kibana.yml'
];
let files = buildDir + '/=/opt/kibana';
const files = buildDir + '/=/opt/kibana';
const sysv = servicesByName.sysv.outputDir + '/etc/=/etc/';
const systemd = servicesByName.systemd.outputDir + '/lib/=/lib/';
//Manually find flags, multiple args without assignment are not entirely parsed
var flags = grunt.option.flags().join(',');
const buildDeb = !!flags.match('deb');
const buildRpm = !!flags.match('rpm');
const noneSpecified = !buildRpm && !buildDeb;
grunt.file.mkdir(targetDir);
// kibana.rpm and kibana.deb
if (/linux-x(86|64)$/.test(name)) {
let sysv = servicesByName.sysv.outputDir + '/etc/=/etc/';
let systemd = servicesByName.systemd.outputDir + '/lib/=/lib/';
fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysv, systemd));
if (buildDeb || noneSpecified) {
fpm(args.concat('-t', 'deb', '-a', arch, files, sysv, systemd));
return;
}
// kibana.pkg
if (/darwin-x(86|64)$/.test(name)) {
let launchd = servicesByName.launchd.outputDir + '/=/';
fpm(args.concat('-t', 'osxpkg', '-a', arch, files, launchd));
return;
if (buildRpm || noneSpecified) {
fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysv, systemd));
}
});

View file

@ -1,8 +1,8 @@
module.exports = function createServices(grunt) {
var { resolve } = require('path');
let exec = require('../utils/exec');
let userScriptsDir = grunt.config.get('userScriptsDir');
const { resolve } = require('path');
const { appendFileSync } = require('fs');
const exec = require('../utils/exec');
const userScriptsDir = grunt.config.get('userScriptsDir');
grunt.registerTask('_build:pleaseRun', function () {
// TODO(sissel): Detect if 'pleaserun' is found, and provide a useful error
@ -25,6 +25,6 @@ module.exports = function createServices(grunt) {
grunt.file.mkdir(userScriptsDir);
exec('please-manage-user', ['--output', userScriptsDir, 'kibana']);
appendFileSync(resolve(userScriptsDir, 'installer.sh'), 'chown kibana /opt/kibana/optimize');
});
};

View file

@ -12,18 +12,21 @@ module.exports = function (grunt) {
return resolve(rootPath, file);
});
let ln = (source, link) => exec('ln', ['-s', source, link]);
//We don't want to build os packages with symlinks
let transferFiles = (source, link) => grunt.option('os-packages')
? exec('cp', ['-r', source, link])
: exec('ln', ['-s', source, link]);
grunt.config.get('platforms').forEach(function (platform) {
grunt.file.mkdir(platform.buildDir);
// link all files at the root of the build
buildFiles.forEach(function (source) {
ln(source, resolve(platform.buildDir, basename(source)));
transferFiles(source, resolve(platform.buildDir, basename(source)));
});
// link the node modules
ln(platform.nodeDir, resolve(platform.buildDir, 'node'));
transferFiles(platform.nodeDir, resolve(platform.buildDir, 'node'));
});
});
};