Skip to content

Commit

Permalink
Add common SystemD file for RPM/DEB package
Browse files Browse the repository at this point in the history
  • Loading branch information
tlrx committed May 7, 2015
1 parent f7c2945 commit e5e9e69
Show file tree
Hide file tree
Showing 10 changed files with 225 additions and 67 deletions.
30 changes: 23 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@
<packaging.elasticsearch.log.dir>/var/log/elasticsearch</packaging.elasticsearch.log.dir>
<packaging.elasticsearch.plugins.dir>${packaging.elasticsearch.home.dir}/plugins</packaging.elasticsearch.plugins.dir>
<packaging.elasticsearch.pid.dir>/var/run/elasticsearch</packaging.elasticsearch.pid.dir>
<packaging.elasticsearch.systemd.dir>/usr/lib/systemd/system</packaging.elasticsearch.systemd.dir>
<packaging.elasticsearch.systemd.sysctl.dir>/usr/lib/sysctl.d</packaging.elasticsearch.systemd.sysctl.dir>
<packaging.elasticsearch.tmpfilesd.dir>/usr/lib/tmpfiles.d</packaging.elasticsearch.tmpfilesd.dir>
<deb.sign>false</deb.sign>
<deb.sign.method>dpkg-sig</deb.sign.method>
</properties>
Expand Down Expand Up @@ -1178,7 +1181,19 @@
<!-- Adds systemd file -->
<data>
<src>${project.build.directory}/generated-packaging/deb/systemd/elasticsearch.service</src>
<dst>/usr/lib/systemd/system/elasticsearch.service</dst>
<dst>${packaging.elasticsearch.systemd.dir}/elasticsearch.service</dst>
<type>file</type>
</data>
<!-- Adds systemd/sysctl.d configuration file -->
<data>
<src>${project.build.directory}/generated-packaging/deb/systemd/sysctl/elasticsearch.conf</src>
<dst>${packaging.elasticsearch.systemd.sysctl.dir}/elasticsearch.conf</dst>
<type>file</type>
</data>
<!-- Adds systemd/tmpfiles.d configuration file -->
<data>
<src>${project.build.directory}/generated-packaging/deb/systemd/elasticsearch.conf</src>
<dst>${packaging.elasticsearch.tmpfilesd.dir}/elasticsearch.conf</dst>
<type>file</type>
</data>
<!-- Add lintian files -->
Expand Down Expand Up @@ -1356,8 +1371,8 @@
</mapping>
<!-- Adds systemd file -->
<mapping>
<directory>/usr/lib/systemd/system/</directory>
<filemode>755</filemode>
<directory>${packaging.elasticsearch.systemd.dir}</directory>
<directoryIncluded>false</directoryIncluded>
<configuration>true</configuration>
<sources>
<source>
Expand All @@ -1368,21 +1383,22 @@
</source>
</sources>
</mapping>
<!-- Adds systemd/sysctl.d configuration file -->
<mapping>
<directory>/usr/lib/sysctl.d/</directory>
<filemode>755</filemode>
<directory>${packaging.elasticsearch.systemd.sysctl.dir}</directory>
<configuration>true</configuration>
<sources>
<source>
<location>${project.build.directory}/generated-packaging/rpm/systemd/sysctl.d</location>
<location>${project.build.directory}/generated-packaging/rpm/systemd/sysctl</location>
<includes>
<include>elasticsearch.conf</include>
</includes>
</source>
</sources>
</mapping>
<!-- Adds systemd/tmpfiles.d configuration file -->
<mapping>
<directory>/usr/lib/tmpfiles.d/</directory>
<directory>${packaging.elasticsearch.tmpfilesd.dir}</directory>
<configuration>true</configuration>
<sources>
<source>
Expand Down
1 change: 1 addition & 0 deletions src/packaging/common/systemd/elasticsearch.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d ${packaging.elasticsearch.pid.dir} 0755 ${packaging.elasticsearch.user} ${packaging.elasticsearch.group} - -
44 changes: 44 additions & 0 deletions src/packaging/common/systemd/elasticsearch.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[Unit]
Description=Starts and stops a single elasticsearch instance on this system
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Environment=ES_HOME=${packaging.elasticsearch.home.dir}
Environment=CONF_DIR=${packaging.elasticsearch.conf.dir}
Environment=CONF_FILE=${packaging.elasticsearch.conf.dir}/elasticsearch.yml
Environment=DATA_DIR=${packaging.elasticsearch.data.dir}
Environment=LOG_DIR=${packaging.elasticsearch.log.dir}
Environment=PID_DIR=${packaging.elasticsearch.pid.dir}
EnvironmentFile=-${packaging.env.file}

User=${packaging.elasticsearch.user}
Group=${packaging.elasticsearch.group}

ExecStart=${packaging.elasticsearch.bin.dir}/elasticsearch \
-Des.pidfile=$PID_DIR/elasticsearch.pid \
-Des.default.path.home=$ES_HOME \
-Des.default.path.logs=$LOG_DIR \
-Des.default.path.data=$DATA_DIR \
-Des.default.config=$CONF_FILE \
-Des.default.path.conf=$CONF_DIR

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=${packaging.os.max.open.files}

# Specifies the maximum number of bytes of memory that may be locked into RAM
# Set to "infinity" if you use the 'bootstrap.mlockall: true' option
# in elasticsearch.yml and 'MAX_LOCKED_MEMORY=unlimited' in ${packaging.env.file}
#LimitMEMLOCK=infinity

# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
TimeoutStopSec=20

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${packaging.type})
1 change: 1 addition & 0 deletions src/packaging/common/systemd/sysctl/elasticsearch.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
vm.max_map_count=${packaging.os.max.map.count}
30 changes: 0 additions & 30 deletions src/packaging/deb/systemd/elasticsearch.service

This file was deleted.

1 change: 0 additions & 1 deletion src/packaging/rpm/systemd/elasticsearch.conf

This file was deleted.

25 changes: 0 additions & 25 deletions src/packaging/rpm/systemd/elasticsearch.service

This file was deleted.

1 change: 0 additions & 1 deletion src/packaging/rpm/systemd/sysctl.d/elasticsearch.conf

This file was deleted.

144 changes: 144 additions & 0 deletions src/test/resources/packaging/scripts/50_systemd.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
#!/usr/bin/env bats

# This file is used to test the elasticsearch Systemd setup.

# WARNING: This testing file must be executed as root and can
# dramatically change your system. It removes the 'elasticsearch'
# user/group and also many directories. Do not execute this file
# unless you know exactly what you are doing.

# The test case can be executed with the Bash Automated
# Testing System tool available at https://github.com/sstephenson/bats
# Thanks to Sam Stephenson!

# Licensed to Elasticsearch under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# Load test utilities
load packaging_test_utils

# Cleans everything for the 1st execution
setup() {
if [ "$BATS_TEST_NUMBER" -eq 1 ]; then
clean_before_test
fi


# Installs a package before test
if is_dpkg; then
dpkg -i elasticsearch*.deb >&2 || true
fi
if is_rpm; then
rpm -i elasticsearch*.rpm >&2 || true
fi
}

@test "[SYSTEMD] daemon reload" {
skip_not_systemd

run systemctl daemon-reload
[ "$status" -eq 0 ]
}

@test "[SYSTEMD] enable" {
skip_not_systemd

run systemctl enable elasticsearch.service
[ "$status" -eq 0 ]

run systemctl is-enabled elasticsearch.service
[ "$status" -eq 0 ]
}

@test "[SYSTEMD] start" {
skip_not_systemd

run systemctl start elasticsearch.service
[ "$status" -eq 0 ]

wait_for_elasticsearch_status
}

@test "[SYSTEMD] start (running)" {
skip_not_systemd

run systemctl start elasticsearch.service
[ "$status" -eq 0 ]
}

@test "[SYSTEMD] is active (running)" {
skip_not_systemd

run systemctl is-active elasticsearch.service
[ "$status" -eq 0 ]
[ "$output" = "active" ]
}

@test "[SYSTEMD] status (running)" {
skip_not_systemd

run systemctl status elasticsearch.service
[ "$status" -eq 0 ]
}

##################################
# Check that Elasticsearch is working
##################################
@test "[SYSTEMD] test elasticsearch" {
skip_not_systemd

run_elasticsearch_tests
}

@test "[SYSTEMD] restart" {
skip_not_systemd

run systemctl restart elasticsearch.service
[ "$status" -eq 0 ]

wait_for_elasticsearch_status

run service elasticsearch status
[ "$status" -eq 0 ]
}

@test "[SYSTEMD] stop (running)" {
skip_not_systemd

run systemctl stop elasticsearch.service
[ "$status" -eq 0 ]

run systemctl status elasticsearch.service
echo "$output" | grep "Active:" | grep "inactive"
}

@test "[SYSTEMD] stop (stopped)" {
skip_not_systemd

run systemctl stop elasticsearch.service
[ "$status" -eq 0 ]

run systemctl status elasticsearch.service
echo "$output" | grep "Active:" | grep "inactive"
}

@test "[SYSTEMD] status (stopped)" {
skip_not_systemd

run systemctl status elasticsearch.service
echo "$output" | grep "Active:" | grep "inactive"
}
15 changes: 12 additions & 3 deletions src/test/resources/packaging/scripts/packaging_test_utils.bash
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,12 @@ verify_package_installation() {
# License file
assert_file "/usr/share/elasticsearch/LICENSE.txt" f root 644
fi

if is_systemd; then
assert_file "/usr/lib/systemd/system/elasticsearch.service" f root 644
assert_file "/usr/lib/tmpfiles.d/elasticsearch.conf" f root 644
assert_file "/usr/lib/sysctl.d/elasticsearch.conf" f root 644
fi
}

# Deletes everything before running a test file
Expand All @@ -230,7 +236,10 @@ clean_before_test() {
"/etc/default/elasticsearch" \
"/etc/sysconfig/elasticsearch" \
"/var/run/elasticsearch" \
"/usr/share/doc/elasticsearch")
"/usr/share/doc/elasticsearch" \
"/usr/lib/systemd/system/elasticsearch.conf" \
"/usr/lib/tmpfiles.d/elasticsearch.conf" \
"/usr/lib/sysctl.d/elasticsearch.conf")

if [ "$ES_CLEAN_BEFORE_TEST" = "true" ]; then
# Kills all processes of user elasticsearch
Expand Down Expand Up @@ -340,8 +349,8 @@ wait_for_elasticsearch_status() {
fi

# Try to connect to elasticsearch and wait for expected status
wget --quiet --retry-connrefused --waitretry=1 --timeout=20 \
--output-document=/dev/null "http://localhost:9200/_cluster/health?wait_for_status=$status&timeout=20s"
wget --quiet --retry-connrefused --waitretry=1 --timeout=60 \
--output-document=/dev/null "http://localhost:9200/_cluster/health?wait_for_status=$status&timeout=60s" || true

# Checks the cluster health
curl -XGET 'http://localhost:9200/_cat/health?h=status&v=false'
Expand Down

0 comments on commit e5e9e69

Please sign in to comment.