Skip to content

Commit

Permalink
Backport PR #7308
Browse files Browse the repository at this point in the history
---------

**Commit 1:**
[build] Commit install/remove scripts instead of generating, stop service before removing

* Original sha: 08c9897
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-03-28T02:06:16Z

**Commit 2:**
[build] template user in install/remove scripts

* Original sha: 5387167
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-02T15:57:16Z

**Commit 3:**
[build] Run as group kibana

* Original sha: d9a84b2
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-02T16:27:58Z

**Commit 4:**
[build] Recursive chown optimize folder

* Original sha: 07618c3
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-03T15:12:04Z

**Commit 5:**
[build] Try service kibana stop before init script

* Original sha: 83c5802
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-03T15:20:16Z

**Commit 6:**
[build] Attempt to stop service pre-install

* Original sha: 6c6e4d3
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-09T19:40:05Z

**Commit 7:**
[build] Fail on errors

* Original sha: f9033a1
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-10T15:47:07Z

**Commit 8:**
[build] Cleanup postrm

* Original sha: bab73b8
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-10T18:16:51Z

**Commit 9:**
[build] Add comment in postrm explaining empty cases

* Original sha: 4336f2b
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-13T15:03:22Z

**Commit 10:**
[build] move install to /usr/share, config to /etc/kibana

* Original sha: 6d293af
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-25T14:12:08Z

**Commit 11:**
[build] consolidate package config

* Original sha: 8f0be48
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-25T19:21:36Z

**Commit 12:**
[build] Cleanup packages task

* Original sha: db5ac1e
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-25T20:15:09Z

**Commit 13:**
[build] Style cleanup

* Original sha: 6189c19
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-25T20:19:16Z

**Commit 14:**
[build] template chown optimize dir

* Original sha: 9213e61
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-05-25T21:27:20Z

**Commit 15:**
[build] Add name and description to init scripts

* Original sha: e1cb593
* Authored by Jonathan Budzenski <jbudz@users.noreply.github.com> on 2016-06-07T19:48:57Z
  • Loading branch information
jbudz committed Jun 15, 2016
1 parent a965ec2 commit 888e720
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 73 deletions.
99 changes: 57 additions & 42 deletions tasks/build/osPackages.js
@@ -1,59 +1,74 @@
module.exports = function (grunt) {
const { resolve } = require('path');
const { indexBy } = require('lodash');
import { resolve } from 'path';
import { indexBy } from 'lodash';
import exec from '../utils/exec';

const { config } = grunt;
const exec = require('../utils/exec');
const targetDir = config.get('target');
const version = config.get('pkg.version');
const packageScriptsDir = config.get('packageScriptsDir');
const servicesByName = indexBy(config.get('services'), 'name');
export default (grunt) => {
const targetDir = grunt.config.get('target');
const packageScriptsDir = grunt.config.get('packageScriptsDir');
const servicesByName = indexBy(grunt.config.get('services'), 'name');
const config = grunt.config.get('packages');
const fpm = args => exec('fpm', args);

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;

const arch = /x64$/.test(name) ? 'x86_64' : 'i386';
const fpm = args => exec('fpm', args);

const args = [
grunt.config.get('platforms')
.filter(({ name }) => /linux-x(86|64)$/.test(name))
.map(({ name, buildDir }) => {
const architecture = /x64$/.test(name) ? 'x86_64' : 'i386';
return {
buildDir,
architecture
};
})
.forEach(({ buildDir, architecture }) => {
const baseOptions = [
'--force',
'--package', targetDir,
'-s', 'dir', // input type
'--name', 'kibana',
'--description', 'Explore\ and\ visualize\ your\ Elasticsearch\ data',
'--version', version,
'--url', 'https://www.elastic.co',
'--vendor', 'Elasticsearch,\ Inc.',
'--maintainer', 'Kibana Team\ \<info@elastic.co\>',
'--license', 'Apache\ 2.0',
'--architecture', architecture,
'--name', config.name,
'--description', config.description,
'--version', config.version,
'--url', config.site,
'--vendor', config.vendor,
'--maintainer', config.maintainer,
'--license', config.license,
'--after-install', resolve(packageScriptsDir, 'post_install.sh'),
'--before-install', resolve(packageScriptsDir, 'pre_install.sh'),
'--before-remove', resolve(packageScriptsDir, 'pre_remove.sh'),
'--after-remove', resolve(packageScriptsDir, 'post_remove.sh'),
'--config-files', '/opt/kibana/config/kibana.yml',
'--template-value', 'user=kibana',
'--template-value', 'group=kibana'
];
'--config-files', config.path.kibanaConfig,
'--template-value', `user=${config.user}`,
'--template-value', `group=${config.group}`,
'--template-value', `optimizeDir=${config.path.home}/optimize`,

const files = buildDir + '/=/opt/kibana';
const sysv = servicesByName.sysv.outputDir + '/etc/=/etc/';
const systemd = servicesByName.systemd.outputDir + '/lib/=/lib/';
//config folder is moved to path.conf, exclude {path.home}/config
//uses relative path to --prefix, strip the leading /
'--exclude', `${config.path.home.slice(1)}/config`
];
const debOptions = [
'-t', 'deb',
'--deb-priority', 'optional'
];
const rpmOptions = [
'-t', 'rpm',
'--rpm-os', 'linux'
];
const args = [
`${buildDir}/=${config.path.home}/`,
`${buildDir}/config/=${config.path.conf}/`,
`${servicesByName.sysv.outputDir}/etc/=/etc/`,
`${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);
if (buildDeb || noneSpecified) {
fpm(args.concat('-t', 'deb', '--deb-priority', 'optional', '-a', arch, files, sysv, systemd));
const flags = grunt.option.flags().filter(flag => /deb|rpm/.test(flag)).join(',');
const buildDeb = flags.includes('deb') || !flags.length;
const buildRpm = flags.includes('rpm') || !flags.length;
if (buildDeb) {
fpm([...baseOptions, ...debOptions, ...args]);
}
if (buildRpm || noneSpecified) {
fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysv, systemd));
if (buildRpm) {
fpm([...baseOptions, ...rpmOptions, ...args]);
}

});
Expand Down
2 changes: 1 addition & 1 deletion tasks/build/package_scripts/post_install.sh
Expand Up @@ -14,4 +14,4 @@ user_create() {
if ! user_check "<%= user %>" ; then
user_create "<%= user %>"
fi
chown -R <%= user %>:<%= group %> /opt/kibana/optimize
chown -R <%= user %>:<%= group %> <%= optimizeDir %>
27 changes: 15 additions & 12 deletions tasks/build/pleaserun.js
@@ -1,25 +1,28 @@
module.exports = function createServices(grunt) {
const { resolve } = require('path');
const { appendFileSync } = require('fs');
const exec = require('../utils/exec');
import { resolve } from 'path';
import { appendFileSync } from 'fs';
import exec from '../utils/exec';

grunt.registerTask('_build:pleaseRun', function () {
// TODO(sissel): Detect if 'pleaserun' is found, and provide a useful error
// to the user if it is missing.
export default (grunt) => {
const userScriptsDir = grunt.config.get('userScriptsDir');
const { path, user, group, name, description } = grunt.config.get('packages');

grunt.config.get('services').forEach(function (service) {
grunt.registerTask('_build:pleaseRun', function () {
grunt.config.get('services').forEach((service) => {
grunt.file.mkdir(service.outputDir);
exec('pleaserun', [
'--install',
'--no-install-actions',
'--install-prefix', service.outputDir,
'--overwrite',
'--user', 'kibana',
'--group', 'kibana',
'--sysv-log-path', '/var/log/kibana/',
'--name', name,
'--description', description,
'--user', user,
'--group', group,
'--sysv-log-path', path.logs,
'-p', service.name,
'-v', service.version,
'/opt/kibana/bin/kibana'
path.kibanaBin,
`-c ${path.kibanaConfig}`
]);
});
});
Expand Down
58 changes: 45 additions & 13 deletions tasks/config/packages.js
@@ -1,20 +1,52 @@
export default (grunt) => {
const version = grunt.config.get('pkg.version');
const productionPath = `kibana/${version.match(/\d\.\d/)[0]}`;
const stagingPath = `kibana/staging/${version.match(/\d\.\d\.\d/)[0]}-XXXXXXX/repos/${version.match(/\d\./)[0]}x`;
const rpmFolder = 'centos';
const debFolder = 'debian';
const VERSION = grunt.config.get('pkg.version');

const FOLDER_STAGING = `kibana/staging/${VERSION.match(/\d\.\d\.\d/)[0]}-XXXXXXX/repos/${VERSION.match(/\d\./)[0]}x`;
const FOLDER_PRODUCTION = `kibana/${VERSION.match(/\d\.\d/)[0]}`;

const FOLDERNAME_DEB = 'debian';
const FOLDERNAME_RPM = 'centos';

const PREFIX_STAGING_DEB = `${FOLDER_STAGING}/${FOLDERNAME_DEB}`;
const PREFIX_STAGING_RPM = `${FOLDER_STAGING}/${FOLDERNAME_RPM}`;
const PREFIX_PRODUCTION_DEB = `${FOLDER_PRODUCTION}/${FOLDERNAME_DEB}`;
const PREFIX_PRODUCTION_RPM = `${FOLDER_PRODUCTION}/${FOLDERNAME_RPM}`;

const FOLDER_CONFIG = '/etc/kibana';
const FOLDER_LOGS = '/var/log/kibana';
const FOLDER_HOME = '/usr/share/kibana';

const FILE_KIBANA_CONF = `${FOLDER_CONFIG}/kibana.yml`;
const FILE_KIBANA_BINARY = `${FOLDER_HOME}/bin/kibana`;

return {
staging: {
bucket: 'download.elasticsearch.org',
debPrefix: `${stagingPath}/${debFolder}`,
rpmPrefix: `${stagingPath}/${rpmFolder}`
publish: {
staging: {
bucket: 'download.elasticsearch.org',
debPrefix: PREFIX_STAGING_DEB,
rpmPrefix: PREFIX_STAGING_RPM
},
production: {
bucket: 'packages.elasticsearch.org',
debPrefix: PREFIX_STAGING_DEB,
rpmPrefix: PREFIX_STAGING_RPM
}
},
production: {
bucket: 'packages.elasticsearch.org',
debPrefix: `${productionPath}/${debFolder}`,
rpmPrefix: `${productionPath}/${rpmFolder}`
user: 'kibana',
group: 'kibana',
name: 'kibana',
description: 'Explore\ and\ visualize\ your\ Elasticsearch\ data',
site: 'https://www.elastic.co',
vendor: 'Elasticsearch,\ Inc.',
maintainer: 'Kibana Team\ \<info@elastic.co\>',
license: 'Apache\ 2.0',
version: VERSION,
path: {
conf: FOLDER_CONFIG,
logs: FOLDER_LOGS,
home: FOLDER_HOME,
kibanaBin: FILE_KIBANA_BINARY,
kibanaConfig: FILE_KIBANA_CONF
}
};
};
10 changes: 5 additions & 5 deletions tasks/release_packages.js
Expand Up @@ -4,7 +4,7 @@ import { promisify } from 'bluebird';
import readline from 'readline';

export default (grunt) => {
const packages = grunt.config.get('packages');
const publishConfig = grunt.config.get('packages').publish;
const platforms = grunt.config.get('platforms');

function debS3(deb) {
Expand Down Expand Up @@ -87,8 +87,8 @@ export default (grunt) => {
if (platform.debPath) {
debS3({
filePath: platform.debPath,
bucket: packages[environment].bucket,
prefix: packages[environment].debPrefix.replace('XXXXXXX', trimmedHash),
bucket: publishConfig[environment].bucket,
prefix: publishConfig[environment].debPrefix.replace('XXXXXXX', trimmedHash),
signatureKeyId: signature.id,
arch: platform.name.match('x64') ? 'amd64' : 'i386',
awsKey: aws.key,
Expand All @@ -99,8 +99,8 @@ export default (grunt) => {
if (platform.rpmPath) {
rpmS3({
filePath: platform.rpmPath,
bucket: packages[environment].bucket,
prefix: packages[environment].rpmPrefix.replace('XXXXXXX', trimmedHash),
bucket: publishConfig[environment].bucket,
prefix: publishConfig[environment].rpmPrefix.replace('XXXXXXX', trimmedHash),
signingKeyName: signature.name,
awsKey: aws.key,
awsSecret: aws.secret
Expand Down

0 comments on commit 888e720

Please sign in to comment.