unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#64455: shepherd: unable to use redefined system/system* in 0.10.1
@ 2023-07-03 17:46 buma2023
  2023-07-10 22:46 ` Ludovic Courtès
  2023-07-30 17:23 ` urb59
  0 siblings, 2 replies; 4+ messages in thread
From: buma2023 @ 2023-07-03 17:46 UTC (permalink / raw)
  To: 64455; +Cc: buma2023@outlook.fr

[-- Attachment #1: Type: text/plain, Size: 2110 bytes --]

Hello,

I am using happily shepherd since a few years as my init system on
Debian: amd64 (desktop and notebook), armhf (Cubox).

I was using 0.9.1 with guile-3.0.5 and fibers-1.1.1.

I recently tried 0.10.1 with guile-3.0.9 and fibers 1.3.1 and
encountered a problem with using system and system* in my services:
the simple fact to have the symbol system or system* in
/etc/shepherd.scm or included files (even if the command is not
executed) leads to a misbehaving shepherd, more specifically the
shepherd socket disappears; the system boots but with multiple
instances of the launched daemons.

If a system/system* command is executed while booting, shepherd
blocks at the point of its execution.

Example of service causing the failure:

(register-services
 (make <service>
   #:provides '(mytest)
   #:start (lambda args
           (system "touch /tmp/somefile")
           #t)
   ))

The service is not started at boot, I have to do it manually afterwards,
but I never can go there, as the shepherd socket is missing.

I I add at the end of /etc/shepherd.scm:
(system "touch /tmp/somefile")

I have the same problem.

Strangely at build time the test tests/system-star.sh succeeds, and
after I have booted (without refering to a system/system* command) , I
can run:

# export PID=$$; herd eval root "(system \"echo success! >/proc/$PID/fd/1\")"

(in my case, output appears in /var/log/syslog so I need the redirection)

I have read a bit documentation and code to be aware that system and
system* were redefined in shepherd to be non blocking, I suspect the
problem is how this is done.

I would prefer to have new names in shepherd for the redefined
system/system* and keep the old ones intact.

I have a workaround for this problem: replacing system/system* by
helpers I use, like:

(define (system-value command)
  "Return first line of output when calling (system command)"
  (let* ((port (open-input-pipe command))
       (str (read-line port)))
    (close-pipe port)
    str))

but this is a band-aid.


[-- Attachment #2: Type: text/html, Size: 4819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-08-04 20:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-03 17:46 bug#64455: shepherd: unable to use redefined system/system* in 0.10.1 buma2023
2023-07-10 22:46 ` Ludovic Courtès
2023-07-11 13:22   ` Ludovic Courtès
2023-07-30 17:23 ` urb59

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).