diff options
| author | Carlo Zancanaro <carlo@zancanaro.id.au> | 2025-09-23 15:34:55 +1000 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2025-11-13 21:55:42 +0100 |
| commit | 0f96ceb58fd886c75f607cf6c540ae2ae361b70e (patch) | |
| tree | 9e3d1622915f199ebeb689b38bdafbe9cc019e6b /gnu/system/linux-container.scm | |
| parent | ca7de586054f7f3899b66fc8ba59d0bf6ab5b7db (diff) | |
gnu: Add --pid-file option to "guix system container" scripts.
* gnu/system/linux-container.scm (container-script): Accept pid-file command
line option to write out the container's process ID.
* doc/guix.texi (Invoking guix system): Document new option.
Change-Id: I93e8a99b39c1dd831f116104bf92c723d96c9965
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/system/linux-container.scm')
| -rw-r--r-- | gnu/system/linux-container.scm | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm index 9bcdf24a7e0..87a2100fcc4 100644 --- a/gnu/system/linux-container.scm +++ b/gnu/system/linux-container.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2023 Pierre Langlois <pierre.langlois@gmx.com> ;;; Copyright © 2024 Leo Nikkilä <hello@lnikki.la> ;;; Copyright © 2024 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2025 Carlo Zancanaro <carlo@zancanaro.id.au> ;;; ;;; This file is part of GNU Guix. ;;; @@ -247,6 +248,9 @@ Run the container with the given options.")) (display (G_ " --expose=SPEC expose host file system directory as read-only according to SPEC")) + (display (G_ " + --pid-file=FILE write the process ID of the container's PID 1 + process to FILE")) (newline) (display (G_ " -h, --help display this help and exit")) @@ -267,6 +271,11 @@ Run the container with the given options.")) (lambda (opt name arg result) (alist-cons 'file-system-mapping (specification->file-system-mapping arg #f) + result))) + (option '("pid-file") #t #f + (lambda (opt name arg result) + (alist-cons 'pid-file + arg result))))) (define (parse-options args options) @@ -290,6 +299,10 @@ Run the container with the given options.")) (newline (guix-warning-port))) (let* ((opts (parse-options (cdr (command-line)) %options)) + (pid-files (filter-map (match-lambda + (('pid-file . filename) filename) + (_ #f)) + opts)) (mappings (filter-map (match-lambda (('file-system-mapping . mapping) mapping) (_ #f)) @@ -318,7 +331,13 @@ Run the container with the given options.")) (delq 'net %namespaces) %namespaces) #:writable-root? #t - #:process-spawned-hook explain))))) + #:process-spawned-hook (lambda (pid) + ;; Write out the PID to the requested files + (for-each (lambda (filename) + (call-with-output-file filename + (lambda (port) (write pid port)))) + pid-files) + (explain pid))))))) (gexp->script "run-container" script))) |
