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 27, 2015
1 parent ee26ab8 commit 340b7ef
Show file tree
Hide file tree
Showing 13 changed files with 247 additions and 68 deletions.
11 changes: 10 additions & 1 deletion docs/reference/setup/repositories.asciidoc
Expand Up @@ -51,13 +51,22 @@ Run apt-get update and the repository is ready for use. You can install it with:
sudo apt-get update && sudo apt-get install elasticsearch
--------------------------------------------------

Configure Elasticsearch to automatically start during bootup:
Configure Elasticsearch to automatically start during bootup. If your
distribution is using SysV init, then you will need to run:

[source,sh]
--------------------------------------------------
sudo update-rc.d elasticsearch defaults 95 10
--------------------------------------------------

Otherwise if your distribution is using systemd:

[source,sh]
--------------------------------------------------
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
--------------------------------------------------

[float]
=== YUM

Expand Down
30 changes: 23 additions & 7 deletions pom.xml
Expand Up @@ -43,6 +43,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 @@ -800,7 +803,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 @@ -978,8 +993,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 @@ -990,21 +1005,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
@@ -0,0 +1 @@
d ${packaging.elasticsearch.pid.dir} 0755 ${packaging.elasticsearch.user} ${packaging.elasticsearch.group} - -
50 changes: 50 additions & 0 deletions src/packaging/common/systemd/elasticsearch.service
@@ -0,0 +1,50 @@
[Unit]
Description=Elasticsearch
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

# Connects standard output to /dev/null
StandardOutput=null

# Connects standard error to journal
StandardError=journal

# 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
@@ -0,0 +1 @@
vm.max_map_count=${packaging.os.max.map.count}
5 changes: 4 additions & 1 deletion src/packaging/deb/init.d/elasticsearch
Expand Up @@ -94,6 +94,9 @@ MAX_MAP_COUNT=262144
# Path to the GC log file
#ES_GC_LOG_FILE=/var/log/elasticsearch/gc.log

# Elasticsearch PID file directory
PID_DIR="${packaging.elasticsearch.pid.dir}"

# End of variables that can be overwritten in $DEFAULT

# overwrite settings from default file
Expand All @@ -102,7 +105,7 @@ if [ -f "$DEFAULT" ]; then
fi

# Define other required variables
PID_FILE=/var/run/$NAME.pid
PID_FILE="$PID_DIR/$NAME.pid"
DAEMON=$ES_HOME/bin/elasticsearch
DAEMON_OPTS="-d -p $PID_FILE --default.config=$CONF_FILE --default.path.home=$ES_HOME --default.path.logs=$LOG_DIR --default.path.data=$DATA_DIR --default.path.conf=$CONF_DIR"

Expand Down
30 changes: 0 additions & 30 deletions src/packaging/deb/systemd/elasticsearch.service

This file was deleted.

3 changes: 2 additions & 1 deletion src/packaging/rpm/init.d/elasticsearch
Expand Up @@ -41,6 +41,7 @@ LOG_DIR="${packaging.elasticsearch.log.dir}"
DATA_DIR="${packaging.elasticsearch.data.dir}"
CONF_DIR="${packaging.elasticsearch.conf.dir}"
CONF_FILE="${packaging.elasticsearch.conf.dir}/elasticsearch.yml"
PID_DIR="${packaging.elasticsearch.pid.dir}"

# Source the default env file
ES_ENV_FILE="${packaging.env.file}"
Expand All @@ -50,7 +51,7 @@ fi

exec="$ES_HOME/bin/elasticsearch"
prog="elasticsearch"
pidfile=/var/run/elasticsearch/${prog}.pid
pidfile="$PID_DIR/${prog}.pid"

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
Expand Down
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.

146 changes: 146 additions & 0 deletions src/test/resources/packaging/scripts/50_systemd.bats
@@ -0,0 +1,146 @@
#!/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

assert_file_exist "/var/run/elasticsearch/elasticsearch.pid"
}

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

0 comments on commit 340b7ef

Please sign in to comment.