guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#43921] [PATCH v3 2/2] Add User Service example.


From: Ludovic Courtès
Subject: [bug#43921] [PATCH v3 2/2] Add User Service example.
Date: Fri, 23 Oct 2020 15:31:27 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)

Hello!

"Jan (janneke) Nieuwenhuizen" <janneke@gnu.org> skribis:

> * modules/shepherd/support.scm: Export %user-cache-dir, %user-config-dir,
> %user-runtime-dir.
> * doc/shepherd.texi (User Service examples): Use them in new subsection with
> example.
>
> Co-authored-by: Efraim Flashner <efraim@flashner.co.il>

Good idea!

> +@menu
> +* User Service examples::
> +@end menu
> +
> +@node User Service examples
> +@subsection User Service examples

The subsection looks lonely.  :-)  How about making it a section, at the
same level as “Service Examples”?

Also, since “user services” are no different than “non-user” services,
perhaps the focus should be on using the Shepherd as an unprivileged
user.  Thus, I’d suggest calling the section “Managing User Services”,
or “Running the Shepherd as a User”, which do not imply that “user
services” are a new concept.

WDYT?

> +For starters, use a toplevel @code{$XDG_CONFIG_HOME/shepherd/init.scm}
> +that looks like this:

Maybe: “… we suggest the following top-level
@file{$XDG_CONFIG_HOME/shepherd/init.scm} file, which will automatically
load individual service definitions from
@file{~/.config/shepherd/init.d}:”

> +@lisp
> +;;; Commentary:
> +;;;
> +;;; Add to your ~/.bash_profile:
> +;;;
> +;;; if [[ ! -S ${XDG_RUNTIME_DIR-$HOME/.cache}/shepherd/socket ]]; then
> +;;;     shepherd
> +;;; fi

Maybe make it a paragraph in the text, above the ‘init.scm’ example:

  First, to use the Shepherd as an unprivileged user, you may want to
  ensure it is up and running every time you log in.  One way to
  accomplish that is by adding the following lines to @file{~/.bashrc}
  (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):

  …

> +Then, individual user services can be put in
> +@code{$XDG_CONFIG_HOME/shepherd/init.d/}, e.g., for ssh-agent

@command{ssh-agent} and period.  :-)

> +@lisp
> +;;; Commentary:
> +;;;
> +;;; Add to your ~/.bash_profile:
> +;;;
> +;;; SSH_AUTH_SOCK=${XDG_RUNTIME_DIR-$HOME/.cache}/ssh-agent/socket
> +;;; export SSH_AUTH_SOCK
> +;;;
> +;;; Code:
> +
> +(use-modules (shepherd support))
> +
> +(define ssh-agent
> +  (make <service>
> +    #:provides '(ssh-agent)
> +    #:docstring "Run `ssh-agent'"
> +    #:start (let ((socket-dir (string-append %user-runtime-dir 
> "/ssh-agent")))
> +              (unless (file-exists? socket-dir)
> +                (mkdir-p socket-dir)
> +                (chmod socket-dir #o700))
> +              (make-forkexec-constructor
> +               `("ssh-agent" "-D" "-a" ,(string-append socket-dir "/socket"))
> +               #:log-file (string-append %user-cache-dir "/ssh-agent.log")))

This is misleading because the code to create the socket directory runs
from the top-level, i.e., when shepherd starts.  I’d write:

  #:start (lambda ()
            ;; make socket dir
            (fork+exec-command … #:log-file …))

(BTW, I use ‘gnupg-agent’, which I think is pretty nice because it’s
integrated with pinentry and all.  I run it as:

  eval `gpg-agent --daemon --enable-ssh-support`

… from ~/.xsession.)

Thanks,
Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]