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 #18188
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

View File

@ -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"
} }
/** /**

View File

@ -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

View File

@ -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}

View File

@ -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" {