From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?UTF-8?Q?Court=C3=A8s?=) Subject: bug#30760: guix system init broken on non GuixSD Date: Mon, 12 Mar 2018 13:57:08 +0100 Message-ID: <877eqhqwnv.fsf@gnu.org> References: <20180309173530.wfdw356rf53tesck@doom> <20180309231543.2ede5fa1@scratchpost.org> <87efksyioy.fsf@gnu.org> <20180309235221.49e695d9@scratchpost.org> <87woykx2ef.fsf@gnu.org> <20180310063219.bxgl7bgspxu2o5ez@doom> <874llmuwc5.fsf@gnu.org> <20180312091923.q47b3mrhzsl4vr75@doom> <20180312132437.2a4b2ca7@scratchpost.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:43955) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evN1h-0004Fy-Vq for bug-guix@gnu.org; Mon, 12 Mar 2018 08:58:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1evN1e-00052D-1O for bug-guix@gnu.org; Mon, 12 Mar 2018 08:58:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:48223) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1evN1d-00051x-US for bug-guix@gnu.org; Mon, 12 Mar 2018 08:58:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1evN1d-0003TD-NU for bug-guix@gnu.org; Mon, 12 Mar 2018 08:58:01 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <20180312132437.2a4b2ca7@scratchpost.org> (Danny Milosavljevic's message of "Mon, 12 Mar 2018 13:24:37 +0100") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Danny Milosavljevic Cc: 30760@debbugs.gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, Danny Milosavljevic skribis: >> I'm afraid this is still not correct. >>=20 >> # guix system init config.scm /mnt/mnt/ >> ... >> config.scm:64:9: error: you may need these modules in the initrd for /de= v/nvme0n1p2: shpchp >> hint: Try adding them to the `initrd-modules' field of your `operating-s= ystem' declaration, along these lines: >>=20 >> (operating-system >> ;; ... >> (initrd-modules (append (list "shpchp") >> %base-initrd-modules))) >>=20 >> I don't have `shpchp` as a module as I have it compiled into kernel >> directly. Can I somehow disable the check? Exactly what I feared. ;-) > I think it's a good idea to add a command-line switch that disables the c= heck. > > But then people will just disable the check always and it won't improve u= ntil > it's correct. It's still a good idea to give people the choice. > > @Ludo: It would also be great to have a command-line switch to check the = slow, > correct, way. We'd also have to check modules.builtin of the new system'= s initrd > - but we'd do it only when the option is passed :) > > I suggest to change it to: > >> # guix system init config.scm /mnt/mnt/ >> ... >> config.scm:64:9: WARNING: you may need these modules in the initrd for /= dev/nvme0n1p2: shpchp > ^^^ not error I thought about making it a warning rather than an error back then, but thought that it wouldn=E2=80=99t work well: the warning would immediately go off-screen as build logs start scrolling by. Thus I took the optimistic view that false positives like the one Tom=C3=A1= =C5=A1 experienced should be rare because usually init/reconfigure are used on GuixSD, with a kernel config very close to the target config. Nevertheless, the risk of false-positives obviously exists, hence the need for an escape hatch. What about the attached patch? Thanks, Ludo=E2=80=99. --=-=-= Content-Type: text/x-patch Content-Disposition: inline diff --git a/doc/guix.texi b/doc/guix.texi index d3a7908f9..bcea89e07 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -20458,6 +20458,16 @@ of the image size as a function of the size of the system declared in Make @var{file} a symlink to the result, and register it as a garbage collector root. +@item --skip-checks +Skip pre-installation safety checks. + +By default, @command{guix system init} and @command{guix system +reconfigure} perform safety checks: they make sure the file systems that +appear in the @code{operating-system} declaration actually exist +(@pxref{File Systems}), and that any Linux kernel modules that may be +needed at boot time are listed in @code{initrd-modules} (@pxref{Initial +RAM Disk}). Passing this option skips these tests altogether. + @item --on-error=@var{strategy} Apply @var{strategy} when an error occurs when reading @var{file}. @var{strategy} may be one of the following: diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index acfccce96..f0c4a2ba1 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -733,7 +733,8 @@ and TARGET arguments." (#$installer #$bootloader #$device #$target)))))) (define* (perform-action action os - #:key install-bootloader? + #:key skip-safety-checks? + install-bootloader? dry-run? derivations-only? use-substitutes? bootloader-target target image-size file-system-type full-boot? @@ -750,7 +751,10 @@ When DERIVATIONS-ONLY? is true, print the derivation file name(s) without building anything. When GC-ROOT is a path, also make that path an indirect root of the build -output when building a system derivation, such as a disk image." +output when building a system derivation, such as a disk image. + +When SKIP-SAFETY-CHECKS? is true, skip the file system and initrd module +static checks." (define println (cut format #t "~a~%" <>)) @@ -760,7 +764,8 @@ output when building a system derivation, such as a disk image." ;; Check whether the declared file systems exist. This is better than ;; instantiating a broken configuration. Assume that we can only check if ;; running as root. - (when (memq action '(init reconfigure)) + (when (and (not skip-safety-checks?) + (memq action '(init reconfigure))) (check-mapped-devices os) (when (zero? (getuid)) (check-file-system-availability (operating-system-file-systems os)) @@ -933,6 +938,8 @@ Some ACTIONS support additional ARGS.\n")) --expose=SPEC for 'vm', expose host file system according to SPEC")) (display (G_ " --full-boot for 'vm', make a full boot sequence")) + (display (G_ " + --skip-checks skip file system and initrd module safety checks")) (newline) (display (G_ " -h, --help display this help and exit")) @@ -974,6 +981,9 @@ Some ACTIONS support additional ARGS.\n")) (option '("full-boot") #f #f (lambda (opt name arg result) (alist-cons 'full-boot? #t result))) + (option '("skip-checks") #f #f + (lambda (opt name arg result) + (alist-cons 'skip-safety-checks? #t result))) (option '("share") #t #f (lambda (opt name arg result) @@ -1067,6 +1077,8 @@ resulting from command-line parsing." #:derivations-only? (assoc-ref opts 'derivations-only?) #:use-substitutes? (assoc-ref opts 'substitutes?) + #:skip-safety-checks? + (assoc-ref opts 'skip-safety-checks?) #:file-system-type (assoc-ref opts 'file-system-type) #:image-size (assoc-ref opts 'image-size) #:full-boot? (assoc-ref opts 'full-boot?) --=-=-=--