echo "MKDIRS+= dev" >>$CONFIG_MK
fi
-if [ -z "$SERVICECMD" ]; then
- printf "Checking for OpenRC ... "
- if [ -x /sbin/rc-service ]; then
- SERVICEEXISTS="/sbin/rc-service -e \$1"
- SERVICECMD="/sbin/rc-service \$1 -- -D \$2"
- echo "yes"
- else
- echo "no"
- fi
-fi
-if [ -z "$SERVICECMD" ]; then
- printf "Checking for invoke-rc.d ... "
- if [ -x /usr/sbin/invoke-rc.d ]; then
- SERVICEEXISTS="/usr/sbin/invoke-rc.d --query --quiet \$1 start >/dev/null 2>&1 || [ \$? = 104 ]"
- SERVICECMD="/usr/sbin/invoke-rc.d \$1 \$2"
- echo "yes"
- else
- echo "no"
- fi
-fi
-if [ -z "$SERVICECMD" ]; then
- printf "Checking for service ... "
- if [ -x /sbin/service ]; then
- SERVICEEXISTS="/sbin/service \$1 >/dev/null 2>&1"
- SERVICECMD="/sbin/service \$1 \$2"
- echo "yes"
- else
- echo "no"
- fi
-fi
-if [ -z "$SERVICECMD" ]; then
- printf "Checking for Slackware ... "
- if [ -e /etc/slackware-version -a -d /etc/rc.d ]; then
- SERVICEEXISTS="[ -x /etc/rc.d/rc.\$1 ]"
- SERVICECMD="/etc/rc.d/rc.\$1 \$2"
- SERVICESTATUS="/etc/rc.d/rc.\$1 status 1>/dev/null 2>&1"
- echo "yes"
- else
- echo "no"
- fi
-fi
-if [ -z "$SERVICECMD" ]; then
- for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do
- printf "Checking for $x ... "
- if [ -d $x ]; then
- SERVICEEXISTS="[ -x $x/\$1 ]"
- SERVICECMD="$x/\$1 \$2"
- echo "yes"
- break
- else
- echo "no"
- fi
- done
-fi
-if [ -e /etc/arch-release ]; then
- echo "Overriding service status check for Arch Linux"
- SERVICESTATUS="[ -e /var/run/daemons/\$1 ]"
-fi
-
-if [ -z "$SERVICEEXISTS" -o -z "$SERVICECMD" ]; then
- echo "$0: WARNING: No means of interacting with system services detected!"
- SERVICEEXISTS="return 1"
- SERVICECMD="return 1"
-fi
-if [ -z "$SERVICESTATUS" ]; then
- SERVICESTATUS="service_command \$1 status >/dev/null 2>&1"
-fi
# Transform for a make file
SERVICEEXISTS=$(echo "$SERVICEEXISTS" | $SED \
-e 's:\\:\\\\:g' \
-e 's:\&:\\\&:g' \
- -e 's:\$:\$\$:g' \
+ -e 's:\$:\\\\\$\$:g' \
)
echo "SERVICEEXISTS= $SERVICEEXISTS" >>config.mk
SERVICECMD=$(echo "$SERVICECMD" | $SED \
-e 's:\\:\\\\:g' \
-e 's:\&:\\\&:g' \
- -e 's:\$:\$\$:g' \
+ -e 's:\$:\\\\\$\$:g' \
)
echo "SERVICECMD= $SERVICECMD" >>config.mk
SERVICESTATUS=$(echo "$SERVICESTATUS" | $SED \
-e 's:\\:\\\\:g' \
-e 's:\&:\\\&:g' \
- -e 's:\$:\$\$:g' \
+ -e 's:\$:\\\\\$\$:g' \
)
echo "SERVICESTATUS= $SERVICESTATUS" >>config.mk
signature_base_end="# End of dhcpcd"
signature_end="$signature_base_end $from $ifname"
state_dir=@RUNDIR@/dhcpcd
+_detected_init=false
: ${if_up:=false}
: ${if_down:=false}
return 0
}
+# With the advent of alternative init systems, it's possible to have
+# more than one installed. So we need to try and guess what one we're
+# using unless overriden by configure.
+detect_init()
+{
+ _service_exists="@SERVICEEXISTS@"
+ _service_cmd="@SERVICECMD@"
+ _service_status="@SERVICESTATUS@"
+
+ [ -n "$_service_cmd" ] && return 0
+
+ if ${_detected_init}; then
+ [ -n "$_service_cmd" ]
+ return $?
+ fi
+
+ # Detect the running init system.
+ # As systemd and OpenRC can be installed on top of legacy init
+ # systems we try to detect them first.
+ _service_status=
+ if [ -x /bin/systemctl -a -S /run/systemd/private ]; then
+ _service_exists="/bin/systemctl --quiet is-enabled \$1.service"
+ _service_status="/bin/systemctl --quiet is-active \$1.service"
+ _service_cmd="/bin/systemctl \$2 \$1.service"
+ elif [ -x /usr/bin/systemctl -a -S /run/systemd/private ]; then
+ _service_exists="/usr/bin/systemctl --quiet is-enabled \$1.service"
+ _service_status="/usr/bin/systemctl --quiet is-active \$1.service"
+ _service_cmd="/usr/bin/systemctl \$2 \$1.service"
+ elif [ -x /sbin/rc-service -a \
+ -s /libexec/rc/init.d/softlevel -o -s /run/openrc/softlevel ]
+ then
+ _service_exists="/sbin/rc-service -e \$1"
+ _service_cmd="/sbin/rc-service \$1 -- -D \$2"
+ elif [ -x /usr/sbin/invoke-rc.d ]; then
+ _service_exists="/usr/sbin/invoke-rc.d --query --quiet \$1 start >/dev/null 2>&1 || [ \$? = 104 ]"
+ _service_cmd="/usr/sbin/invoke-rc.d \$1 \$2"
+ elif [ -x /sbin/service ]; then
+ _service_exists="/sbin/service \$1 >/dev/null 2>&1"
+ _service_cmd="/sbin/service \$1 \$2"
+ elif [ -e /etc/slackware-version -a -d /etc/rc.d ]; then
+ _service_exists="[ -x /etc/rc.d/rc.\$1 ]"
+ _service_cmd="/etc/rc.d/rc.\$1 \$2"
+ _service_status="/etc/rc.d/rc.\$1 status 1>/dev/null 2>&1"
+ else
+ for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do
+ if [ -d $x ]; then
+ _service_exists="[ -x $x/\$1 ]"
+ _service_cmd="$x/\$1 \$2"
+ break
+ fi
+ done
+ if [ -e /etc/arch-release ]; then
+ _service_status="[ -e /var/run/daemons/\$1 ]"
+ fi
+ fi
+
+ _detected_init=true
+ if [ -z "$_service_cmd" ]; then
+ syslog err "could not detect a useable init system"
+ return 1
+ fi
+ return 0
+}
+
# Check a system service exists
service_exists()
{
- @SERVICEEXISTS@
+
+ if [ -z "$_service_exists" ]; then
+ detect_init || return 1
+ fi
+ eval $_service_exists
}
# Send a command to a system service
service_cmd()
{
- @SERVICECMD@
+
+ if [ -z "$_service_cmd" ]; then
+ detect_init || return 1
+ fi
+ eval $_service_cmd
}
# Send a command to a system service if it is running
service_status()
{
- @SERVICESTATUS@
+
+ if [ -z "$_service_cmd" ]; then
+ detect_init || return 1
+ fi
+ if [ -n "$_service_status" ]; then
+ eval $_service_status
+ else
+ service_command $1 status >/dev/null 2>&1
+ fi
}
# Handy macros for our hooks
service_command()
{
+
service_exists $1 && service_cmd $1 $2
}
service_condcommand()
{
+
service_exists $1 && service_status $1 && service_cmd $1 $2
}