Add properties files to configure startup and installation scripts

Many scripts are used to start/stop and install/uninstall elasticsearch. These scripts share a lot of configuration properties like directory paths, max value for a setting, default user etc. Most of the values are identical but some of them are different depending of the platform (Debian-based or Redhat-based OS), depending of the way elasticsearch is started (shell script, systemd, sysv-init...) or the way it is installed (zip, rpm, deb...). Today the values are duplicated in multiple places, making it difficult to maintain the scripts or to update a value.

This pull request make this more uniform: values used in scripts must be defined in a common packaging.properties file. Each value can be overridden in another specific packaging.properties file for Debian or Redhat. All startup and installation scripts are filtered with the common then the custom packaging.properties files before being packaged as a zip/tar.gz/rpm/dpkf archive.
This commit is contained in:
Tanguy Leroux 2015-03-30 15:58:34 +02:00
parent e8a42c6954
commit 168238dab6
26 changed files with 223 additions and 44 deletions

Binary file not shown.

View File

@ -3,10 +3,10 @@
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/lib/${project.build.finalName}.jar:$ES_HOME/lib/*:$ES_HOME/lib/sigar/*"
if [ "x$ES_MIN_MEM" = "x" ]; then
ES_MIN_MEM=256m
ES_MIN_MEM=${packaging.elasticsearch.heap.min}
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
ES_MAX_MEM=1g
ES_MAX_MEM=${packaging.elasticsearch.heap.max}
fi
if [ "x$ES_HEAP_SIZE" != "x" ]; then
ES_MIN_MEM=$ES_HEAP_SIZE

Binary file not shown.

238
pom.xml
View File

@ -45,6 +45,16 @@
<tests.heapdump.path>${basedir}/logs/</tests.heapdump.path>
<tests.topn>5</tests.topn>
<execution.hint.file>.local-${project.version}-execution-hints.log</execution.hint.file>
<!-- Properties used for building RPM & DEB packages (see common/packaging.properties) -->
<packaging.elasticsearch.home.dir>/usr/share/elasticsearch</packaging.elasticsearch.home.dir>
<packaging.elasticsearch.conf.dir>/etc/elasticsearch</packaging.elasticsearch.conf.dir>
<packaging.elasticsearch.data.dir>/var/lib/elasticsearch</packaging.elasticsearch.data.dir>
<packaging.elasticsearch.user>elasticsearch</packaging.elasticsearch.user>
<packaging.elasticsearch.group>elasticsearch</packaging.elasticsearch.group>
<packaging.elasticsearch.work.dir>/var/run/elasticsearch</packaging.elasticsearch.work.dir>
<packaging.elasticsearch.log.dir>/var/log/elasticsearch</packaging.elasticsearch.log.dir>
</properties>
<repositories>
@ -358,6 +368,12 @@
<build>
<!-- This file contains all the common properties used to build
the different packages (tar.gz, deb, rpm) using Maven resources plugin -->
<filters>
<filter>src/packaging/common/packaging.properties</filter>
</filters>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
@ -932,14 +948,16 @@
</execution>
</executions>
</plugin>
<!-- Deb Packaging -->
<plugin>
<!-- some infos https://github.com/tcurdt/jdeb/blob/master/docs/maven.md
-->
<!-- some infos https://github.com/tcurdt/jdeb/blob/master/docs/maven.md -->
<artifactId>jdeb</artifactId>
<groupId>org.vafer</groupId>
<version>1.0.1</version>
<version>1.4</version>
<configuration>
<deb>${project.build.directory}/releases/${project.artifactId}-${project.version}.deb</deb>
<controlDir>${project.build.directory}/generated-packaging/deb/control</controlDir>
</configuration>
<executions>
<execution>
@ -956,19 +974,19 @@
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/usr/share/elasticsearch</prefix>
<prefix>${packaging.elasticsearch.home.dir}</prefix>
<user>root</user>
<group>root</group>
</mapper>
</data>
<data>
<!-- use the filtered one from the resources plugin -->
<src>${project.build.directory}/bin</src>
<src>${project.build.directory}/generated-packaging/deb/bin</src>
<type>directory</type>
<excludes>*.bat, .DS_Store, *.exe</excludes>
<mapper>
<type>perm</type>
<prefix>/usr/share/elasticsearch/bin</prefix>
<prefix>${packaging.elasticsearch.home.dir}/bin</prefix>
<filemode>755</filemode>
<user>root</user>
<group>root</group>
@ -980,7 +998,7 @@
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/usr/share/elasticsearch/lib</prefix>
<prefix>${packaging.elasticsearch.home.dir}/lib</prefix>
<user>root</user>
<group>root</group>
</mapper>
@ -991,7 +1009,7 @@
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/usr/share/elasticsearch/lib/sigar</prefix>
<prefix>${packaging.elasticsearch.home.dir}/lib/sigar</prefix>
<user>root</user>
<group>root</group>
</mapper>
@ -1002,13 +1020,13 @@
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/usr/share/elasticsearch/lib</prefix>
<prefix>${packaging.elasticsearch.home.dir}/lib</prefix>
<user>root</user>
<group>root</group>
</mapper>
</data>
<data>
<src>${project.basedir}/src/deb/default/</src>
<src>${project.build.directory}/generated-packaging/deb/default/</src>
<type>directory</type>
<excludes>.DS_Store</excludes>
<mapper>
@ -1019,7 +1037,7 @@
</mapper>
</data>
<data>
<src>${project.basedir}/src/deb/init.d/</src>
<src>${project.build.directory}/generated-packaging/deb/init.d/</src>
<type>directory</type>
<excludes>.DS_Store</excludes>
<mapper>
@ -1031,7 +1049,7 @@
</mapper>
</data>
<data>
<src>${project.basedir}/src/deb/systemd/elasticsearch.service</src>
<src>${project.build.directory}/generated-packaging/deb/systemd/elasticsearch.service</src>
<dst>/usr/lib/systemd/system/elasticsearch.service</dst>
<type>file</type>
</data>
@ -1041,13 +1059,13 @@
<excludes>.DS_Store</excludes>
<mapper>
<type>perm</type>
<prefix>/etc/elasticsearch</prefix>
<prefix>${packaging.elasticsearch.conf.dir}</prefix>
<user>root</user>
<group>root</group>
</mapper>
</data>
<data>
<src>${project.basedir}/src/deb/lintian</src>
<src>${project.build.directory}/generated-packaging/deb/lintian</src>
<type>directory</type>
<excludes>.DS_Store</excludes>
<mapper>
@ -1058,22 +1076,89 @@
</mapper>
</data>
<data>
<src>${project.basedir}/src/deb/copyright</src>
<src>${project.build.directory}/generated-packaging/deb/copyright</src>
<dst>/usr/share/doc/elasticsearch/copyright</dst>
<type>file</type>
</data>
<!-- Adds and sets permission on default directories -->
<data>
<type>template</type>
<paths>
<path>${packaging.elasticsearch.data.dir}</path>
<path>${packaging.elasticsearch.log.dir}</path>
<path>${packaging.elasticsearch.work.dir}</path>
</paths>
<mapper>
<type>perm</type>
<dirmode>755</dirmode>
<user>${packaging.elasticsearch.user}</user>
<group>${packaging.elasticsearch.group}</group>
</mapper>
</data>
</dataSet>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- use packaging.properties when building the .deb package -->
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources-deb</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/generated-packaging/deb/</outputDirectory>
<filters>
<filter>src/packaging/common/packaging.properties</filter>
<filter>src/packaging/deb/packaging.properties</filter>
</filters>
<resources>
<resource>
<directory>src/packaging/common/</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>packaging.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/packaging/deb/</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>packaging.properties</exclude>
</excludes>
</resource>
<resource>
<directory>${project.basedir}</directory>
<filtering>true</filtering>
<includes>
<include>bin/elasticsearch</include>
<include>bin/elasticsearch.in.sh</include>
<include>bin/plugin</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Rpm Packaging -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>2.1-alpha-3</version>
<version>2.1.2</version>
<configuration>
<copyright>2015, Elasticsearch</copyright>
<distribution>Elasticsearch</distribution>
<group>Application/Internet</group>
<packager>Elasticsearch</packager>
@ -1089,7 +1174,7 @@
<defaultGroupname>root</defaultGroupname>
<mappings>
<mapping>
<directory>/etc/elasticsearch/</directory>
<directory>${packaging.elasticsearch.conf.dir}/</directory>
<configuration>noreplace</configuration>
<sources>
<source>
@ -1105,7 +1190,7 @@
<configuration>noreplace</configuration>
<sources>
<source>
<location>src/rpm/sysconfig</location>
<location>${project.build.directory}/generated-packaging/rpm/sysconfig</location>
<includes>
<include>elasticsearch</include>
</includes>
@ -1118,7 +1203,7 @@
<configuration>true</configuration>
<sources>
<source>
<location>src/rpm/init.d/elasticsearch</location>
<location>${project.build.directory}/generated-packaging/rpm/init.d/elasticsearch</location>
</source>
</sources>
</mapping>
@ -1128,7 +1213,7 @@
<configuration>true</configuration>
<sources>
<source>
<location>src/rpm/systemd</location>
<location>${project.build.directory}/generated-packaging/rpm/systemd</location>
<includes>
<include>elasticsearch.service</include>
</includes>
@ -1141,7 +1226,7 @@
<configuration>true</configuration>
<sources>
<source>
<location>src/rpm/systemd/sysctl.d</location>
<location>${project.build.directory}/generated-packaging/rpm/systemd/sysctl.d</location>
<includes>
<include>elasticsearch.conf</include>
</includes>
@ -1153,7 +1238,7 @@
<configuration>true</configuration>
<sources>
<source>
<location>src/rpm/systemd/</location>
<location>${project.build.directory}/generated-packaging/rpm/systemd/</location>
<includes>
<include>elasticsearch.conf</include>
</includes>
@ -1161,29 +1246,29 @@
</sources>
</mapping>
<mapping>
<directory>/var/run/elasticsearch/</directory>
<directory>${packaging.elasticsearch.work.dir}/</directory>
<filemode>755</filemode>
<username>elasticsearch</username>
<groupname>elasticsearch</groupname>
<username>${packaging.elasticsearch.user}</username>
<username>${packaging.elasticsearch.group}</username>
</mapping>
<mapping>
<directory>/var/lib/elasticsearch/</directory>
<directory>${packaging.elasticsearch.data.dir}/</directory>
<filemode>755</filemode>
<username>elasticsearch</username>
<groupname>elasticsearch</groupname>
<username>${packaging.elasticsearch.user}</username>
<username>${packaging.elasticsearch.group}</username>
</mapping>
<mapping>
<directory>/var/log/elasticsearch/</directory>
<directory>${packaging.elasticsearch.log.dir}/</directory>
<filemode>755</filemode>
<username>elasticsearch</username>
<groupname>elasticsearch</groupname>
<username>${packaging.elasticsearch.user}</username>
<username>${packaging.elasticsearch.group}</username>
</mapping>
<mapping>
<directory>/usr/share/elasticsearch/bin/</directory>
<directory>${packaging.elasticsearch.home.dir}/bin/</directory>
<filemode>755</filemode>
<sources>
<source>
<location>target/bin</location>
<location>${project.build.directory}/generated-packaging/rpm/bin</location>
<includes>
<include>elasticsearch</include>
<include>elasticsearch.in.sh</include>
@ -1193,7 +1278,7 @@
</sources>
</mapping>
<mapping>
<directory>/usr/share/elasticsearch/lib</directory>
<directory>${packaging.elasticsearch.home.dir}/lib</directory>
<sources>
<source>
<location>target/lib/</location>
@ -1217,7 +1302,7 @@
</sources>
</mapping>
<mapping>
<directory>/usr/share/elasticsearch/lib/sigar</directory>
<directory>${packaging.elasticsearch.home.dir}/lib/sigar</directory>
<sources>
<source>
<location>lib/sigar</location>
@ -1229,7 +1314,7 @@
</sources>
</mapping>
<mapping>
<directory>/usr/share/elasticsearch/</directory>
<directory>${packaging.elasticsearch.home.dir}</directory>
<sources>
<source>
<location>.</location>
@ -1241,25 +1326,96 @@
</source>
</sources>
</mapping>
<!-- Add and sets permission on default directories -->
<mapping>
<directory>${packaging.elasticsearch.data.dir}</directory>
<filemode>755</filemode>
<username>${packaging.elasticsearch.user}</username>
<groupname>${packaging.elasticsearch.group}</groupname>
</mapping>
<mapping>
<directory>${packaging.elasticsearch.log.dir}</directory>
<filemode>755</filemode>
<username>${packaging.elasticsearch.user}</username>
<groupname>${packaging.elasticsearch.group}</groupname>
</mapping>
<mapping>
<directory>${packaging.elasticsearch.work.dir}</directory>
<filemode>755</filemode>
<username>${packaging.elasticsearch.user}</username>
<groupname>${packaging.elasticsearch.group}</groupname>
</mapping>
</mappings>
<preinstallScriptlet>
<scriptFile>src/rpm/scripts/preinstall</scriptFile>
<scriptFile>${project.build.directory}/generated-packaging/rpm/scripts/preinstall</scriptFile>
<fileEncoding>utf-8</fileEncoding>
</preinstallScriptlet>
<postinstallScriptlet>
<scriptFile>src/rpm/scripts/postinstall</scriptFile>
<scriptFile>${project.build.directory}/generated-packaging/rpm/scripts/postinstall</scriptFile>
<fileEncoding>utf-8</fileEncoding>
</postinstallScriptlet>
<preremoveScriptlet>
<scriptFile>src/rpm/scripts/preremove</scriptFile>
<scriptFile>${project.build.directory}/generated-packaging/rpm/scripts/preremove</scriptFile>
<fileEncoding>utf-8</fileEncoding>
</preremoveScriptlet>
<postremoveScriptlet>
<scriptFile>src/rpm/scripts/postremove</scriptFile>
<scriptFile>${project.build.directory}/generated-packaging/rpm/scripts/postremove</scriptFile>
<fileEncoding>utf-8</fileEncoding>
</postremoveScriptlet>
</configuration>
</plugin>
<plugin>
<!-- use packaging.properties when building the .rpm package -->
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources-rpm</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/generated-packaging/rpm/</outputDirectory>
<filters>
<filter>src/packaging/common/packaging.properties</filter>
<filter>src/packaging/rpm/packaging.properties</filter>
</filters>
<resources>
<resource>
<directory>src/packaging/common/</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>packaging.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/packaging/rpm/</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>packaging.properties</exclude>
</excludes>
</resource>
<resource>
<directory>${project.basedir}</directory>
<filtering>true</filtering>
<includes>
<include>bin/elasticsearch</include>
<include>bin/elasticsearch.in.sh</include>
<include>bin/plugin</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>de.thetaphi</groupId>
<artifactId>forbiddenapis</artifactId>

View File

@ -0,0 +1,11 @@
# Common properties for building ZIP,GZ,RPM and DEB packages
#
# Properties defined here can be overridden with specific settings,
# like in rpm/packaging.properties and deb/packaging.properties.
# Default values for min/max heap memory allocated to elasticsearch java process
packaging.elasticsearch.heap.min=256m
packaging.elasticsearch.heap.max=1g
# Simple marker to check that properties are correctly overridden
packaging.type=tar.gz,gzip

View File

@ -15,7 +15,9 @@ case "$1" in
rm -rf /usr/share/elasticsearch/plugins
# Remove **only** empty data dir
rmdir --ignore-fail-on-non-empty /var/lib/elasticsearch
if [ -d /var/lib/elasticsearch ]; then
rmdir --ignore-fail-on-non-empty /var/lib/elasticsearch
fi
;;
purge)

View File

@ -0,0 +1,5 @@
# Properties used to build to the DEB package
#
# Simple marker to check that properties are correctly overridden
packaging.type=deb

View File

@ -0,0 +1,5 @@
# Properties used to build to the RPM package
#
# Simple marker to check that properties are correctly overridden
packaging.type=rpm