summaryrefslogtreecommitdiff
path: root/system/utmps/utmps.initd
blob: db4570031c86c75532f946f76026d9cd7ac6f8ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/sbin/openrc-run
# Copyright 2018 Laurent Bercot
# Distributed under the terms of the ISC License.
#
# OpenRC is only used here to trigger the s6 mechanisms.

depend() {
	need s6
}

start() {
	ebegin "Starting utmpd and wtmpd services"
	mkdir -p -m 0755 /run/utmps
	chown utmp:utmp /run/utmps

	# OpenRC has no readiness notification framework, so it can run this before s6 is ready.
	# To avoid the race (yes, I have hit it), do a polling check here.
	# If you want to avoid unnecessary delays, switch to a real service manager like s6-rc.
	until test -e /run/service/.s6-svscan/control ; do sleep 1 ; done

	ln -nsf /var/lib/utmps/services/utmpd /run/service/utmpd
	ln -nsf /var/lib/utmps/services/wtmpd /run/service/wtmpd
	s6-svlisten -U -t 5000 -- /var/lib/utmps/services/utmpd /var/lib/utmps/services/wtmpd "" s6-svscanctl -an /run/service
	eend $?
}

stop() {
	ebegin "Stopping utmpd and wtmpd services"
	rm -f /run/service/utmpd /run/service/wtmpd
	s6-svlisten -d -t 5000 -- /var/lib/utmps/services/utmpd /var/lib/utmps/services/wtmpd "" s6-svscanctl -an /run/service
	eend $?
}