From: "Ludovic Courtès" <ludo@gnu.org>
To: 30604@debbugs.gnu.org
Subject: [bug#30604] [PATCH v10 5/6] linux-initrd: Provide our own 'modprobe' program.
Date: Mon, 12 Mar 2018 13:39:17 +0100 [thread overview]
Message-ID: <20180312123918.22645-5-ludo@gnu.org> (raw)
In-Reply-To: <20180312123918.22645-1-ludo@gnu.org>
This allows us to load modules on demand when the kernel asks for them.
* gnu/system/linux-initrd.scm (modprobe-program): New variable.
(flat-linux-module-directory): Call 'write-module-alias-database'.
(raw-initrd): Pass #:modprobe to 'boot-system'.
(expression->initrd): Copy "closure" to $out/references.
* gnu/build/linux-boot.scm (boot-system): Add #:modprobe and honor it.
Call 'load-needed-linux-modules'.
* gnu/system/vm.scm (qemu-image): Add #:linux parameter. Define
'modprobe-wrapper' and pass it to 'activate-modprobe'. Pass #:linux to
'expression->derivation-in-linux-vm'.
Co-authored-by: Danny Milosavljevic <dannym@scratchpost.org>
---
gnu/build/linux-boot.scm | 13 +++++--
gnu/system/linux-initrd.scm | 86 +++++++++++++++++++++++++++++++++++++++++----
gnu/system/vm.scm | 21 +++++++++++
3 files changed, 111 insertions(+), 9 deletions(-)
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index df0b2b2d1..eedc4bb9d 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -435,6 +435,7 @@ bailing out.~%root contents: ~s~%" (scandir "/"))
\f
(define* (boot-system #:key
+ modprobe
(linux-modules '())
linux-module-directory
qemu-guest-networking?
@@ -449,6 +450,9 @@ QEMU-GUEST-NETWORKING? is true, calling PRE-MOUNT, mounting the file systems
specified in MOUNTS, and finally booting into the new root if any. The initrd
supports kernel command-line options '--load', '--root', and '--repl'.
+MODPROBE must be #f or a program to install as the modprobe program that the
+kernel will invoke when it needs to load modules.
+
Mount the root file system, specified by the '--root' command-line argument,
if any.
@@ -482,9 +486,14 @@ upon error."
(when (member "--repl" args)
(start-repl))
+ (when modprobe
+ ;; Tell the kernel to invoke MODPROBE.
+ (call-with-output-file "/proc/sys/kernel/modprobe"
+ (lambda (port)
+ (display modprobe port))))
+
(display "loading kernel modules...\n")
- (load-linux-modules-from-directory linux-modules
- linux-module-directory)
+ (load-needed-linux-modules linux-module-directory)
(when qemu-guest-networking?
(unless (configure-qemu-networking)
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 1eb5f5130..6b7883c2c 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -63,6 +63,75 @@
;;;
;;; Code:
+(define* (modprobe-program linux-module-directory #:key
+ (guile %guile-static-stripped))
+ "Return a minimal implementation of 'modprobe' for our initrd that looks up
+modules in LINUX-MODULE-DIRECTORY. This program will be invoked by the kernel
+when modules need to be loaded."
+ (define program
+ (with-imported-modules (source-module-closure
+ '((gnu build linux-modules)))
+ #~(begin
+ (use-modules (gnu build linux-modules)
+ (ice-9 match)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (srfi srfi-37))
+
+ (define option-spec
+ (list (option '(#\q "quiet") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'quiet? #t result)))))
+
+ (define options
+ ;; Alist of options and non-option arguments.
+ (args-fold (cdr (program-arguments))
+ option-spec
+ (lambda (opt name arg result)
+ (error "unrecognized option" name))
+ (lambda (arg result)
+ (alist-cons 'argument arg result))
+ '()))
+
+ (define aliases
+ ;; The list of aliases we are asked to load.
+ (filter-map (match-lambda
+ (('argument . alias) alias)
+ (_ #f))
+ options))
+
+ (define linux-module-directory
+ ;; The module directory. Note: We expect a flat directory here.
+ #$linux-module-directory)
+
+ (define %known-aliases
+ ;; The alias database.
+ (known-module-aliases
+ (string-append linux-module-directory "/modules.alias")))
+
+ (define (device-aliases->module-names aliases)
+ ;; Return the list of module names for the subset of ALIASES that
+ ;; appears in %KNOWN-ALIASES.
+ (append-map (cut matching-modules <> %known-aliases)
+ aliases))
+
+ (when (assq-ref options 'quiet?)
+ (current-error-port (%make-void-port "w"))
+ (current-output-port (%make-void-port "w")))
+
+ (let ((modules (device-aliases->module-names aliases)))
+ (call-with-output-file "/dev/kmsg"
+ (lambda (port)
+ (format port "modprobe[~a]: aliases ~s; modules ~s; args ~s~%"
+ (getpid) aliases modules (program-arguments))))
+
+ (when (< (length modules) (length aliases))
+ (error "alias resolution failed" aliases))
+
+ (load-linux-modules-from-directory (reverse modules)
+ linux-module-directory)))))
+
+ (program-file "modprobe" program #:guile guile))
(define* (expression->initrd exp
#:key
@@ -89,16 +158,16 @@ the derivations referenced by EXP are automatically copied to the initrd."
(mkdir #$output)
;; The guile used in the initrd must be present in the store, so
- ;; that module loading works once the root is switched.
+ ;; that module loading works once the root is switched. Similarly,
+ ;; the 'modprobe' program installed in /proc/sys/kernel/modprobe by
+ ;; the initrd, if any, must be present after switch root.
;;
;; To ensure that is the case, add an explicit reference to the
;; guile package used in the initrd to the output.
;;
- ;; This fixes guix-patches bug #28399, "Fix mysql activation, and
+ ;; This fixes <https://bugs.gnu.org/28399>, "Fix mysql activation, and
;; add a basic test".
- (call-with-output-file (string-append #$ output "/references")
- (lambda (port)
- (simple-format port "~A\n" #$guile)))
+ (copy-file "closure" (string-append #$output "/references"))
(build-initrd (string-append #$output "/initrd")
#:guile #$guile
@@ -153,7 +222,9 @@ MODULES and taken from LINUX."
(copy-file module
(string-append #$output "/"
(basename module))))
- (delete-duplicates modules)))))
+ (delete-duplicates modules))
+
+ (write-module-alias-database #$output))))
(computed-file "linux-modules" build-exp))
@@ -222,7 +293,8 @@ upon error."
(set-path-environment-variable "PATH" '("bin" "sbin")
'#$helper-packages)))
- (boot-system #:mounts
+ (boot-system #:modprobe #$(modprobe-program kodir)
+ #:mounts
(map spec->file-system
'#$(map file-system->spec file-systems))
#:pre-mount (lambda ()
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 4360adf15..ecb7ed506 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -249,6 +249,7 @@ INPUTS is a list of inputs (as for packages)."
(define* (qemu-image #:key
(name "qemu-image")
(system (%current-system))
+ (linux linux-libre)
(qemu qemu-minimal)
(disk-image-size 'guess)
(disk-image-format "qcow2")
@@ -275,18 +276,37 @@ INPUTS is a list of inputs (as for packages). When COPY-INPUTS? is true, copy
all of INPUTS into the image being built. When REGISTER-CLOSURES? is true,
register INPUTS in the store database of the image so that Guix can be used in
the image."
+ (define modprobe-wrapper
+ ;; Wrapper for the 'modprobe' command that knows where modules live.
+ (let ((modprobe (file-append kmod "/bin/modprobe")))
+ (program-file "modprobe"
+ #~(begin
+ (setenv "LINUX_MODULE_DIRECTORY"
+ #$(file-append linux "/lib/modules"))
+ (apply execl #$modprobe
+ (cons #$modprobe (cdr (command-line))))))))
+
+
(expression->derivation-in-linux-vm
name
(with-imported-modules (source-module-closure '((gnu build bootloader)
(gnu build vm)
+ (gnu build activation)
(guix build utils)))
#~(begin
(use-modules (gnu build bootloader)
(gnu build vm)
+ ((gnu build activation) #:select (activate-modprobe))
(guix build utils)
(srfi srfi-26)
(ice-9 binary-ports))
+ ;; We may need to lazy-load modules. The initrd installs a
+ ;; 'modprobe' that can only search through the modules available in
+ ;; the initrd, but here we want to be able to use all the modules of
+ ;; LINUX. Thus, install a real 'modprobe'.
+ (activate-modprobe #$modprobe-wrapper)
+
(let ((inputs
'#$(append (list qemu parted e2fsprogs dosfstools)
(map canonical-package
@@ -361,6 +381,7 @@ the image."
#$(bootloader-installer bootloader))
(reboot)))))
#:system system
+ #:linux linux
#:make-disk-image? #t
#:disk-image-size disk-image-size
#:disk-image-format disk-image-format
--
2.16.2
next prev parent reply other threads:[~2018-03-12 12:40 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-25 11:45 [bug#30604] [PATCH 0/4] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-02-25 11:48 ` [bug#30604] [PATCH 1/4] gnu: kmod: Split off kmod-minimal Danny Milosavljevic
2018-02-25 11:48 ` [bug#30604] [PATCH 2/4] gnu: Add kmod-minimal-static Danny Milosavljevic
2018-02-25 11:48 ` [bug#30604] [PATCH 3/4] linux-initrd: Add kmod Danny Milosavljevic
2018-02-25 14:05 ` Mathieu Othacehe
2018-02-25 15:07 ` Danny Milosavljevic
2018-02-26 11:51 ` Mathieu Othacehe
2018-02-25 11:48 ` [bug#30604] [PATCH 4/4] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-02-26 1:10 ` [bug#30604] [PATCH 1/4] gnu: kmod: Split off kmod-minimal Marius Bakke
2018-02-26 3:50 ` [bug#30604] [PATCH v2 0/6] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 1/6] gnu: kmod: Split off kmod-minimal Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 2/6] gnu: Add kmod-minimal-static Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 3/6] linux-initrd: Add kmod Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 4/6] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 5/6] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-02-26 3:50 ` [bug#30604] [PATCH v2 6/6] vm: Make the virtio-blk is uniquely identifyable in /sys Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 0/6] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 1/6] gnu: kmod: Split off kmod-minimal Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 2/6] gnu: Add kmod-minimal-static Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 3/6] linux-initrd: Add kmod Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 4/6] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-02-27 14:26 ` Ludovic Courtès
2018-02-26 4:06 ` [bug#30604] [PATCH v3 5/6] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-02-26 4:06 ` [bug#30604] [PATCH v3 6/6] vm: Make the virtio-blk is uniquely identifyable in /sys Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 0/7] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 1/7] gnu: kmod: Split off kmod-minimal Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 2/7] gnu: Add kmod-minimal-static Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 3/7] linux-initrd: Add kmod Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 4/7] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 5/7] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 6/7] vm: Make the virtio-blk uniquely identifyable in /sys Danny Milosavljevic
2018-02-27 11:26 ` [bug#30604] [PATCH v4 7/7] linux-boot: Call make-static-device-nodes much earlier Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 0/7] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 1/7] gnu: kmod: Split off kmod-minimal Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 2/7] gnu: Add kmod-minimal-static Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 3/7] linux-initrd: Add kmod Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 4/7] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 5/7] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 6/7] vm: Make the virtio-blk is uniquely identifyable in /sys Danny Milosavljevic
2018-02-27 15:50 ` [bug#30604] [PATCH v5 7/7] linux-boot: Call make-static-device-nodes much earlier Danny Milosavljevic
2018-03-02 14:16 ` [bug#30604] [PATCH v6 0/6] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 1/6] linux-modules: Add module-aliases Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 2/6] linux-modules: Add install-modules Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 3/6] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 4/6] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 5/6] vm: Make the virtio-blk uniquely identifiable in /sys Danny Milosavljevic
2018-03-02 14:17 ` [bug#30604] [PATCH v6 6/6] linux-initrd: Provide modprobe to the initrd Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 0/6] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 1/6] linux-modules: Add module-aliases Danny Milosavljevic
2018-03-02 16:47 ` Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 2/6] linux-modules: Add install-modules Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 3/6] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-03-02 16:47 ` Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 4/6] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 5/6] vm: Make the virtio-blk uniquely identifiable in /sys Danny Milosavljevic
2018-03-02 15:34 ` [bug#30604] [PATCH v7 6/6] linux-initrd: Provide modprobe to the initrd Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 0/7] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 1/7] linux-modules: Add module-aliases Danny Milosavljevic
2018-03-03 21:58 ` Ludovic Courtès
2018-03-03 13:55 ` [bug#30604] [PATCH v8 2/7] linux-modules: Add install-modules Danny Milosavljevic
2018-03-03 15:32 ` Danny Milosavljevic
2018-03-03 22:07 ` Ludovic Courtès
2018-03-04 12:45 ` Danny Milosavljevic
2018-03-04 12:53 ` Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 3/7] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-03-03 22:48 ` Ludovic Courtès
2018-03-04 1:06 ` Danny Milosavljevic
2018-03-04 1:54 ` Danny Milosavljevic
2018-03-04 12:34 ` Danny Milosavljevic
2018-03-09 22:06 ` Ludovic Courtès
2018-03-09 22:13 ` Danny Milosavljevic
2018-03-09 22:19 ` Danny Milosavljevic
2018-03-09 22:44 ` Danny Milosavljevic
2018-03-12 12:38 ` Ludovic Courtès
2018-03-12 12:39 ` [bug#30604] [PATCH v10 1/6] linux-modules: Add "modules.alias" writer Ludovic Courtès
2018-03-12 12:39 ` [bug#30604] [PATCH v10 2/6] linux-modules: Add 'load-linux-modules-from-directory' Ludovic Courtès
2018-03-12 19:26 ` Danny Milosavljevic
2018-03-12 12:39 ` [bug#30604] [PATCH v10 3/6] linux-modules: Add 'load-needed-linux-modules' Ludovic Courtès
2018-03-12 19:40 ` Danny Milosavljevic
2018-03-12 21:10 ` Ludovic Courtès
2018-03-12 12:39 ` [bug#30604] [PATCH v10 4/6] vm: Make the virtio-blk uniquely identifiable in /sys Ludovic Courtès
2018-03-12 12:39 ` Ludovic Courtès [this message]
2018-03-12 20:09 ` [bug#30604] [PATCH v10 5/6] linux-initrd: Provide our own 'modprobe' program Danny Milosavljevic
2018-03-12 21:12 ` Danny Milosavljevic
2018-03-13 8:54 ` Ludovic Courtès
2018-03-12 22:14 ` Ludovic Courtès
2018-03-12 22:15 ` [bug#30604] [PATCH v11 1/6] linux-modules: Add "modules.alias" writer Ludovic Courtès
2018-03-12 22:15 ` [bug#30604] [PATCH v11 2/6] linux-modules: Add 'load-linux-modules-from-directory' Ludovic Courtès
2018-03-12 22:48 ` Danny Milosavljevic
2018-03-12 22:15 ` [bug#30604] [PATCH v11 3/6] linux-modules: Add 'load-needed-linux-modules' Ludovic Courtès
2018-03-12 23:00 ` Danny Milosavljevic
2018-03-13 8:55 ` Ludovic Courtès
2018-03-12 22:15 ` [bug#30604] [PATCH v11 4/6] vm: Make the virtio-blk uniquely identifiable in /sys Ludovic Courtès
2018-03-12 22:49 ` Danny Milosavljevic
2018-03-12 22:15 ` [bug#30604] [PATCH v11 5/6] linux-initrd: Provide our own 'modprobe' program Ludovic Courtès
2018-03-13 8:50 ` Ludovic Courtès
2018-03-13 9:28 ` Ludovic Courtès
2018-03-13 12:28 ` Danny Milosavljevic
2018-03-12 22:15 ` [bug#30604] [PATCH v11 6/6] linux-modules: Add "modules.devname" writer Ludovic Courtès
2018-03-12 22:55 ` Danny Milosavljevic
2018-03-13 8:56 ` Ludovic Courtès
2018-03-12 22:48 ` [bug#30604] [PATCH v11 1/6] linux-modules: Add "modules.alias" writer Danny Milosavljevic
2018-03-13 9:27 ` [bug#30604] [PATCH v10 5/6] linux-initrd: Provide our own 'modprobe' program Danny Milosavljevic
2018-03-13 10:51 ` Ludovic Courtès
2018-03-13 12:05 ` Danny Milosavljevic
2018-03-13 19:17 ` Danny Milosavljevic
2018-03-12 12:39 ` [bug#30604] [PATCH v10 6/6] linux-modules: Add "modules.devname" writer Ludovic Courtès
2018-03-12 19:54 ` [bug#30604] [PATCH v10 1/6] linux-modules: Add "modules.alias" writer Danny Milosavljevic
2018-03-12 21:13 ` Ludovic Courtès
2018-03-09 22:36 ` [bug#30604] [PATCH v8 3/7] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 4/7] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 5/7] vm: Make the virtio-blk uniquely identifiable in /sys Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 6/7] linux-initrd: Provide modprobe to the initrd Danny Milosavljevic
2018-03-03 13:55 ` [bug#30604] [PATCH v8 7/7] linux-initrd: Factorize %modprobe and flat-linux-module-directory Danny Milosavljevic
2018-03-03 18:01 ` Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 0/7] Load Linux module only when supported hardware is present Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 1/7] linux-modules: Add "modules.devname" and "modules.alias" writer Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 2/7] linux-modules: Add module-aliases->module-file-names Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 3/7] linux-initrd: Provide pure-Guile modprobe Danny Milosavljevic
2018-03-11 20:24 ` Danny Milosavljevic
2018-03-12 14:45 ` Ludovic Courtès
2018-03-12 17:51 ` Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 4/7] linux-boot: Load kernel modules only when the hardware is present Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 5/7] vm: Allow qemu-image builder to load Linux kernel modules Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 6/7] vm: Make the virtio-blk uniquely identifiable in /sys Danny Milosavljevic
2018-03-04 1:09 ` [bug#30604] [PATCH v9 7/7] linux-initrd: Use module-aliases->module-file-names, too Danny Milosavljevic
2018-03-09 22:26 ` Danny Milosavljevic
2018-03-18 15:03 ` [bug#30604] Keyboard detection before ‘cryptsetup’ runs Ludovic Courtès
2018-03-23 13:02 ` Danny Milosavljevic
2018-03-23 15:07 ` Danny Milosavljevic
2018-03-24 17:07 ` Ludovic Courtès
2018-03-24 17:12 ` 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=20180312123918.22645-5-ludo@gnu.org \
--to=ludo@gnu.org \
--cc=30604@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.