unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* weird errors
@ 2018-01-13 17:00 Catonano
  2018-01-13 21:13 ` Ludovic Courtès
  0 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-13 17:00 UTC (permalink / raw)
  To: guix-devel

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

Ok, I'm trying to build this tryton service

In running a VM like this

/gnu/store/9qcwl2vl8lnfbiid31irj92ffcagrc45-run-vm.sh --serial stdio -m 2G

I run into this error:

...
In execvp of TRYTONPASSFILE =
/gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin:
No such file or directory
ERROR: In procedure scm-error:
ERROR: program "TRYTONPASSFILE =
/gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin"
exited with non-zero code 32512

I read on a random page in the internet that the code 32512 is given when
sh doesn't find an executable

So, inspecting
/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin

this is what I find:

~$ cat
/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin
#!/gnu/store/f8k940vy9gck66m9r4id5m098w3hxgka-bash-minimal-4.4.12/bin/bash
export
PYTHONPATH="/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/lib/python3.5/site-packages:/gnu/store/284w0ylkn07d2wi452wdlzi6r7jc7lgh-python-mock-1.0.1/lib/python3.5/site-packages:/gnu/store/pd791yb95476z517rvh178hhk58n8c7f-python-dateutil-2.6.0/lib/python3.5/site-packages:/gnu/store/b4m2rv4nr88i69wjp8hshc0wc36hzv8b-python-genshi-0.7/lib/python3.5/site-packages:/gnu/store/ggxg8igwls4zvwy2mn85m1cd7f8iw6ls-python-polib-1.0.8/lib/python3.5/site-packages:/gnu/store/b8k8jzjd7yi3fwk0bpq6iwfg8i0ph68b-python-magic-0.4.15/lib/python3.5/site-packages:/gnu/store/5h2bscbxf1iy56rad731ynqb6gi2a45f-python-psycopg2-2.7.3.1/lib/python3.5/site-packages:/gnu/store/zx6x4f0rap8ks7yfglvqq349agrkjbpd-python-relatorio-0.8.0/lib/python3.5/site-packages:/gnu/store/a2awr40fbbhi7ala2wip8j4nw6nhz85x-python-lxml-3.8.0/lib/python3.5/site-packages:/gnu/store/q3330wrmdj1vhfzrvz0w1hws7wbhn40q-python-sql-0.9/lib/python3.5/site-packages:/gnu/store/nch06kxa2y9czp7wwz4fbyp1s8c1g4in-python-werkzeug-0.11.15/lib/python3.5/site-packages:/gnu/store/4walcharyljdhyj1bfg5002i84cmzmxp-python-wrapt-1.10.8/lib/python3.5/site-packages:/gnu/store/jb3n0bsdpkhvyb8y70jyr8fcx8fqssr9-python-3.5.3/lib/python3.5/site-packages:/gnu/store/8f72v1ngblndikg9pf8ig0p3r5gc0gi7-python-six-1.10.0/lib/python3.5/site-packages${PYTHONPATH:+:}$PYTHONPATH"
exec -a "$0"
"/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/.trytond-admin-real"
"$@"

Logging into the VM I see this

root@antelope ~# ls
/gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/
trytond  trytond-admin  trytond-cron
root@antelope ~#

So, the file being called is ".trytond-admin-real" but that doesn't exist

Insted trytond-admin exist



Also, when I quit the Guile repl (like this: ",q") I see several of these
messages

Backtrace:
           3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
In ice-9/eval.scm:
   182:19  2 (proc #(#<directory (guile-user) 1fbb140> #("tryt?" ?) ?))
   142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
In unknown file:
           0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)

ERROR: In procedure %resolve-variable:
ERROR: Unbound variable: invoke
13 Jan 17:41:54 ntpd[387]: Listen normally on 5 eth0
[fe80::f4dc:1d61:f230:f197%2]:123
13 Jan 17:41:54 ntpd[387]: new interface(s) found: waking up resolver
Respawning trytond.
Service trytond has been started.
Backtrace:
           3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
In ice-9/eval.scm:
   182:19  2 (proc #(#<directory (guile-user) 1edb140> #("tryt?" ?) ?))
   142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
In unknown file:
           0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)

ERROR: In procedure %resolve-variable:
ERROR: Unbound variable: invoke
Respawning trytond.
Service trytond has been started.
Backtrace:
           3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
In ice-9/eval.scm:
   182:19  2 (proc #(#<directory (guile-user) 2236140> #("tryt?" ?) ?))
   142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
In unknown file:
           0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)

ERROR: In procedure %resolve-variable:
ERROR: Unbound variable: invoke
Respawning trytond.
Service trytond has been started.
Backtrace:
           3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
In ice-9/eval.scm:
   182:19  2 (proc #(#<directory (guile-user) 2767140> #("tryt?" ?) ?))
   142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
In unknown file:
           0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)

ERROR: In procedure %resolve-variable:
ERROR: Unbound variable: invoke
Service trytond has been disabled.
  (Respawning too fast.)


This is the GNU system.  Welcome.
antelope login: root
New session c1 of user root.
This is the GNU operating system, welcome!

invoke can't be found ?

How so ?
(guix build utils) is correctly imported as far as I can see

here's the relevant file
https://gitlab.com/humanitiesNerd/guix-hacks/blob/trytonservice/gnu/services/trytond.scm


Stangely, this command succeeds
make check-system TESTS="trytond"

It runs the only test thhaht I managed to write: it checks if trytond is
running

the failed invoke call is used in the activation, so trytond is running
without a postgres role and database having being created

It won't work

But it this case the VM can be created.

warning: failed to load '(gnu tests install)':
In procedure allocate-struct: Wrong type argument in position 2: 13
Running 1 system tests...
TOTAL: 1
PASS: /gnu/store/7x9dnx3z5amywyvll9cyxrqfwcij4hki-trytond-test

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

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

* Re: weird errors
  2018-01-13 17:00 weird errors Catonano
@ 2018-01-13 21:13 ` Ludovic Courtès
  2018-01-14  7:21   ` Catonano
  0 siblings, 1 reply; 24+ messages in thread
From: Ludovic Courtès @ 2018-01-13 21:13 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

Heya,

Catonano <catonano@gmail.com> skribis:

> In execvp of TRYTONPASSFILE =
> /gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
> /gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin:
> No such file or directory
> ERROR: In procedure scm-error:
> ERROR: program "TRYTONPASSFILE =
> /gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
> /gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-admin"
> exited with non-zero code 32512

It’s trying to execute a program named “TRYTONPASSFILE = …/…”.  This
initial “TRYTONPASSFILE =” string is bogus, it’s not the name of the
program.

> Respawning trytond.
> Service trytond has been started.
> Backtrace:
>            3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
> In ice-9/eval.scm:
>    182:19  2 (proc #(#<directory (guile-user) 2767140> #("tryt?" ?) ?))
>    142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
> In unknown file:
>            0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)
>
> ERROR: In procedure %resolve-variable:
> ERROR: Unbound variable: invoke

‘invoke’ is in (guix build utils), so you need (use-modules (guix build
utils)) somewhere.

Specifically, in the ‘tryton-shepherd-service’ procedure you posted, you
need to define ‘start-script’ like this:

  (program-file "start-trytond"
                (with-imported-modules '((guix build utils))
                  #~(begin
                      (use-modules (guix build utils))

                      (let ((user …))
                        ;; …
                        (invoke …)))))

> warning: failed to load '(gnu tests install)':
> In procedure allocate-struct: Wrong type argument in position 2: 13

This suggests an ABI mismatch; run ‘make clean-go && make’.

HTH, looks like you’re almost there!  :-)

Ludo’.

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

* Re: weird errors
  2018-01-13 21:13 ` Ludovic Courtès
@ 2018-01-14  7:21   ` Catonano
  2018-01-14 10:43     ` Danny Milosavljevic
  0 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-14  7:21 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

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

2018-01-13 22:13 GMT+01:00 Ludovic Courtès <ludo@gnu.org>:

> Heya,
>
> Catonano <catonano@gmail.com> skribis:
>
> > In execvp of TRYTONPASSFILE =
> > /gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
> > /gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-
> admin:
> > No such file or directory
> > ERROR: In procedure scm-error:
> > ERROR: program "TRYTONPASSFILE =
> > /gnu/store/3qpvdgkagkqyzpaw65c0plzd9zqp44v6-passfile
> > /gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/trytond-
> admin"
> > exited with non-zero code 32512
>
> It’s trying to execute a program named “TRYTONPASSFILE = …/…”.  This
> initial “TRYTONPASSFILE =” string is bogus, it’s not the name of the
> program.
>

TRYTONPASSFILE is supposed to be an environment variable forr trytond-admin
to consume

If TRYTONPASSFILE isn't set, tytond-admin will prompt the user and require
some interaction

the line is supposed to be like

TRYTOPASSILE = /path/to/some/passfile trytond-admin -c
trytond-conf-file.conf

that is

TRYTOPASSILE = /gnu/store/some-hash-passfile
/gnu/store/some-hash-trytond-admin -c
/gnu/stor/some-hash-trytond-conf-file.conf

The problem seesm to be that a call to some .trytond-admin-real can't be
satisfied

> Respawning trytond.
> > Service trytond has been started.
> > Backtrace:
> >            3 (primitive-load "/gnu/store/dh2mm0hk37q4cr4g390psp5y7jl?")
> > In ice-9/eval.scm:
> >    182:19  2 (proc #(#<directory (guile-user) 2767140> #("tryt?" ?) ?))
> >    142:16  1 (compile-top-call _ (7 . invoke) ((11 0 . 1) (10 # # ?)))
> > In unknown file:
> >            0 (%resolve-variable (7 . invoke) #<directory (guile-user?>)
> >
> > ERROR: In procedure %resolve-variable:
> > ERROR: Unbound variable: invoke
>
> ‘invoke’ is in (guix build utils), so you need (use-modules (guix build
> utils)) somewhere.
>
> Specifically, in the ‘tryton-shepherd-service’ procedure you posted, you
> need to define ‘start-script’ like this:
>
>   (program-file "start-trytond"
>                 (with-imported-modules '((guix build utils))
>                   #~(begin
>                       (use-modules (guix build utils))
>
>                       (let ((user …))
>                         ;; …
>                         (invoke …)))))
>

Ah, ok, I missed this



>
> > warning: failed to load '(gnu tests install)':
> > In procedure allocate-struct: Wrong type argument in position 2: 13
>
> This suggests an ABI mismatch; run ‘make clean-go && make’.
>
>
Ok


> HTH, looks like you’re almost there!  :-)
>

Thankks you Ludo !

Admittedly I'm a bit tired ;-)

I'll do this last turn of tries

If it doesn't work afer this, I'll abandon it and move on

I'll keep you posted !

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

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

* Re: weird errors
  2018-01-14  7:21   ` Catonano
@ 2018-01-14 10:43     ` Danny Milosavljevic
  2018-01-14 10:57       ` Danny Milosavljevic
  2018-01-14 11:00       ` Catonano
  0 siblings, 2 replies; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-14 10:43 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

Hi Catonano,

On Sun, 14 Jan 2018 08:21:10 +0100
Catonano <catonano@gmail.com> wrote:

> the line is supposed to be like
> 
> TRYTOPASSILE = /path/to/some/passfile trytond-admin -c
> trytond-conf-file.conf
> 
> that is
> 
> TRYTOPASSILE = /gnu/store/some-hash-passfile
> /gnu/store/some-hash-trytond-admin -c
> /gnu/stor/some-hash-trytond-conf-file.conf

That only works with a shell - and the spaces marked below break it:

TRYTOPASSILE = /gnu/store/some-hash-passfile
            ^ ^

You'd need to remove those.  But even better instead do the following:

I'd just call (setenv "/gnu/store/some-hash-passfile") instead of starting a whole shell (it's a waste and increases the attach surface for no reason to use a shell here).

> The problem seesm to be that a call to some .trytond-admin-real can't be
> satisfied

I don't think so.  Did you check via "ls -a" ? (files whose names start with a dot are otherwise hidden from output)

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

* Re: weird errors
  2018-01-14 10:43     ` Danny Milosavljevic
@ 2018-01-14 10:57       ` Danny Milosavljevic
  2018-01-14 11:00       ` Catonano
  1 sibling, 0 replies; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-14 10:57 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

On Sun, 14 Jan 2018 11:43:46 +0100
Danny Milosavljevic <dannym@scratchpost.org> wrote:

> Hi Catonano,
> 
> On Sun, 14 Jan 2018 08:21:10 +0100
> Catonano <catonano@gmail.com> wrote:
> 
> > the line is supposed to be like
> > 
> > TRYTOPASSILE = /path/to/some/passfile trytond-admin -c
> > trytond-conf-file.conf
> > 
> > that is
> > 
> > TRYTOPASSILE = /gnu/store/some-hash-passfile
> > /gnu/store/some-hash-trytond-admin -c
> > /gnu/stor/some-hash-trytond-conf-file.conf  
> 
> That only works with a shell - and the spaces marked below break it:
> 
> TRYTOPASSILE = /gnu/store/some-hash-passfile
>             ^ ^
> 
> You'd need to remove those.  But even better instead do the following:
> 

Fixed typo:

I'd just call (setenv "TRYTOPASSILE" "/gnu/store/some-hash-passfile") instead of starting a whole shell (it's a waste and increases the attack surface for no reason to use a shell here).


> > The problem seesm to be that a call to some .trytond-admin-real can't be
> > satisfied  
> 
> I don't think so.  Did you check via "ls -a" ? (files whose names start with a dot are otherwise hidden from output)

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

* Re: weird errors
  2018-01-14 10:43     ` Danny Milosavljevic
  2018-01-14 10:57       ` Danny Milosavljevic
@ 2018-01-14 11:00       ` Catonano
  2018-01-14 16:38         ` Ricardo Wurmus
                           ` (2 more replies)
  1 sibling, 3 replies; 24+ messages in thread
From: Catonano @ 2018-01-14 11:00 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

Hi Danny,

thanks for your help

2018-01-14 11:43 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> Hi Catonano,
>
> On Sun, 14 Jan 2018 08:21:10 +0100
> Catonano <catonano@gmail.com> wrote:
>
> > the line is supposed to be like
> >
> > TRYTOPASSILE = /path/to/some/passfile trytond-admin -c
> > trytond-conf-file.conf
>

firstable I apologize for having written "TYTONPASSILE"

Of course an F is missing, my keybord is driving me mad



> >
> > that is
> >
> > TRYTOPASSILE = /gnu/store/some-hash-passfile
> > /gnu/store/some-hash-trytond-admin -c
> > /gnu/stor/some-hash-trytond-conf-file.conf
>
> That only works with a shell - and the spaces marked below break it:
>

Ah, the spaces :-/


>
> TRYTOPASSILE = /gnu/store/some-hash-passfile
>             ^ ^
>
> You'd need to remove those.  But even better instead do the following:
>
> I'd just call (setenv "/gnu/store/some-hash-passfile") instead of
> starting a whole shell (it's a waste and increases the attach surface for
> no reason to use a shell here).
>

I can certainly do like you suggest. It's cleaner

But "trytond-admin" has to be called finally. Doesn't this require a shell
anyway ?



>
> > The problem seesm to be that a call to some .trytond-admin-real can't be
> > satisfied
>
> I don't think so.  Did you check via "ls -a" ? (files whose names start
> with a dot are otherwise hidden from output)
>

No, you' re right, it's there

~$ ls -lha /gnu/store/144hjm67pzq9x0v47hwfiabwqq219aya-trytond-4.6.2/bin/
totale 32K
dr-xr-xr-x 2 root root 4,0K  1 gen  1970 ./
dr-xr-xr-x 4 root root 4,0K  1 gen  1970 ../
-r-xr-xr-x 2 root root 1,5K  1 gen  1970 trytond
-r-xr-xr-x 2 root root 1,5K  1 gen  1970 trytond-admin
-r-xr-xr-x 3 root root  671  1 gen  1970 .trytond-admin-real
-r-xr-xr-x 2 root root 1,5K  1 gen  1970 trytond-cron
-r-xr-xr-x 2 root root  805  1 gen  1970 .trytond-cron-real
-r-xr-xr-x 2 root root 1,8K  1 gen  1970 .trytond-real


So were the spaces the only problem ?

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

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

* Re: weird errors
  2018-01-14 11:00       ` Catonano
@ 2018-01-14 16:38         ` Ricardo Wurmus
  2018-01-14 20:35           ` Catonano
  2018-01-14 16:45         ` Danny Milosavljevic
  2018-01-22 10:52         ` Catonano
  2 siblings, 1 reply; 24+ messages in thread
From: Ricardo Wurmus @ 2018-01-14 16:38 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel


Catonano <catonano@gmail.com> writes:

>> I'd just call (setenv "/gnu/store/some-hash-passfile") instead of
>> starting a whole shell (it's a waste and increases the attach surface for
>> no reason to use a shell here).
>>
>
> I can certainly do like you suggest. It's cleaner
>
> But "trytond-admin" has to be called finally. Doesn't this require a shell
> anyway ?

No, it actually doesn’t.  There are different ways to execute programs,
and only one of them is to spawn a shell and have the shell handle the
execution.

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

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

* Re: weird errors
  2018-01-14 11:00       ` Catonano
  2018-01-14 16:38         ` Ricardo Wurmus
@ 2018-01-14 16:45         ` Danny Milosavljevic
  2018-01-14 20:33           ` Catonano
  2018-01-15  5:43           ` Alex Vong
  2018-01-22 10:52         ` Catonano
  2 siblings, 2 replies; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-14 16:45 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

> So were the spaces the only problem ?

In https://gitlab.com/humanitiesNerd/guix-hacks/blob/trytonservice/gnu/services/trytond.scm , you don't invoke a shell (example: "sh", "bash", "csh" etc) so the "VARIABLE=VALUE" syntax will not be evaluated by the shell and the kernel will try to start a program called "VARIABLE=VALUE" instead.

So either (invoke "sh" "-c" "VARIABLE=VALUE trytond-admin ...") or just use setenv and then invoke trytond-admin directly.

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

* Re: weird errors
  2018-01-14 16:45         ` Danny Milosavljevic
@ 2018-01-14 20:33           ` Catonano
  2018-01-15  5:43           ` Alex Vong
  1 sibling, 0 replies; 24+ messages in thread
From: Catonano @ 2018-01-14 20:33 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-14 17:45 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> > So were the spaces the only problem ?
>
> In https://gitlab.com/humanitiesNerd/guix-hacks/blob/trytonservice/gnu/
> services/trytond.scm , you don't invoke a shell (example: "sh", "bash",
> "csh" etc) so the "VARIABLE=VALUE" syntax will not be evaluated by the
> shell and the kernel will try to start a program called "VARIABLE=VALUE"
> instead.
>
> So either (invoke "sh" "-c" "VARIABLE=VALUE trytond-admin ...") or just
> use setenv and then invoke trytond-admin directly.
>


Aahh I see now !

Ok, thank you

I won't fix it right now because it's late and I'm tired. But I'll take
care of this in the coming days

Thanks !

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

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

* Re: weird errors
  2018-01-14 16:38         ` Ricardo Wurmus
@ 2018-01-14 20:35           ` Catonano
  0 siblings, 0 replies; 24+ messages in thread
From: Catonano @ 2018-01-14 20:35 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

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

2018-01-14 17:38 GMT+01:00 Ricardo Wurmus <rekado@elephly.net>:

>
> Catonano <catonano@gmail.com> writes:
>
> >> I'd just call (setenv "/gnu/store/some-hash-passfile") instead of
> >> starting a whole shell (it's a waste and increases the attach surface
> for
> >> no reason to use a shell here).
> >>
> >
> > I can certainly do like you suggest. It's cleaner
> >
> > But "trytond-admin" has to be called finally. Doesn't this require a
> shell
> > anyway ?
>
> No, it actually doesn’t.  There are different ways to execute programs,
> and only one of them is to spawn a shell and have the shell handle the
> execution.
>

Ok, ok

Thanks for clarifying

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

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

* Re: weird errors
  2018-01-14 16:45         ` Danny Milosavljevic
  2018-01-14 20:33           ` Catonano
@ 2018-01-15  5:43           ` Alex Vong
  1 sibling, 0 replies; 24+ messages in thread
From: Alex Vong @ 2018-01-15  5:43 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hello Catonano,

Danny Milosavljevic <dannym@scratchpost.org> writes:

>> So were the spaces the only problem ?
>
> In
> https://gitlab.com/humanitiesNerd/guix-hacks/blob/trytonservice/gnu/services/trytond.scm
> , you don't invoke a shell (example: "sh", "bash", "csh" etc) so the
> "VARIABLE=VALUE" syntax will not be evaluated by the shell and the
> kernel will try to start a program called "VARIABLE=VALUE" instead.
>
> So either (invoke "sh" "-c" "VARIABLE=VALUE trytond-admin ...") or
> just use setenv and then invoke trytond-admin directly.

Actually, there is one more way. You can run (I didn't test)

  (invoke "env" "VAR1=VAL1" ... "VARn=VALn" "trytond-admin" "ARG1" ... "ARGn")

But personally I prefer the 'setenv' approach, it looks more schemish to
me.

In fact, I think we should have a 'with-environment-variables' macro
which run the body with the appropriate environment variables set and
restore them after we finish, similar to how 'with-directory-excursion'
works.

Cheers,
Alex

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

* Re: weird errors
  2018-01-14 11:00       ` Catonano
  2018-01-14 16:38         ` Ricardo Wurmus
  2018-01-14 16:45         ` Danny Milosavljevic
@ 2018-01-22 10:52         ` Catonano
  2018-01-22 10:59           ` Danny Milosavljevic
  2 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-22 10:52 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-14 12:00 GMT+01:00 Catonano <catonano@gmail.com>:

> Hi Danny,
>
> thanks for your help
>
>
> 2018-01-14 11:43 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:
>
>> Hi Catonano,
>>
>> On Sun, 14 Jan 2018 08:21:10 +0100
>> Catonano <catonano@gmail.com> wrote:
>>
>>
> Ah, the spaces :-/
>
>
>>
>> TRYTOPASSILE = /gnu/store/some-hash-passfile
>>             ^ ^
>>
>> You'd need to remove those.  But even better instead do the following:
>>
>> I'd just call (setenv "/gnu/store/some-hash-passfile") instead of
>> starting a whole shell (it's a waste and increases the attach surface for
>> no reason to use a shell here).
>>
>
> I can certainly do like you suggest. It's cleaner
>
>
With this form

(primitive-exit
 (begin
    (setenv "TRYTONPASSFILE" #$passfile)
    (invoke
       run-the-trytond-init-script
       trytond-initscript-args
       )))

I get this error

ERROR: In procedure primitive-exit:
ERROR: Wrong type (expecting exact integer): #t

While with this version

(primitive-exit
  (setenv "TRYTONPASSFILE" #$passfile)
  (invoke
     run-the-trytond-init-script
     trytond-initscript-args
     )))

I get an error claiming a wrong number of arguments passed to primitive-exit


Finally, with hthis version

          (match (primitive-fork)
             (0
              ;; Exit with a non-zero status code if an exception is thrown.
              ;; why don't we use a try/catch ? Boh
              (dynamic-wind
                (const #t)
                (lambda ()
                  (setgid (passwd:gid trytond-user))
                  (setuid (passwd:uid trytond-user))
                  (setenv "TRYTONPASSFILE" #$passfile)
                  (primitive-exit
                   (invoke
                    run-the-trytond-init-script
                    trytond-initscript-args;; THIS IS A LIST, NOT A STRING
                    )))
                (lambda ()
                  (primitive-exit 1))))
             (pid (waitpid pid)))))))))


I get

ERROR: In procedure primitive-exit:
ERROR: Wrong type (expecting exact integer): #t

isn't invoke returning an exact integer ?
Maybe tryton-admin insn't seeing the env var and promtping to ask for its
interaction ?


How am I supposed to use setenv, exactly ?

Thanks

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

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

* Re: weird errors
  2018-01-22 10:52         ` Catonano
@ 2018-01-22 10:59           ` Danny Milosavljevic
  2018-01-22 12:42             ` Catonano
  0 siblings, 1 reply; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-22 10:59 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

> isn't invoke returning an exact integer ?

No.  "invoke" raises an exception if the child's exit code != 0.
Otherwise you get #t.

"system*" returns the exit code - might want to use that instead.
(just replace the text "invoke" by "system*")

> Maybe tryton-admin insn't seeing the env var and promtping to ask for its
> interaction ?
> 
> 
> How am I supposed to use setenv, exactly ?

Looks fine to me.

Just exit with (primitive-exit 0) in the end :)

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

* Re: weird errors
  2018-01-22 10:59           ` Danny Milosavljevic
@ 2018-01-22 12:42             ` Catonano
  2018-01-22 19:01               ` Danny Milosavljevic
  0 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-22 12:42 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-22 11:59 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> > isn't invoke returning an exact integer ?
>
> No.  "invoke" raises an exception if the child's exit code != 0.
> Otherwise you get #t.
>
> "system*" returns the exit code - might want to use that instead.
> (just replace the text "invoke" by "system*")
>
> > Maybe tryton-admin insn't seeing the env var and promtping to ask for its
> > interaction ?
> >
> >
> > How am I supposed to use setenv, exactly ?
>
> Looks fine to me.
>
> Just exit with (primitive-exit 0) in the end :)
>


Thank you Danny

The virtual machine boots successfully now

The trytond service is running in it

But the postgres role doesn't exist so the connection to postgres fails and
trytond attempts to connect to a sqlite database that doesn't exist

I'm not gonna keep working on this
It's not fun anymore

Should anyone want to observe the relic, it's here
https://gitlab.com/humanitiesNerd/failed_tryton_service

Thank you all people

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

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

* Re: weird errors
  2018-01-22 12:42             ` Catonano
@ 2018-01-22 19:01               ` Danny Milosavljevic
  2018-01-22 20:37                 ` Catonano
  0 siblings, 1 reply; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-22 19:01 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

Hi Catonano,

On Mon, 22 Jan 2018 13:42:26 +0100
Catonano <catonano@gmail.com> wrote:

> The virtual machine boots successfully now
> 
> The trytond service is running in it

Cool!

> But the postgres role doesn't exist so the connection to postgres fails and

Your db-creation already invokes createdb.  Try passing -O trytond,
maybe everything works then.

So in gnu/services/trytond.scm:

               (createdb-script (string-append #$postgresql "/bin/createdb")
                                "-O" "trytond"
                                #$database-name)

And later

  (apply invoke createdb-script)

> trytond attempts to connect to a sqlite database that doesn't exist

Probably a fallback, hmm.

> I'm not gonna keep working on this
> It's not fun anymore

Too bad.  I can understand it though.

For the part I had in the frustration by shitty VM error reporting, I'm sorry.

I've now merged the tryton packages from your repository into guix master.

(I've applied small stylistic fixes)

Since it's snowing outside and cold as hell, I'll also try to get a minimal
trytond service to work, starting from your work.

I have no idea what the program is supposed to do - so I'll stop when it starts
up.

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

* Re: weird errors
  2018-01-22 19:01               ` Danny Milosavljevic
@ 2018-01-22 20:37                 ` Catonano
  2018-01-23 22:43                   ` weird errors; shepherd Danny Milosavljevic
  0 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-22 20:37 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-22 20:01 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> Hi Catonano,
>
> On Mon, 22 Jan 2018 13:42:26 +0100
> Catonano <catonano@gmail.com> wrote:
>
> > The virtual machine boots successfully now
> >
> > The trytond service is running in it
>
> Cool!
>
> > But the postgres role doesn't exist so the connection to postgres fails
> and
>
> Your db-creation already invokes createdb.  Try passing -O trytond,
> maybe everything works then.
>
> So in gnu/services/trytond.scm:
>
>                (createdb-script (string-append #$postgresql
> "/bin/createdb")
>                                 "-O" "trytond"
>                                 #$database-name)
>
> And later
>
>   (apply invoke createdb-script)
>
> > trytond attempts to connect to a sqlite database that doesn't exist
>
> Probably a fallback, hmm.
>
> > I'm not gonna keep working on this
> > It's not fun anymore
>
> Too bad.  I can understand it though.
>
> For the part I had in the frustration by shitty VM error reporting, I'm
> sorry.
>
> I've now merged the tryton packages from your repository into guix master.
>
> (I've applied small stylistic fixes)
>
> Since it's snowing outside and cold as hell, I'll also try to get a minimal
> trytond service to work, starting from your work.
>
> I have no idea what the program is supposed to do - so I'll stop when it
> starts
> up.
>

You are way too kind 😃
Thank you !

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

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

* Re: weird errors; shepherd
  2018-01-22 20:37                 ` Catonano
@ 2018-01-23 22:43                   ` Danny Milosavljevic
  2018-01-24 12:34                     ` Catonano
                                       ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-23 22:43 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

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

The attached file is gnu/services/trytond.scm which successfully runs trytond.

Everyone:

After I've tried writing some shepherd service I have to say that writing a
shepherd "start" action is way too difficult.

Even now, I've not gotten to work:

* Having the activation depend on any other service.
* Logging errors from start-trytond to stderr or stdout.
  As far as I understand make-forkexec-constructor takes special care not
  to kill stderr.  As long there's no log-file specified it should leave stdout
  and stderr alone.  So where does the text go?

I've had other problems like:

* root's shepherd hangs sometimes and herd can't connect to it anymore.
* When I use (error "XXX") in a shepherd start block, booting the system
drops me into a REPL and doesn't let me out again (instead of just failing
this one service and continuing to boot).

Sigh...

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: trytond.scm --]
[-- Type: text/x-scheme, Size: 8273 bytes --]

;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Adriano Peluso <catonano@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu services trytond)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module (gnu system shadow)
  #:use-module (gnu packages admin)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages tryton)
  #:use-module (guix modules)
  #:use-module (guix records)
  #:use-module (guix build utils)
  #:use-module (guix gexp)
  #:use-module (ice-9 match)
  #:export (trytond-service-type
            <trytond-configuration>

            trytond-configuration
            trytond-configuration?

            trytond-configuration-trytond
            trytond-configuration-postgresql
            trytond-configuration-config-file
            trytond-configuration-data-directory
            trytond-configuration-postgres-role
            trytond-configuration-database-name))

;;; Commentary:
;;;
;;; Trytond based services. Mainly Trytond and GNUHealth for now
;;;
;;; Code:

(define %default-trytond-path
  "/var/lib/trytond")

(define %default-postgres-role
  "tryton")

(define %default-database-name
  "tryton")

(define %default-trytond-config
  (mixed-text-file "trytond.conf"
                   "[database]\n"
                   ;; XXX which postgres user shold we use here ?
                   (string-append "uri = postgresql://"
                                  %default-postgres-role
                                  "@127.0.0.1\n")
                   "path = " %default-trytond-path))

(define %default-passfile
  (mixed-text-file "passfile"
                   "tryton"))

(define-record-type* <trytond-configuration>
  trytond-configuration make-trytond-configuration
  trytond-configuration?
  (trytond     trytond-configuration-trytond ;<package>
               (default python-trytond))
  (postgresql  trytond-configuration-postgresql
               (default postgresql))
  (locale         trytond-configuration-locale
                  (default "en_US.utf8"))
  (config-file    trytond-configuration-file
                  (default %default-trytond-config))
  (passfile      trytond-passfile
                 (default %default-passfile))
  ;; Default: The db folder under the user home directory running trytond.
  (data-directory trytond-configuration-data-directory
                  (default %default-trytond-path))
  (postgres-role trytond-configuration-postgres-role
                 (default %default-postgres-role))
  (database-name trytond-configuration-database-name
                 (default %default-database-name)))

(define %trytond-accounts
  (list (user-group (name "trytond") (system? #t))
        (user-account
         (name "trytond")
         (group "trytond")
         (system? #t)
         (comment "Trytond server user")
         (home-directory "/var/empty")
         (shell (file-append shadow "/sbin/nologin")))))

(define (setup-role.sql role)
  (plain-file "setup-role.sql" (format #f "
DO
$body$
BEGIN
   IF NOT EXISTS (
      SELECT *
      FROM   pg_catalog.pg_user
      WHERE  usename = '~A') THEN
      CREATE ROLE \"~A\" LOGIN;
   END IF;
END
$body$;
" role role)))

(define (setup-database.sql database role)
  (plain-file "setup-database.sql"
   (format #f "CREATE DATABASE \"~A\" WITH OWNER = \"~A\";" database role)))

(define (trytond-activation config)
  (let* ((postgresql (trytond-configuration-postgresql config))
         (role (trytond-configuration-postgres-role config))
         (database (trytond-configuration-database-name config))
         (data-directory (trytond-configuration-data-directory config)))
    #~(begin
        (let ((trytond-user (getpwnam "trytond")))
           (mkdir-p #$data-directory)
           (chown #$data-directory
                  (passwd:uid trytond-user)
                  (passwd:gid trytond-user))))))

(define trytond-shepherd-service
  (match-lambda
   (($ <trytond-configuration> trytond
                               postgresql
                               locale
                               config-file
                               passfile
                               data-directory
                               postgres-role
                               database-name)
    (let* ((setup-role.sql (setup-role.sql postgres-role))
           (setup-database.sql (setup-database.sql database-name postgres-role))
           (start-script
            (program-file "start-trytond"
                          (with-imported-modules '((guix build utils))
                            #~(begin
                                (use-modules (guix build utils))
                                ;; Set up postgres database.
                                (let ((psql (string-append #$postgresql
                                                           "/bin/psql")))
                                  (invoke psql "-U" "postgres"
                                               "-f" #$setup-role.sql)
                                  (system* psql "-U" "postgres"
                                                "-f" #$setup-database.sql))
                                ;; Set up tables.
                                (let ((trytond-admin (string-append #$trytond
                                                                    "/bin/trytond-admin"))
                                      (args (append (list "-c" #$config-file
                                                          "-d" #$database-name
                                                          "--all")
                                                    (if #$locale
                                                        (list "-l" #$locale)
                                                        '()))))
                                  (setenv "TRYTONPASSFILE" #$passfile)
                                  (apply invoke trytond-admin args))
                                ;; Start daemon.
                                (execl (string-append #$trytond
                                                      "/bin/trytond")
                                       (string-append #$trytond
                                                      "/bin/trytond")
                                       "-c" #$config-file))))))
      (list (shepherd-service
                (provision '(trytond))
                (documentation "Trytond daemon.")
                (requirement '(user-processes loopback postgres))
                ; TODO #:pid-file
                (start #~(make-forkexec-constructor #$start-script
                                                    #:log-file "/tmp/QQ"
                                                    #:user "trytond"
                                                    #:group "trytond"))
                (stop #~(make-kill-destructor))))))))

(define trytond-service-type
  (service-type (name 'trytond)
                (extensions
                 (list (service-extension shepherd-root-service-type
                                          trytond-shepherd-service)
                       (service-extension activation-service-type
                                          trytond-activation)
                       (service-extension account-service-type
                                          (const %trytond-accounts))))
                (default-value (trytond-configuration))))

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

* Re: weird errors; shepherd
  2018-01-23 22:43                   ` weird errors; shepherd Danny Milosavljevic
@ 2018-01-24 12:34                     ` Catonano
  2018-01-24 12:46                       ` Danny Milosavljevic
  2018-01-24 14:47                     ` Ludovic Courtès
  2018-01-29  7:24                     ` Catonano
  2 siblings, 1 reply; 24+ messages in thread
From: Catonano @ 2018-01-24 12:34 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-23 23:43 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> The attached file is gnu/services/trytond.scm which successfully runs
> trytond.
>

With "successfully"" you mean that it connects to postgres and it shhows te
proper screens in the client ?

Sometimes the trytond daemon does run but it fails to connect to postgres

I'll check this out. Only, not today, neither tomorrow probably. But I
will, sooner or later

Thanks !



> Everyone:
>
> After I've tried writing some shepherd service I have to say that writing a
> shepherd "start" action is way too difficult.
>
> Even now, I've not gotten to work:
>
> * Having the activation depend on any other service.
> * Logging errors from start-trytond to stderr or stdout.
>   As far as I understand make-forkexec-constructor takes special care not
>   to kill stderr.  As long there's no log-file specified it should leave
> stdout
>   and stderr alone.  So where does the text go?
>
> I've had other problems like:
>
> * root's shepherd hangs sometimes and herd can't connect to it anymore.
> * When I use (error "XXX") in a shepherd start block, booting the system
> drops me into a REPL and doesn't let me out again (instead of just failing
> this one service and continuing to boot).
>
> Sigh...
>

I'm relieved that someone else finds this difficult

Thans again !

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

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

* Re: weird errors; shepherd
  2018-01-24 12:34                     ` Catonano
@ 2018-01-24 12:46                       ` Danny Milosavljevic
  2018-01-24 12:52                         ` Catonano
  0 siblings, 1 reply; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-24 12:46 UTC (permalink / raw)
  To: Catonano; +Cc: guix-devel

Hi Catonano,

> With "successfully"" you mean that it connects to postgres and it shhows te
> proper screens in the client ?

Yes.

I invoked "tryton" which pops up a GUI.  Then I edited the profiles there,
adding "localhost" and then I logged into the client GUI via login "admin"
and password "tryton".  It asked me to configure "modules".

Then, it showed a window with two modules, "ir" and "res", in it.

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

* Re: weird errors; shepherd
  2018-01-24 12:46                       ` Danny Milosavljevic
@ 2018-01-24 12:52                         ` Catonano
  0 siblings, 0 replies; 24+ messages in thread
From: Catonano @ 2018-01-24 12:52 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-24 13:46 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> Hi Catonano,
>
> > With "successfully"" you mean that it connects to postgres and it shhows
> te
> > proper screens in the client ?
>
> Yes.
>
> I invoked "tryton" which pops up a GUI.  Then I edited the profiles there,
> adding "localhost" and then I logged into the client GUI via login "admin"
> and password "tryton".  It asked me to configure "modules".
>
> Then, it showed a window with two modules, "ir" and "res", in it.
>


Wonderful ! It's working !!

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

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

* Re: weird errors; shepherd
  2018-01-23 22:43                   ` weird errors; shepherd Danny Milosavljevic
  2018-01-24 12:34                     ` Catonano
@ 2018-01-24 14:47                     ` Ludovic Courtès
  2018-01-24 19:36                       ` Danny Milosavljevic
  2018-01-29  7:24                     ` Catonano
  2 siblings, 1 reply; 24+ messages in thread
From: Ludovic Courtès @ 2018-01-24 14:47 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hello,

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> Everyone:
>
> After I've tried writing some shepherd service I have to say that writing a
> shepherd "start" action is way too difficult.
>
> Even now, I've not gotten to work:
>
> * Having the activation depend on any other service.

I’m not sure what you mean.  There’s no notion of dependencies among
activation snippets, let alone between activation snippets and service
starts (when booting, activation snippets run *before* shepherd is
started).  Perhaps there’s a misunderstanding here?

> * Logging errors from start-trytond to stderr or stdout.

You can write:

  (make-forkexec-constructor
    …
    #:log-file "/var/log/something.log")

which will redirect stdout/stderr to that file (info "(shepherd) Service
De- and Constructors").

Now, I think stdout/stderr should be captured by default, and perhaps
made available with a journalctl-like interface (Leo proposed a GSoC
project along these lines.)

>   As far as I understand make-forkexec-constructor takes special care not
>   to kill stderr.  As long there's no log-file specified it should leave stdout
>   and stderr alone.  So where does the text go?

To PID 1’s stdout/stderr, i.e., /dev/console (which sucks).

> I've had other problems like:
>
> * root's shepherd hangs sometimes and herd can't connect to it anymore.

That’s a serious bug.  Can you reproduce it?

> * When I use (error "XXX") in a shepherd start block, booting the system
> drops me into a REPL and doesn't let me out again (instead of just failing
> this one service and continuing to boot).

That’s inconvenient but “expected” in the sense that the ‘start’ method
is called right from shepherd.conf.  Perhaps we should call ‘start’ at a
later stage.

As you write, the Shepherd leaves quite a bit to be desired.  The good
news is that it’s a very small code base, so I’d encourage people to
look at it when they find something they’re dissatisfied with, and see
how it can be improved.

Thanks,
Ludo’.

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

* Re: weird errors; shepherd
  2018-01-24 14:47                     ` Ludovic Courtès
@ 2018-01-24 19:36                       ` Danny Milosavljevic
  2018-01-24 22:28                         ` Ludovic Courtès
  0 siblings, 1 reply; 24+ messages in thread
From: Danny Milosavljevic @ 2018-01-24 19:36 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Hi Ludo,

On Wed, 24 Jan 2018 15:47:16 +0100
ludo@gnu.org (Ludovic Courtès) wrote:

> I’m not sure what you mean.  There’s no notion of dependencies among
> activation snippets, let alone between activation snippets and service
> starts (when booting, activation snippets run *before* shepherd is
> started).  Perhaps there’s a misunderstanding here?

Yeah, if it's intended that way, that's fine.  So it's like /etc/rc.local
and it just runs the snippets in any order?

Now, I just do both the trytond DB-upgrading and the service starting at the
"start" action because postgres isn't running yet otherwise.

> >   As far as I understand make-forkexec-constructor takes special care not
> >   to kill stderr.  As long there's no log-file specified it should leave stdout
> >   and stderr alone.  So where does the text go?  
> 
> To PID 1’s stdout/stderr, i.e., /dev/console (which sucks).

Really?  I don't see it in the marionette os output (for make check-system) - 
I just tried it again, stdout is nowhere to be seen with check-system.
(I just put a program-file as shepherd start action and called "display" there)

Also tried
                    (marionette-eval '(current-output-port
                                                 (open-file "/dev/console" "w0"))
                                                                            marionette)
                    (marionette-eval '(current-error-port
                                                 (open-file "/dev/console" "w0"))
                                                                            marionette)

but that didn't change anything either...

> > I've had other problems like:
> >
> > * root's shepherd hangs sometimes and herd can't connect to it anymore.  
> 
> That’s a serious bug.  Can you reproduce it?

I'll try.

> That’s inconvenient but “expected” in the sense that the ‘start’ method
> is called right from shepherd.conf.  Perhaps we should call ‘start’ at a
> later stage.

Well, as it is it makes the system very brittle.

Once one service does that... oops.

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

* Re: weird errors; shepherd
  2018-01-24 19:36                       ` Danny Milosavljevic
@ 2018-01-24 22:28                         ` Ludovic Courtès
  0 siblings, 0 replies; 24+ messages in thread
From: Ludovic Courtès @ 2018-01-24 22:28 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> On Wed, 24 Jan 2018 15:47:16 +0100
> ludo@gnu.org (Ludovic Courtès) wrote:
>
>> I’m not sure what you mean.  There’s no notion of dependencies among
>> activation snippets, let alone between activation snippets and service
>> starts (when booting, activation snippets run *before* shepherd is
>> started).  Perhaps there’s a misunderstanding here?
>
> Yeah, if it's intended that way, that's fine.  So it's like /etc/rc.local
> and it just runs the snippets in any order?

Yes.

> Now, I just do both the trytond DB-upgrading and the service starting at the
> "start" action because postgres isn't running yet otherwise.

That’s the right thing to do if you need ordering.

>> >   As far as I understand make-forkexec-constructor takes special care not
>> >   to kill stderr.  As long there's no log-file specified it should leave stdout
>> >   and stderr alone.  So where does the text go?  
>> 
>> To PID 1’s stdout/stderr, i.e., /dev/console (which sucks).
>
> Really?  I don't see it in the marionette os output (for make check-system) - 

When running “make check-system”, you see the console (which is
redirected to the host’s qemu stdout), like this:

--8<---------------cut here---------------start------------->8---
$ make check-system TESTS=basic

[...]

[    0.511024] Freeing unused kernel memory: 308K
GC Warning: pthread_getattr_np or pthread_attr_getstack failed for main thread
GC Warning: Couldn't read /proc/stat
Welcome, this is GNU's early boot Guile.
Use '--repl' for an initrd REPL.

loading kernel modules...

[...]

adding group 'input'...
adding group 'video'...
adding group 'audio'...
adding group 'netdev'...
adding group 'lp'...
adding group 'disk'...
adding group 'floppy'...

[...]

Service udev has been started.
Service urandom-seed has been started.
Service user-processes has been started.
Service host-name has been started.
Service user-homes could not be started.
nscd: 279 monitoring file `/etc/hosts` (1)
nscd: 279 monitoring directory `/etc` (2)
nscd: 279 monitoring file `/etc/resolv.conf` (3)
nscd: 279 monitoring directory `/etc` (2)
nscd: 279 monitoring file `/etc/services` (4)
nscd: 279 monitoring directory `/etc` (2)
Service nscd has been started.

[...]

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
+ info --version
info (GNU texinfo) 6.3

Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
shepherd: Service user-homes could not be started.
QEMU runs as PID 6
connected to QEMU's monitor
read QEMU monitor prompt
connected to guest REPL
%%%% Starting test basic  (Writing full log to "basic.log")
marionette is ready

;;; (services (user-processes loopback term-tty2 udev console-font-tty2 term-tty3 term-tty1 console-font-tty6 urandom-seed file-system-/dev/shm console-font-tty5 console-font-tty1 guix-daemon host-name file-system-/dev/pts user-file-systems root term-tty4 file-systems user-homes root-file-system nscd marionette syslogd term-tty6 term-tty5 console-font-tty4 console-font-tty3))
# of expected passes      19
@ build-succeeded /gnu/store/xab6i89lf15rab8ipy78rkj4218dzjvd-basic.drv -
TOTAL: 1
PASS: /gnu/store/hazdppnr6cd1dhqnbjhyj44yb6xcfpnf-basic
--8<---------------cut here---------------end--------------->8---

Here you see the output of ‘useradd’, shepherd itself, nscd, marionette,
etc.  All this is /dev/console.

> Also tried
>                     (marionette-eval '(current-output-port
>                                                  (open-file "/dev/console" "w0"))
>                                                                             marionette)
>                     (marionette-eval '(current-error-port
>                                                  (open-file "/dev/console" "w0"))
>                                                                             marionette)

This shouldn’t be necessary, but it would change the error port for the
marionette process itself.

>> That’s inconvenient but “expected” in the sense that the ‘start’ method
>> is called right from shepherd.conf.  Perhaps we should call ‘start’ at a
>> later stage.
>
> Well, as it is it makes the system very brittle.
>
> Once one service does that... oops.

Yeah, but then again we test services in a VM beforehand.  :-)
Also, using (error "xxx") is frowned upon because it raises an exception
that cannot usefully be handled.

Ludo’.

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

* Re: weird errors; shepherd
  2018-01-23 22:43                   ` weird errors; shepherd Danny Milosavljevic
  2018-01-24 12:34                     ` Catonano
  2018-01-24 14:47                     ` Ludovic Courtès
@ 2018-01-29  7:24                     ` Catonano
  2 siblings, 0 replies; 24+ messages in thread
From: Catonano @ 2018-01-29  7:24 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

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

2018-01-23 23:43 GMT+01:00 Danny Milosavljevic <dannym@scratchpost.org>:

> The attached file is gnu/services/trytond.scm which successfully runs
> trytond.
>

I run it and I confirm it works

I couldn't attemp at installing a couple of Tryton modules (on top of the
base ones) because in the vm the keyboard layout is messed up and I
couldn't use the command line properly (in the xfce terminal)

I tried to set it up with the xfce panel, but it's not so immediate, so I
gave up

I'd merge this patch anyway, I'd keep working on Tryton/GNUHealth fron the
next reconfigure onwards

Thanks

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

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

end of thread, other threads:[~2018-01-29  7:24 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-13 17:00 weird errors Catonano
2018-01-13 21:13 ` Ludovic Courtès
2018-01-14  7:21   ` Catonano
2018-01-14 10:43     ` Danny Milosavljevic
2018-01-14 10:57       ` Danny Milosavljevic
2018-01-14 11:00       ` Catonano
2018-01-14 16:38         ` Ricardo Wurmus
2018-01-14 20:35           ` Catonano
2018-01-14 16:45         ` Danny Milosavljevic
2018-01-14 20:33           ` Catonano
2018-01-15  5:43           ` Alex Vong
2018-01-22 10:52         ` Catonano
2018-01-22 10:59           ` Danny Milosavljevic
2018-01-22 12:42             ` Catonano
2018-01-22 19:01               ` Danny Milosavljevic
2018-01-22 20:37                 ` Catonano
2018-01-23 22:43                   ` weird errors; shepherd Danny Milosavljevic
2018-01-24 12:34                     ` Catonano
2018-01-24 12:46                       ` Danny Milosavljevic
2018-01-24 12:52                         ` Catonano
2018-01-24 14:47                     ` Ludovic Courtès
2018-01-24 19:36                       ` Danny Milosavljevic
2018-01-24 22:28                         ` Ludovic Courtès
2018-01-29  7:24                     ` Catonano

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).