Preserve config files from RPM install

This commit modifies the packaging for the RPM package so that edits to
config files will not get lost during removal and upgrade.

Relates 
This commit is contained in:
Jason Tedor 2016-05-06 13:24:54 -04:00
parent 1d5b9f1ce6
commit 0eaa831f48
4 changed files with 61 additions and 10 deletions
distribution
build.gradle
src/main/packaging/scripts
qa/vagrant/src/test/resources/packaging/scripts

@ -322,12 +322,13 @@ configure(subprojects.findAll { ['deb', 'rpm'].contains(it.name) }) {
configurationFile '/etc/elasticsearch/elasticsearch.yml' configurationFile '/etc/elasticsearch/elasticsearch.yml'
configurationFile '/etc/elasticsearch/jvm.options' configurationFile '/etc/elasticsearch/jvm.options'
configurationFile '/etc/elasticsearch/logging.yml' configurationFile '/etc/elasticsearch/logging.yml'
into('/etc') { into('/etc/elasticsearch') {
from "${packagingFiles}/etc"
fileMode 0750 fileMode 0750
permissionGroup 'elasticsearch' permissionGroup 'elasticsearch'
includeEmptyDirs true includeEmptyDirs true
createDirectoryEntry true createDirectoryEntry true
fileType CONFIG | NOREPLACE
from "${packagingFiles}/etc/elasticsearch"
} }
into('/usr/lib/tmpfiles.d') { into('/usr/lib/tmpfiles.d') {
@ -335,21 +336,25 @@ configure(subprojects.findAll { ['deb', 'rpm'].contains(it.name) }) {
} }
configurationFile '/usr/lib/systemd/system/elasticsearch.service' configurationFile '/usr/lib/systemd/system/elasticsearch.service'
into('/usr/lib/systemd/system') { into('/usr/lib/systemd/system') {
fileType CONFIG | NOREPLACE
from "${packagingFiles}/systemd/elasticsearch.service" from "${packagingFiles}/systemd/elasticsearch.service"
} }
into('/usr/lib/sysctl.d') { into('/usr/lib/sysctl.d') {
fileType CONFIG | NOREPLACE
from "${packagingFiles}/systemd/sysctl/elasticsearch.conf" from "${packagingFiles}/systemd/sysctl/elasticsearch.conf"
} }
configurationFile '/etc/init.d/elasticsearch' configurationFile '/etc/init.d/elasticsearch'
into('/etc/init.d') { into('/etc/init.d') {
from "${packagingFiles}/init.d/elasticsearch"
fileMode 0755 fileMode 0755
fileType CONFIG | NOREPLACE
from "${packagingFiles}/init.d/elasticsearch"
} }
configurationFile project.expansions['path.env'] configurationFile project.expansions['path.env']
into(new File(project.expansions['path.env']).getParent()) { into(new File(project.expansions['path.env']).getParent()) {
from "${project.packagingFiles}/env/elasticsearch"
fileMode 0644 fileMode 0644
dirMode 0755 dirMode 0755
fileType CONFIG | NOREPLACE
from "${project.packagingFiles}/env/elasticsearch"
} }
/** /**

@ -55,6 +55,7 @@ LOG_DIR="/var/log/elasticsearch"
PLUGINS_DIR="/usr/share/elasticsearch/plugins" PLUGINS_DIR="/usr/share/elasticsearch/plugins"
PID_DIR="/var/run/elasticsearch" PID_DIR="/var/run/elasticsearch"
DATA_DIR="/var/lib/elasticsearch" DATA_DIR="/var/lib/elasticsearch"
CONF_DIR="/etc/elasticsearch"
# Source the default env file # Source the default env file
if [ "$SOURCE_ENV_FILE" = "true" ]; then if [ "$SOURCE_ENV_FILE" = "true" ]; then
@ -102,6 +103,12 @@ if [ "$REMOVE_DIRS" = "true" ]; then
if [ -d "$DATA_DIR" ]; then if [ -d "$DATA_DIR" ]; then
rmdir --ignore-fail-on-non-empty "$DATA_DIR" rmdir --ignore-fail-on-non-empty "$DATA_DIR"
fi fi
# delete the conf directory if and only if empty
if [ -d "$CONF_DIR" ]; then
rmdir --ignore-fail-on-non-empty "$CONF_DIR"
fi
fi fi
if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then

@ -64,4 +64,10 @@ if [ "$STOP_REQUIRED" = "true" ]; then
echo " OK" echo " OK"
fi fi
SCRIPTS_DIR="/etc/elasticsearch/scripts"
# delete the scripts directory if and only if empty
if [ -d "$SCRIPTS_DIR" ]; then
rmdir --ignore-fail-on-non-empty "$SCRIPTS_DIR"
fi
${scripts.footer} ${scripts.footer}

@ -116,7 +116,7 @@ setup() {
assert_file_not_exist "/etc/elasticsearch" assert_file_not_exist "/etc/elasticsearch"
assert_file_not_exist "/etc/elasticsearch/elasticsearch.yml" assert_file_not_exist "/etc/elasticsearch/elasticsearch.yml"
assert_file_not_exist "/etc/elasticsearch/jvm.options" assert_file_not_exist "/etc/elasticsearch/jvm.options"
assert_file_not_exist "/etc/elasticsearch/logging.yml" assert_file_not_exist "/etc/elasticsearch/logging.yml"
assert_file_not_exist "/etc/init.d/elasticsearch" assert_file_not_exist "/etc/init.d/elasticsearch"
@ -125,7 +125,6 @@ setup() {
assert_file_not_exist "/etc/sysconfig/elasticsearch" assert_file_not_exist "/etc/sysconfig/elasticsearch"
} }
@test "[RPM] reinstall package" { @test "[RPM] reinstall package" {
rpm -i elasticsearch-$(cat version).rpm rpm -i elasticsearch-$(cat version).rpm
} }
@ -134,12 +133,46 @@ setup() {
rpm -qe 'elasticsearch' rpm -qe 'elasticsearch'
} }
@test "[RPM] verify package reinstallation" { @test "[RPM] reremove package" {
verify_package_installation echo "# ping" >> "/etc/elasticsearch/elasticsearch.yml"
echo "# ping" >> "/etc/elasticsearch/jvm.options"
echo "# ping" >> "/etc/elasticsearch/logging.yml"
echo "# ping" >> "/etc/elasticsearch/scripts/script"
rpm -e 'elasticsearch'
} }
@test "[RPM] reremove package" { @test "[RPM] verify preservation" {
rpm -e 'elasticsearch' # The removal must disable the service
# see prerm file
if is_systemd; then
run systemctl is-enabled elasticsearch.service
[ "$status" -eq 1 ]
fi
# Those directories are deleted when removing the package
# see postrm file
assert_file_not_exist "/var/log/elasticsearch"
assert_file_not_exist "/usr/share/elasticsearch/plugins"
assert_file_not_exist "/var/run/elasticsearch"
assert_file_not_exist "/etc/elasticsearch/elasticsearch.yml"
assert_file_exist "/etc/elasticsearch/elasticsearch.yml.rpmsave"
assert_file_not_exist "/etc/elasticsearch/jvm.options"
assert_file_exist "/etc/elasticsearch/jvm.options.rpmsave"
assert_file_not_exist "/etc/elasticsearch/logging.yml"
assert_file_exist "/etc/elasticsearch/logging.yml.rpmsave"
assert_file_exist "/etc/elasticsearch/scripts.rpmsave"
assert_file_exist "/etc/elasticsearch/scripts.rpmsave/script"
assert_file_not_exist "/etc/init.d/elasticsearch"
assert_file_not_exist "/usr/lib/systemd/system/elasticsearch.service"
assert_file_not_exist "/etc/sysconfig/elasticsearch"
}
@test "[RPM] finalize package removal" {
# cleanup
rm -rf /etc/elasticsearch
} }
@test "[RPM] package has been removed again" { @test "[RPM] package has been removed again" {