Add basic support for dinit in our system service handling code. (#16836)

* Add basic dinit detection to install-service script.

* Add dinit service file for Netdata.

* Add service install support for dinit.
This commit is contained in:
Austin S. Hemmelgarn 2024-04-04 08:25:52 -04:00 committed by GitHub
parent e85be29fcd
commit 0401ac56f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 76 additions and 1 deletions

View File

@ -2333,6 +2333,11 @@ install(PROGRAMS
${CMAKE_BINARY_DIR}/system/runit/run
DESTINATION usr/lib/netdata/system/runit)
configure_file(system/dinit/netdata.in system/dinit/netdata @ONLY)
install(FILES
${CMAKE_BINARY_DIR}/system/dinit/netdata
DESTINATION usr/lib/netdata/system/dinit)
configure_file(system/systemd/netdata.service.in system/systemd/netdata.service @ONLY)
install(FILES
${CMAKE_BINARY_DIR}/system/systemd/netdata.service

11
system/dinit/netdata.in Normal file
View File

@ -0,0 +1,11 @@
# dinit service description for Netdata
#
# Currently only properly tested on Chimera Linux.
type = bgprocess
command = @sbindir_POST@/netdata -P @localstatedir_POST@/run/netdata.pid -D
pid-file = @localstatedir_POST@/run/netdata.pid
options = signal-process-only
load-options = export-passwd-vars
depends-on = early-fs-local.target
after = network.target

View File

@ -29,7 +29,7 @@ DUMP_CMDS=0
ENABLE="auto"
EXPORT_CMDS=0
INSTALL=1
LINUX_INIT_TYPES="systemd openrc lsb initd runit"
LINUX_INIT_TYPES="systemd openrc lsb initd runit dinit"
PLATFORM="$(uname -s)"
SHOW_SVC_TYPE=0
SVC_SOURCE="@libsysdir_POST@"
@ -562,6 +562,65 @@ runit_cmds() {
NETDATA_STOP_CMD="sv stop netdata"
}
# =====================================================================
# dinit support functions
_check_dinit() {
# if /etc/dinit.d does not exist, its not dinit
[ ! -d /etc/dinit.d ] && echo "NO" && return 0
# if PID 1 is dinit, its dinit
[ "$(basename "$(readlink /proc/1/exe)" 2> /dev/null)" = "dinit" ] && echo "YES" && return 0
# if /run/dinitctl exists and is a socket, its dinit
[ -S /run/dinitctl ] && echo "YES" && return 0
# if the dinitctl command exists despite getting to this point, its dinit, but not booted as such
[ -n "$(command -v dinitctl 2>/dev/null || true)" ] && echo "OFFLINE" && return 0
echo "NO" && return 0
}
check_dinit() {
if [ -z "${IS_DINIT}" ]; then
IS_DINIT="$(_check_dinit)"
fi
echo "${IS_DINIT}"
}
_run_dinitctl() {
opts=''
if [ "$(check_dinit)" = "OFFLINE" ]; then
opts="-o"
fi
# shellcheck disable=SC2086
dinitctl ${opts} "${@}"
}
enable_dinit() {
_run_dinitctl enable netdata
}
enable_dinit() {
_run_dinitctl disable netdata
}
install_dinit_service() {
install_generic_service dinit/netdata "dinit" /etc/dinit.d enable_dinit disable_dinit
}
dinit_cmds() {
if [ "$(check_dinit)" = "YES" ]; then
NETDATA_START_CMD='dinitctl start netdata'
NETDATA_STOP_CMD='dinitct stop netdata'
else # Not booted using dinit, use external defaults by not providing commands.
warning "Detected dinit, but the system is not booted using dinit. Unable to provide commands to start or stop Netdata using the service manager."
fi
}
# =====================================================================
# WSL support functions