unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
From: Tomas Volf <~@wolfsden.cz>
To: Tristan Kohl <blobbyjj@ymail.com>
Cc: help-guix@gnu.org
Subject: Re: How to configure smartd and send notifications?
Date: Fri, 24 May 2024 12:19:39 +0200	[thread overview]
Message-ID: <ZlBpuxMMieOItuSP@ws> (raw)
In-Reply-To: <C2CD6F28-5603-48B8-99F7-48E9F9683690@ymail.com>

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

On 2024-05-23 21:25:08 +0200, Tristan Kohl via wrote:
> Well look at me. So focused in my old ways on constructing a shell script that I did not even think about using Guile as the executable :D
>
> Thank you Thomas an Felix for your pointers!
>
> I read up about G-Expressions and got it almost working. But I must miss something because when executing the build result it makes the request successfully (checked return of http-get with pk and logs on the server) but still fails with this error:
>
> Backtrace:
>                 0 (primitive-load "/gnu/store/9gjnc0p...")
>
> ERROR: In procedure primitive-load:
> Wrong type to apply: #<unspecified>
>
>
> (use-module (gnu) (guix modules))
> (use-package-modules tls)
>
> (define smartd-send-ntfy
>   (program-file "smartd-send-ntfy"
>     (with-extensions (list gnutls)
>       (with-imported-modules
>         (source-module-closure '((web client)))
>         #~((use-modules (web client))
>            (http-get "https://example.com"))))))

I think g-exp needs to be a single expression.  In other words, add `begin' in
there.  In your code you are basically trying to apply result of `(use-modules
...)' to result of `(http-get ...)'.  Since use-modules do not return anything,
you get the error above.  You can test it using just plain guile and you will
get the same error:

    guile -c '((use-modules (web client)) (http-get "https://example.org"))'

I think this should work:

      (define smartd-send-ntfy
        (program-file "smartd-send-ntfy"
          (with-extensions (list gnutls)
            (with-imported-modules
              (source-module-closure '((web client)))
              #~(begin (use-modules (web client))
                       (http-get "https://example.com"))))))

Your original code:

      $ guix repl
      Loading Guix REPL meta-commands...
      Increasing build verbosity...
      Disabling grafting...
      GNU Guile 3.0.9
      Copyright (C) 1995-2023 Free Software Foundation, Inc.

      Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
      This program is free software, and you are welcome to redistribute it
      under certain conditions; type `,show c' for details.

      Enter `,help' for help.
      scheme@(guix-user)> ,use (guix)
      scheme@(guix-user)> #~((use-modules (web client)) (http-get "https://example.com"))
      $1 = #<gexp ((use-modules (web client)) (http-get "https://example.com")) 7f6c48696720>
      scheme@(guix-user)> (program-file "test" $1)
      $2 = #<<program-file> name: "test" gexp: #<gexp ((use-modules (web client)) (http-get "https://example.com")) 7f6c48696720> guile: #f path: ("/gnu/store/ff1cyww9qlra4849q6k0n30w7q67ziim-guix-module-union/share/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile" "/home/wolf/.guix-home/profile/share/guile/site/3.0" "/run/current-system/profile/share/guile/site/3.0")>
      scheme@(guix-user)> ,lower $2
      $3 = #<derivation /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv => /gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test 7f6c35dd5d70>
      scheme@(guix-user)> ,build $3
      building /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv...
      successfully built /gnu/store/x3rkbl47j83d5ps8r8a915blks6hfbin-test.drv
      $4 = "/gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test"
      scheme@(guix-user)> (system $4)
      Backtrace:
                 0 (primitive-load "/gnu/store/50m45lc93x7fayaq3y7kzi2zhjz7qwdz-test")

      ERROR: In procedure primitive-load:
      Wrong type to apply: #<unspecified>
      $5 = 256

Now with the `begin':

      scheme@(guix-user)> #~(begin (use-modules (web client)) (http-get "https://example.com"))
      $6 = #<gexp (begin (use-modules (web client)) (http-get "https://example.com")) 7f6c35e61a20>
      scheme@(guix-user)> (program-file "test" $6)
      $7 = #<<program-file> name: "test" gexp: #<gexp (begin (use-modules (web client)) (http-get "https://example.com")) 7f6c35e61a20> guile: #f path: ("/gnu/store/ff1cyww9qlra4849q6k0n30w7q67ziim-guix-module-union/share/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site/3.0" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile/site" "/gnu/store/1gd9nsy4cps8fnrd1avkc9l01l7ywiai-guile-3.0.9/share/guile" "/home/wolf/.guix-home/profile/share/guile/site/3.0" "/run/current-system/profile/share/guile/site/3.0" "/gnu/store/s2cf4ibjw0g6npx0ia54x5xg6hzangn7-wolfsden/share/guile/site/3.0" "/gnu/store/czkzwa77lr39ayj016vhqrbhf2da2isr-nonguix/share/guile/site/3.0")>
      scheme@(guix-user)> ,lower $7
      $8 = #<derivation /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv => /gnu/store/7ylpw11r0sbdc2z02sir5gcr552dqks6-test 7f6c3606cb40>
      scheme@(guix-user)> ,build $8
      building /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv...
      successfully built /gnu/store/7xcnijz3cf4231sdg0df5hig259k38nf-test.drv
      $9 = "/gnu/store/7ylpw11r0sbdc2z02sir5gcr552dqks6-test"
      scheme@(guix-user)> (system $9)
      $10 = 0

>
>
> On 21 May 2024 17:50:27 CEST, Tomas Volf <~@wolfsden.cz> wrote:
> >On 2024-05-21 17:33:24 +0200, Tristan Kohl via wrote:
> >> Hello Felix,
> >>
> >> my last message was not to critizise your help but rather my frustration with my own limited progress. I really appreciate the help!
> >>
> >> program-file at least results in a usable thing however since the script gets executed by smard I get the "command not found" in my logs. It seems like curl is not in PATH for smartd. Do I need to import something into the gexp?
> >>
> >> Also those env variables are defined by smartd during runtime depending on which drive produced the error. Therefore I need shell expansion/env variables and have to use system (without *) imho.
> >>
> >> This is the current state:
> >>
> >> (define-smartd-send-ntfy
> >>   (program-file "send-ntfy"
> >>     #~(system
> >>       (string-append "curl " "-H \"Title: $SMARTD_SUBJECT\" " ...))))
> >
> >Ignoring the obvious quoting issues here (what Felix does with `getenv' seems
> >much safer, and should produce the same result?),
> >
> >>
> >> Note: when using system* the error is:
> >> In execvp of curl: No such file or directory
> >
> >This should be solvable by using `file-append', so, basing on the system*
> >variant, something like:
> >
> >    #~(system* #$(file-append curl "/bin/curl") <other-arguments-here>)
> >
> >Should invoke curl by absolute path.  (You need import (gnu packages curl) of
> >course.)
> >
> >Hope this helps,
> >Tomas
> >
> >--
> >There are only two hard things in Computer Science:
> >cache invalidation, naming things and off-by-one errors.

Have a nice day,
Tomas

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2024-05-24 10:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4D873504-6540-477A-A2DB-DE293395CAFC.ref@ymail.com>
2024-05-19 22:48 ` How to configure smartd and send notifications? Tristan Kohl via
2024-05-20 11:30   ` Felix Lechner via
2024-05-20 13:56     ` Tristan Kohl via
2024-05-20 15:04       ` Felix Lechner via
2024-05-20 19:15         ` Tristan Kohl via
2024-05-20 23:42           ` Felix Lechner via
2024-05-21 15:33             ` Tristan Kohl via
2024-05-21 15:50               ` Tomas Volf
2024-05-23 19:25                 ` Tristan Kohl via
2024-05-24  4:10                   ` Felix Lechner via
2024-05-24 10:19                   ` Tomas Volf [this message]
2024-05-31 13:42                     ` Tristan Kohl via

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

  List information: https://guix.gnu.org/

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

  git send-email \
    --in-reply-to=ZlBpuxMMieOItuSP@ws \
    --to=~@wolfsden.cz \
    --cc=blobbyjj@ymail.com \
    --cc=help-guix@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.
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).