summaryrefslogtreecommitdiff
path: root/sys-apps/shepherd
diff options
context:
space:
mode:
authorcoast <coasteen@proton.me>2026-10-02 05:12:35 +0330
committercoast <coasteen@proton.me>2026-10-02 05:12:35 +0330
commitae27153d0b1bd5650240e5f94c8c71a2f5f97861 (patch)
tree398cfbcdd4891bedba0ac0dc6fa201e183422e42 /sys-apps/shepherd
parentd701789dbaef3a5a39b93a47c3232999662325e5 (diff)
virtual/service-manager ebuild, new metadata for sys-apps/shepherd, new
init scripts for shepherd
Diffstat (limited to 'sys-apps/shepherd')
-rw-r--r--sys-apps/shepherd/files/shepherd.initd83
-rw-r--r--sys-apps/shepherd/metadata.xml9
-rw-r--r--sys-apps/shepherd/shepherd-1.0.9.ebuild34
3 files changed, 98 insertions, 28 deletions
diff --git a/sys-apps/shepherd/files/shepherd.initd b/sys-apps/shepherd/files/shepherd.initd
new file mode 100644
index 0000000..c56b518
--- /dev/null
+++ b/sys-apps/shepherd/files/shepherd.initd
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+NAME=shepherd
+DAEMON=/usr/bin/shepherd
+PIDFILE=/run/shepherd.pid
+CONFIG=/etc/shepherd.scm
+
+case "$1" in
+ start)
+ echo "Starting Shepherd service manager..."
+
+ if [ -f "$PIDFILE" ] &&
+ kill -0 "$(cat "$PIDFILE")" 2>/dev/null
+ then
+ echo "Shepherd is already running."
+ exit 0
+ fi
+
+ mkdir -p /run/shepherd
+ chmod 755 /run/shepherd
+
+ "$DAEMON" \
+ --config="$CONFIG" \
+ --pid="$PIDFILE"
+
+ exit $?
+ ;;
+
+ stop)
+ echo "Stopping Shepherd service manager..."
+
+ if [ ! -f "$PIDFILE" ]; then
+ echo "Shepherd is not running."
+ exit 0
+ fi
+
+ PID="$(cat "$PIDFILE")"
+
+ if kill -0 "$PID" 2>/dev/null; then
+ kill -TERM "$PID"
+
+ i=0
+ while kill -0 "$PID" 2>/dev/null; do
+ i=$((i + 1))
+
+ if [ "$i" -ge 50 ]; then
+ kill -KILL "$PID" 2>/dev/null
+ break
+ fi
+
+ sleep 0.1
+ done
+ fi
+
+ rm -f "$PIDFILE"
+
+ exit 0
+ ;;
+
+ restart)
+ "$0" stop
+ "$0" start
+ ;;
+
+ status)
+ if [ -f "$PIDFILE" ] &&
+ kill -0 "$(cat "$PIDFILE")" 2>/dev/null
+ then
+ echo "Shepherd is running (PID $(cat "$PIDFILE"))."
+ exit 0
+ fi
+
+ echo "Shepherd is not running."
+ exit 3
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
diff --git a/sys-apps/shepherd/metadata.xml b/sys-apps/shepherd/metadata.xml
index 90d6952..7917355 100644
--- a/sys-apps/shepherd/metadata.xml
+++ b/sys-apps/shepherd/metadata.xml
@@ -1,11 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
+ <use>
+ <flag name="service-files">
+ Overlay-manager provided service files.
+ </flag>
+ </use>
+
<upstream>
<remote-id type="savannah">shepherd</remote-id>
</upstream>
+
<longdescription>
- GNU Shepherd is a service manager written in GNU Guile. It supervises
+ GNU Shepherd is a service manager written in Guile. It supervises
system services using dependency-based service definitions and can also
manage per-user services.
</longdescription>
diff --git a/sys-apps/shepherd/shepherd-1.0.9.ebuild b/sys-apps/shepherd/shepherd-1.0.9.ebuild
index cb86c65..434142c 100644
--- a/sys-apps/shepherd/shepherd-1.0.9.ebuild
+++ b/sys-apps/shepherd/shepherd-1.0.9.ebuild
@@ -8,7 +8,7 @@ LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~x86"
-IUSE="test"
+IUSE="service-files test"
DEPEND="
dev-scheme/guile:3.0
@@ -50,33 +50,13 @@ src_install() {
insinto /usr/share/licenses/${PN}
doins COPYING
- if [[ -e "${ED}"/usr/bin/reboot ]]; then
- mv "${ED}"/usr/bin/reboot \
- "${ED}"/usr/bin/shepherd-reboot || die
- fi
-
- if [[ -e "${ED}"/usr/bin/halt ]]; then
- mv "${ED}"/usr/bin/halt \
- "${ED}"/usr/bin/shepherd-halt || die
- fi
-
- if [[ -e "${ED}"/usr/bin/shutdown ]]; then
- mv "${ED}"/usr/bin/shutdown \
- "${ED}"/usr/bin/shepherd-shutdown || die
- fi
-
- if [[ -e "${ED}"/usr/share/man/man8/reboot.8 ]]; then
- mv "${ED}"/usr/share/man/man8/reboot.8 \
- "${ED}"/usr/share/man/man8/shepherd-reboot.8 || die
- fi
+ insinto /etc
+ newins "${FILESDIR}/shepherd.scm" shepherd.scm
- if [[ -e "${ED}"/usr/share/man/man8/halt.8 ]]; then
- mv "${ED}"/usr/share/man/man8/halt.8 \
- "${ED}"/usr/share/man/man8/shepherd-halt.8 || die
- fi
+ newinitd "${FILESDIR}/shepherd.initd" shepherd
- if [[ -e "${ED}"/usr/share/man/man8/shutdown.8 ]]; then
- mv "${ED}"/usr/share/man/man8/shutdown.8 \
- "${ED}"/usr/share/man/man8/shepherd-shutdown.8 || die
+ if use service-files; then
+ insinto /etc/shepherd/services
+ doins "${FILESDIR}"/services/*.scm
fi
}