| 197 | # With the advent of alternative init systems, it's possible to have |
| 198 | # more than one installed. So we need to try and guess what one we're |
| 199 | # using unless overriden by configure. |
| 200 | detect_init() |
| 201 | { |
| 202 | _service_exists="" |
| 203 | _service_cmd="" |
| 204 | _service_status="" |
| 205 | |
| 206 | [ -n "$_service_cmd" ] && return 0 |
| 207 | |
| 208 | if ${_detected_init}; then |
| 209 | [ -n "$_service_cmd" ] |
| 210 | return $? |
| 211 | fi |
| 212 | |
| 213 | # Detect the running init system. |
| 214 | # As systemd and OpenRC can be installed on top of legacy init |
| 215 | # systems we try to detect them first. |
| 216 | _service_status= |
| 217 | if [ -x /bin/systemctl -a -S /run/systemd/private ]; then |
| 218 | _service_exists="/bin/systemctl --quiet is-enabled \$1.service" |
| 219 | _service_status="/bin/systemctl --quiet is-active \$1.service" |
| 220 | _service_cmd="/bin/systemctl \$2 \$1.service" |
| 221 | elif [ -x /usr/bin/systemctl -a -S /run/systemd/private ]; then |
| 222 | _service_exists="/usr/bin/systemctl --quiet is-enabled \$1.service" |
| 223 | _service_status="/usr/bin/systemctl --quiet is-active \$1.service" |
| 224 | _service_cmd="/usr/bin/systemctl \$2 \$1.service" |
| 225 | elif [ -x /sbin/rc-service -a \ |
| 226 | -s /libexec/rc/init.d/softlevel -o -s /run/openrc/softlevel ] |
| 227 | then |
| 228 | _service_exists="/sbin/rc-service -e \$1" |
| 229 | _service_cmd="/sbin/rc-service \$1 -- -D \$2" |
| 230 | elif [ -x /usr/sbin/invoke-rc.d ]; then |
| 231 | _service_exists="/usr/sbin/invoke-rc.d --query --quiet \$1 start >/dev/null 2>&1 || [ \$? = 104 ]" |
| 232 | _service_cmd="/usr/sbin/invoke-rc.d \$1 \$2" |
| 233 | elif [ -x /sbin/service ]; then |
| 234 | _service_exists="/sbin/service \$1 >/dev/null 2>&1" |
| 235 | _service_cmd="/sbin/service \$1 \$2" |
| 236 | elif [ -e /etc/slackware-version -a -d /etc/rc.d ]; then |
| 237 | _service_exists="[ -x /etc/rc.d/rc.\$1 ]" |
| 238 | _service_cmd="/etc/rc.d/rc.\$1 \$2" |
| 239 | _service_status="/etc/rc.d/rc.\$1 status 1>/dev/null 2>&1" |
| 240 | else |
| 241 | for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do |
| 242 | if [ -d $x ]; then |
| 243 | _service_exists="[ -x $x/\$1 ]" |
| 244 | _service_cmd="$x/\$1 \$2" |
| 245 | break |
| 246 | fi |
| 247 | done |
| 248 | if [ -e /etc/arch-release ]; then |
| 249 | _service_status="[ -e /var/run/daemons/\$1 ]" |
| 250 | fi |
| 251 | fi |
| 252 | |
| 253 | _detected_init=true |
| 254 | if [ -z "$_service_cmd" ]; then |
| 255 | syslog err "could not detect a useable init system" |
| 256 | return 1 |
| 257 | fi |
| 258 | return 0 |
| 259 | } |
| 260 | |