Add common SystemD file for RPM/DEB package
This commit is contained in:
parent
ee26ab8bb4
commit
340b7ef6ef
|
@ -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
|
||||
|
||||
|
|
30
pom.xml
30
pom.xml
|
@ -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>
|
||||
|
@ -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 -->
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
d ${packaging.elasticsearch.pid.dir} 0755 ${packaging.elasticsearch.user} ${packaging.elasticsearch.group} - -
|
|
@ -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})
|
|
@ -0,0 +1 @@
|
|||
vm.max_map_count=${packaging.os.max.map.count}
|
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
[Unit]
|
||||
Description=Starts and stops a single elasticsearch instance on this system
|
||||
Documentation=http://www.elasticsearch.org
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Environment=CONF_FILE=${packaging.elasticsearch.conf.dir}/elasticsearch.yml
|
||||
Environment=ES_HOME=${packaging.elasticsearch.home.dir}
|
||||
Environment=LOG_DIR=${packaging.elasticsearch.log.dir}
|
||||
Environment=DATA_DIR=${packaging.elasticsearch.data.dir}
|
||||
Environment=CONF_DIR=${packaging.elasticsearch.conf.dir}
|
||||
EnvironmentFile=-${packaging.env.file}
|
||||
User=elasticsearch
|
||||
Group=elasticsearch
|
||||
ExecStart=/usr/share/elasticsearch/bin/elasticsearch \
|
||||
-Des.default.config=$CONF_FILE \
|
||||
-Des.default.path.home=$ES_HOME \
|
||||
-Des.default.path.logs=$LOG_DIR \
|
||||
-Des.default.path.data=$DATA_DIR \
|
||||
-Des.default.path.conf=$CONF_DIR
|
||||
# See MAX_OPEN_FILES in sysconfig
|
||||
LimitNOFILE=65535
|
||||
# See MAX_LOCKED_MEMORY in sysconfig, use "infinity" when MAX_LOCKED_MEMORY=unlimited and using bootstrap.mlockall: true
|
||||
#LimitMEMLOCK=infinity
|
||||
# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
|
||||
TimeoutStopSec=20
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -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}"
|
||||
|
@ -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
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
d /run/elasticsearch 0755 elasticsearch elasticsearch - -
|
|
@ -1,25 +0,0 @@
|
|||
[Unit]
|
||||
Description=Starts and stops a single elasticsearch instance on this system
|
||||
Documentation=http://www.elasticsearch.org
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment=CONF_FILE=${packaging.elasticsearch.conf.dir}/elasticsearch.yml
|
||||
Environment=ES_HOME=${packaging.elasticsearch.home.dir}
|
||||
Environment=LOG_DIR=${packaging.elasticsearch.log.dir}
|
||||
Environment=DATA_DIR=${packaging.elasticsearch.data.dir}
|
||||
Environment=CONF_DIR=${packaging.elasticsearch.conf.dir}
|
||||
EnvironmentFile=-${packaging.env.file}
|
||||
User=elasticsearch
|
||||
Group=elasticsearch
|
||||
PIDFile=/var/run/elasticsearch/elasticsearch.pid
|
||||
ExecStart=/usr/share/elasticsearch/bin/elasticsearch -d -p /var/run/elasticsearch/elasticsearch.pid -Des.default.config=$CONF_FILE -Des.default.path.home=$ES_HOME -Des.default.path.logs=$LOG_DIR -Des.default.path.data=$DATA_DIR -Des.default.path.conf=$CONF_DIR
|
||||
# See MAX_OPEN_FILES in sysconfig
|
||||
LimitNOFILE=65535
|
||||
# See MAX_LOCKED_MEMORY in sysconfig, use "infinity" when MAX_LOCKED_MEMORY=unlimited and using bootstrap.mlockall: true
|
||||
#LimitMEMLOCK=infinity
|
||||
# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
|
||||
TimeoutStopSec=20
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -1 +0,0 @@
|
|||
vm.max_map_count=262144
|
|
@ -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"
|
||||
}
|
|
@ -217,6 +217,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
|
||||
}
|
||||
|
||||
|
||||
|
@ -294,7 +300,10 @@ clean_before_test() {
|
|||
"/etc/sysconfig/elasticsearch" \
|
||||
"/var/run/elasticsearch" \
|
||||
"/usr/share/doc/elasticsearch" \
|
||||
"/tmp/elasticsearch")
|
||||
"/tmp/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
|
||||
|
|
Loading…
Reference in New Issue