From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id oF+9ATxQ2WUxvQAAqHPOHw:P1 (envelope-from ) for ; Sat, 24 Feb 2024 03:11:08 +0100 Received: from aspmx1.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0.migadu.com with LMTPS id oF+9ATxQ2WUxvQAAqHPOHw (envelope-from ) for ; Sat, 24 Feb 2024 03:11:08 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=lease-up.com header.s=2017 header.b=KVSiadOx; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1708740667; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=0pBWsoIkXcS3ZxaNH+T7X6IGZs+EO22mTt8FedRpGRo=; b=GEgVFRTiEKJ/Pf/ndmFIxsCU5x4L6TzTqJtk0BfmJh8K9ZksCLKk1nUkhSwmtPOXLZKNf9 WjUUl8HXrIMebo8cmAEEIJBRZcWoHrFRVqgXo+V84j386ckIdO0Tt2x7xsAbditIDU1jYD x+vnFIT2R8l5ActTQvCIuEuA/PKMRlwtKEi6n2tn1syR+XU8zL1AzV8zb7wWnUarGYs5yv GajU3Yi9FAdAYx3caN8DmTKTeuz9Ev/q77HCaci0xIC+bvA24rAHQ634RPBEj8APMvcSNV Hq3a2W6BtwH6G2E443gYIKSjWKOEIAyjiyDoz5XNQu7sxhOziQZizrOg29YuEA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=lease-up.com header.s=2017 header.b=KVSiadOx; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org ARC-Seal: i=1; s=key1; d=yhetil.org; t=1708740667; a=rsa-sha256; cv=none; b=Uqk7PXxyT3YNUCHuBPKfu34cCNWwoINot25A2xAPLcj7STIvwaT7LmmQY9kH1Fqbr3FXO4 0ZImZw3auc+IM0lwDcMn1a1U4cR4TC+EfAsfVyq/iI7ASxK7BUxbxZ8j6boR9gBx91GiTh fcSKzVjJTL39uRGdQB+4pTer8xqG0fIMOsnpOjFC9nDD1957BUR9bVRXH2Zb1jAslggZwY d8mfjZLfRZNDP1JzYu+3nWPJV5+n1w/W3jVU+1NdYMsldCPTagDMOpn3XNmUTB1fUunuBM HXheYBnF+XCxgSfuyNwiQBGN/E/iqqCAQdnpKKjgnv3yu4eucXGDi2C6RCu0uQ== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6160311E04 for ; Sat, 24 Feb 2024 03:11:07 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rdhUy-0007Pl-MB; Fri, 23 Feb 2024 21:10:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rdhUw-0007PV-N2 for guix-patches@gnu.org; Fri, 23 Feb 2024 21:10:42 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rdhUv-0000M1-Bf; Fri, 23 Feb 2024 21:10:41 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rdhVG-0004F2-2c; Fri, 23 Feb 2024 21:11:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#69343] [PATCH 02/12] Move record to a separate file. Resent-From: Felix Lechner Original-Sender: "Debbugs-submit" Resent-CC: guix@cbaines.net, dev@jpoiret.xyz, ludo@gnu.org, othacehe@gnu.org, rekado@elephly.net, zimon.toutoune@gmail.com, me@tobias.gr, guix-patches@gnu.org Resent-Date: Sat, 24 Feb 2024 02:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69343 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 69343@debbugs.gnu.org Cc: Felix Lechner , Christopher Baines , Josselin Poiret , Ludovic =?UTF-8?Q?Court=C3=A8s?= , Mathieu Othacehe , Ricardo Wurmus , Simon Tournier , Tobias Geerinckx-Rice X-Debbugs-Original-Xcc: Christopher Baines , Josselin Poiret , Ludovic =?UTF-8?Q?Court=C3=A8s?= , Mathieu Othacehe , Ricardo Wurmus , Simon Tournier , Tobias Geerinckx-Rice Received: via spool by 69343-submit@debbugs.gnu.org id=B69343.170874062616191 (code B ref 69343); Sat, 24 Feb 2024 02:11:02 +0000 Received: (at 69343) by debbugs.gnu.org; 24 Feb 2024 02:10:26 +0000 Received: from localhost ([127.0.0.1]:37506 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdhUc-0004Cw-MI for submit@debbugs.gnu.org; Fri, 23 Feb 2024 21:10:25 -0500 Received: from sail-ipv4.us-core.com ([208.82.101.137]:37576) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rdhJc-0003YB-KO for 69343@debbugs.gnu.org; Fri, 23 Feb 2024 20:59:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=2017; bh=7mwMWjx9X+yNhTC FjbJ6qHa+qRKgO9k1KcpZ4YuX/wU=; h=references:in-reply-to:date:subject: cc:to:from; d=lease-up.com; b=KVSiadOxM769kZnIJ3tDpDdPVxCroCq8OCtFSADs 2tU6tylZAvqbt5pEOlCTy2a+68U7DaVYVEYsrAxUKe+vvUWEC0uG7eMDogYxpJ8wwvR7xF 6H61SBIzi1REXBIXYNR0JlBWLdcLOkGtdNoveQ71lGY207N9+gWlVQ7xogq74= Received: by sail-ipv4.us-core.com (OpenSMTPD) with ESMTPSA id ac71c734 (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO); Sat, 24 Feb 2024 01:51:55 +0000 (UTC) Received: from localhost (localhost [local]) by localhost (OpenSMTPD) with ESMTPA id 2966fb71; Sat, 24 Feb 2024 01:51:55 +0000 (UTC) Date: Fri, 23 Feb 2024 17:51:35 -0800 Message-ID: <42a9d53a4de3788e22b953927abb1a9723921e87.1708736440.git.felix.lechner@lease-up.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Felix Lechner X-ACL-Warn: , Felix Lechner via Guix-patches From: Felix Lechner via Guix-patches via Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Scanner: mx12.migadu.com X-Migadu-Spam-Score: -5.27 X-Spam-Score: -5.27 X-Migadu-Queue-Id: 6160311E04 X-TUID: arfYr4r+lra9 Without it, the following commit following this one causes 'guix pull' to f= ail with this message: =0D[ 0/ 50] loading... 0.0% of 25 files=0D[ 1/ 50] loading... 4.0% of= 25 files=0D[ 2/ 50] loading... 8.0% of 25 files=0D[ 3/ 50] loading... = 12.0% of 25 files=0D[ 4/ 50] loading... 16.0% of 25 files=0D[ 5/ 50] lo= ading... 20.0% of 25 files=0D[ 6/ 50] loading... 24.0% of 25 files=0D[ = 7/ 50] loading... 28.0% of 25 files=0D[ 8/ 50] loading... 32.0% of 25 fi= les=0D[ 9/ 50] loading... 36.0% of 25 files=0D[ 10/ 50] loading... 40.0%= of 25 files=0D[ 11/ 50] loading... 44.0% of 25 files=0D[ 12/ 50] loading.= .. 48.0% of 25 files=0D[ 13/ 50] loading... 52.0% of 25 files=0D[ 14/ 50]= loading... 56.0% of 25 files=0D[ 15/ 50] loading... 60.0% of 25 files=0D= [ 16/ 50] loading... 64.0% of 25 files=0D[ 17/ 50] loading... 68.0% of 25= files=0D[ 18/ 50] loading... 72.0% of 25 files=0D[ 19/ 50] loading... 76= .0% of 25 files=0D[ 20/ 50] loading... 80.0% of 25 files=0D[ 21/ 50] loadi= ng... 84.0% of 25 files=0D[ 22/ 50] loading... 88.0% of 25 files=0D[ 23/ = 50] loading... 92.0% of 25 files=0D[ 24/ 50] loading... 96.0% of 25 files= =0D[ 25/ 50] loading... 100.0% of 25 files=0D[ 25/ 50] compiling... 0.0% = of 25 files=0D[ 26/ 50] compiling... 4.0% of 25 files=0D[ 27/ 50] compili= ng... 8.0% of 25 files=0D[ 28/ 50] compiling... 12.0% of 25 files=0D[ 29= / 50] compiling... 16.0% of 25 files=0D[ 30/ 50] compiling... 20.0% of 25= files=0D[ 31/ 50] compiling... 24.0% of 25 files=0D[ 32/ 50] compiling...= 28.0% of 25 files=0D[ 33/ 50] compiling... 32.0% of 25 files=0D[ 34/ 50]= compiling... 36.0% of 25 files=0D[ 35/ 50] compiling... 40.0% of 25 file= s=0D[ 36/ 50] compiling... 44.0% of 25 files=0D[ 37/ 50] compiling... 48.= 0% of 25 files=0D[ 38/ 50] compiling... 52.0% of 25 files=0D[ 39/ 50] comp= iling... 56.0% of 25 files=0D[ 40/ 50] compiling... 60.0% of 25 files=0D[= 41/ 50] compiling... 64.0% of 25 files=0D[ 42/ 50] compiling... 68.0% of= 25 files=0D[ 43/ 50] compiling... 72.0% of 25 files=0D[ 44/ 50] compiling= ... 76.0% of 25 files=0D[ 45/ 50] compiling... 80.0% of 25 files=0D[ 46/ = 50] compiling... 84.0% of 25 files=0D[ 47/ 50] compiling... 88.0% of 25 f= iles=0D[ 48/ 50] compiling... 92.0% of 25 files=0D[ 49/ 50] compiling... = 96.0% of 25 files=0D[ 50/ 50] compiling... 100.0% of 25 files=0D[ 0/ 50] l= oading... 0.0% of 25 files=0D[ 1/ 50] loading... 4.0% of 25 files=0D[ = 2/ 50] loading... 8.0% of 25 files=0D[ 3/ 50] loading... 12.0% of 25 f= iles=0D[ 4/ 50] loading... 16.0% of 25 files=0D[ 5/ 50] loading... 20.0= % of 25 files=0D[ 6/ 50] loading... 24.0% of 25 files=0D[ 7/ 50] loading= ... 28.0% of 25 files=0D[ 8/ 50] loading... 32.0% of 25 files=0D[ 9/ 50= ] loading... 36.0% of 25 files=0D[ 10/ 50] loading... 40.0% of 25 files= =0D[ 11/ 50] loading... 44.0% of 25 files=0D[ 12/ 50] loading... 48.0% of= 25 files=0D[ 13/ 50] loading... 52.0% of 25 files=0D[ 14/ 50] loading... = 56.0% of 25 files=0D[ 15/ 50] loading... 60.0% of 25 files=0D[ 16/ 50] lo= ading... 64.0% of 25 files=0D[ 17/ 50] loading... 68.0% of 25 files=0D[ 1= 8/ 50] loading... 72.0% of 25 files=0D[ 19/ 50] loading... 76.0% of 25 fi= les=0D[ 20/ 50] loading... 80.0% of 25 files=0D[ 21/ 50] loading... 84.0%= of 25 files=0D[ 22/ 50] loading... 88.0% of 25 files=0D[ 23/ 50] loading.= .. 92.0% of 25 files=0D[ 24/ 50] loading... 96.0% of 25 files=0D[ 25/ 50]= loading... 100.0% of 25 files=0D[ 25/ 50] compiling... 0.0% of 25 files= =0D[ 26/ 50] compiling... 4.0% of 25 files=0D[ 27/ 50] compiling... 8.0= % of 25 files=0D[ 28/ 50] compiling... 12.0% of 25 files=0D[ 29/ 50] compi= ling... 16.0% of 25 files=0D[ 30/ 50] compiling... 20.0% of 25 files=0D[ = 31/ 50] compiling... 24.0% of 25 files=0D[ 32/ 50] compiling... 28.0% of = 25 files=0D[ 33/ 50] compiling... 32.0% of 25 files=0D[ 34/ 50] compiling.= .. 36.0% of 25 files=0D[ 35/ 50] compiling... 40.0% of 25 files=0D[ 36/ 5= 0] compiling... 44.0% of 25 files=0D[ 37/ 50] compiling... 48.0% of 25 fi= les=0D[ 38/ 50] compiling... 52.0% of 25 files=0D[ 39/ 50] compiling... 5= 6.0% of 25 files=0D[ 40/ 50] compiling... 60.0% of 25 files=0D[ 41/ 50] co= mpiling... 64.0% of 25 files=0D[ 42/ 50] compiling... 68.0% of 25 files= =0D[ 43/ 50] compiling... 72.0% of 25 files=0D[ 44/ 50] compiling... 76.0= % of 25 files=0D[ 45/ 50] compiling... 80.0% of 25 files=0D[ 46/ 50] compi= ling... 84.0% of 25 files=0D[ 47/ 50] compiling... 88.0% of 25 files=0D[ = 48/ 50] compiling... 92.0% of 25 files=0D[ 49/ 50] compiling... 96.0% of = 25 files=0D[ 50/ 50] compiling... 100.0% of 25 files=0D[ 0/ 50] loading...= 0.0% of 25 files=0D[ 1/ 50] loading... 4.0% of 25 files=0D[ 2/ 50] l= oading... 8.0% of 25 files=0D[ 3/ 50] loading... 12.0% of 25 files=0D[ = 4/ 50] loading... 16.0% of 25 files=0D[ 5/ 50] loading... 20.0% of 25 f= iles=0D[ 6/ 50] loading... 24.0% of 25 files=0D[ 7/ 50] loading... 28.0= % of 25 files=0D[ 8/ 50] loading... 32.0% of 25 files=0D[ 9/ 50] loading= ... 36.0% of 25 files=0D[ 10/ 50] loading... 40.0% of 25 files=0D[ 11/ 50= ] loading... 44.0% of 25 files=0D[ 12/ 50] loading... 48.0% of 25 files= =0D[ 13/ 50] loading... 52.0% of 25 files=0D[ 14/ 50] loading... 56.0% of= 25 files=0D[ 15/ 50] loading... 60.0% of 25 files=0D[ 16/ 50] loading... = 64.0% of 25 files=0D[ 17/ 50] loading... 68.0% of 25 files=0D[ 18/ 50] lo= ading... 72.0% of 25 files=0D[ 19/ 50] loading... 76.0% of 25 files=0D[ 2= 0/ 50] loading... 80.0% of 25 files=0D[ 21/ 50] loading... 84.0% of 25 fi= les=0D[ 22/ 50] loading... 88.0% of 25 files=0D[ 23/ 50] loading... 92.0%= of 25 files=0D[ 24/ 50] loading... 96.0% of 25 files=0D[ 25/ 50] loading.= .. 100.0% of 25 files=0D[ 25/ 50] compiling... 0.0% of 25 files=0D[ 26/ 5= 0] compiling... 4.0% of 25 files=0D[ 27/ 50] compiling... 8.0% of 25 fi= les=0D[ 28/ 50] compiling... 12.0% of 25 files=0D[ 29/ 50] compiling... 1= 6.0% of 25 files=0D[ 30/ 50] compiling... 20.0% of 25 files=0D[ 31/ 50] co= mpiling... 24.0% of 25 files=0D[ 32/ 50] compiling... 28.0% of 25 files= =0D[ 33/ 50] compiling... 32.0% of 25 files=0D[ 34/ 50] compiling... 36.0= % of 25 files=0D[ 35/ 50] compiling... 40.0% of 25 files=0D[ 36/ 50] compi= ling... 44.0% of 25 files=0D[ 37/ 50] compiling... 48.0% of 25 files=0D[ = 38/ 50] compiling... 52.0% of 25 files=0D[ 39/ 50] compiling... 56.0% of = 25 files=0D[ 40/ 50] compiling... 60.0% of 25 files=0D[ 41/ 50] compiling.= .. 64.0% of 25 files=0D[ 42/ 50] compiling... 68.0% of 25 files=0D[ 43/ 5= 0] compiling... 72.0% of 25 files=0D[ 44/ 50] compiling... 76.0% of 25 fi= les=0D[ 45/ 50] compiling... 80.0% of 25 files=0D[ 46/ 50] compiling... 8= 4.0% of 25 files=0D[ 47/ 50] compiling... 88.0% of 25 files=0D[ 48/ 50] co= mpiling... 92.0% of 25 files=0D[ 49/ 50] compiling... 96.0% of 25 files= =0D[ 50/ 50] compiling... 100.0% of 25 files=0D[ 0/ 50] loading... 0.0% = of 25 files=0D[ 1/ 50] loading... 4.0% of 25 files=0D[ 2/ 50] loading..= . 8.0% of 25 files=0D[ 3/ 50] loading... 12.0% of 25 files=0D[ 4/ 50] = loading... 16.0% of 25 files=0D[ 5/ 50] loading... 20.0% of 25 files=0D[= 6/ 50] loading... 24.0% of 25 files=0D[ 7/ 50] loading... 28.0% of 25 = files=0D[ 8/ 50] loading... 32.0% of 25 files=0D[ 9/ 50] loading... 36.= 0% of 25 files=0D[ 10/ 50] loading... 40.0% of 25 files=0D[ 11/ 50] loadin= g... 44.0% of 25 files=0D[ 12/ 50] loading... 48.0% of 25 files=0D[ 13/ 5= 0] loading... 52.0% of 25 files=0D[ 14/ 50] loading... 56.0% of 25 files= =0D[ 15/ 50] loading... 60.0% of 25 files=0D[ 16/ 50] loading... 64.0% of= 25 files=0D[ 17/ 50] loading... 68.0% of 25 files=0D[ 18/ 50] loading... = 72.0% of 25 files=0D[ 19/ 50] loading... 76.0% of 25 files=0D[ 20/ 50] lo= ading... 80.0% of 25 files=0D[ 21/ 50] loading... 84.0% of 25 files=0D[ 2= 2/ 50] loading... 88.0% of 25 files=0D[ 23/ 50] loading... 92.0% of 25 fi= les=0D[ 24/ 50] loading... 96.0% of 25 files=0D[ 25/ 50] loading... 100.0%= of 25 files=0D[ 25/ 50] compiling... 0.0% of 25 files=0D[ 26/ 50] compil= ing... 4.0% of 25 files=0D[ 27/ 50] compiling... 8.0% of 25 files=0D[ 2= 8/ 50] compiling... 12.0% of 25 files=0D[ 29/ 50] compiling... 16.0% of 2= 5 files=0D[ 30/ 50] compiling... 20.0% of 25 files=0D[ 31/ 50] compiling..= . 24.0% of 25 files=0D[ 32/ 50] compiling... 28.0% of 25 files=0D[ 33/ 50= ] compiling... 32.0% of 25 files=0D[ 34/ 50] compiling... 36.0% of 25 fil= es=0D[ 35/ 50] compiling... 40.0% of 25 files=0D[ 36/ 50] compiling... 44= .0% of 25 files=0D[ 37/ 50] compiling... 48.0% of 25 files=0D[ 38/ 50] com= piling... 52.0% of 25 files=0D[ 39/ 50] compiling... 56.0% of 25 files=0D= [ 40/ 50] compiling... 60.0% of 25 files=0D[ 41/ 50] compiling... 64.0% o= f 25 files=0D[ 42/ 50] compiling... 68.0% of 25 files=0D[ 43/ 50] compilin= g... 72.0% of 25 files=0D[ 44/ 50] compiling... 76.0% of 25 files=0D[ 45/= 50] compiling... 80.0% of 25 files=0D[ 46/ 50] compiling... 84.0% of 25 = files=0D[ 47/ 50] compiling... 88.0% of 25 files=0D[ 48/ 50] compiling... = 92.0% of 25 files=0D[ 49/ 50] compiling... 96.0% of 25 files=0D[ 50/ 50] = compiling... 100.0% of 25 files=0D[ 0/ 50] loading... 0.0% of 25 files= =0D[ 1/ 50] loading... 4.0% of 25 files=0D[ 2/ 50] loading... 8.0% of= 25 files=0D[ 3/ 50] loading... 12.0% of 25 files=0D[ 4/ 50] loading... = 16.0% of 25 files=0D[ 5/ 50] loading... 20.0% of 25 files=0D[ 6/ 50] lo= ading... 24.0% of 25 files=0D[ 7/ 50] loading... 28.0% of 25 files=0D[ = 8/ 50] loading... 32.0% of 25 files=0D[ 9/ 50] loading... 36.0% of 25 fi= les=0D[ 10/ 50] loading... 40.0% of 25 files=0D[ 11/ 50] loading... 44.0%= of 25 files=0D[ 12/ 50] loading... 48.0% of 25 files=0D[ 13/ 50] loading.= .. 52.0% of 25 files=0D[ 14/ 50] loading... 56.0% of 25 files=0D[ 15/ 50]= loading... 60.0% of 25 files=0D[ 16/ 50] loading... 64.0% of 25 files=0D= [ 17/ 50] loading... 68.0% of 25 files=0D[ 18/ 50] loading... 72.0% of 25= files=0D[ 19/ 50] loading... 76.0% of 25 files=0D[ 20/ 50] loading... 80= .0% of 25 files=0D[ 21/ 50] loading... 84.0% of 25 files=0D[ 22/ 50] loadi= ng... 88.0% of 25 files=0D[ 23/ 50] loading... 92.0% of 25 files=0D[ 24/ = 50] loading... 96.0% of 25 files=0D[ 25/ 50] loading... 100.0% of 25 files= =0D[ 25/ 50] compiling... 0.0% of 25 files=0D[ 26/ 50] compiling... 4.0= % of 25 files=0D[ 27/ 50] compiling... 8.0% of 25 files=0D[ 28/ 50] compi= ling... 12.0% of 25 files=0D[ 29/ 50] compiling... 16.0% of 25 files=0D[ = 30/ 50] compiling... 20.0% of 25 files=0D[ 31/ 50] compiling... 24.0% of = 25 files=0D[ 32/ 50] compiling... 28.0% of 25 files=0D[ 33/ 50] compiling.= .. 32.0% of 25 files=0D[ 34/ 50] compiling... 36.0% of 25 files=0D[ 35/ 5= 0] compiling... 40.0% of 25 files=0D[ 36/ 50] compiling... 44.0% of 25 fi= les=0D[ 37/ 50] compiling... 48.0% of 25 files=0D[ 38/ 50] compiling... 5= 2.0% of 25 files=0D[ 39/ 50] compiling... 56.0% of 25 files=0D[ 40/ 50] co= mpiling... 60.0% of 25 files=0D[ 41/ 50] compiling... 64.0% of 25 files= =0D[ 42/ 50] compiling... 68.0% of 25 files=0D[ 43/ 50] compiling... 72.0= % of 25 files=0D[ 44/ 50] compiling... 76.0% of 25 files=0D[ 45/ 50] compi= ling... 80.0% of 25 files=0D[ 46/ 50] compiling... 84.0% of 25 files=0D[ = 47/ 50] compiling... 88.0% of 25 files=0D[ 48/ 50] compiling... 92.0% of = 25 files=0D[ 49/ 50] compiling... 96.0% of 25 files=0D[ 50/ 50] compiling.= .. 100.0% of 25 files=0D[ 0/ 50] loading... 0.0% of 25 files=0D[ 1/ 50]= loading... 4.0% of 25 files=0D[ 2/ 50] loading... 8.0% of 25 files=0D= [ 3/ 50] loading... 12.0% of 25 files=0D[ 4/ 50] loading... 16.0% of 25= files=0D[ 5/ 50] loading... 20.0% of 25 files=0D[ 6/ 50] loading... 24= .0% of 25 files=0D[ 7/ 50] loading... 28.0% of 25 files=0D[ 8/ 50] loadi= ng... 32.0% of 25 files=0D[ 9/ 50] loading... 36.0% of 25 files=0D[ 10/ = 50] loading... 40.0% of 25 files=0D[ 11/ 50] loading... 44.0% of 25 files= =0D[ 12/ 50] loading... 48.0% of 25 files=0D[ 13/ 50] loading... 52.0% of= 25 files=0D[ 14/ 50] loading... 56.0% of 25 files=0D[ 15/ 50] loading... = 60.0% of 25 files=0D[ 16/ 50] loading... 64.0% of 25 files=0D[ 17/ 50] lo= ading... 68.0% of 25 files=0D[ 18/ 50] loading... 72.0% of 25 files=0D[ 1= 9/ 50] loading... 76.0% of 25 files=0D[ 20/ 50] loading... 80.0% of 25 fi= les=0D[ 21/ 50] loading... 84.0% of 25 files=0D[ 22/ 50] loading... 88.0%= of 25 files=0D[ 23/ 50] loading... 92.0% of 25 files=0D[ 24/ 50] loading.= .. 96.0% of 25 files=0D[ 25/ 50] loading... 100.0% of 25 files=0D[ 25/ 50]= compiling... 0.0% of 25 files=0D[ 26/ 50] compiling... 4.0% of 25 file= s=0D[ 27/ 50] compiling... 8.0% of 25 files=0D[ 28/ 50] compiling... 12.= 0% of 25 files=0D[ 29/ 50] compiling... 16.0% of 25 files=0D[ 30/ 50] comp= iling... 20.0% of 25 files=0D[ 31/ 50] compiling... 24.0% of 25 files=0D[= 32/ 50] compiling... 28.0% of 25 files=0D[ 33/ 50] compiling... 32.0% of= 25 files=0D[ 34/ 50] compiling... 36.0% of 25 files=0D[ 35/ 50] compiling= ... 40.0% of 25 files=0D[ 36/ 50] compiling... 44.0% of 25 files=0D[ 37/ = 50] compiling... 48.0% of 25 files=0D[ 38/ 50] compiling... 52.0% of 25 f= iles=0D[ 39/ 50] compiling... 56.0% of 25 files=0D[ 40/ 50] compiling... = 60.0% of 25 files=0D[ 41/ 50] compiling... 64.0% of 25 files=0D[ 42/ 50] c= ompiling... 68.0% of 25 files=0D[ 43/ 50] compiling... 72.0% of 25 files= =0D[ 44/ 50] compiling... 76.0% of 25 files=0D[ 45/ 50] compiling... 80.0= % of 25 files=0D[ 46/ 50] compiling... 84.0% of 25 files=0D[ 47/ 50] compi= ling... 88.0% of 25 files=0D[ 48/ 50] compiling... 92.0% of 25 files=0D[ = 49/ 50] compiling... 96.0% of 25 files=0D[ 50/ 50] compiling... 100.0% of = 25 files=0D[ 0/ 50] loading... 0.0% of 25 files=0D[ 1/ 50] loading... = 4.0% of 25 filesBacktrace: In ice-9/boot-9.scm: 222:29 19 (map1 (((gnu packages nano)) ((gnu packages nvi)) ((gnu packag= es package-management)) ((gnu packages pciutils)) ((gnu packages texinfo)) = ((gnu packages text-editors)) ((gnu # wget)) ?)) 222:29 18 (map1 (((gnu packages nvi)) ((gnu packages package-management)= ) ((gnu packages pciutils)) ((gnu packages texinfo)) ((gnu packages text-ed= itors)) ((gnu packages wget)) ((gnu #)) ((?)) ?)) 222:29 17 (map1 (((gnu packages package-management)) ((gnu packages pciu= tils)) ((gnu packages texinfo)) ((gnu packages text-editors)) ((gnu package= s wget)) ((gnu services)) ((gnu services #)) ?)) 222:29 16 (map1 (((gnu packages pciutils)) ((gnu packages texinfo)) ((gn= u packages text-editors)) ((gnu packages wget)) ((gnu services)) ((gnu serv= ices shepherd)) ((gnu services base)) ((# ?)) ?)) 222:29 15 (map1 (((gnu packages texinfo)) ((gnu packages text-editors)) = ((gnu packages wget)) ((gnu services)) ((gnu services shepherd)) ((gnu serv= ices base)) ((gnu bootloader)) ((gnu # #)) # ?)) 222:29 14 (map1 (((gnu packages text-editors)) ((gnu packages wget)) ((g= nu services)) ((gnu services shepherd)) ((gnu services base)) ((gnu bootloa= der)) ((gnu system shadow)) ((gnu system #)) ?)) 222:29 13 (map1 (((gnu packages wget)) ((gnu services)) ((gnu services s= hepherd)) ((gnu services base)) ((gnu bootloader)) ((gnu system shadow)) ((= gnu system nss)) ((gnu system locale)) ((?)) ?)) 222:17 12 (map1 (((gnu services)) ((gnu services shepherd)) ((gnu servic= es base)) ((gnu bootloader)) ((gnu system shadow)) ((gnu system nss)) ((gnu= system locale)) ((gnu system pam)) ((gnu ?)) ?)) 3327:17 11 (resolve-interface (gnu services) #:select _ #:hide _ #:prefix= _ #:renamer _ #:version _) In ice-9/threads.scm: 390:8 10 (_ _) In ice-9/boot-9.scm: 3253:13 9 (_) In ice-9/threads.scm: 390:8 8 (_ _) In ice-9/boot-9.scm: 3544:20 7 (_) 2836:4 6 (save-module-excursion #) 3564:26 5 (_) In unknown file: 4 (primitive-load-path "gnu/services" #) In ice-9/eval.scm: 626:19 3 (_ #) 159:9 2 (_ #) 213:37 1 (_ #) In guix/modules.scm: 157:28 0 (loop ((gnu build hurd-boot) (guix build syscalls)) ((guix bui= ld utils)) #< vhash: # insert: #) guix/modules.scm:157:28: In procedure loop: ERROR: 1. &missing-dependency-error: module: (gnu build hurd-boot) search-path: ("." "/gnu/store/11i4vribdynrxkp4ppilkjp9y9jshaxq-guix-c= ore-source" "/gnu/store/avd0dsg9rixk3djls8ikzphfjbl227za-guix-extra-source"= "/gnu/store/vdi10jyhr1igrkdgnsjj09krjx1jkzkm-guix-packages-base-source" "/= gnu/store/l8sdgq6cpnxyk732w23p7mhq6sial0vm-guile-gcrypt-0.4.0/share/guile/s= ite/3.0" "/gnu/store/0i81lpfnn05pmjc5f43q4nfvd27r08f7-guile-gnutls-3.7.12/s= hare/guile/site/3.0" "/gnu/store/rm803mxjvr9zamg1226dl9zf2275yjzg-guile-git= -0.5.2/share/guile/site/3.0" "/gnu/store/bxvl7w7q66gbk7qkkhsiq30vl69jj4x7-g= uile-bytestructures-1.0.10/share/guile/site/3.0" "/gnu/store/q91hbi8yc2jnx0= hlk6zb6vlkrw3xm0yx-guile-avahi-0.4.1/share/guile/site/3.0" "/gnu/store/p5f0= 06jcr83jc7m731vhvjdkr2j0hnp3-guile-json-4.7.3/share/guile/site/3.0" "/gnu/s= tore/d75xpk3qxw7na6zgbf2dw3asqhwifd6a-guile-semver-0.1.1/share/guile/site/3= .0" "/gnu/store/19m9xm33jq34nb64z11q5bph85ff6gyd-guile-ssh-0.16.3/share/gui= le/site/3.0" "/gnu/store/r8izi6mi1mjl7s1kn20q1hxmy3jg2bxc-guile-sqlite3-0.1= .3/share/guile/site/3.0" "/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile= -lib-0.2.7/share/guile/site/3.0" "/gnu/store/w6gpivr3421wbzkjg6qlc95sv1srz1= 5a-guile-zlib-0.1.0/share/guile/site/3.0" "/gnu/store/1zlqd5240mq0dwwig9bv1= cg4zjf092h9-guile-lzlib-0.0.2/share/guile/site/3.0" "/gnu/store/rqd5wpa09fi= zcb211p78g6f2f5jb2lwg-guile-zstd-0.1.1/share/guile/site/3.0" "/gnu/store/xf= d68fq6vmali9wqivg84baqp4n4maqx-guix-packages-source" "/gnu/store/a7sykpl77z= 61sr0dv034rpwby9bz8zwm-module-import" "/gnu/store/4gvgcfdiz67wv04ihqfa8pqwz= sb0qpv5-guile-3.0.9/share/guile/3.0" "/gnu/store/4gvgcfdiz67wv04ihqfa8pqwzs= b0qpv5-guile-3.0.9/share/guile/site/3.0" "/gnu/store/4gvgcfdiz67wv04ihqfa8p= qwzsb0qpv5-guile-3.0.9/share/guile/site" "/gnu/store/4gvgcfdiz67wv04ihqfa8p= qwzsb0qpv5-guile-3.0.9/share/guile") Change-Id: I6944ffd4c323c776005b0cef23218bffae59be23 --- gnu/machine/ssh.scm | 1 + gnu/system.scm | 224 +----------------------------- gnu/system/boot.scm | 277 ++++++++++++++++++++++++++++++++++++++ guix/scripts/system.scm | 1 + tests/boot-parameters.scm | 1 + 5 files changed, 281 insertions(+), 223 deletions(-) create mode 100644 gnu/system/boot.scm diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm index b47ce7c225..0ffe71367c 100644 --- a/gnu/machine/ssh.scm +++ b/gnu/machine/ssh.scm @@ -23,6 +23,7 @@ (define-module (gnu machine ssh) #:use-module (gnu machine) #:autoload (gnu packages gnupg) (guile-gcrypt) #:use-module (gnu system) + #:use-module (gnu system boot) #:use-module (gnu system file-systems) #:use-module (gnu system uuid) #:use-module ((gnu services) #:select (sexp->system-provenance)) diff --git a/gnu/system.scm b/gnu/system.scm index aede35775e..a438137731 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -70,6 +70,7 @@ (define-module (gnu system) #:use-module (gnu services shepherd) #:use-module (gnu services base) #:use-module (gnu bootloader) + #:use-module (gnu system boot) #:use-module (gnu system shadow) #:use-module (gnu system nss) #:use-module (gnu system locale) @@ -149,25 +150,6 @@ (define-module (gnu system) =20 hurd-default-essential-services =20 - boot-parameters - boot-parameters? - boot-parameters-label - boot-parameters-root-device - boot-parameters-bootloader-name - boot-parameters-bootloader-menu-entries - boot-parameters-store-crypto-devices - boot-parameters-store-device - boot-parameters-store-directory-prefix - boot-parameters-store-mount-point - boot-parameters-locale - boot-parameters-kernel - boot-parameters-kernel-arguments - boot-parameters-initrd - boot-parameters-multiboot-modules - boot-parameters-version - %boot-parameters-version - read-boot-parameters - read-boot-parameters-file boot-parameters->menu-entry =20 local-host-aliases ;deprecated @@ -327,210 +309,6 @@ (define* (operating-system-kernel-arguments ;;; Boot parameters ;;; =20 -;;; Version 1 was introduced early 2022 to mark the departure from long op= tion -;;; names such as '--load' to the more conventional initrd option names li= ke -;;; 'gnu.load'. -;;; -;;; When bumping the boot-parameters version, increment it by one (1). -(define %boot-parameters-version 1) - -(define-record-type* - boot-parameters make-boot-parameters boot-parameters? - (label boot-parameters-label) - ;; Because we will use the 'store-device' to create the GRUB search comm= and, - ;; the 'store-device' has slightly different semantics than 'root-device= '. - ;; The 'store-device' can be a file system uuid, a file system label, or= #f, - ;; but it cannot be a device file name such as "/dev/sda3", since GRUB w= ould - ;; not understand that. The 'root-device', on the other hand, correspon= ds - ;; exactly to the device field of the object representing = the - ;; OS's root file system, so it might be a device file name like - ;; "/dev/sda3". The 'store-directory-prefix' field contains #f or the s= tore - ;; file name inside the 'store-device' as it is seen by GRUB, e.g. it wo= uld - ;; contain "/storefs" if the store is located in that subvolume of a btr= fs - ;; partition. - (root-device boot-parameters-root-device) - (bootloader-name boot-parameters-bootloader-name) - (bootloader-menu-entries ;list of - boot-parameters-bootloader-menu-entries) - (store-device boot-parameters-store-device) - (store-mount-point boot-parameters-store-mount-point) - (store-directory-prefix boot-parameters-store-directory-prefix) - (store-crypto-devices boot-parameters-store-crypto-devices - (default '())) - (locale boot-parameters-locale) - (kernel boot-parameters-kernel) - (kernel-arguments boot-parameters-kernel-arguments) - (initrd boot-parameters-initrd) - (multiboot-modules boot-parameters-multiboot-modules) - (version boot-parameters-version ;positive integer - (default %boot-parameters-version))) - -(define (ensure-not-/dev device) - "If DEVICE starts with a slash, return #f. This is meant to filter out -Linux device names such as /dev/sda, and to preserve GRUB device names and -file system labels." - (if (and (string? device) (string-prefix? "/" device)) - #f - device)) - -(define (read-boot-parameters port) - "Read boot parameters from PORT and return the corresponding - object. Raise an error if the format is unrecognized." - (define device-sexp->device - (match-lambda - (('uuid (? symbol? type) (? bytevector? bv)) - (bytevector->uuid bv type)) - (('file-system-label (? string? label)) - (file-system-label label)) - ((? bytevector? bv) ;old format - (bytevector->uuid bv 'dce)) - ((? string? device) - (if (string-contains device ":/") - device ; nfs-root - ;; It used to be that we would not distinguish between labels a= nd - ;; device names. Try to infer the right thing here. - (if (string-prefix? "/" device) - device - (file-system-label device)))))) - (define uuid-sexp->uuid - (match-lambda - (('uuid (? symbol? type) (? bytevector? bv)) - (bytevector->uuid bv type)) - (x - (warning (G_ "unrecognized uuid ~a at '~a'~%") x (port-filename por= t)) - #f))) - - ;; New versions are not backward-compatible, so only accept past and cur= rent - ;; versions, not future ones. - (define (version? n) - (member n (iota (1+ %boot-parameters-version)))) - - (match (read port) - (('boot-parameters ('version (? version? version)) - ('label label) ('root-device root) - ('kernel kernel) - rest ...) - (boot-parameters - (version version) - (label label) - (root-device (device-sexp->device root)) - - (bootloader-name - (match (assq 'bootloader-name rest) - ((_ args) args) - (#f 'grub))) ; for compatibility reasons. - - (bootloader-menu-entries - (match (assq 'bootloader-menu-entries rest) - ((_ entries) (map sexp->menu-entry entries)) - (#f '()))) - - ;; In the past, we would store the directory name of linux instead of - ;; the absolute file name of its image. Detect that and correct it. - (kernel (if (string=3D? kernel (direct-store-path kernel)) - (string-append kernel "/" - (system-linux-image-file-name)) - kernel)) - - (kernel-arguments - (match (assq 'kernel-arguments rest) - ((_ args) args) - (#f '()))) ;the old format - - (initrd - (match (assq 'initrd rest) - (('initrd ('string-append directory file)) ;the old format - (string-append directory file)) - (('initrd (? string? file)) - file) - (#f #f))) - - (multiboot-modules - (match (assq 'multiboot-modules rest) - ((_ args) args) - (#f '()))) - - (locale - (match (assq 'locale rest) - ((_ locale) locale) - (#f #f))) - - (store-device - ;; Linux device names like "/dev/sda1" are not suitable GRUB device - ;; identifiers, so we just filter them out. - (ensure-not-/dev - (match (assq 'store rest) - (('store ('device #f) _ ...) - root-device) - (('store ('device device) _ ...) - (device-sexp->device device)) - (_ ;the old format - root-device)))) - - (store-directory-prefix - (match (assq 'store rest) - (('store . store-data) - (match (assq 'directory-prefix store-data) - (('directory-prefix prefix) prefix) - ;; No directory-prefix found. - (_ #f))) - (_ - ;; No store found, old format. - #f))) - - (store-crypto-devices - (match (assq 'store rest) - (('store . store-data) - (match (assq 'crypto-devices store-data) - (('crypto-devices (devices ...)) - (map uuid-sexp->uuid devices)) - (('crypto-devices dev) - (warning (G_ "unrecognized crypto-devices ~S at '~a'~%") - dev (port-filename port)) - '()) - (_ - ;; No crypto-devices found. - '()))) - (_ - ;; No store found, old format. - '()))) - - (store-mount-point - (match (assq 'store rest) - (('store ('device _) ('mount-point mount-point) _ ...) - mount-point) - (_ ;the old format - "/"))))) - (x ;unsupported format - (raise - (make-compound-condition - (formatted-message - (G_ "unrecognized boot parameters at '~a'~%") - (port-filename port)) - (condition - (&fix-hint (hint (format #f (G_ "This probably means that this ver= sion -of Guix is older than the one that created @file{~a}. To address this, you -need to update Guix: - -@example -guix pull -@end example") - (port-filename port)))))))))) - -(define (read-boot-parameters-file system) - "Read boot parameters from SYSTEM's (system or generation) \"parameters\" -file and returns the corresponding object or #f if the -format is unrecognized. -The object has its kernel-arguments extended in order to make it bootable." - (let* ((file (string-append system "/parameters")) - (params (call-with-input-file file read-boot-parameters)) - (root (boot-parameters-root-device params)) - (version (boot-parameters-version params))) - (boot-parameters - (inherit params) - (kernel-arguments (append (bootable-kernel-arguments system root vers= ion) - (boot-parameters-kernel-arguments params)))= ))) - (define (boot-parameters->menu-entry conf) "Return a instance given CONF, a instance= ." (let* ((kernel (boot-parameters-kernel conf)) diff --git a/gnu/system/boot.scm b/gnu/system/boot.scm new file mode 100644 index 0000000000..87b0184f98 --- /dev/null +++ b/gnu/system/boot.scm @@ -0,0 +1,277 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2013-2022 Ludovic Court=C3=A8s +;;; Copyright =C2=A9 2015 Mark H Weaver +;;; Copyright =C2=A9 2015, 2016 Alex Kost +;;; Copyright =C2=A9 2016 Chris Marusich +;;; Copyright =C2=A9 2017 Mathieu Othacehe +;;; Copyright =C2=A9 2019 Meiyo Peng +;;; Copyright =C2=A9 2019, 2020 Miguel =C3=81ngel Arruga Vivas +;;; Copyright =C2=A9 2020 Danny Milosavljevic +;;; Copyright =C2=A9 2020, 2021 Brice Waegeneire +;;; Copyright =C2=A9 2020 Florian Pelz +;;; Copyright =C2=A9 2020, 2022 Maxim Cournoyer +;;; Copyright =C2=A9 2020, 2023 Janneke Nieuwenhuizen +;;; Copyright =C2=A9 2020, 2022 Efraim Flashner +;;; Copyright =C2=A9 2021 Maxime Devos +;;; Copyright =C2=A9 2021 raid5atemyhomework +;;; Copyright =C2=A9 2023 Bruno Victal +;;; Copyright =C2=A9 2023 Felix Lechner +;;; +;;; 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 . + +(define-module (gnu system boot) + #:use-module (guix store) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (gnu bootloader) + #:use-module (gnu system file-systems) + #:use-module (ice-9 format) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-35) + #:use-module (rnrs bytevectors) + #:export (boot-parameters + boot-parameters? + boot-parameters-label + boot-parameters-root-device + boot-parameters-bootloader-name + boot-parameters-bootloader-menu-entries + boot-parameters-store-crypto-devices + boot-parameters-store-device + boot-parameters-store-directory-prefix + boot-parameters-store-mount-point + boot-parameters-locale + boot-parameters-kernel + boot-parameters-kernel-arguments + boot-parameters-initrd + boot-parameters-multiboot-modules + boot-parameters-version + %boot-parameters-version + + read-boot-parameters + read-boot-parameters-file + + ensure-not-/dev)) + +;;; +;;; Boot parameters +;;; + +;;; Version 1 was introduced early 2022 to mark the departure from long op= tion +;;; names such as '--load' to the more conventional initrd option names li= ke +;;; 'gnu.load'. +;;; +;;; When bumping the boot-parameters version, increment it by one (1). +(define %boot-parameters-version 1) + +(define-record-type* + boot-parameters make-boot-parameters boot-parameters? + (label boot-parameters-label) + ;; Because we will use the 'store-device' to create the GRUB search comm= and, + ;; the 'store-device' has slightly different semantics than 'root-device= '. + ;; The 'store-device' can be a file system uuid, a file system label, or= #f, + ;; but it cannot be a device file name such as "/dev/sda3", since GRUB w= ould + ;; not understand that. The 'root-device', on the other hand, correspon= ds + ;; exactly to the device field of the object representing = the + ;; OS's root file system, so it might be a device file name like + ;; "/dev/sda3". The 'store-directory-prefix' field contains #f or the s= tore + ;; file name inside the 'store-device' as it is seen by GRUB, e.g. it wo= uld + ;; contain "/storefs" if the store is located in that subvolume of a btr= fs + ;; partition. + (root-device boot-parameters-root-device) + (bootloader-name boot-parameters-bootloader-name) + (bootloader-menu-entries ;list of + boot-parameters-bootloader-menu-entries) + (store-device boot-parameters-store-device) + (store-mount-point boot-parameters-store-mount-point) + (store-directory-prefix boot-parameters-store-directory-prefix) + (store-crypto-devices boot-parameters-store-crypto-devices + (default '())) + (locale boot-parameters-locale) + (kernel boot-parameters-kernel) + (kernel-arguments boot-parameters-kernel-arguments) + (initrd boot-parameters-initrd) + (multiboot-modules boot-parameters-multiboot-modules) + (version boot-parameters-version ;positive integer + (default %boot-parameters-version))) + +(define (read-boot-parameters port) + "Read boot parameters from PORT and return the corresponding + object. Raise an error if the format is unrecognized." + (define device-sexp->device + (match-lambda + (('uuid (? symbol? type) (? bytevector? bv)) + (bytevector->uuid bv type)) + (('file-system-label (? string? label)) + (file-system-label label)) + ((? bytevector? bv) ;old format + (bytevector->uuid bv 'dce)) + ((? string? device) + (if (string-contains device ":/") + device ; nfs-root + ;; It used to be that we would not distinguish between labels a= nd + ;; device names. Try to infer the right thing here. + (if (string-prefix? "/" device) + device + (file-system-label device)))))) + (define uuid-sexp->uuid + (match-lambda + (('uuid (? symbol? type) (? bytevector? bv)) + (bytevector->uuid bv type)) + (x + (warning (G_ "unrecognized uuid ~a at '~a'~%") x (port-filename por= t)) + #f))) + + ;; New versions are not backward-compatible, so only accept past and cur= rent + ;; versions, not future ones. + (define (version? n) + (member n (iota (1+ %boot-parameters-version)))) + + (match (read port) + (('boot-parameters ('version (? version? version)) + ('label label) ('root-device root) + ('kernel kernel) + rest ...) + (boot-parameters + (version version) + (label label) + (root-device (device-sexp->device root)) + + (bootloader-name + (match (assq 'bootloader-name rest) + ((_ args) args) + (#f 'grub))) ; for compatibility reasons. + + (bootloader-menu-entries + (match (assq 'bootloader-menu-entries rest) + ((_ entries) (map sexp->menu-entry entries)) + (#f '()))) + + ;; In the past, we would store the directory name of linux instead of + ;; the absolute file name of its image. Detect that and correct it. + (kernel (if (string=3D? kernel (direct-store-path kernel)) + (string-append kernel "/" + (system-linux-image-file-name)) + kernel)) + + (kernel-arguments + (match (assq 'kernel-arguments rest) + ((_ args) args) + (#f '()))) ;the old format + + (initrd + (match (assq 'initrd rest) + (('initrd ('string-append directory file)) ;the old format + (string-append directory file)) + (('initrd (? string? file)) + file) + (#f #f))) + + (multiboot-modules + (match (assq 'multiboot-modules rest) + ((_ args) args) + (#f '()))) + + (locale + (match (assq 'locale rest) + ((_ locale) locale) + (#f #f))) + + (store-device + ;; Linux device names like "/dev/sda1" are not suitable GRUB device + ;; identifiers, so we just filter them out. + (ensure-not-/dev + (match (assq 'store rest) + (('store ('device #f) _ ...) + root-device) + (('store ('device device) _ ...) + (device-sexp->device device)) + (_ ;the old format + root-device)))) + + (store-directory-prefix + (match (assq 'store rest) + (('store . store-data) + (match (assq 'directory-prefix store-data) + (('directory-prefix prefix) prefix) + ;; No directory-prefix found. + (_ #f))) + (_ + ;; No store found, old format. + #f))) + + (store-crypto-devices + (match (assq 'store rest) + (('store . store-data) + (match (assq 'crypto-devices store-data) + (('crypto-devices (devices ...)) + (map uuid-sexp->uuid devices)) + (('crypto-devices dev) + (warning (G_ "unrecognized crypto-devices ~S at '~a'~%") + dev (port-filename port)) + '()) + (_ + ;; No crypto-devices found. + '()))) + (_ + ;; No store found, old format. + '()))) + + (store-mount-point + (match (assq 'store rest) + (('store ('device _) ('mount-point mount-point) _ ...) + mount-point) + (_ ;the old format + "/"))))) + (x ;unsupported format + (raise + (make-compound-condition + (formatted-message + (G_ "unrecognized boot parameters at '~a'~%") + (port-filename port)) + (condition + (&fix-hint (hint (format #f (G_ "This probably means that this ver= sion +of Guix is older than the one that created @file{~a}. To address this, you +need to update Guix: + +@example +guix pull +@end example") + (port-filename port)))))))))) + +(define (read-boot-parameters-file system) + "Read boot parameters from SYSTEM's (system or generation) \"parameters\" +file and returns the corresponding object or #f if the +format is unrecognized. +The object has its kernel-arguments extended in order to make it bootable." + (let* ((file (string-append system "/parameters")) + (params (call-with-input-file file read-boot-parameters)) + (root (boot-parameters-root-device params)) + (version (boot-parameters-version params))) + (boot-parameters + (inherit params) + (kernel-arguments (append (bootable-kernel-arguments system root vers= ion) + (boot-parameters-kernel-arguments params)))= ))) + +(define (ensure-not-/dev device) + "If DEVICE starts with a slash, return #f. This is meant to filter out +Linux device names such as /dev/sda, and to preserve GRUB device names and +file system labels." + (if (and (string? device) (string-prefix? "/" device)) + #f + device)) + +;;; boot.scm ends here diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 955dfa618d..40df166fd7 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -66,6 +66,7 @@ (define-module (guix scripts system) #:use-module (gnu image) #:use-module (gnu system) #:use-module (gnu bootloader) + #:use-module (gnu system boot) #:use-module (gnu system file-systems) #:use-module (gnu system image) #:use-module (gnu system mapped-devices) diff --git a/tests/boot-parameters.scm b/tests/boot-parameters.scm index 03a1d01aff..2e7976aa6c 100644 --- a/tests/boot-parameters.scm +++ b/tests/boot-parameters.scm @@ -27,6 +27,7 @@ (define-module (test-boot-parameters) #:use-module (gnu bootloader) #:use-module (gnu bootloader grub) #:use-module (gnu system) + #:use-module (gnu system boot) #:use-module (gnu system file-systems) #:use-module (gnu system uuid) #:use-module ((guix diagnostics) #:select (formatted-message?)) --=20 2.41.0