Skip to content

Always set default ES_PATH_CONF for package scriptlets #51827

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

williamrandolph
Copy link
Contributor

@williamrandolph williamrandolph commented Feb 3, 2020

Our packages use scriptlets to create or update the Elasticsearch keystore as necessary when installing or upgrading an Elasticsearch package. If these scriptlets don't work as expected, Elasticsearch may try and fail to create or upgrade the keystore at startup time. This will prevent Elasticsearch from starting up at all.

These scriptlets use the Elasticsearch keystore command-line tools. Like most of our command-line tools, the keystore tools will by default get their value for ES_PATH_CONF from a system configuration file: /etc/sysconfig/elasticsearch for RPMs, /etc/default/elasticsearch for debian packages. Previously, if the user removed ES_PATH_CONF from that system configuration file (perhaps thinking that it is obsolete when the same variables is also defined in the systemd unit file), the keystore command-line tools would fail. Scriptlet errors do not seem to cause the installation to fail, and for RPMs the error message is easy to miss in command output.

This PR adds adjusts the scriptlets to set ES_PATH_CONF to a default value whenever ES_PATH_CONF is unset, rather than only when the system configuration file is missing.

Fixes #50631
Relates #50246

Note: the bash construct I'm using here is default values for parameter expansion. From the manpage:

       ${parameter:-word}
              Use  Default  Values.   If  parameter  is unset or null, the expansion of word is substituted.
              Otherwise, the value of parameter is substituted.

Our packages use scriptlets to create or update the Elasticsearch
keystore as necessary when installing or upgrading an Elasticsearch
package. If these scriptlets don't work as expected, Elasticsearch may
try and fail to create or upgrade the keystore at startup time. This
will prevent Elasticsearch from starting up at all.

These scriptlets use the Elasticsearch keystore command-line tools. Like
most of our command-line tools, the keystore tools will by default get
their value for ES_PATH_CONF from a system configuration file:
/etc/sysconfig/elasticsearch for RPMs, /etc/default/elasticsearch for
debian packages. Previously, if the user removed ES_PATH_CONF from that
system configuration file (perhaps thinking that it is obsolete when
the same variables is also defined in the systemd unit file), the
keystore command-line tools would fail. Scriptlet errors do not seem to
cause the installation to fail, and for RPMs the error message is easy
to miss in command output.

This commit adds a line of bash to scriptlets that will set ES_PATH_CONF
to a default when ES_PATH_CONF is unset, rather than only when the
system configuration file is missing.
@williamrandolph williamrandolph added >bug :Delivery/Packaging RPM and deb packaging, tar and zip archives, shell and batch scripts v8.0.0 v7.7.0 labels Feb 3, 2020
@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-core-infra (:Core/Infra/Packaging)

@pugnascotia
Copy link
Contributor

Judging by the CI failure, I think you may need to bring your branch up-to-date due to #51714.

Copy link
Member

@rjernst rjernst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@williamrandolph williamrandolph merged commit da09dc2 into elastic:master Feb 14, 2020
williamrandolph added a commit to williamrandolph/elasticsearch that referenced this pull request Feb 14, 2020
* Set default ES_PATH_CONF for package scriptlets

Our packages use scriptlets to create or update the Elasticsearch
keystore as necessary when installing or upgrading an Elasticsearch
package. If these scriptlets don't work as expected, Elasticsearch may
try and fail to create or upgrade the keystore at startup time. This
will prevent Elasticsearch from starting up at all.

These scriptlets use the Elasticsearch keystore command-line tools. Like
most of our command-line tools, the keystore tools will by default get
their value for ES_PATH_CONF from a system configuration file:
/etc/sysconfig/elasticsearch for RPMs, /etc/default/elasticsearch for
debian packages. Previously, if the user removed ES_PATH_CONF from that
system configuration file (perhaps thinking that it is obsolete when
the same variables is also defined in the systemd unit file), the
keystore command-line tools would fail. Scriptlet errors do not seem to
cause the installation to fail, and for RPMs the error message is easy
to miss in command output.

This commit adds a line of bash to scriptlets that will set ES_PATH_CONF
to a default when ES_PATH_CONF is unset, rather than only when the
system configuration file is missing.
williamrandolph added a commit that referenced this pull request Feb 14, 2020
* Set default ES_PATH_CONF for package scriptlets

Our packages use scriptlets to create or update the Elasticsearch
keystore as necessary when installing or upgrading an Elasticsearch
package. If these scriptlets don't work as expected, Elasticsearch may
try and fail to create or upgrade the keystore at startup time. This
will prevent Elasticsearch from starting up at all.

These scriptlets use the Elasticsearch keystore command-line tools. Like
most of our command-line tools, the keystore tools will by default get
their value for ES_PATH_CONF from a system configuration file:
/etc/sysconfig/elasticsearch for RPMs, /etc/default/elasticsearch for
debian packages. Previously, if the user removed ES_PATH_CONF from that
system configuration file (perhaps thinking that it is obsolete when
the same variables is also defined in the systemd unit file), the
keystore command-line tools would fail. Scriptlet errors do not seem to
cause the installation to fail, and for RPMs the error message is easy
to miss in command output.

This commit adds a line of bash to scriptlets that will set ES_PATH_CONF
to a default when ES_PATH_CONF is unset, rather than only when the
system configuration file is missing.
@mark-vieira mark-vieira added the Team:Delivery Meta label for Delivery team label Nov 11, 2020
h0tw1r3 added a commit to btolab/puppet-elasticsearch that referenced this pull request Jun 19, 2021
@williamrandolph williamrandolph deleted the package-default-conf-dir branch May 23, 2022 17:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
>bug :Delivery/Packaging RPM and deb packaging, tar and zip archives, shell and batch scripts Team:Delivery Meta label for Delivery team v7.7.0 v8.0.0-alpha1
Projects
None yet
Development

Successfully merging this pull request may close these issues.

RPM update to 7.5.1 prevents start of elasticsearch
6 participants