diff options
Diffstat (limited to 'sys-apps')
| -rw-r--r-- | sys-apps/shepherd/files/shepherd.initd | 83 | ||||
| -rw-r--r-- | sys-apps/shepherd/metadata.xml | 9 | ||||
| -rw-r--r-- | sys-apps/shepherd/shepherd-1.0.9.ebuild | 34 |
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 } |
