diff options
Diffstat (limited to 'sys-apps/shepherd')
| -rw-r--r-- | sys-apps/shepherd/files/shepherd.scm | 85 | ||||
| -rw-r--r-- | sys-apps/shepherd/metadata.xml | 3 | ||||
| -rw-r--r-- | sys-apps/shepherd/shepherd-1.0.9.ebuild | 44 |
3 files changed, 125 insertions, 7 deletions
diff --git a/sys-apps/shepherd/files/shepherd.scm b/sys-apps/shepherd/files/shepherd.scm new file mode 100644 index 0000000..b88cdb0 --- /dev/null +++ b/sys-apps/shepherd/files/shepherd.scm @@ -0,0 +1,85 @@ +(use-modules + (shepherd service) + (shepherd system) + (srfi srfi-1) + (srfi srfi-26) + (ice-9 ftw) + (ice-9 exceptions)) + +(define %shepherd-service-directory + "/etc/shepherd/services") + +(define %shepherd-enabled-directory + "/etc/shepherd/enabled") + +(define (scm-file? file) + (string-suffix? ".scm" file)) + +(define (service-file-name file) + (string-append %shepherd-service-directory "/" file)) + +(define (enabled-service-name file) + (let ((name (basename file))) + (if (string-suffix? ".scm" name) + (substring name 0 (- (string-length name) 4)) + name))) + +(define (load-service-file file) + (let ((path (service-file-name file))) + (catch #t + (lambda () + (format #t "Loading Shepherd service: ~a~%" path) + (load path)) + (lambda args + (format (current-error-port) + "Shepherd: failed to load service file ~a~%" + path) + (format (current-error-port) + "Shepherd error: ~s~%" + args))))) + +(define (load-service-directory) + (when (file-exists? %shepherd-service-directory) + (for-each + load-service-file + (sort + (filter scm-file? + (scandir %shepherd-service-directory)) + string<?)))) + +(define (enabled-service? name) + (let ((path (string-append %shepherd-enabled-directory "/" name))) + (or (file-exists? path) + (file-exists? + (string-append path ".scm"))))) + +(define (registered-service? name) + (catch #t + (lambda () + (lookup-service name) + #t) + (lambda _ + #f))) + +(define (start-enabled-services) + (when (file-exists? %shepherd-enabled-directory) + (for-each + (lambda (file) + (let ((name (enabled-service-name file))) + (when (and (not (string=? name "")) + (registered-service? (string->symbol name))) + (format #t "Starting enabled Shepherd service: ~a~%" + name) + (start-service + (lookup-service (string->symbol name)))))) + (sort + (filter + (lambda (file) + (and (not (string=? file ".")) + (not (string=? file "..")))) + (scandir %shepherd-enabled-directory)) + string<?)))) + +(load-service-directory) + +(start-enabled-services) diff --git a/sys-apps/shepherd/metadata.xml b/sys-apps/shepherd/metadata.xml index 7917355..b047490 100644 --- a/sys-apps/shepherd/metadata.xml +++ b/sys-apps/shepherd/metadata.xml @@ -5,6 +5,9 @@ <flag name="service-files"> Overlay-manager provided service files. </flag> + <flag name="sysv-utils"> + Install Shepherd's SysV-style halt, reboot, and shutdown utilities. + </flag> </use> <upstream> diff --git a/sys-apps/shepherd/shepherd-1.0.9.ebuild b/sys-apps/shepherd/shepherd-1.0.9.ebuild index 434142c..709be29 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="service-files test" +IUSE="service-files sysv-utils test" DEPEND=" dev-scheme/guile:3.0 @@ -45,18 +45,48 @@ src_test() { src_install() { emake DESTDIR="${D}" install GUILE_AUTO_COMPILE=0 + if ! use sysv-utils; then + rm -f \ + "${D}/sbin/halt" \ + "${D}/sbin/reboot" \ + "${D}/sbin/shutdown" \ + "${D}/usr/sbin/halt" \ + "${D}/usr/sbin/reboot" \ + "${D}/usr/sbin/shutdown" + + rm -f \ + "${D}/usr/share/man/man8/halt.8" \ + "${D}/usr/share/man/man8/halt.8.bz2" \ + "${D}/usr/share/man/man8/halt.8.gz" \ + "${D}/usr/share/man/man8/halt.8.xz" \ + "${D}/usr/share/man/man8/reboot.8" \ + "${D}/usr/share/man/man8/reboot.8.bz2" \ + "${D}/usr/share/man/man8/reboot.8.gz" \ + "${D}/usr/share/man/man8/reboot.8.xz" \ + "${D}/usr/share/man/man8/shutdown.8" \ + "${D}/usr/share/man/man8/shutdown.8.bz2" \ + "${D}/usr/share/man/man8/shutdown.8.gz" \ + "${D}/usr/share/man/man8/shutdown.8.xz" + fi + dodoc AUTHORS NEWS README THANKS insinto /usr/share/licenses/${PN} doins COPYING - insinto /etc - newins "${FILESDIR}/shepherd.scm" shepherd.scm + if use service-files; then + insinto /etc/shepherd - newinitd "${FILESDIR}/shepherd.initd" shepherd + if [[ -f "${FILESDIR}/shepherd.scm" ]]; then + doins "${FILESDIR}/shepherd.scm" + fi - if use service-files; then - insinto /etc/shepherd/services - doins "${FILESDIR}"/services/*.scm + if [[ -d "${FILESDIR}/services" ]]; then + insinto /etc/shepherd/services + for service in "${FILESDIR}"/services/*.scm; do + [[ -f "${service}" ]] || continue + doins "${service}" + done + fi fi } |
