all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: 30351@debbugs.gnu.org
Subject: [bug#30351] [PATCH] gnu: mcron2: Correct and enhance the wrap phase.
Date: Sun, 04 Feb 2018 15:47:36 -0500	[thread overview]
Message-ID: <874lmwwkgn.fsf@gmail.com> (raw)

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

Hello!

As a follow up to my previous patch to mcron2, this completes the wrap
phases and fix a small issue where the mcron modules were installed to
share/guile/site/2.0 instead of 2.2.

For those using dyndns services, a job like the following should now
work without having to propagate Guile or GnuTLS in your user/system
profile[0]:

--8<---------------cut here---------------start------------->8---
;;; Secrets defined as variables prefixed by "sec-".
(include "/abs/path/to/your/secrets.scm")

(define duckdns-job
  ;; Update personal domain IP every 5 minutes.
  #~(job '(next-minute (range 0 60 5))
	 (lambda ()
	   (use-modules (web client))
	   (http-get
	    (string-append
	     "https://www.duckdns.org/update?domains=apteryx&token="
	     #$sec-dyndns-token "&ip=")))))

(operating-system
 ...
 (services
  (cons*
   (mcron-service (list duckdns-job))
   ...
--8<---------------cut here---------------end--------------->8---

I had tested my previous patch as a user (where Guile and GnuTLS were
installed), so it was working, but after testing from the "real" herd
service (which runs as root), it was failing, not finding the (web
client) and GnuTLS modules.

The attached patch fixes that.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-mcron2-Correct-and-enhance-the-wrap-phase.patch --]
[-- Type: text/x-patch, Size: 4186 bytes --]

From 385343b1370d87e6104ebe2ef473bf2d1e31f2f2 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sun, 4 Feb 2018 14:05:40 -0500
Subject: [PATCH] gnu: mcron2: Correct and enhance the wrap phase.

* gnu/packages/guile.scm (mcron2)[inputs]: Rename "guile-2.2" to just "guile".
[phases]: Install mcron2 modules to guile/site/2.2 instead of guile/site/2.0.
Add Guile 2.2 and GnuTLS modules to the wrap phase.
---
 gnu/packages/guile.scm | 43 ++++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 3bc18ffdd..37e6703fa 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -64,6 +64,7 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
@@ -632,7 +633,8 @@ format is also supported.")
          ("texinfo" ,texinfo)
          ("help2man" ,help2man)))
       (inputs
-       `(("guile-2.2" ,guile-2.2)
+       `(("guile" ,guile-2.2)
+         ("gnutls" ,gnutls)             ;for the wrap-mcron phase
          ,@(srfi-1:alist-delete "guile" (package-inputs mcron))))
       (arguments
        `(#:modules ((ice-9 match) (ice-9 ftw)
@@ -645,6 +647,7 @@ format is also supported.")
            (add-after 'unpack 'use-guile-2.2
              (lambda _
                (substitute* "configure.ac"
+                 (("guile/site/2.0") "guile/site/2.2")
                  (("PKG_CHECK_MODULES\\(\\[GUILE\\],.*$")
                   "PKG_CHECK_MODULES([GUILE], [guile-2.2])\n"))
                #t))
@@ -652,22 +655,28 @@ format is also supported.")
              (lambda _
                (invoke "autoreconf" "-vfi")))
            (add-after 'install 'wrap-mcron
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Wrap the 'mcron' command to refer to the right
-               ;; modules.
-               (let* ((out  (assoc-ref outputs "out"))
-                      (bin  (string-append out "/bin"))
-                      (site (string-append
-                             out "/share/guile/site")))
-                 (match (scandir site)
-                   (("." ".." version)
-                    (let ((modules (string-append site "/" version)))
-                      (wrap-program (string-append bin "/mcron")
-                        `("GUILE_LOAD_PATH" ":" prefix
-                          (,modules))
-                        `("GUILE_LOAD_COMPILED_PATH" ":" prefix
-                          (,modules)))
-                      #t))))))))))))
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               ;; Wrap the 'mcron' command to refer to the right modules. We
+               ;; also include Guile 2.2 modules and GnuTLS, so that Guile
+               ;; libraries can be used in mcron jobs without having to
+               ;; propagate those in a user profile.
+               (let* ((site-dir "/share/guile/site/2.2")
+                      (ccache-dir "/lib/guile/2.2/ccache")
+                      (mcron  (assoc-ref outputs "out"))
+                      (mcron-bin (string-append mcron "/bin/mcron"))
+                      (mcron-modules (string-append mcron site-dir))
+                      (guile (assoc-ref inputs "guile"))
+                      (guile-modules (string-append guile site-dir))
+                      (guile-ccache (string-append guile ccache-dir))
+                      (gnutls (assoc-ref inputs "gnutls"))
+                      (gnutls-modules (string-append gnutls site-dir))
+                      (gnutls-ccache (string-append gnutls ccache-dir)))
+                 (wrap-program mcron-bin
+                   `("GUILE_LOAD_PATH" ":" prefix
+                     (,mcron-modules ,guile-modules ,gnutls-modules))
+                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                     (,mcron-modules ,guile-ccache ,gnutls-ccache)))
+                 #t)))))))))
 
 (define-public guile-ics
   (package
-- 
2.16.0


[-- Attachment #3: Type: text/plain, Size: 252 bytes --]


Thank you,

Maxim

[0]  A note of caution: secrets managed that way are not that secret:
they are visible in the derived job script (world readable under
/gnu/store). You might want to prefer keeping your mcron jobs in your
$HOME for better security.

             reply	other threads:[~2018-02-04 20:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-04 20:47 Maxim Cournoyer [this message]
2018-02-04 22:33 ` [bug#30351] [PATCH] gnu: mcron2: Correct and enhance the wrap phase ng0
2018-02-09 10:09 ` Ludovic Courtès
2018-03-12  0:23   ` bug#30351: " Maxim Cournoyer
2018-03-12  9:08     ` [bug#30351] " Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874lmwwkgn.fsf@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=30351@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.