From 08c9897986532a4ae7b1d1c0b8c6ff9dd04fa4b8 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Sun, 27 Mar 2016 21:06:16 -0500 Subject: [PATCH 01/15] [build] Commit install/remove scripts instead of generating, stop service before removing --- Gruntfile.js | 2 +- tasks/build/os_packages.js | 7 ++++--- tasks/build/package_scripts/post_install.sh | 16 ++++++++++++++++ tasks/build/package_scripts/post_remove.sh | 17 +++++++++++++++++ tasks/build/package_scripts/pre_remove.sh | 14 ++++++++++++++ tasks/build/pleaserun.js | 5 ----- 6 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 tasks/build/package_scripts/post_install.sh create mode 100644 tasks/build/package_scripts/post_remove.sh create mode 100644 tasks/build/package_scripts/pre_remove.sh diff --git a/Gruntfile.js b/Gruntfile.js index 045f057cd2dd9a..3fef79398e4fe9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -69,7 +69,7 @@ module.exports = function (grunt) { grunt.config.merge(config); - config.userScriptsDir = __dirname + '/build/userScripts'; + config.packageScriptsDir = __dirname + '/tasks/build/package_scripts'; // ensure that these run first, other configs need them config.services = require('./tasks/config/services')(grunt); config.platforms = require('./tasks/config/platforms')(grunt); diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 5153df3263ad1f..57831e2d278312 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -6,7 +6,7 @@ module.exports = function (grunt) { const exec = require('../utils/exec'); const targetDir = config.get('target'); const version = config.get('pkg.version'); - const userScriptsDir = config.get('userScriptsDir'); + const packageScriptsDir = config.get('packageScriptsDir'); const servicesByName = indexBy(config.get('services'), 'name'); grunt.registerTask('_build:osPackages', function () { @@ -28,8 +28,9 @@ module.exports = function (grunt) { '--vendor', 'Elasticsearch,\ Inc.', '--maintainer', 'Kibana Team\ \', '--license', 'Apache\ 2.0', - '--after-install', resolve(userScriptsDir, 'installer.sh'), - '--after-remove', resolve(userScriptsDir, 'remover.sh'), + '--after-install', resolve(packageScriptsDir, 'post_install.sh'), + '--before-remove', resolve(packageScriptsDir, 'pre_remove.sh'), + '--after-remove', resolve(packageScriptsDir, 'post_remove.sh'), '--config-files', '/opt/kibana/config/kibana.yml' ]; diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh new file mode 100644 index 00000000000000..68e55325c319b1 --- /dev/null +++ b/tasks/build/package_scripts/post_install.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +user_check() { + getent passwd "$1" > /dev/null 2>&1 +} + +user_create() { + # Create a system user. A system user is one within the system uid range and + # has no expiration + useradd -r "$1" +} + +if ! user_check "kibana" ; then + user_create "kibana" +fi +chown kibana /opt/kibana/optimize diff --git a/tasks/build/package_scripts/post_remove.sh b/tasks/build/package_scripts/post_remove.sh new file mode 100644 index 00000000000000..7dd25450bdaf63 --- /dev/null +++ b/tasks/build/package_scripts/post_remove.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +user_check() { + getent passwd "$1" > /dev/null 2>&1 +} + +user_remove() { + userdel "$1" +} + +case $1 in + purge|0) + if user_check "kibana" ; then + user_remove "kibana" + fi + ;; +esac diff --git a/tasks/build/package_scripts/pre_remove.sh b/tasks/build/package_scripts/pre_remove.sh new file mode 100644 index 00000000000000..b184bc6ce64315 --- /dev/null +++ b/tasks/build/package_scripts/pre_remove.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +echo -n "Stopping kibana service..." +if command -v systemctl >/dev/null; then + systemctl --no-reload stop kibana.service +fi +if [ -x /etc/init.d/kibana ]; then + if command -v invoke-rc.d >/dev/null; then + invoke-rc.d kibana stop + else + /etc/init.d/kibana stop + fi +fi +echo " OK" diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index 9f99955ad9ca5a..8b8444235a9d0b 100644 --- a/tasks/build/pleaserun.js +++ b/tasks/build/pleaserun.js @@ -2,7 +2,6 @@ module.exports = function createServices(grunt) { 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 @@ -23,9 +22,5 @@ module.exports = function createServices(grunt) { '/opt/kibana/bin/kibana' ]); }); - - grunt.file.mkdir(userScriptsDir); - exec('please-manage-user', ['--output', userScriptsDir, 'kibana']); - appendFileSync(resolve(userScriptsDir, 'installer.sh'), 'chown kibana:kibana /opt/kibana/optimize'); }); }; From 53871671e2aed82a7e93084c4cd34252dc8efcc0 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Mon, 2 May 2016 10:57:16 -0500 Subject: [PATCH 02/15] [build] template user in install/remove scripts --- tasks/build/os_packages.js | 3 ++- tasks/build/package_scripts/post_install.sh | 6 +++--- tasks/build/package_scripts/post_remove.sh | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 57831e2d278312..66ace9731b3f37 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -31,7 +31,8 @@ module.exports = function (grunt) { '--after-install', resolve(packageScriptsDir, 'post_install.sh'), '--before-remove', resolve(packageScriptsDir, 'pre_remove.sh'), '--after-remove', resolve(packageScriptsDir, 'post_remove.sh'), - '--config-files', '/opt/kibana/config/kibana.yml' + '--config-files', '/opt/kibana/config/kibana.yml', + '--template-value', 'user=kibana' ]; const files = buildDir + '/=/opt/kibana'; diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh index 68e55325c319b1..02696466cb3a8a 100644 --- a/tasks/build/package_scripts/post_install.sh +++ b/tasks/build/package_scripts/post_install.sh @@ -10,7 +10,7 @@ user_create() { useradd -r "$1" } -if ! user_check "kibana" ; then - user_create "kibana" +if ! user_check "<%= user %>" ; then + user_create "<%= user %>" fi -chown kibana /opt/kibana/optimize +chown <%= user %> /opt/kibana/optimize diff --git a/tasks/build/package_scripts/post_remove.sh b/tasks/build/package_scripts/post_remove.sh index 7dd25450bdaf63..4c08f1553d98dd 100644 --- a/tasks/build/package_scripts/post_remove.sh +++ b/tasks/build/package_scripts/post_remove.sh @@ -10,8 +10,8 @@ user_remove() { case $1 in purge|0) - if user_check "kibana" ; then - user_remove "kibana" + if user_check "<%= user %>" ; then + user_remove "<%= user %>" fi ;; esac From d9a84b2f03ad8a24ff9025009802fb31374591fc Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Mon, 2 May 2016 11:27:58 -0500 Subject: [PATCH 03/15] [build] Run as group kibana --- tasks/build/os_packages.js | 5 +++-- tasks/build/package_scripts/post_install.sh | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 66ace9731b3f37..0cc52fe69dd49d 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -22,7 +22,7 @@ module.exports = function (grunt) { '--package', targetDir, '-s', 'dir', // input type '--name', 'kibana', - '--description', 'Explore\ and\ visualize\ your\ Elasticsearch\ data.', + '--description', 'Explore\ and\ visualize\ your\ Elasticsearch\ data', '--version', version, '--url', 'https://www.elastic.co', '--vendor', 'Elasticsearch,\ Inc.', @@ -32,7 +32,8 @@ module.exports = function (grunt) { '--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', 'user=kibana', + '--template-value', 'group=kibana' ]; const files = buildDir + '/=/opt/kibana'; diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh index 02696466cb3a8a..16dbba6862a451 100644 --- a/tasks/build/package_scripts/post_install.sh +++ b/tasks/build/package_scripts/post_install.sh @@ -13,4 +13,4 @@ user_create() { if ! user_check "<%= user %>" ; then user_create "<%= user %>" fi -chown <%= user %> /opt/kibana/optimize +chown <%= user %>:<%= group %> /opt/kibana/optimize From 07618c396493e95232aeb8685568b1c71aaa4d07 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 3 May 2016 10:12:04 -0500 Subject: [PATCH 04/15] [build] Recursive chown optimize folder --- tasks/build/package_scripts/post_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh index 16dbba6862a451..578e0cdeecfdc0 100644 --- a/tasks/build/package_scripts/post_install.sh +++ b/tasks/build/package_scripts/post_install.sh @@ -13,4 +13,4 @@ user_create() { if ! user_check "<%= user %>" ; then user_create "<%= user %>" fi -chown <%= user %>:<%= group %> /opt/kibana/optimize +chown -R <%= user %>:<%= group %> /opt/kibana/optimize From 83c580298f966ae24ff86eead990ff4d073c87ad Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 3 May 2016 10:20:16 -0500 Subject: [PATCH 05/15] [build] Try service kibana stop before init script --- tasks/build/package_scripts/pre_remove.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasks/build/package_scripts/pre_remove.sh b/tasks/build/package_scripts/pre_remove.sh index b184bc6ce64315..b279efa5e65778 100644 --- a/tasks/build/package_scripts/pre_remove.sh +++ b/tasks/build/package_scripts/pre_remove.sh @@ -7,6 +7,8 @@ fi if [ -x /etc/init.d/kibana ]; then if command -v invoke-rc.d >/dev/null; then invoke-rc.d kibana stop + elif command -v service >/dev/null; then + service kibana stop else /etc/init.d/kibana stop fi From 6c6e4d31ffebf2b7889b850506052ace715216ee Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Mon, 9 May 2016 14:40:05 -0500 Subject: [PATCH 06/15] [build] Attempt to stop service pre-install --- tasks/build/os_packages.js | 1 + tasks/build/package_scripts/pre_install.sh | 13 +++++++++++++ tasks/build/package_scripts/pre_remove.sh | 5 ++--- 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 tasks/build/package_scripts/pre_install.sh diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 0cc52fe69dd49d..839782a9e3e553 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -29,6 +29,7 @@ module.exports = function (grunt) { '--maintainer', 'Kibana Team\ \', '--license', 'Apache\ 2.0', '--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', diff --git a/tasks/build/package_scripts/pre_install.sh b/tasks/build/package_scripts/pre_install.sh new file mode 100644 index 00000000000000..4762a74db219d8 --- /dev/null +++ b/tasks/build/package_scripts/pre_install.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +if command -v systemctl >/dev/null && systemctl is-active kibana.service >/dev/null; then + systemctl --no-reload stop kibana.service +elif [ -x /etc/init.d/kibana ]; then + if command -v invoke-rc.d >/dev/null; then + invoke-rc.d kibana stop + elif command -v service >/dev/null; then + service kibana stop + else + /etc/init.d/kibana stop + fi +fi diff --git a/tasks/build/package_scripts/pre_remove.sh b/tasks/build/package_scripts/pre_remove.sh index b279efa5e65778..745c782af40b53 100644 --- a/tasks/build/package_scripts/pre_remove.sh +++ b/tasks/build/package_scripts/pre_remove.sh @@ -1,10 +1,9 @@ #!/bin/sh echo -n "Stopping kibana service..." -if command -v systemctl >/dev/null; then +if command -v systemctl >/dev/null && systemctl is-active kibana.service >/dev/null; then systemctl --no-reload stop kibana.service -fi -if [ -x /etc/init.d/kibana ]; then +elif [ -x /etc/init.d/kibana ]; then if command -v invoke-rc.d >/dev/null; then invoke-rc.d kibana stop elif command -v service >/dev/null; then From f9033a1c6e598f55e28e578e9acb9f7baabfc18c Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 10 May 2016 10:47:07 -0500 Subject: [PATCH 07/15] [build] Fail on errors --- tasks/build/package_scripts/post_install.sh | 1 + tasks/build/package_scripts/post_remove.sh | 1 + tasks/build/package_scripts/pre_install.sh | 1 + tasks/build/package_scripts/pre_remove.sh | 1 + 4 files changed, 4 insertions(+) diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh index 578e0cdeecfdc0..a7be3433ba54cc 100644 --- a/tasks/build/package_scripts/post_install.sh +++ b/tasks/build/package_scripts/post_install.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -e user_check() { getent passwd "$1" > /dev/null 2>&1 diff --git a/tasks/build/package_scripts/post_remove.sh b/tasks/build/package_scripts/post_remove.sh index 4c08f1553d98dd..6ed5dd6861b41a 100644 --- a/tasks/build/package_scripts/post_remove.sh +++ b/tasks/build/package_scripts/post_remove.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -e user_check() { getent passwd "$1" > /dev/null 2>&1 diff --git a/tasks/build/package_scripts/pre_install.sh b/tasks/build/package_scripts/pre_install.sh index 4762a74db219d8..4f3b6590a3a3ea 100644 --- a/tasks/build/package_scripts/pre_install.sh +++ b/tasks/build/package_scripts/pre_install.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -e if command -v systemctl >/dev/null && systemctl is-active kibana.service >/dev/null; then systemctl --no-reload stop kibana.service diff --git a/tasks/build/package_scripts/pre_remove.sh b/tasks/build/package_scripts/pre_remove.sh index 745c782af40b53..07d0f341ccefcc 100644 --- a/tasks/build/package_scripts/pre_remove.sh +++ b/tasks/build/package_scripts/pre_remove.sh @@ -1,4 +1,5 @@ #!/bin/sh +set -e echo -n "Stopping kibana service..." if command -v systemctl >/dev/null && systemctl is-active kibana.service >/dev/null; then From bab73b897170229b983d5ae50a0acd132a22f0fc Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 10 May 2016 13:16:51 -0500 Subject: [PATCH 08/15] [build] Cleanup postrm --- tasks/build/package_scripts/post_remove.sh | 34 ++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/tasks/build/package_scripts/post_remove.sh b/tasks/build/package_scripts/post_remove.sh index 6ed5dd6861b41a..ff0a2888f713cf 100644 --- a/tasks/build/package_scripts/post_remove.sh +++ b/tasks/build/package_scripts/post_remove.sh @@ -9,10 +9,34 @@ user_remove() { userdel "$1" } +REMOVE_USER=false + case $1 in - purge|0) - if user_check "<%= user %>" ; then - user_remove "<%= user %>" - fi - ;; + + # Debian + purge) + REMOVE_USER=true + ;; + + remove|failed-upgrade|abort-install|abort-upgrade|disappear|upgrade|disappear) + ;; + + # Red Hat + 0) + REMOVE_USER=true + ;; + + 1) + ;; + + *) + echo "post remove script called with unknown argument \`$1'" >&2 + exit 1 + ;; esac + +if [ "$REMOVE_USER" = "true" ]; then + if user_check "<%= user %>" ; then + user_remove "<%= user %>" + fi +fi From 4336f2bc8d313f5c5fd77781632d0e5ca468355f Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Fri, 13 May 2016 10:03:22 -0500 Subject: [PATCH 09/15] [build] Add comment in postrm explaining empty cases --- tasks/build/package_scripts/post_remove.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/build/package_scripts/post_remove.sh b/tasks/build/package_scripts/post_remove.sh index ff0a2888f713cf..43e8e5e6d4ac51 100644 --- a/tasks/build/package_scripts/post_remove.sh +++ b/tasks/build/package_scripts/post_remove.sh @@ -12,7 +12,7 @@ user_remove() { REMOVE_USER=false case $1 in - + # Includes cases for all valid arguments, exit 1 otherwise # Debian purge) REMOVE_USER=true From 6d293afbfb23ef81e716781b0dee54c24c0f2fdf Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 25 May 2016 09:12:08 -0500 Subject: [PATCH 10/15] [build] move install to /usr/share, config to /etc/kibana --- tasks/build/os_packages.js | 18 ++++++++++++------ tasks/build/pleaserun.js | 10 +++++++++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 839782a9e3e553..62ba385c99cd90 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -32,14 +32,20 @@ module.exports = function (grunt) { '--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', + '--config-files', '/etc/kibana/kibana.yml', '--template-value', 'user=kibana', '--template-value', 'group=kibana' + + //uses relative path to --prefix + '--exclude', 'usr/share/kibana/config' ]; - const files = buildDir + '/=/opt/kibana'; - const sysv = servicesByName.sysv.outputDir + '/etc/=/etc/'; - const systemd = servicesByName.systemd.outputDir + '/lib/=/lib/'; + const files = [ + `${buildDir}/=/usr/share/kibana/`, + `${buildDir}/config/=/etc/kibana/`, + `${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(','); @@ -50,10 +56,10 @@ module.exports = function (grunt) { grunt.file.mkdir(targetDir); if (buildDeb || noneSpecified) { - fpm(args.concat('-t', 'deb', '--deb-priority', 'optional', '-a', arch, files, sysv, systemd)); + fpm(args.concat('-t', 'deb', '--deb-priority', 'optional', '-a', arch, files)); } if (buildRpm || noneSpecified) { - fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysv, systemd)); + fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files)); } }); diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index 8b8444235a9d0b..907ebc7b2ec257 100644 --- a/tasks/build/pleaserun.js +++ b/tasks/build/pleaserun.js @@ -19,8 +19,16 @@ module.exports = function createServices(grunt) { '--sysv-log-path', '/var/log/kibana/', '-p', service.name, '-v', service.version, - '/opt/kibana/bin/kibana' + '/usr/share/kibana/bin/kibana', + '-c /etc/kibana/kibana.yml' ]); }); +<<<<<<< a9f1c863a78d71b9d350badac9d65a204898e566 +======= + + grunt.file.mkdir(userScriptsDir); + exec('please-manage-user', ['--output', userScriptsDir, 'kibana']); + appendFileSync(resolve(userScriptsDir, 'installer.sh'), 'chown -R kibana:kibana /usr/share/kibana/optimize'); +>>>>>>> [build] move install to /usr/share, config to /etc/kibana }); }; From 8f0be48768fb6bdff49cf509ff5fe84d540ee1ee Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 25 May 2016 14:21:36 -0500 Subject: [PATCH 11/15] [build] consolidate package config --- tasks/build/os_packages.js | 31 ++++++++++---------- tasks/build/pleaserun.js | 20 ++++++------- tasks/config/packages.js | 58 +++++++++++++++++++++++++++++--------- tasks/release_packages.js | 10 +++---- 4 files changed, 74 insertions(+), 45 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 62ba385c99cd90..11546ed1df76a8 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -1,16 +1,16 @@ module.exports = function (grunt) { const { resolve } = require('path'); const { indexBy } = require('lodash'); - 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'); + const packageConfig = config.get('packages'); grunt.registerTask('_build:osPackages', function () { - grunt.config.get('platforms').forEach(({ name, buildDir }) => { + config.get('platforms').forEach(({ name, buildDir }) => { // TODO(sissel): Check if `fpm` is available if (!(/linux-x(86|64)$/.test(name))) return; @@ -21,28 +21,29 @@ module.exports = function (grunt) { '--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\ \', - '--license', 'Apache\ 2.0', + '--name', packageConfig.name, + '--description', packageConfig.description, + '--version', packageConfig.version, + '--url', packageConfig.site, + '--vendor', packageConfig.vendor, + '--maintainer', packageConfig.maintainer, + '--license', packageConfig.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', '/etc/kibana/kibana.yml', + '--config-files', packageConfig.path.kibanaConfig, '--template-value', 'user=kibana', '--template-value', 'group=kibana' - //uses relative path to --prefix - '--exclude', 'usr/share/kibana/config' + //config folder is moved to path.conf, exclude {path.home}/config + //uses relative path to --prefix, strip the leading / + '--exclude', `${packageConfig.path.home.slice(1)}/config` ]; const files = [ - `${buildDir}/=/usr/share/kibana/`, - `${buildDir}/config/=/etc/kibana/`, + `${buildDir}/=${packageConfig.path.home}/`, + `${buildDir}/config/=${packageConfig.path.conf}/`, `${servicesByName.sysv.outputDir}/etc/=/etc/`, `${servicesByName.systemd.outputDir}/lib/=/lib/` ]; diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index 907ebc7b2ec257..27f94b3d0d0b4b 100644 --- a/tasks/build/pleaserun.js +++ b/tasks/build/pleaserun.js @@ -3,6 +3,9 @@ module.exports = function createServices(grunt) { const { appendFileSync } = require('fs'); const exec = require('../utils/exec'); + const userScriptsDir = grunt.config.get('userScriptsDir'); + const { path, user, group } = grunt.config.get('packages'); + grunt.registerTask('_build:pleaseRun', function () { // TODO(sissel): Detect if 'pleaserun' is found, and provide a useful error // to the user if it is missing. @@ -14,21 +17,14 @@ module.exports = function createServices(grunt) { '--no-install-actions', '--install-prefix', service.outputDir, '--overwrite', - '--user', 'kibana', - '--group', 'kibana', - '--sysv-log-path', '/var/log/kibana/', + '--user', user, + '--group', group, + '--sysv-log-path', path.logs, '-p', service.name, '-v', service.version, - '/usr/share/kibana/bin/kibana', - '-c /etc/kibana/kibana.yml' + path.kibanaBin, + `-c ${path.kibanaConfig}` ]); }); -<<<<<<< a9f1c863a78d71b9d350badac9d65a204898e566 -======= - - grunt.file.mkdir(userScriptsDir); - exec('please-manage-user', ['--output', userScriptsDir, 'kibana']); - appendFileSync(resolve(userScriptsDir, 'installer.sh'), 'chown -R kibana:kibana /usr/share/kibana/optimize'); ->>>>>>> [build] move install to /usr/share, config to /etc/kibana }); }; diff --git a/tasks/config/packages.js b/tasks/config/packages.js index c1b327747a60d1..1c847168b33cd9 100644 --- a/tasks/config/packages.js +++ b/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\ \', + license: 'Apache\ 2.0', + version: VERSION, + path: { + conf: FOLDER_CONFIG, + logs: FOLDER_LOGS, + home: FOLDER_HOME, + kibanaBin: FILE_KIBANA_BINARY, + kibanaConfig: FILE_KIBANA_CONF } }; }; diff --git a/tasks/release_packages.js b/tasks/release_packages.js index 372fbc9f785ee5..f542481d7007a5 100644 --- a/tasks/release_packages.js +++ b/tasks/release_packages.js @@ -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) { @@ -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, @@ -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 From db5ac1e72f8fa8d1b5848428b48bd53664ed48a8 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 25 May 2016 15:15:09 -0500 Subject: [PATCH 12/15] [build] Cleanup packages task --- tasks/build/os_packages.js | 50 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 11546ed1df76a8..876798b1a08c86 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -8,19 +8,24 @@ module.exports = function (grunt) { const packageScriptsDir = config.get('packageScriptsDir'); const servicesByName = indexBy(config.get('services'), 'name'); const packageConfig = config.get('packages'); + const fpm = args => exec('fpm', args); grunt.registerTask('_build:osPackages', function () { - 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 = [ + 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 + '--architecture', architecture, '--name', packageConfig.name, '--description', packageConfig.description, '--version', packageConfig.version, @@ -40,8 +45,15 @@ module.exports = function (grunt) { //uses relative path to --prefix, strip the leading / '--exclude', `${packageConfig.path.home.slice(1)}/config` ]; - - const files = [ + const debOptions = [ + '-t', 'deb', + '--deb-priority', 'optional' + ]; + const rpmOptions = [ + '-t', 'rpm', + '--rpm-os', 'linux' + ]; + const args = [ `${buildDir}/=${packageConfig.path.home}/`, `${buildDir}/config/=${packageConfig.path.conf}/`, `${servicesByName.sysv.outputDir}/etc/=/etc/`, @@ -49,18 +61,14 @@ module.exports = function (grunt) { ]; //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)); + const flags = grunt.option.flags().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)); + if (buildRpm) { + fpm([...baseOptions, ...rpmOptions, ...args]); } }); From 6189c19de8502b93b68daf1d638d6d0a0937823e Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 25 May 2016 15:19:16 -0500 Subject: [PATCH 13/15] [build] Style cleanup --- tasks/build/os_packages.js | 47 +++++++++++++++++++------------------- tasks/build/pleaserun.js | 13 ++++------- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 876798b1a08c86..592d526762dc95 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -1,17 +1,16 @@ -module.exports = function (grunt) { - const { resolve } = require('path'); - const { indexBy } = require('lodash'); - const { config } = grunt; - const exec = require('../utils/exec'); +import { resolve } from 'path'; +import { indexBy } from 'lodash'; +import exec from '../utils/exec'; - const targetDir = config.get('target'); - const packageScriptsDir = config.get('packageScriptsDir'); - const servicesByName = indexBy(config.get('services'), 'name'); - const packageConfig = config.get('packages'); +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 () { - config.get('platforms') + grunt.config.get('platforms') .filter(({ name }) => /linux-x(86|64)$/.test(name)) .map(({ name, buildDir }) => { const architecture = /x64$/.test(name) ? 'x86_64' : 'i386'; @@ -26,24 +25,24 @@ module.exports = function (grunt) { '--package', targetDir, '-s', 'dir', // input type '--architecture', architecture, - '--name', packageConfig.name, - '--description', packageConfig.description, - '--version', packageConfig.version, - '--url', packageConfig.site, - '--vendor', packageConfig.vendor, - '--maintainer', packageConfig.maintainer, - '--license', packageConfig.license, + '--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', packageConfig.path.kibanaConfig, - '--template-value', 'user=kibana', - '--template-value', 'group=kibana' + '--config-files', config.path.kibanaConfig, + '--template-value', `user=${config.user}`, + '--template-value', `group=${config.group}`, //config folder is moved to path.conf, exclude {path.home}/config //uses relative path to --prefix, strip the leading / - '--exclude', `${packageConfig.path.home.slice(1)}/config` + '--exclude', `${config.path.home.slice(1)}/config` ]; const debOptions = [ '-t', 'deb', @@ -54,14 +53,14 @@ module.exports = function (grunt) { '--rpm-os', 'linux' ]; const args = [ - `${buildDir}/=${packageConfig.path.home}/`, - `${buildDir}/config/=${packageConfig.path.conf}/`, + `${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 - const flags = grunt.option.flags().join(','); + 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) { diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index 27f94b3d0d0b4b..e7458efd455dfa 100644 --- a/tasks/build/pleaserun.js +++ b/tasks/build/pleaserun.js @@ -1,16 +1,13 @@ -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'; +export default (grunt) => { const userScriptsDir = grunt.config.get('userScriptsDir'); const { path, user, group } = grunt.config.get('packages'); grunt.registerTask('_build:pleaseRun', function () { - // TODO(sissel): Detect if 'pleaserun' is found, and provide a useful error - // to the user if it is missing. - - grunt.config.get('services').forEach(function (service) { + grunt.config.get('services').forEach((service) => { grunt.file.mkdir(service.outputDir); exec('pleaserun', [ '--install', From 9213e616087f0d9502f45ecb9e2846014672fb4e Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 25 May 2016 16:27:20 -0500 Subject: [PATCH 14/15] [build] template chown optimize dir --- tasks/build/os_packages.js | 1 + tasks/build/package_scripts/post_install.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/build/os_packages.js b/tasks/build/os_packages.js index 592d526762dc95..87c5b83a58136a 100644 --- a/tasks/build/os_packages.js +++ b/tasks/build/os_packages.js @@ -39,6 +39,7 @@ export default (grunt) => { '--config-files', config.path.kibanaConfig, '--template-value', `user=${config.user}`, '--template-value', `group=${config.group}`, + '--template-value', `optimizeDir=${config.path.home}/optimize`, //config folder is moved to path.conf, exclude {path.home}/config //uses relative path to --prefix, strip the leading / diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh index a7be3433ba54cc..beef49af21753b 100644 --- a/tasks/build/package_scripts/post_install.sh +++ b/tasks/build/package_scripts/post_install.sh @@ -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 %> From e1cb593ee6212a5159224d5cc8cca1d3c75c31f3 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 7 Jun 2016 14:48:57 -0500 Subject: [PATCH 15/15] [build] Add name and description to init scripts --- tasks/build/pleaserun.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index e7458efd455dfa..b7a7e8f4eb6531 100644 --- a/tasks/build/pleaserun.js +++ b/tasks/build/pleaserun.js @@ -4,7 +4,7 @@ import exec from '../utils/exec'; export default (grunt) => { const userScriptsDir = grunt.config.get('userScriptsDir'); - const { path, user, group } = grunt.config.get('packages'); + const { path, user, group, name, description } = grunt.config.get('packages'); grunt.registerTask('_build:pleaseRun', function () { grunt.config.get('services').forEach((service) => { @@ -14,6 +14,8 @@ export default (grunt) => { '--no-install-actions', '--install-prefix', service.outputDir, '--overwrite', + '--name', name, + '--description', description, '--user', user, '--group', group, '--sysv-log-path', path.logs,