Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit 0bd1b43

Browse files
committed
#695: Separate out the reaper env variable names from sshd.
1 parent 738d959 commit 0bd1b43

File tree

12 files changed

+57
-35
lines changed

12 files changed

+57
-35
lines changed

Diff for: .env.example

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
ENABLE_REAPER=false
2+
REAPER_TIMEOUT=3600
13
SSH_AUTHORIZED_KEYS=
2-
SSH_AUTOSTART_REAPER=false
34
SSH_AUTOSTART_SSHD=true
45
SSH_AUTOSTART_SSHD_BOOTSTRAP=true
56
SSH_CHROOT_DIRECTORY=%h
67
SSH_INHERIT_ENVIRONMENT=false
78
SSH_PASSWORD_AUTHENTICATION=false
8-
SSH_REAPER_TIMEOUT=3600
99
SSH_SUDO=ALL=(ALL) ALL
1010
SSH_TIMEZONE=UTC
1111
SSH_USER=app-admin

Diff for: CHANGELOG.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Summary of release changes for Version 2 - CentOS-7
1616
- Adds improved lock/state file implementation in bootstrap and wrapper scripts.
1717
- Adds improved `clean` Makefile target; includes exited containers and dangling images.
1818
- Adds feature to optionally exit the container after a specified timout period.
19-
- Adds `SSH_AUTOSTART_REAPER` to control startup of `reaper`.
20-
- Adds `SSH_REAPER_TIMEOUT` with a default value of 3600 seconds (i.e 1 hour).
19+
- Adds `ENABLE_REAPER` with a default value of `false` to enable the `reaper` service.
20+
- Adds `REAPER_TIMEOUT` with a default value of `3600` seconds (i.e 1 hour).
2121
- Fixes port incrementation failures when installing systemd units via `scmi`.
2222
- Fixes etcd port registration failures when installing systemd units via `scmi` with the `--register` option.
2323
- Fixes binary paths in systemd unit files for compatibility with both EL and Ubuntu hosts.

Diff for: Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,15 @@ EXPOSE 22
9393
# Set default environment variables
9494
# ------------------------------------------------------------------------------
9595
ENV \
96+
ENABLE_REAPER="false" \
97+
REAPER_TIMEOUT="3600" \
9698
SSH_AUTHORIZED_KEYS="" \
97-
SSH_AUTOSTART_REAPER="false" \
9899
SSH_AUTOSTART_SSHD="true" \
99100
SSH_AUTOSTART_SSHD_BOOTSTRAP="true" \
100101
SSH_AUTOSTART_SUPERVISOR_STDOUT="false" \
101102
SSH_CHROOT_DIRECTORY="%h" \
102103
SSH_INHERIT_ENVIRONMENT="false" \
103104
SSH_PASSWORD_AUTHENTICATION="false" \
104-
SSH_REAPER_TIMEOUT="3600" \
105105
SSH_SUDO="ALL=(ALL) ALL" \
106106
SSH_TIMEZONE="UTC" \
107107
SSH_USER="app-admin" \

Diff for: default.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ DOCKER_PUBLISH := $(shell \
4141
define DOCKER_CONTAINER_PARAMETERS
4242
--name $(DOCKER_NAME) \
4343
--restart $(DOCKER_RESTART_POLICY) \
44+
--env "REAPER_TIMEOUT=$(REAPER_TIMEOUT)" \
4445
--env "SSH_AUTHORIZED_KEYS=$(SSH_AUTHORIZED_KEYS)" \
4546
--env "SSH_AUTOSTART_REAPER=$(SSH_AUTOSTART_REAPER)" \
4647
--env "SSH_AUTOSTART_SSHD=$(SSH_AUTOSTART_SSHD)" \
@@ -49,7 +50,6 @@ define DOCKER_CONTAINER_PARAMETERS
4950
--env "SSH_CHROOT_DIRECTORY=$(SSH_CHROOT_DIRECTORY)" \
5051
--env "SSH_INHERIT_ENVIRONMENT=$(SSH_INHERIT_ENVIRONMENT)" \
5152
--env "SSH_PASSWORD_AUTHENTICATION=$(SSH_PASSWORD_AUTHENTICATION)" \
52-
--env "SSH_REAPER_TIMEOUT=$(SSH_REAPER_TIMEOUT)" \
5353
--env "SSH_SUDO=$(SSH_SUDO)" \
5454
--env "SSH_TIMEZONE=$(SSH_TIMEZONE)" \
5555
--env "SSH_USER=$(SSH_USER)" \

Diff for: docker-compose.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ services:
2828
context: "."
2929
dockerfile: "Dockerfile"
3030
environment:
31+
ENABLE_REAPER: "${ENABLE_REAPER}"
32+
REAPER_TIMEOUT: "${REAPER_TIMEOUT}"
3133
SSH_AUTHORIZED_KEYS: "${SSH_AUTHORIZED_KEYS}"
32-
SSH_AUTOSTART_REAPER: "${SSH_AUTOSTART_REAPER}"
3334
SSH_AUTOSTART_SSHD: "${SSH_AUTOSTART_SSHD}"
3435
SSH_AUTOSTART_SSHD_BOOTSTRAP: "${SSH_AUTOSTART_SSHD_BOOTSTRAP}"
3536
SSH_CHROOT_DIRECTORY: "${SSH_CHROOT_DIRECTORY}"
3637
SSH_INHERIT_ENVIRONMENT: "${SSH_INHERIT_ENVIRONMENT}"
3738
SSH_PASSWORD_AUTHENTICATION: "${SSH_PASSWORD_AUTHENTICATION}"
38-
SSH_REAPER_TIMEOUT: "${SSH_REAPER_TIMEOUT}"
3939
SSH_SUDO: "${SSH_SUDO}"
4040
SSH_TIMEZONE: "${SSH_TIMEZONE}"
4141
SSH_USER: "${SSH_USER}"

Diff for: environment.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ STARTUP_TIME ?= 2
2323
# ------------------------------------------------------------------------------
2424
# Application container configuration
2525
# ------------------------------------------------------------------------------
26+
ENABLE_REAPER ?= false
27+
REAPER_TIMEOUT ?= 3600
2628
SSH_AUTHORIZED_KEYS ?=
27-
SSH_AUTOSTART_REAPER ?= false
2829
SSH_AUTOSTART_SSHD ?= true
2930
SSH_AUTOSTART_SSHD_BOOTSTRAP ?= true
3031
SSH_AUTOSTART_SUPERVISOR_STDOUT ?= false
3132
SSH_CHROOT_DIRECTORY ?= %h
3233
SSH_INHERIT_ENVIRONMENT ?= false
3334
SSH_PASSWORD_AUTHENTICATION ?= false
34-
SSH_REAPER_TIMEOUT ?= 3600
3535
SSH_SUDO ?= ALL=(ALL) ALL
3636
SSH_TIMEZONE ?= UTC
3737
SSH_USER ?= app-admin

Diff for: src/etc/supervisord.d/01-reaper.conf

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[program:reaper]
22
autorestart = false
3-
autostart = %(ENV_SSH_AUTOSTART_REAPER)s
3+
autostart = %(ENV_ENABLE_REAPER)s
44
command = /usr/sbin/reaper --verbose
55
priority = 1
66
startsecs = 0

Diff for: src/etc/systemd/system/[email protected]

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ Environment="DOCKER_IMAGE_PACKAGE_PATH=/var/opt/scmi/packages"
5656
Environment="DOCKER_IMAGE_TAG={{RELEASE_VERSION}}"
5757
Environment="DOCKER_PORT_MAP_TCP_22=2020"
5858
Environment="DOCKER_USER=jdeathe"
59+
Environment="ENABLE_REAPER=false"
60+
Environment="REAPER_TIMEOUT=3600"
5961
Environment="SSH_AUTHORIZED_KEYS="
60-
Environment="SSH_AUTOSTART_REAPER=false"
6162
Environment="SSH_AUTOSTART_SSHD=true"
6263
Environment="SSH_AUTOSTART_SSHD_BOOTSTRAP=true"
6364
Environment="SSH_AUTOSTART_SUPERVISOR_STDOUT=false"
6465
Environment="SSH_CHROOT_DIRECTORY=%%h"
6566
Environment="SSH_INHERIT_ENVIRONMENT=false"
6667
Environment="SSH_PASSWORD_AUTHENTICATION=false"
67-
Environment="SSH_REAPER_TIMEOUT=3600"
6868
Environment="SSH_SUDO=ALL=(ALL) ALL"
6969
Environment="SSH_TIMEZONE=UTC"
7070
Environment="SSH_USER=app-admin"
@@ -131,6 +131,7 @@ ExecStartPre=-/bin/bash -c \
131131
ExecStart=/bin/bash -c \
132132
"exec /usr/bin/docker run \
133133
--name %p.%i \
134+
--env \"REAPER_TIMEOUT=${REAPER_TIMEOUT}\" \
134135
--env \"SSH_AUTHORIZED_KEYS=${SSH_AUTHORIZED_KEYS}\" \
135136
--env \"SSH_AUTOSTART_REAPER=${SSH_AUTOSTART_REAPER}\" \
136137
--env \"SSH_AUTOSTART_SSHD=${SSH_AUTOSTART_SSHD}\" \
@@ -139,7 +140,6 @@ ExecStart=/bin/bash -c \
139140
--env \"SSH_CHROOT_DIRECTORY=${SSH_CHROOT_DIRECTORY}\" \
140141
--env \"SSH_INHERIT_ENVIRONMENT=${SSH_INHERIT_ENVIRONMENT}\" \
141142
--env \"SSH_PASSWORD_AUTHENTICATION=${SSH_PASSWORD_AUTHENTICATION}\" \
142-
--env \"SSH_REAPER_TIMEOUT=${SSH_REAPER_TIMEOUT}\" \
143143
--env \"SSH_SUDO=${SSH_SUDO}\" \
144144
--env \"SSH_TIMEZONE=${SSH_TIMEZONE}\" \
145145
--env \"SSH_USER=${SSH_USER}\" \

Diff for: src/opt/scmi/default.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ fi
4646
# Common parameters of create and run targets
4747
DOCKER_CONTAINER_PARAMETERS="--name ${DOCKER_NAME} \
4848
--restart ${DOCKER_RESTART_POLICY} \
49+
--env \"ENABLE_REAPER=${ENABLE_REAPER}\" \
50+
--env \"REAPER_TIMEOUT=${REAPER_TIMEOUT}\" \
4951
--env \"SSH_AUTHORIZED_KEYS=${SSH_AUTHORIZED_KEYS}\" \
50-
--env \"SSH_AUTOSTART_REAPER=${SSH_AUTOSTART_REAPER}\" \
5152
--env \"SSH_AUTOSTART_SSHD=${SSH_AUTOSTART_SSHD}\" \
5253
--env \"SSH_AUTOSTART_SSHD_BOOTSTRAP=${SSH_AUTOSTART_SSHD_BOOTSTRAP}\" \
5354
--env \"SSH_AUTOSTART_SUPERVISOR_STDOUT=${SSH_AUTOSTART_SUPERVISOR_STDOUT}\" \
5455
--env \"SSH_CHROOT_DIRECTORY=${SSH_CHROOT_DIRECTORY}\" \
5556
--env \"SSH_INHERIT_ENVIRONMENT=${SSH_INHERIT_ENVIRONMENT}\" \
5657
--env \"SSH_PASSWORD_AUTHENTICATION=${SSH_PASSWORD_AUTHENTICATION}\" \
57-
--env \"SSH_REAPER_TIMEOUT=${SSH_REAPER_TIMEOUT}\" \
5858
--env \"SSH_SUDO=${SSH_SUDO}\" \
5959
--env \"SSH_TIMEZONE=${SSH_TIMEZONE}\" \
6060
--env \"SSH_USER=${SSH_USER}\" \

Diff for: src/opt/scmi/environment.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ STARTUP_TIME="${STARTUP_TIME:-2}"
2424
# ------------------------------------------------------------------------------
2525
# Application container configuration
2626
# ------------------------------------------------------------------------------
27+
ENABLE_REAPER="${ENABLE_REAPER:-false}"
28+
REAPER_TIMEOUT="${REAPER_TIMEOUT:-3600}"
2729
SSH_AUTHORIZED_KEYS="${SSH_AUTHORIZED_KEYS:-}"
28-
SSH_AUTOSTART_REAPER="${SSH_AUTOSTART_REAPER:-false}"
2930
SSH_AUTOSTART_SSHD="${SSH_AUTOSTART_SSHD:-true}"
3031
SSH_AUTOSTART_SSHD_BOOTSTRAP="${SSH_AUTOSTART_SSHD_BOOTSTRAP:-true}"
3132
SSH_AUTOSTART_SUPERVISOR_STDOUT="${SSH_AUTOSTART_SUPERVISOR_STDOUT:-false}"
3233
SSH_CHROOT_DIRECTORY="${SSH_CHROOT_DIRECTORY:-%h}"
3334
SSH_INHERIT_ENVIRONMENT="${SSH_INHERIT_ENVIRONMENT:-false}"
3435
SSH_PASSWORD_AUTHENTICATION="${SSH_PASSWORD_AUTHENTICATION:-false}"
35-
SSH_REAPER_TIMEOUT="${SSH_REAPER_TIMEOUT:-3600}"
3636
SSH_SUDO="${SSH_SUDO:-ALL=(ALL) ALL}"
3737
SSH_TIMEZONE="${SSH_TIMEZONE:-UTC}"
3838
SSH_USER="${SSH_USER:-app-admin}"

Diff for: src/opt/scmi/service-unit.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ readonly SERVICE_UNIT_ENVIRONMENT_KEYS="
66
DOCKER_IMAGE_PACKAGE_PATH
77
DOCKER_IMAGE_TAG
88
DOCKER_PORT_MAP_TCP_22
9+
ENABLE_REAPER
10+
REAPER_TIMEOUT
911
SSH_AUTHORIZED_KEYS
1012
SSH_AUTOSTART_REAPER
1113
SSH_AUTOSTART_SSHD
@@ -14,7 +16,6 @@ readonly SERVICE_UNIT_ENVIRONMENT_KEYS="
1416
SSH_CHROOT_DIRECTORY
1517
SSH_INHERIT_ENVIRONMENT
1618
SSH_PASSWORD_AUTHENTICATION
17-
SSH_REAPER_TIMEOUT
1819
SSH_SUDO
1920
SSH_TIMEZONE
2021
SSH_USER

Diff for: src/usr/sbin/reaper

+36-15
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,25 @@
22

33
set -e
44

5-
function __get_ssh_reaper_timeout ()
5+
function __create_state ()
6+
{
7+
if [[ -n ${state_file} ]]
8+
then
9+
printf -- \
10+
'%s %s\n' \
11+
"${session_start}" \
12+
"$(( ${session_start} + ${timeout} ))" \
13+
> "${state_file}"
14+
fi
15+
}
16+
17+
function __get_reaper_timeout ()
618
{
719
local -r default_value="${1:-3600}"
820

9-
local value="${SSH_REAPER_TIMEOUT}"
21+
local value="${REAPER_TIMEOUT}"
1022

11-
if ! __is_valid_ssh_reaper_timeout "${value}"
23+
if ! __is_valid_reaper_timeout "${value}"
1224
then
1325
value="${default_value}"
1426
fi
@@ -29,26 +41,31 @@ function __is_valid_positive_integer ()
2941
return 1
3042
}
3143

32-
function __is_valid_ssh_reaper_timeout ()
44+
function __is_valid_reaper_timeout ()
3345
{
3446
__is_valid_positive_integer "${@}"
3547
}
3648

3749
function __reap ()
3850
{
39-
kill -"${signal:-TERM}" "${pid:-1}"
51+
return kill \
52+
-s "${signal:-TERM}" \
53+
"${pid:-1}"
4054
}
4155

4256
function main ()
4357
{
44-
local -r warning_timeout="30"
58+
local -r state_file="/var/lib/misc/reaper"
59+
local -r timeout="$(
60+
__get_reaper_timeout
61+
)"
4562

4663
local pid="1"
4764
local signal="TERM"
48-
local timeout="$(
49-
__get_ssh_reaper_timeout
50-
)"
65+
local session_start
66+
local session_end
5167
local verbose="false"
68+
local warning_timeout="30"
5269

5370
while [[ "${#}" -gt 0 ]]
5471
do
@@ -81,27 +98,31 @@ function main ()
8198
trap __reap \
8299
EXIT INT TERM
83100

84-
if (( timeout > warning_timeout ))
101+
if (( timeout <= warning_timeout ))
85102
then
86-
(( timeout -= warning_timeout ))
87-
else
88103
warning_timeout="0"
89104
fi
90105

91-
if coproc read -t "${timeout}"
106+
session_start="$(
107+
date -u +%s
108+
)"
109+
110+
__create_state
111+
112+
if coproc read -t "$(( ${timeout} - ${warning_timeout} ))"
92113
then
93114
wait "${!}" || :
94115

95116
if (( warning_timeout > 0 ))
96117
then
97-
wall "Session expired - exiting in ${warning_timeout} seconds."
118+
wall "Session expired - exiting in ${warning_timeout} seconds." || :
98119

99120
if coproc read -t "${warning_timeout}"
100121
then
101122
wait "${!}" || :
102123
fi
103124
else
104-
wall "Session expired."
125+
wall "Session expired." || :
105126
fi
106127
fi
107128

0 commit comments

Comments
 (0)