* bug#63921: Activation snippets in reverse order, prevent boot
@ 2023-06-06 8:15 Ludovic Courtès
2023-06-06 9:58 ` Ludovic Courtès
2023-06-26 19:26 ` bug#63921: Patch proposed Felix Lechner via Bug reports for GNU Guix
0 siblings, 2 replies; 11+ messages in thread
From: Ludovic Courtès @ 2023-06-06 8:15 UTC (permalink / raw)
To: 63921
Booting a system reconfigured from
eed55a6544d5bda2245ec853e5fa4b28e1865bea fails with shepherd saying:
error: while opening socket '/var/run/shepherd/socket': Address already in use
The root cause appears to be that the ‘boot’ program has expressions
reversed:
--8<---------------cut here---------------start------------->8---
$ guix gc --references $(guix gc --derivers $(readlink -f /var/guix/profiles/system-236-link)) | grep boot
/gnu/store/21ldhyrpji6lkkdxi4lgr5k9l5fr2b7l-boot.drv
$ cat $(guix build /gnu/store/21ldhyrpji6lkkdxi4lgr5k9l5fr2b7l-boot.drv)
(eval-when (expand load eval) (let ((extensions (quote ())) (prepend (lambda (items lst) (let loop ((items items) (lst lst)) (if (null? items) lst (loop (cdr items) (cons (car items) (delete (car items) lst)))))))) (set! %load-path (prepend (cons "/gnu/store/pj751v3199vmv6i6sf0szp185ryzcfdg-module-import" (map (lambda (extension) (string-append extension "/share/guile/site/" (effective-version))) extensions)) %load-path)) (set! %load-compiled-path (prepend (cons "/gnu/store/pql80c2hy38bb60c68sng74s4xa35vwk-module-import-compiled" (map (lambda (extension) (string-append extension "/lib/guile/" (effective-version) "/site-ccache")) extensions)) %load-compiled-path))))(begin (begin (false-if-exception (delete-file "/run/booted-system")) (symlink (canonicalize-path "/run/current-system") "/run/booted-system") (let loop ((fd 3)) (when (< fd 1024) (false-if-exception (let ((flags (fcntl fd F_GETFD))) (when (zero? (logand flags FD_CLOEXEC)) (fcntl fd F_SETFD (logior FD_CLOEXEC flags))))) (loop (+ fd 1)))) (execl "/gnu/store/wj5i6x3xgai7p8whwqybxwqdjdbmbzha-shepherd-0.10.99-git/bin/shepherd" "shepherd" "--config" "/gnu/store/gnjghlc3n5qbala5jfdslgfi0n3vy8v7-shepherd.conf")) (primitive-load "/gnu/store/riabgidmf6fh76klc1yam7k9j1478vvw-activate.scm") (begin (use-modules (guix build utils)) (letrec-syntax ((fail-safe (syntax-rules () ((_ exp rest ...) (begin (catch (quote system-error) (lambda () exp) (const #f)) (fail-safe rest ...))) ((_) #t)))) (fail-safe (delete-file "/etc/group.lock") (delete-file "/etc/passwd.lock") (delete-file "/etc/.pwd.lock") (setenv "GUIX_LOCPATH" "/gnu/store/5fmqijrs5f7vx8mc2q2pmq26yvhb74sm-glibc-utf8-locales-2.35/lib/locale") (setlocale LC_CTYPE "en_US.utf8") (delete-file-recursively "/tmp") (delete-file-recursively "/var/run") (mkdir "/tmp") (chmod "/tmp" 1023) (mkdir "/var/run") (chmod "/var/run" 493) (delete-file-recursively "/run/udev/watch.old")))))
--8<---------------cut here---------------end--------------->8---
Namely, (execl "…/bin/shepherd") comes before the cleanup expressions,
which is why /var/run/shepherd/socket is still around when we boot.
Ludo’.
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-06 8:15 bug#63921: Activation snippets in reverse order, prevent boot Ludovic Courtès
@ 2023-06-06 9:58 ` Ludovic Courtès
2023-06-07 8:57 ` pelzflorian (Florian Pelz)
2023-06-26 19:26 ` bug#63921: Patch proposed Felix Lechner via Bug reports for GNU Guix
1 sibling, 1 reply; 11+ messages in thread
From: Ludovic Courtès @ 2023-06-06 9:58 UTC (permalink / raw)
To: 63921; +Cc: Brian Cully
Ludovic Courtès <ludo@gnu.org> skribis:
> Booting a system reconfigured from
> eed55a6544d5bda2245ec853e5fa4b28e1865bea fails with shepherd saying:
>
> error: while opening socket '/var/run/shepherd/socket': Address already in use
>
> The root cause appears to be that the ‘boot’ program has expressions
> reversed:
>
> $ guix gc --references $(guix gc --derivers $(readlink -f /var/guix/profiles/system-236-link)) | grep boot
> /gnu/store/21ldhyrpji6lkkdxi4lgr5k9l5fr2b7l-boot.drv
> $ cat $(guix build /gnu/store/21ldhyrpji6lkkdxi4lgr5k9l5fr2b7l-boot.drv)
> (eval-when (expand load eval) (let ((extensions (quote ())) (prepend (lambda (items lst) (let loop ((items items) (lst lst)) (if (null? items) lst (loop (cdr items) (cons (car items) (delete (car items) lst)))))))) (set! %load-path (prepend (cons "/gnu/store/pj751v3199vmv6i6sf0szp185ryzcfdg-module-import" (map (lambda (extension) (string-append extension "/share/guile/site/" (effective-version))) extensions)) %load-path)) (set! %load-compiled-path (prepend (cons "/gnu/store/pql80c2hy38bb60c68sng74s4xa35vwk-module-import-compiled" (map (lambda (extension) (string-append extension "/lib/guile/" (effective-version) "/site-ccache")) extensions)) %load-compiled-path))))(begin (begin (false-if-exception (delete-file "/run/booted-system")) (symlink (canonicalize-path "/run/current-system") "/run/booted-system") (let loop ((fd 3)) (when (< fd 1024) (false-if-exception (let ((flags (fcntl fd F_GETFD))) (when (zero? (logand flags FD_CLOEXEC)) (fcntl fd F_SETFD (logior FD_CLOEXEC flags))))) (loop (+ fd 1)))) (execl "/gnu/store/wj5i6x3xgai7p8whwqybxwqdjdbmbzha-shepherd-0.10.99-git/bin/shepherd" "shepherd" "--config" "/gnu/store/gnjghlc3n5qbala5jfdslgfi0n3vy8v7-shepherd.conf")) (primitive-load "/gnu/store/riabgidmf6fh76klc1yam7k9j1478vvw-activate.scm") (begin (use-modules (guix build utils)) (letrec-syntax ((fail-safe (syntax-rules () ((_ exp rest ...) (begin (catch (quote system-error) (lambda () exp) (const #f)) (fail-safe rest ...))) ((_) #t)))) (fail-safe (delete-file "/etc/group.lock") (delete-file "/etc/passwd.lock") (delete-file "/etc/.pwd.lock") (setenv "GUIX_LOCPATH" "/gnu/store/5fmqijrs5f7vx8mc2q2pmq26yvhb74sm-glibc-utf8-locales-2.35/lib/locale") (setlocale LC_CTYPE "en_US.utf8") (delete-file-recursively "/tmp") (delete-file-recursively "/var/run") (mkdir "/tmp") (chmod "/tmp" 1023) (mkdir "/var/run") (chmod "/var/run" 493) (delete-file-recursively "/run/udev/watch.old")))))
>
> Namely, (execl "…/bin/shepherd") comes before the cleanup expressions,
> which is why /var/run/shepherd/socket is still around when we boot.
Fixed in 181951207339508789b28ba7cb914f983319920f.
The regression came from dbbc7e946131ba257728f1d05b96c4339b7ee88b, which
led ‘modify-services’ to change the order of services (something I had
completely overlooked while reviewing, apologies!). I ended up
rewriting ‘modify-services’. Good news is we now have tests for this.
Ludo’.
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-06 9:58 ` Ludovic Courtès
@ 2023-06-07 8:57 ` pelzflorian (Florian Pelz)
2023-06-07 9:19 ` pelzflorian (Florian Pelz)
2023-06-07 17:44 ` Jelle Licht
0 siblings, 2 replies; 11+ messages in thread
From: pelzflorian (Florian Pelz) @ 2023-06-07 8:57 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 63921, Brian Cully
Hi Ludo, hi all.
Ludovic Courtès <ludo@gnu.org> writes:
> I ended up
> rewriting ‘modify-services’. Good news is we now have tests for this.
In the rewrite, you wrote:
> +(define (apply-clauses clauses services)
> + "Apply CLAUSES, an alist as returned by 'clause-alist', to SERVICES, a list
> +of services. Use each clause at most once; raise an error if a clause was not
> +used."
Using clauses at most once broke the greetd example in the manual:
> (append
> (modify-services %base-services
> ;; greetd-service-type provides "greetd" PAM service
> (delete login-service-type)
> ;; and can be used in place of mingetty-service-type
> (delete mingetty-service-type))
> (list
> (service greetd-service-type
But there are multiple instances of mingetty-service-type in
%base-services. Now an error is raised on reconfigure because there are
two term-tty2 services.
I’m not sure, isn’t it more explicit if we keep your change of deleting
at most once, but change the greetd example?
The following works for me now …
(modify-services %base-services
(delete login-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type))
Regards,
Florian
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-07 8:57 ` pelzflorian (Florian Pelz)
@ 2023-06-07 9:19 ` pelzflorian (Florian Pelz)
2023-06-07 9:30 ` pelzflorian (Florian Pelz)
2023-06-07 17:44 ` Jelle Licht
1 sibling, 1 reply; 11+ messages in thread
From: pelzflorian (Florian Pelz) @ 2023-06-07 9:19 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 63921, Brian Cully
"pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> writes:
> Using clauses at most once broke the greetd example in the manual:
Jelle Licht already reported this on IRC, see the end of
<http://logs.guix.gnu.org/guix/2023-06-06.log>
Regards,
Florian
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-07 8:57 ` pelzflorian (Florian Pelz)
2023-06-07 9:19 ` pelzflorian (Florian Pelz)
@ 2023-06-07 17:44 ` Jelle Licht
2023-06-07 22:02 ` Brian Cully via Bug reports for GNU Guix
1 sibling, 1 reply; 11+ messages in thread
From: Jelle Licht @ 2023-06-07 17:44 UTC (permalink / raw)
To: pelzflorian (Florian Pelz), Ludovic Courtès; +Cc: 63921, Brian Cully
"pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de> writes:
> Hi Ludo, hi all.
>
[snip]
> The following works for me now …
>
> (modify-services %base-services
> (delete login-service-type)
> (delete mingetty-service-type)
> (delete mingetty-service-type)
> (delete mingetty-service-type)
> (delete mingetty-service-type)
> (delete mingetty-service-type)
> (delete mingetty-service-type))
Thanks for the workaround! Is this "thou shall delete N times, and
_exactly_ N times" effect of the recently pushed change functioning as
intended? It imho seems pretty brittle and verbose compared to how
things were before.
- Jelle
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-07 17:44 ` Jelle Licht
@ 2023-06-07 22:02 ` Brian Cully via Bug reports for GNU Guix
2023-06-07 23:07 ` pelzflorian (Florian Pelz)
0 siblings, 1 reply; 11+ messages in thread
From: Brian Cully via Bug reports for GNU Guix @ 2023-06-07 22:02 UTC (permalink / raw)
To: Jelle Licht; +Cc: Ludovic Courtès, 63921, pelzflorian (Florian Pelz)
Jelle Licht <jlicht@fsfe.org> writes:
> Thanks for the workaround! Is this "thou shall delete N times,
> and
> _exactly_ N times" effect of the recently pushed change
> functioning as
> intended? It imho seems pretty brittle and verbose compared to
> how
> things were before.
We could add a ‘delete-all’ in addition to the existing ‘delete’
behavior. Alternately, we could change ‘delete’ back to deleting
everything and adding ‘delete-one’. Or have both ‘delete-all’ and
‘delete-one’ where ‘delete’ is a deprecated alias for ‘delete-all’
to add a path forward for older configs.
Of the three I'm most partial to the last, though I love none of
them. I keep thinking the right solution is to have a delete that
can match with a predicate, but then why not just use ‘filter’ or
‘remove’?
-bjc
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Activation snippets in reverse order, prevent boot
2023-06-07 22:02 ` Brian Cully via Bug reports for GNU Guix
@ 2023-06-07 23:07 ` pelzflorian (Florian Pelz)
2023-06-17 13:59 ` pelzflorian (Florian Pelz)
0 siblings, 1 reply; 11+ messages in thread
From: pelzflorian (Florian Pelz) @ 2023-06-07 23:07 UTC (permalink / raw)
To: 63921; +Cc: Ludovic Courtès, Jelle Licht, Brian Cully
Jelle is right, multiple (delete mingetty-service-type) is not useful.
With more thought, what I imagined as more explicit is probably more
like (delete "term-tty2") than (delete mingetty-service-type). Also I
wouldn’t actually need it.
And as Brian says, just use filter. modify-services need not do more
than what is already documented.
I would be happy if someone else would undo the change to “delete at
most once”.
Regards,
Florian
^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#63921: Patch proposed
2023-06-06 8:15 bug#63921: Activation snippets in reverse order, prevent boot Ludovic Courtès
2023-06-06 9:58 ` Ludovic Courtès
@ 2023-06-26 19:26 ` Felix Lechner via Bug reports for GNU Guix
2023-09-01 11:43 ` bug#63921: Activation snippets in reverse order, prevent boot Maxim Cournoyer
1 sibling, 1 reply; 11+ messages in thread
From: Felix Lechner via Bug reports for GNU Guix @ 2023-06-26 19:26 UTC (permalink / raw)
To: 63921
Hi,
A patch to resolve this issue was proposed at the other bug
https://issues.guix.gnu.org/64106#5
Kind regards
Felix
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-09-01 11:45 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-06 8:15 bug#63921: Activation snippets in reverse order, prevent boot Ludovic Courtès
2023-06-06 9:58 ` Ludovic Courtès
2023-06-07 8:57 ` pelzflorian (Florian Pelz)
2023-06-07 9:19 ` pelzflorian (Florian Pelz)
2023-06-07 9:30 ` pelzflorian (Florian Pelz)
2023-06-07 17:44 ` Jelle Licht
2023-06-07 22:02 ` Brian Cully via Bug reports for GNU Guix
2023-06-07 23:07 ` pelzflorian (Florian Pelz)
2023-06-17 13:59 ` pelzflorian (Florian Pelz)
2023-06-26 19:26 ` bug#63921: Patch proposed Felix Lechner via Bug reports for GNU Guix
2023-09-01 11:43 ` bug#63921: Activation snippets in reverse order, prevent boot Maxim Cournoyer
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.