diff --git a/Gruntfile.js b/Gruntfile.js index a7867384a6fa..9c694db149b2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -67,7 +67,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/osPackages.js b/tasks/build/osPackages.js index 5153df3263ad..839782a9e3e5 100644 --- a/tasks/build/osPackages.js +++ b/tasks/build/osPackages.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 () { @@ -22,15 +22,19 @@ 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.', '--maintainer', 'Kibana Team\ \', '--license', 'Apache\ 2.0', - '--after-install', resolve(userScriptsDir, 'installer.sh'), - '--after-remove', resolve(userScriptsDir, 'remover.sh'), - '--config-files', '/opt/kibana/config/kibana.yml' + '--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' ]; const files = buildDir + '/=/opt/kibana'; diff --git a/tasks/build/package_scripts/post_install.sh b/tasks/build/package_scripts/post_install.sh new file mode 100644 index 000000000000..a7be3433ba54 --- /dev/null +++ b/tasks/build/package_scripts/post_install.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +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 "<%= user %>" ; then + user_create "<%= user %>" +fi +chown -R <%= user %>:<%= group %> /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 000000000000..43e8e5e6d4ac --- /dev/null +++ b/tasks/build/package_scripts/post_remove.sh @@ -0,0 +1,42 @@ +#!/bin/sh +set -e + +user_check() { + getent passwd "$1" > /dev/null 2>&1 +} + +user_remove() { + userdel "$1" +} + +REMOVE_USER=false + +case $1 in + # Includes cases for all valid arguments, exit 1 otherwise + # 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 diff --git a/tasks/build/package_scripts/pre_install.sh b/tasks/build/package_scripts/pre_install.sh new file mode 100644 index 000000000000..4f3b6590a3a3 --- /dev/null +++ b/tasks/build/package_scripts/pre_install.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +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 new file mode 100644 index 000000000000..07d0f341ccef --- /dev/null +++ b/tasks/build/package_scripts/pre_remove.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +echo -n "Stopping kibana service..." +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 +echo " OK" diff --git a/tasks/build/pleaserun.js b/tasks/build/pleaserun.js index 9f99955ad9ca..8b8444235a9d 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'); }); };