mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-12-25 06:10:20 +00:00
5c17e41cf1
"$network" on a systemd-driven OS leads to "After=network-online.target" in the generated systemd unit. This target is no guarantee that all network interfaces have been fully configured, as it depends on the related network services types, but at least it reduces the risk that those have not fully finished their job when pihole-FTL starts. If this is the case, certain issues can occur: - https://github.com/pi-hole/pi-hole/issues/2924 - https://discourse.pi-hole.net/t/have-to-pihole-restartdns-after-reboot/28772 Runtime files are now consistently created in "/run" instead of "/var/run". The second is a symlink to the first for backwards compatibility but on none-ancient distro versions one should use "/run", systemd even prints a warnings if service files use "/var/run". The service file used "/run" and "/var/run" both, in cases for the same files/directories before, which does not directly cause issues currently, due to the symlink, but is inconsistent at best. Signed-off-by: MichaIng <micha@dietpi.com>
119 lines
3 KiB
Desktop File
119 lines
3 KiB
Desktop File
#!/usr/bin/env bash
|
|
### BEGIN INIT INFO
|
|
# Provides: pihole-FTL
|
|
# Required-Start: $remote_fs $syslog $network
|
|
# Required-Stop: $remote_fs $syslog $network
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: pihole-FTL daemon
|
|
# Description: Enable service provided by pihole-FTL daemon
|
|
### END INIT INFO
|
|
|
|
FTLUSER=pihole
|
|
PIDFILE=/run/pihole-FTL.pid
|
|
|
|
get_pid() {
|
|
# First, try to obtain PID from PIDFILE
|
|
if [ -s "${PIDFILE}" ]; then
|
|
cat "${PIDFILE}"
|
|
return
|
|
fi
|
|
|
|
# If the PIDFILE is empty or not available, obtain the PID using pidof
|
|
pidof "pihole-FTL" | awk '{print $(NF)}'
|
|
}
|
|
|
|
is_running() {
|
|
ps "$(get_pid)" > /dev/null 2>&1
|
|
}
|
|
|
|
|
|
# Start the service
|
|
start() {
|
|
if is_running; then
|
|
echo "pihole-FTL is already running"
|
|
else
|
|
# Touch files to ensure they exist (create if non-existing, preserve if existing)
|
|
touch /var/log/pihole-FTL.log /var/log/pihole.log
|
|
touch /run/pihole-FTL.pid /run/pihole-FTL.port
|
|
touch /etc/pihole/dhcp.leases
|
|
mkdir -p /run/pihole
|
|
mkdir -p /var/log/pihole
|
|
chown pihole:pihole /run/pihole /var/log/pihole
|
|
# Remove possible leftovers from previous pihole-FTL processes
|
|
rm -f /dev/shm/FTL-* 2> /dev/null
|
|
rm /run/pihole/FTL.sock 2> /dev/null
|
|
# Ensure that permissions are set so that pihole-FTL can edit all necessary files
|
|
chown pihole:pihole /run/pihole-FTL.pid /run/pihole-FTL.port
|
|
chown pihole:pihole /etc/pihole /etc/pihole/dhcp.leases 2> /dev/null
|
|
chown pihole:pihole /var/log/pihole-FTL.log /var/log/pihole.log
|
|
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
|
|
# Chown database files to the user FTL runs as. We ignore errors as the files may not (yet) exist
|
|
chown pihole:pihole /etc/pihole/pihole-FTL.db /etc/pihole/gravity.db 2> /dev/null
|
|
if setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_NET_ADMIN+eip "$(which pihole-FTL)"; then
|
|
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
|
|
else
|
|
echo "Warning: Starting pihole-FTL as root because setting capabilities is not supported on this system"
|
|
pihole-FTL
|
|
fi
|
|
echo
|
|
fi
|
|
}
|
|
|
|
# Stop the service
|
|
stop() {
|
|
if is_running; then
|
|
kill "$(get_pid)"
|
|
for i in {1..5}; do
|
|
if ! is_running; then
|
|
break
|
|
fi
|
|
|
|
echo -n "."
|
|
sleep 1
|
|
done
|
|
echo
|
|
|
|
if is_running; then
|
|
echo "Not stopped; may still be shutting down or shutdown may have failed, killing now"
|
|
kill -9 "$(get_pid)"
|
|
exit 1
|
|
else
|
|
echo "Stopped"
|
|
fi
|
|
else
|
|
echo "Not running"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
# Indicate the service status
|
|
status() {
|
|
if is_running; then
|
|
echo "[ ok ] pihole-FTL is running"
|
|
exit 0
|
|
else
|
|
echo "[ ] pihole-FTL is not running"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
### main logic ###
|
|
case "$1" in
|
|
stop)
|
|
stop
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
start|restart|reload|condrestart)
|
|
stop
|
|
start
|
|
;;
|
|
*)
|
|
echo $"Usage: $0 {start|stop|restart|reload|status}"
|
|
exit 1
|
|
esac
|
|
|
|
exit 0
|