From debbugs-submit-bounces@debbugs.gnu.org Sun May 09 11:32:23 2021 Received: (at submit) by debbugs.gnu.org; 9 May 2021 15:32:23 +0000 Received: from localhost ([127.0.0.1]:55883 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lflPr-0000mK-OF for submit@debbugs.gnu.org; Sun, 09 May 2021 11:32:23 -0400 Received: from lists.gnu.org ([209.51.188.17]:39020) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lflPq-0000mE-7u for submit@debbugs.gnu.org; Sun, 09 May 2021 11:32:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lflPo-00011L-9h for guix-patches@gnu.org; Sun, 09 May 2021 11:32:20 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:37178) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lflPg-0006A8-Il for guix-patches@gnu.org; Sun, 09 May 2021 11:32:19 -0400 Received: from smtp.vodafone.de (smtpa08.fra-mediabeam.com [10.2.0.39]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 0C370120F23 for ; Sun, 9 May 2021 17:32:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1620574326; bh=UhRzRmRnwRHIkQQ+ge0pZrtx8Z6kt5OPxIsuTo6l+JA=; h=From:Subject:Date:To; b=T8mepW7t26lFk5Rh0fYi9E2RV2ufjrBnqZkJnfDQnL+D2mJNqC3RCqp6ROsvwE1/R WJXGTGy5xulouQmiyC8uDG2KymRbYbR0AP3OYCGh489JgPeyCRaQwnIHn1fXDhpcQX XVv+thBP0Ci0siy3vp76B8s29xS3NE+0IvjlXxck= Received: from macbook-pro.kuh-wiese.my-router.de (dslb-002-206-141-063.002.206.pools.vodafone-ip.de [2.206.141.63]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 5EF28140198 for ; Sun, 9 May 2021 15:32:05 +0000 (UTC) From: Stefan Content-Type: multipart/mixed; boundary="Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369" Subject: Patches to install guix system on Raspberry Pi Message-Id: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> Date: Sun, 9 May 2021 17:32:04 +0200 To: guix-patches@gnu.org Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 134108 X-purgate-ID: 155817::1620574325-000006F1-FCAAA79D/0/0 Received-SPF: pass client-ip=145.253.239.133; envelope-from=stefan-guix@vodafonemail.de; helo=smtpout2.vodafonemail.de X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi! This patch series adds support for the Raspberry Pi. It allows to use = =E2=80=98sudo -E guix system init =E2=80=A6 /mnt=E2=80=99 with the root = partition mounted at /mnt and the boot partition mounted at = /mnt/boot/efi, as you would expect it for a PC with UEFI. Installing for = netboot is possible as well. It is currently not possible to build an image with this patch series, = because of the intercepting handling for efi system image creation. Some of these patches are generic and not related to the Raspberry Pi. I = hope they will be a useful contribution for everyone. Here is a quick overview of the single patches: 01: Disable the tests on aarch64 for qemu-minimal, because it is = non-deterministic but needed to build grub. 02: Rework the grub-efi-netboot-bootloader and add a = grub-efi-netboot-removable-bootloader which then are pre-installed. This = allows a simplification of the efi-bootloader-chain, as these = pre-installed bootloaders just need to be copied and can therefore = easily be collected in a bootloader-profile. 03: A new build-side module to modify a defconfig. It is used to = customize U-Boot and Linux packages. 04: Customized and pre-installed U-Boot packages for the Raspberry Pi. 05: Fixed the EXTRAVERSION variable used to build Linux, so that the = extra-version argument will be visible with uname.=20 06: New function to modify a Linux package by using another defconfig = and/or adding or removing configurations. 07: Raspberry Pi specific defconfig objects. 08: Some helpers to construct config.txt files for the Raspberry Pi = firmware. 09: A function to create a package with device-tree files from a Linux = package for the Raspberry Pi. 10: A bootloader for the Raspberry Pi. Additionally two examples of = operating-system definitions to boot from local storage or over network, = the latter is making necessary configuration changes to Linux. The firmware topic is excluded. In the same way that guix assumes that = some UEFI firmware is already present on a PC, this patch series assumes = that a firmware to start U-Boot is already present. The grub bootloaders are usable on PCs as well. In contrast to the = normal grub-efi, all grub files are copied to the EFI system partition, = instead of the root partition. This is a side effect of the netboot = capability. Maybe this is helpful for some spacial cases. I realized for = example that the normal grub-efi locates the partition containing the = grub.cfg by a device name like (hd0,gpt1), this may be problematic when = adding disks to a system. The new grub bootloaders determine the = partition by UUID. The new possibility to customize Linux with (modify-linux) will be = useful for anyone in need to do small configuration changes. There is = also the possibility to pass an own defconfig file to this function. It = can either be the name of a defconfig file from the Linux sources, or it = can be a file-like object, like produced by (local-file) or possibly = downloaded with the new (make-defconfig) function. Bye Stefan --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=01-gnu-qemu-disable-tests-on.patch Content-Type: application/octet-stream; name="01-gnu-qemu-disable-tests-on.patch" Content-Transfer-Encoding: 7bit gnu: qemu: Disable tests on aarch64. From: Stefan * gnu/packages/virtualization.scm (qemu): Disable tests on aarch64 because of . --- gnu/packages/virtualization.scm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index a2df3e763c..0f90a7feea 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -172,10 +172,11 @@ (outputs '("out" "static" "doc")) ;5.3 MiB of HTML docs (build-system gnu-build-system) (arguments - ;; FIXME: Disable tests on i686 to work around - ;; . - `(#:tests? ,(or (%current-target-system) - (not (string=? "i686-linux" (%current-system)))) + ;; FIXME: Disable tests on aarch64 and i686 to work around + ;; and . + `(#:tests? ,(and (not (target-aarch64?)) + (or (%current-target-system) + (not (string=? "i686-linux" (%current-system))))) #:configure-flags (let ((gcc (string-append (assoc-ref %build-inputs "gcc") "/bin/gcc")) (out (assoc-ref %outputs "out"))) --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=02-gnu-bootloader-rework-chaining.patch Content-Type: application/octet-stream; name="02-gnu-bootloader-rework-chaining.patch" Content-Transfer-Encoding: quoted-printable gnu:=20bootloader:=20Rework=20chaining,=20add=20= grub-efi-netboot-removable-bootloader.=0A=0AFrom:=20Stefan=20= =0A=0A*=20doc/guix.texi=20(Bootloader=20= Configuration):=20Describe=20the=20new=0A= =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99.=20=20Mention=20= used=20sub-directories=20and=0Athat=20the=20UEFI=20Boot=20Manager=20is=20= not=20modified.=20=20Advice=20to=20disable=20write-access=0Aover=20TFTP.=0A= *=20gnu/bootloader.scm=20(efi-bootloader-profile):=20Allow=20a=20list=20= of=20packages=20and=0Acollect=20everything=20directly=20in=20the=20= profile,=20avoiding=20a=20separate=20collection=0Adirectory.=20=20= Renamed=20the=20profile=20from=20"bootloader-profile"=20to=0A= "efi-bootloader-profile".=0A[bootloader-collection]:=20Renamed=20to=20= =E2=80=A6=0A[efi-bootloader-profile-hook]:=20=E2=80=A6=20this=20and=20= removed=20unused=20modules=20and=20the=0Acreation=20of=20the=20now=20= unneeded=20collection=20directory.=0A(efi-bootloader-chain):=20Added=20= packages=20and=20disk-image-installer=20arguments.=0ARemoved=20handling=20= of=20the=20collection=20directory,=20now=20only=20calling=20the=20given=0A= installer=20procedure.=0A*=20gnu/bootloader/grub.scm=20= (make-grub-efi-netboot-installer):=20New=20helper.=0A= (make-grub-configuration):=20New=20helper=20based=20on=20= (grub-configuration-file).=0AAdding=20grub=20argument,=20fixed=20= indentation,=20removend=20code=20to=20get=20grub.=0A= (grub-configuration-file):=20Now=20using=20(make-grub-configuration).=0A= (grub-efi-configuration-file):=20New=20function=20using=20= (make-grub-configuration).=0AInstead=20of=20getting=20the=20grub-efi=20= package=20from=20the=20bootloader-configuration=0Athis=20function=20= refers=20to=20the=20grub-efi=20package=20directly.=0A(grub-cfg):=20New=20= variable=20to=20replace=20"/boot/grub/grub.cfg".=0A= (install-grub-efi-netboot):=20Removed,=20the=20functionality=20got=20= moved.=0A(make-grub-efi-netboot-installer):=20New=20helper=20function=20= to=20return=20a=20customized=0Ainstaller=20for=20a=20certain=20= efi-sub-directory.=20=20The=20installer=20basically=20copies=0Aa=20= pre-installed=20efi-bootloader-profile,=20and=20adds=20needed=20symlinks=20= for=20booting=0Aover=20network,=20or=20=E2=80=93=20on=20an=20ESP=20=E2=80=93= =20an=20intermediate=20grub-cfg=20to=20load=20the=20final=0Agrub-cfg=20= file.=0A(grub-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=0A= (grub-efi-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=20=20= Removed=20inheritance,=0Agiving=20complete=20set=20of=20fields.=0A= (make-grub-efi-netboot-bootloader):=20New=20helper=20function.=0A= (grub-efi-netboot-bootloader):=20Now=20using=20the=20helper.=0A= (grub-efi-netboot-removable-bootloader):=20New=20bootloader=20using=20= the=20helper.=0AIt=20uses=20the=20efi-sub-directory=20"efi/boot"=20for=20= removable=20media.=0A*=20gnu/packages/bootloaders.scm=20= (make-grub-efi-netboot):=20New=20function=20to=20return=0Aa=20grub-efi=20= package=20pre-installed=20via=20grub-mknetdir,=20customized=20for=20an=0A= efi-sub-directory=20and=20able=20to=20boot=20via=20network=20and=20local=20= storage.=0A=0AThe=20rework=20allows=20to=20use=20an=20= (efi-bootloader-chain)=20like=20this,=20which=20is=20able=0Ato=20boot=20= over=20network=20or=20local=20storage,=20depending=20on=20the=20= symlink-support=20at=0Athe=20bootloader-target:=0A=0A(operating-system=0A= =20(bootloader=0A=20=20=20(bootloader-configuration=0A=20=20=20=20=20= (bootloader=0A=20=20=20=20=20=20=20(efi-bootloader-chain=0A=20=20=20=20=20= =20=20=20=20grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20= =20=20#:packages=20(list=20my-firmware-package=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20my-u-boot-package)=0A= =20=20=20=20=20=20=20=20=20#:files=20(list=20(plain-file=20"config.txt"=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"kernel=3Du-boot.bin"))=0A=20=20=20=20=20=20= =20=20=20#:hooks=20my-special-bootloader-profile-manipulator))=0A=20=20=20= =20=20(target=20"/booti/efi")=0A=20=20=20=20=20=E2=80=A6))=0A=20=E2=80=A6)= =0A)=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=2024=20+++-=0A=20gnu/bootloader.scm=20=20=20=20=20=20=20=20=20= =20=20|=20=20104=20+++++++++---------=0A=20gnu/bootloader/grub.scm=20=20=20= =20=20=20|=20=20241=20++++++++++++++++++++++++++----------------=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2090=20++++++++++++++++=0A=204=20= files=20changed,=20308=20insertions(+),=20151=20deletions(-)=0A=0Adiff=20= --git=20a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20= 0947b9f028..40cef21f78=20100644=0A---=20a/doc/guix.texi=0A+++=20= b/doc/guix.texi=0A@@=20-32595,8=20+32595,9=20@@=20The=20type=20of=20a=20= bootloader=20configuration=20declaration.=0A=20@cindex=20BIOS,=20= bootloader=0A=20The=20bootloader=20to=20use,=20as=20a=20= @code{bootloader}=20object.=20=20For=20now=0A=20@code{grub-bootloader},=20= @code{grub-efi-bootloader},=0A-@code{grub-efi-netboot-bootloader},=20= @code{extlinux-bootloader}=20and=0A-@code{u-boot-bootloader}=20are=20= supported.=0A+@code{grub-efi-netboot-bootloader},=0A= +@code{grub-efi-netboot-removable-bootloader},=0A= +@code{extlinux-bootloader}=20and=20@code{u-boot-bootloader}=20are=20= supported.=0A=20=0A=20@cindex=20ARM,=20bootloaders=0A=20@cindex=20= AArch64,=20bootloaders=0A@@=20-32622,9=20+32623,10=20@@=20build=20a=20= diskless=20Guix=20system.=0A=20=0A=20The=20installation=20of=20the=20= @code{grub-efi-netboot-bootloader}=20generates=20the=20content=0A=20of=20= the=20TFTP=20root=20directory=20at=20@code{target}=0A-(@pxref{Bootloader=20= Configuration,=20@code{target}}),=20to=20be=20served=20by=20a=20TFTP=20= server.=0A-=20You=20may=20want=20to=20mount=20your=20TFTP=20server=20= directory=20onto=20@code{target}=20to=20move=20the=0A-required=20files=20= to=20the=20TFTP=20server=20automatically.=0A+(@pxref{Bootloader=20= Configuration,=20@code{target}})=20below=20the=20sub-directory=0A= +@file{efi/Guix},=20to=20be=20served=20by=20a=20TFTP=20server.=20=20You=20= may=20want=20to=20mount=20your=20TFTP=0A+server=20directory=20onto=20= @code{target}=20to=20move=20the=20required=20files=20to=20the=20TFTP=0A= +server=20automatically=20during=20installation.=0A=20=0A=20If=20you=20= plan=20to=20use=20an=20NFS=20root=20file=20system=20as=20well=20= (actually=20if=20you=20mount=20the=0A=20store=20from=20an=20NFS=20= share),=20then=20the=20TFTP=20server=20needs=20to=20serve=20the=20file=0A= @@=20-32655,13=20+32657,23=20@@=20TFTP,=20for=20example=20by=20copying=20= them=20into=20the=20TFTP=20root=20directory=20at=20@code{target}.=0A=20= It=20is=20important=20to=20note=20that=20symlinks=20pointing=20outside=20= the=20TFTP=20root=20directory=0A=20may=20need=20to=20be=20allowed=20in=20= the=20configuration=20of=20your=20TFTP=20server.=20=20Further=20the=0A=20= store=20link=20exposes=20the=20whole=20store=20through=20TFTP@.=20=20= Both=20points=20need=20to=20be=0A-considered=20carefully=20for=20= security=20aspects.=0A+considered=20carefully=20for=20security=20= aspects.=20=20It=20is=20advised=20to=20disable=20any=20TFTP=0A+write=20= access!=0A+=0A+Please=20note,=20that=20this=20bootloader=20will=20not=20= modify=20the=20=E2=80=98UEFI=20Boot=20Manager=E2=80=99=20of=0A+the=20= system.=0A=20=0A=20Beside=20the=20@code{grub-efi-netboot-bootloader},=20= the=20already=20mentioned=20TFTP=20and=0A=20NFS=20servers,=20you=20also=20= need=20a=20properly=20configured=20DHCP=20server=20to=20make=20the=20= booting=0A=20over=20netboot=20possible.=20=20For=20all=20this=20we=20can=20= currently=20only=20recommend=20you=20to=20look=0A=20for=20instructions=20= about=20@acronym{PXE,=20Preboot=20eXecution=20Environment}.=0A=20=0A= +@vindex=20grub-efi-netboot-removable-bootloader=0A= +@code{grub-efi-netboot-removable-bootloader}=20is=20identical=20to=0A= +@code{grub-efi-netboot-bootloader}=20with=20the=20exception=20that=20= the=20sub-directory=0A+@file{efi/boot}=20will=20be=20used=20instead=20of=20= @file{efi/Guix}=20to=20comply=20to=20the=20UEFI=0A+specification=20for=20= removable=20media.=0A+=0A=20@item=20@code{target}=0A=20This=20is=20a=20= string=20denoting=20the=20target=20onto=20which=20to=20install=20the=0A=20= bootloader.=0Adiff=20--git=20a/gnu/bootloader.scm=20b/gnu/bootloader.scm=0A= index=206d7352ddd2..f7c4a8f338=20100644=0A---=20a/gnu/bootloader.scm=0A= +++=20b/gnu/bootloader.scm=0A@@=20-232,26=20+232,22=20@@=20record."=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20(force=20%bootloaders))=0A=20=20=20=20= =20=20=20(leave=20(G_=20"~a:=20no=20such=20bootloader~%")=20name)))=0A=20= =0A-(define=20(efi-bootloader-profile=20files=20bootloader-package=20= hooks)=0A-=20=20"Creates=20a=20profile=20with=20BOOTLOADER-PACKAGE=20and=20= a=20directory=20collection/=20with=0A-links=20to=20additional=20FILES=20= from=20the=20store.=20=20This=20collection=20is=20meant=20to=20be=20used=0A= -by=20the=20bootloader=20installer.=0A+(define=20(efi-bootloader-profile=20= packages=20files=20hooks)=0A+=20=20"Creates=20a=20profile=20from=20the=20= lists=20of=20PACKAGES=20and=20FILES=20from=20the=20store.=0A+This=20= profile=20is=20meant=20to=20be=20used=20by=20the=20bootloader-installer.=0A= =20=0A=20FILES=20is=20a=20list=20of=20file=20or=20directory=20names=20= from=20the=20store,=20which=20will=20be=0A-symlinked=20into=20the=20= collection/=20directory.=20=20If=20a=20directory=20name=20ends=20with=20= '/',=0A-then=20the=20directory=20content=20instead=20of=20the=20= directory=20itself=20will=20be=20symlinked=0A-into=20the=20collection/=20= directory.=0A+symlinked=20into=20the=20profile.=20=20If=20a=20directory=20= name=20ends=20with=20'/',=20then=20the=0A+directory=20content=20instead=20= of=20the=20directory=20itself=20will=20be=20symlinked=20into=20the=0A= +profile.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A+FILES=20may=20contain=20= file=20like=20objects=20produced=20by=20procedures=20like=20plain-file,=0A= =20local-file,=20etc.,=20or=20package=20contents=20produced=20with=20= file-append.=0A=20=0A=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A-=20=20(define=20(bootloader-collection=20= manifest)=0A+=20=20(define=20(efi-bootloader-profile-hook=20manifest)=0A=20= =20=20=20=20(define=20build=0A-=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(ice-9=20ftw)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(srfi=20srfi-26))=0A+=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils))=0A=20=20=20=20=20=20=20= =20=20=20=20#~(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20((guix=20build=20utils)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:select=20(mkdir-p=20= strip-store-file-name))=0A@@=20-275,7=20+271,7=20@@=20HOOKS=20lists=20= additional=20hook=20functions=20to=20modify=20the=20profile."=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20(define=20(name-is-store-entry?=20name)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Return=20#t=20if=20NAME=20is=20= a=20direct=20store=20entry=20and=20nothing=20inside."=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(string-index=20(strip-store-file-name=20= name)=20#\/)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20(let*=20= ((collection=20(string-append=20#$output=20"/collection"))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(let*=20((output=20#$output)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20'#$files)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(directories=20(filter=20= name-ends-with-/?=20files))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(names-from-directories=0A@@=20-284,11=20+280,11=20@@=20= HOOKS=20lists=20additional=20hook=20functions=20to=20modify=20the=20= profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20directories))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(names=20(append=20= names-from-directories=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20= name-ends-with-/?=20files))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20collection)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20output)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (every=20file-exists?=20names)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(for-each=20(lambda=20(name)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-to=20name=20collection=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(symlink-to=20name=20= output=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (name-is-store-entry?=20name)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20strip-store-file-name=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20basename)))=0A@@=20= -296,57=20+292,63=20@@=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#t)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#f)))))=0A=20=0A-=20=20=20=20(gexp->derivation=20= "bootloader-collection"=0A+=20=20=20=20(gexp->derivation=20= "efi-bootloader-profile"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20build=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:local-build?=20#t=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:substitutable?=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:properties=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((type=20.=20profile-hook)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hook=20.=20bootloader-collection))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (hook=20.=20efi-bootloader-profile-hook))))=0A=20=0A-=20=20(profile=20= (content=20(packages->manifest=20(list=20bootloader-package)))=0A-=20=20=20= =20=20=20=20=20=20=20=20(name=20"bootloader-profile")=0A-=20=20=20=20=20=20= =20=20=20=20=20(hooks=20(append=20(list=20bootloader-collection)=20= hooks))=0A+=20=20(profile=20(content=20(packages->manifest=20packages))=0A= +=20=20=20=20=20=20=20=20=20=20=20(name=20"efi-bootloader-profile")=0A+=20= =20=20=20=20=20=20=20=20=20=20(hooks=20(cons=20= efi-bootloader-profile-hook=20hooks))=0A=20=20=20=20=20=20=20=20=20=20=20= =20(locales?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (allow-collisions?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (relative-symlinks?=20#f)))=0A=20=0A-(define*=20(efi-bootloader-chain=20= files=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20final-bootloader=0A+(define*=20= (efi-bootloader-chain=20final-bootloader=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(packages=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20= '())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hooks=20'())=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= installer)=0A-=20=20"Define=20a=20bootloader=20chain=20with=20= FINAL-BOOTLOADER=20as=20the=20final=20bootloader=20and=0A-certain=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20installer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= disk-image-installer)=0A+=20=20"Define=20a=20chain=20of=20bootloaders=20= with=20the=20FINAL-BOOTLOADER,=20optional=20PACKAGES,=0A+and=20optional=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A-local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=20=20They=20= will=20be=0A-collected=20inside=20a=20directory=20collection/=20inside=20= a=20generated=20bootloader=20profile,=0A-which=20will=20be=20passed=20to=20= the=20INSTALLER.=0A+The=20package=20of=20the=20FINAL-BOOTLOADER=20and=20= all=20PACKAGES=20and=20FILES=20will=20be=20placed=0A+in=20an=20= efi-bootloader-profile,=20which=20will=20be=20passed=20to=20the=20= INSTALLER.=0A+=0A+FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20procedures=20like=20plain-file,=0A+local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=0A=20=0A=20If=20= a=20directory=20name=20in=20FILES=20ends=20with=20'/',=20then=20the=20= directory=20content=20instead=0A-of=20the=20directory=20itself=20will=20= be=20symlinked=20into=20the=20collection/=20directory.=0A+of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=20= efi-bootloader-profile.=0A=20=0A=20The=20procedures=20in=20the=20HOOKS=20= list=20can=20be=20used=20to=20further=20modify=20the=20bootloader=0A=20= profile.=20=20It=20is=20possible=20to=20pass=20a=20single=20function=20= instead=20of=20a=20list.=0A=20=0A-If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20function=20will=20be=20called=20to=20install=0A= -the=20bootloader.=20=20Otherwise=20the=20installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A-=20=20(let*=20= ((final-installer=20(or=20installer=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A-=20=20=20=20=20=20=20=20=20= (profile=20(efi-bootloader-profile=20files=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(bootloader-package=20final-bootloader)=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20hooks=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20= hooks)))))=0A-=20=20=20=20(bootloader=0A-=20=20=20=20=20(inherit=20= final-bootloader)=0A-=20=20=20=20=20(package=20profile)=0A-=20=20=20=20=20= (installer=0A-=20=20=20=20=20=20#~(lambda=20(bootloader=20target=20= mount-point)=0A-=20=20=20=20=20=20=20=20=20=20(#$final-installer=20= bootloader=20target=20mount-point)=0A-=20=20=20=20=20=20=20=20=20=20= (copy-recursively=0A-=20=20=20=20=20=20=20=20=20=20=20(string-append=20= bootloader=20"/collection")=0A-=20=20=20=20=20=20=20=20=20=20=20= (string-append=20mount-point=20target)=0A-=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A-=20=20=20=20=20=20=20=20=20=20=20#:log=20= (%make-void-port=20"w")))))))=0A+If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20gexp=20procedure=20will=20be=20called=20to=0A= +install=20the=20efi-bootloader-profile.=20=20Otherwise=20the=20= installer=20of=20the=0A+FINAL-BOOTLOADER=20will=20be=20called.=0A+=0A+If=20= the=20DISK-IMAGE-INSTALLER=20is=20used,=20then=20this=20gexp=20procedure=20= will=20be=20called=0A+to=20install=20the=20efi-bootloader-profile=20into=20= a=20disk-image.=20=20Otherwise=20the=0A+disk-image-installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A+=20=20(bootloader=0A+=20=20=20= =20(inherit=20final-bootloader)=0A+=20=20=20=20(name=20= "efi-bootloader-chain")=0A+=20=20=20=20(package=0A+=20=20=20=20=20= (efi-bootloader-profile=20(cons=20(bootloader-package=20= final-bootloader)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20packages)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20files=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= hooks=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20hooks))))=0A+=20=20=20=20= (installer=0A+=20=20=20=20=20(or=20installer=0A+=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A+=20=20=20=20= (disk-image-installer=0A+=20=20=20=20=20(or=20disk-image-installer=0A+=20= =20=20=20=20=20=20=20=20(bootloader-disk-image-installer=20= final-bootloader)))))=0Adiff=20--git=20a/gnu/bootloader/grub.scm=20= b/gnu/bootloader/grub.scm=0Aindex=20ce146aba3c..c03a04818e=20100644=0A= ---=20a/gnu/bootloader/grub.scm=0A+++=20b/gnu/bootloader/grub.scm=0A@@=20= -50,11=20+50,12=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-color-highlight=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-gfxmode=0A=20=0A-=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-netboot=0A+=20=20=20=20=20=20=20=20=20=20=20=20= make-grub-efi-netboot-installer=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-mkrescue-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-minimal-bootloader=0A=20=0A@@=20-346,7=20+347,7=20@@=20code."=0A=20=20= =20=20=20=20=20=20=20((or=20#f=20(?=20string?))=0A=20=20=20=20=20=20=20=20= =20=20#~(format=20#f=20"search=20--file=20--set=20~a"=20#$file)))))=0A=20= =0A-(define*=20(grub-configuration-file=20config=20entries=0A+(define*=20= (make-grub-configuration=20grub=20config=20entries=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale=20#f)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(system=20(%current-system))=0A@@=20-376,27=20= +377,27=20@@=20when=20booting=20a=20root=20file=20system=20on=20a=20= Btrfs=20subvolume."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (initrd=20(normalize-file=20(menu-entry-initrd=20entry)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20device-mount-point=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20store-directory-prefix)))=0A-=20=20=20=20=20=20= =20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A-=20=20=20=20=20=20=20=20= =20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20INITRD=20= in=20case=0A-=20=20=20=20=20=20=20=20=20;;=20DEVICE-MOUNT-POINT=20is=20= not=20"/",=20meaning=20that=20the=20store=20is=20on=20a=0A-=20=20=20=20=20= =20=20=20=20;;=20separate=20partition.=0A-=0A-=20=20=20=20=20=20=20=20=20= ;;=20When=20BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20= the=20linux=20and=0A-=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20= to=20allow=20booting=20from=20a=20Btrfs=20subvolume.=0A-=20=20=20=20=20=20= =20=20=20#~(format=20port=20"menuentry=20~s=20{=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20= INITRD=20in=20case=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= DEVICE-MOUNT-POINT=20is=20not=20"/",=20meaning=20that=20the=20store=20is=20= on=20a=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20separate=20partition.=0A= +=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20When=20= BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20the=20linux=20= and=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20to=20= allow=20booting=20from=20a=20Btrfs=20subvolume.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20#~(format=20port=20"menuentry=20~s=20{=0A=20=20=20~a=0A=20=20= =20linux=20~a=20~a=0A=20=20=20initrd=20~a=0A=20}~%"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20#$label=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$linux=20= (string-join=20(list=20#$@arguments))=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#$initrd))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#$label=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #$linux=20(string-join=20(list=20#$@arguments))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#$initrd))=0A=20=20=20=20=20=20= =20=20=20=20=20(let=20((kernel=20(menu-entry-multiboot-kernel=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(arguments=20= (menu-entry-multiboot-arguments=20entry))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(modules=20(menu-entry-multiboot-modules=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(root-index=201))=20=20= =20=20=20=20=20=20=20=20=20=20;=20XXX=20EFI=20will=20need=20root-index=20= 2=0A-=20=20=20=20=20=20=20=20#~(format=20port=20"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20#~(format=20port=20"=0A=20menuentry=20~s=20{=0A=20=20=20= multiboot=20~a=20root=3Ddevice:hd0s~a~a~a=0A=20}~%"=0A@@=20-434,9=20= +435,7=20@@=20menuentry=20~s=20{=0A=20=20=20(define=20locale-config=0A=20= =20=20=20=20(let*=20((entry=20(first=20all-entries))=0A=20=20=20=20=20=20= =20=20=20=20=20=20(device=20(menu-entry-device=20entry))=0A-=20=20=20=20=20= =20=20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20= entry))=0A-=20=20=20=20=20=20=20=20=20=20=20(bootloader=20= (bootloader-configuration-bootloader=20config))=0A-=20=20=20=20=20=20=20=20= =20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20=20=20=20= =20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20entry)))=0A= =20=20=20=20=20=20=20#~(let=20((locale=20#$(and=20locale=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (locale-definition-source=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale-name->definition=20= locale))))=0A@@=20-462,8=20+461,6=20@@=20set=20lang=3D~a~%"=0A=20=0A=20=20= =20(define=20keyboard-layout-config=0A=20=20=20=20=20(let*=20((layout=20= (bootloader-configuration-keyboard-layout=20config))=0A-=20=20=20=20=20=20= =20=20=20=20=20(grub=20=20=20(bootloader-package=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-configuration-bootloader=20config)))=0A=20=20=20=20=20=20=20=20= =20=20=20=20(keymap*=20(and=20layout=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(keyboard-layout-file=20layout=20= #:grub=20grub)))=0A=20=20=20=20=20=20=20=20=20=20=20=20(entry=20(first=20= all-entries))=0A@@=20-514,6=20+511,16=20@@=20fi~%"))))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:options=20'(#:local-build?=20#t=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:substitutable?=20#f)))=0A=20=0A+(define=20= (grub-configuration-file=20config=20.=20args)=0A+=20=20(let*=20= ((bootloader=20(bootloader-configuration-bootloader=20config))=0A+=20=20=20= =20=20=20=20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20= =20(apply=20make-grub-configuration=20grub=20config=20args)))=0A+=0A= +(define=20(grub-efi-configuration-file=20.=20args)=0A+=20=20(apply=20= make-grub-configuration=20grub-efi=20args))=0A+=0A+(define=20grub-cfg=20= "/boot/grub/grub.cfg")=0A+=0A=20=0C=0A=20=0A=20;;;=0A@@=20-607,42=20= +614,31=20@@=20fi~%"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"--bootloader-id=3DGuix"=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"--efi-directory"=20= target-esp)))))=0A=20=0A-(define=20(install-grub-efi-netboot=20subdir)=0A= -=20=20"Define=20a=20grub-efi-netboot=20bootloader=20installer=20for=20= installation=20in=20SUBDIR,=0A-which=20is=20usually=20efi/Guix=20or=20= efi/boot."=0A-=20=20(let*=20((system=20(string-split=20= (nix-system->gnu-triplet=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (%current-target-system)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A-=20=20=20=20=20=20=20=20= =20(arch=20(first=20system))=0A-=20=20=20=20=20=20=20=20=20= (boot-efi-link=20(match=20system=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20the=20= supportend=20systems=20and=20the=20names=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20defined=20by=20the=20= UEFI=20standard=20for=20removable=20media.=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("i686"=20_=20...)=20= =20=20=20=20=20=20=20"/bootia32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20= =20=20=20"/bootx64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("arm"=20_=20...)=20=20=20=20=20=20=20=20= =20"/bootarm.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("riscv"=20_=20...)=20=20=20=20=20=20=20= "/bootriscv32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Other=20systems=20are=20not=20supported,=20= although=20defined.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("ia64"=20_=20...)=20=20=20=20=20= "/bootia64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A-=20=20=20=20=20=20=20=20=20(core-efi=20(string-append=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20This=20is=20= the=20arch=20dependent=20file=20name=20of=20GRUB,=20e.g.=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20i368-efi/core.efi=20or=20= arm64-efi/core.efi.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20arch=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20("i686"=20=20=20=20"i386")=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("riscv"=20=20=20= "riscv32")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(_=20=20=20=20=20=20=20=20=20arch))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"-efi/core.efi")))=0A-=20=20=20=20= (with-imported-modules=0A-=20=20=20=20=20'((guix=20build=20union))=0A-=20= =20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A-=20=20=20=20= =20=20=20=20=20"Install=20the=20BOOTLOADER,=20which=20must=20be=20the=20= package=20grub,=20as=20e.g.=0A-bootx64.efi=20or=20bootaa64.efi=20into=20= SUBDIR,=20which=20is=20usually=20efi/Guix=20or=20efi/boot,=0A-below=20= the=20directory=20TARGET=20for=20the=20system=20whose=20root=20is=20= mounted=20at=20MOUNT-POINT.=0A+(define*=20= (make-grub-efi-netboot-installer=20grub-efi=20grub-cfg=20subdir)=0A+=20=20= "Make=20a=20bootloader-installer=20for=20a=20grub-efi-netboot=20= bootloader,=20which=20expects=0A+its=20files=20in=20SUBDIR=20and=20its=20= configuration=20file=20in=20GRUB-CFG.=0A+=0A+As=20a=20grub-efi-netboot=20= package=20is=20already=20preinstalled=20by=20'grub-mknetdir',=20the=0A= +installer=20basically=20copies=20all=20files=20from=20the=20= bootloader-package=20(or=20profile)=0A+into=20the=20bootloader-target=20= directory.=0A+=0A+Additionally=20for=20network=20booting=20over=20TFTP,=20= two=20relative=20symlinks=20to=20the=20store=0A+and=20to=20the=20= GRUB-CFG=20file=20are=20necessary.=20=20Due=20to=20this=20a=20TFTP=20= root=20directory=20must=0A+not=20be=20located=20on=20a=20FAT=20= file-system.=0A+=0A+If=20the=20bootloader-target=20does=20not=20support=20= symlinks,=20then=20it=20is=20assumed=20to=20be=20a=0A+kind=20of=20EFI=20= System=20Partition=20(ESP).=20=20In=20this=20case=20an=20intermediate=20= configuration=0A+file=20is=20created=20with=20the=20help=20of=20GRUB-EFI=20= to=20load=20the=20GRUB-CFG.=0A+=0A+The=20installer=20is=20usable=20for=20= any=20efi-bootloader-chain,=20which=20prepares=20the=0A= +bootloader-profile=20in=20a=20way=20ready=20for=20copying.=0A+=0A+The=20= installer=20does=20not=20manipulate=20the=20system's=20'UEFI=20Boot=20= Manager'."=0A+=20=20(with-imported-modules=20'((guix=20build=20union))=0A= +=20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A+=20=20=20= =20=20=20=20=20"Copy=20the=20BOOTLOADER,=20which=20must=20be=20a=20= preinstalled=20grub-efi-netboot=0A+package=20with=20a=20SUBDIR=20like=20= efi/boot=20or=20efi/Guix,=20below=20the=20directory=0A+TARGET=20for=20= the=20system=20whose=20root=20is=20mounted=20at=20MOUNT-POINT.=0A=20=0A=20= MOUNT-POINT=20is=20the=20last=20argument=20in=20'guix=20system=20init=20= /etc/config.scm=20mnt/point'=0A=20or=20'/'=20for=20other=20'guix=20= system'=20commands.=0A@@=20-651,17=20+647,18=20@@=20TARGET=20is=20the=20= target=20argument=20given=20to=20the=20bootloader-configuration=20in=0A=20= =0A=20(operating-system=0A=20=20(bootloader=20(bootloader-configuration=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20(target=20\"/boot\")=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(target=20\"/boot/efi\")=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=E2=80=A6))=0A=20=20=E2=80=A6)=0A=20=0A=20= TARGET=20is=20required=20to=20be=20an=20absolute=20directory=20name,=20= usually=20mounted=20via=20NFS,=0A=20and=20finally=20needs=20to=20be=20= provided=20by=20a=20TFTP=20server=20as=20the=20TFTP=20root=20directory.=0A= =20=0A+Usually=20the=20installer=20will=20be=20used=20to=20prepare=20= network=20booting=20over=20TFTP.=20=20Then=0A=20GRUB=20will=20load=20= tftp://server/SUBDIR/grub.cfg=20and=20this=20file=20will=20instruct=20it=20= to=0A=20load=20more=20files=20from=20the=20store=20like=20= tftp://server/gnu/store/=E2=80=A6-linux=E2=80=A6/Image.=0A=20=0A-To=20= make=20this=20possible=20two=20symlinks=20will=20be=20created.=20The=20= first=20symlink=20points=0A+To=20make=20this=20possible=20two=20symlinks=20= will=20be=20created.=20=20The=20first=20symlink=20points=0A=20relatively=20= form=20MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20to=0A=20= MOUNT-POINT/boot/grub/grub.cfg,=20and=20the=20second=20symlink=20points=20= relatively=20from=0A=20MOUNT-POINT/TARGET/%store-prefix=20to=20= MOUNT-POINT/%store-prefix.=0A@@=20-671,34=20+668,78=20@@=20paths=20on=20= the=20TFTP=20server=20side=20are=20unknown.=0A=20=0A=20It=20is=20also=20= important=20to=20note=20that=20both=20symlinks=20will=20point=20outside=20= the=20TFTP=20root=0A=20directory=20and=20that=20the=20= TARGET/%store-prefix=20symlink=20makes=20the=20whole=20store=0A= -accessible=20via=20TFTP.=20Possibly=20the=20TFTP=20server=20must=20be=20= configured=0A-to=20allow=20accesses=20outside=20its=20TFTP=20root=20= directory.=20This=20may=20need=20to=20be=0A-considered=20for=20security=20= aspects."=0A-=20=20=20=20=20=20=20=20=20(use-modules=20((guix=20build=20= union)=20#:select=20(symlink-relative)))=0A-=20=20=20=20=20=20=20=20=20= (let*=20((net-dir=20(string-append=20mount-point=20target=20"/"))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20(string-append=20= net-dir=20#$subdir=20"/"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(store=20(string-append=20mount-point=20(%store-prefix)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= net-dir=20(%store-prefix)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(grub-cfg=20(string-append=20mount-point=20"/boot/grub/grub.cfg"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(grub-cfg-link=20= (string-append=20sub-dir=20(basename=20grub-cfg)))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(boot-efi-link=20(string-append=20sub-dir=20= #$boot-efi-link)))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20store-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20store-link))=0A-=20=20=20=20=20=20=20= =20=20=20=20(symlink-relative=20store=20store-link)=0A-=20=20=20=20=20=20= =20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg,=20= which=20points=20into=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20grub-cfg-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A-=20=20=20=20=20=20= =20=20=20=20=20(symlink-relative=20grub-cfg=20grub-cfg-link)=0A-=20=20=20= =20=20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= encrypted=20partitions,=0A-=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "GRUB_ENABLE_CRYPTODISK"=20"y")=0A-=20=20=20=20=20=20=20=20=20=20=20= (invoke/quiet=20(string-append=20bootloader=20"/bin/grub-mknetdir")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"--net-directory=3D"=20net-dir)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "--subdir=3D"=20#$subdir))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= Prepare=20the=20bootloader=20symlink,=20which=20points=20to=20core.efi=20= of=20GRUB.=0A-=20=20=20=20=20=20=20=20=20=20=20(false-if-exception=20= (delete-file=20boot-efi-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (symlink=20#$core-efi=20boot-efi-link))))))=0A+accessible=20via=20TFTP.=20= =20Possibly=20the=20TFTP=20server=20must=20be=20configured=20to=20allow=0A= +accesses=20outside=20its=20TFTP=20root=20directory.=20=20This=20all=20= may=20need=20to=20be=20considered=0A+for=20security=20aspects.=20=20It=20= is=20advised=20to=20disable=20any=20TFTP=20write=20access!=0A+=0A+The=20= installer=20can=20also=20be=20used=20to=20prepare=20booting=20from=20= local=20storages,=20if=20the=0A+underlying=20file-system,=20like=20FAT=20= on=20an=20EFI=20System=20Partition=20(ESP),=20does=20not=0A+support=20= symlinks.=20=20In=20this=20case=20the=20= MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20will=20be=0A+created=20with=20the=20= help=20of=20GRUB-EFI=20to=20load=20the=20/boot/grub/grub.cfg=20file.=20=20= A=0A+symlink=20to=20the=20store=20is=20not=20needed=20in=20this=20case."=0A= +=20=20=20=20=20=20=20=20;;=20In=20context=20of=20a=20disk=20image=20= creation=20TARGET=20will=20be=20#f=20and=20an=0A+=20=20=20=20=20=20=20=20= ;;=20installer=20is=20expected=20to=20do=20necessary=20installations=20= on=20MOUNT-POINT,=0A+=20=20=20=20=20=20=20=20;;=20which=20will=20become=20= the=20root=20file=20system.=0A+=20=20=20=20=20=20=20=20;;=20If=20TARGET=20= is=20#f,=20this=20installer=20has=20nothing=20to=20do,=20as=20it=20only=20= cares=0A+=20=20=20=20=20=20=20=20;;=20about=20the=20EFI=20System=20= Partition=20(ESP).=0A+=20=20=20=20=20=20=20=20(when=20target=0A+=20=20=20= =20=20=20=20=20=20=20(use-modules=20((guix=20build=20union)=20#:select=20= (symlink-relative))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(ice-9=20popen)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(ice-9=20rdelim))=0A+=20=20=20=20=20=20=20= =20=20=20(let*=20((mount-point/target=20(string-append=20mount-point=20= target=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= When=20installing=20Guix,=20it=20is=20common=20to=20mount=20TARGET=20= below=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= MOUNT-POINT=20rather=20than=20the=20root=20directory.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bootloader-target=20(if=20= (file-exists?=20mount-point/target)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mount-point/target=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20target))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20= (string-append=20mount-point=20(%store-prefix)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= bootloader-target=20(%store-prefix)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(grub-cfg=20(string-append=20mount-point=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (grub-cfg-link=20(string-append=20bootloader-target=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$subdir=20"/"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(basename=20= grub-cfg))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Copy=20the=20= bootloader=20into=20the=20bootloader-target=20directory.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Should=20we=20beforehand=20recursively=20= delete=20any=20existing=20file?=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (copy-recursively=20bootloader=20bootloader-target=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:log=20(%make-void-port=20= "w"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20For=20TFTP=20we=20need=20= to=20install=20additional=20relative=20symlinks.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20If=20we=20install=20on=20an=20EFI=20System=20= Partition=20(ESP)=20or=20some=20other=20FAT=0A+=20=20=20=20=20=20=20=20=20= =20=20=20;;=20file-system,=20then=20symlinks=20cannot=20be=20created=20= and=20are=20not=20needed.=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Therefore=20we=20ignore=20exceptions=20when=20trying.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20(dirname=20= grub-cfg-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(if=20(unspecified?=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(false-if-exception=20(symlink-relative=20grub-cfg=20= grub-cfg-link)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Symlinks=20are=20supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(mkdir-p=20(dirname=20store-link))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20= store-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-relative=20store=20store-link))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Creating=20symlinks=20does=20not=20seem=20to=20be=20= supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Probably=20= an=20ESP=20is=20used.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Instead=20we=20can=20script=20to=20search=20and=20load=20the=20actual=20= grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((probe=20= #$(file-append=20grub-efi=20"/sbin/grub-probe"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(port=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-pipe*=20OPEN_READ=20= probe=20"--target=3Dfs_uuid"=20grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(search-root=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20(read-line=20port)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((?=20eof-object?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20There=20is=20no=20UUID=20= available.=20As=20a=20fallback=20search=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20everywhere=20for=20= the=20grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20"search=20--file=20--set=20"=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(fs-uuid=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20UUID=20to=20load=20the=20= grub.cfg=20from=20is=20known.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"search=20= --fs-uuid=20--set=20"=20fs-uuid))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(load-grub-cfg=20(string-append=20"configfile=20= "=20#$grub-cfg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (close-pipe=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-output-to-file=20grub-cfg-link=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(display=20(string-join=20(list=20search-root=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= load-grub-cfg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "\n")))))))))))=0A=20=0A=20=0C=0A=20=0A@@=20-716,7=20+757,7=20@@=20= considered=20for=20security=20aspects."=0A=20=20=20=20(package=20grub)=0A= =20=20=20=20(installer=20install-grub)=0A=20=20=20=20= (disk-image-installer=20install-grub-disk-image)=0A-=20=20=20= (configuration-file=20"/boot/grub/grub.cfg")=0A+=20=20=20= (configuration-file=20grub-cfg)=0A=20=20=20=20= (configuration-file-generator=20grub-configuration-file)))=0A=20=0A=20= (define=20grub-minimal-bootloader=0A@@=20-726,17=20+767,29=20@@=20= considered=20for=20security=20aspects."=0A=20=0A=20(define=20= grub-efi-bootloader=0A=20=20=20(bootloader=0A-=20=20=20(inherit=20= grub-bootloader)=0A+=20=20=20(name=20'grub-efi)=0A+=20=20=20(package=20= grub-efi)=0A=20=20=20=20(installer=20install-grub-efi)=0A=20=20=20=20= (disk-image-installer=20#f)=0A-=20=20=20(name=20'grub-efi)=0A-=20=20=20= (package=20grub-efi)))=0A+=20=20=20(configuration-file=20grub-cfg)=0A+=20= =20=20(configuration-file-generator=20grub-configuration-file)))=0A=20=0A= -(define=20grub-efi-netboot-bootloader=0A+(define=20= (make-grub-efi-netboot-bootloader=20name=20subdir)=0A=20=20=20= (bootloader=0A-=20=20=20(inherit=20grub-efi-bootloader)=0A-=20=20=20= (name=20'grub-efi-netboot-bootloader)=0A-=20=20=20(installer=20= (install-grub-efi-netboot=20"efi/Guix"))))=0A+=20=20=20(name=20name)=0A+=20= =20=20(package=20(make-grub-efi-netboot=20(symbol->string=20name)=20= subdir))=0A+=20=20=20(installer=20(make-grub-efi-netboot-installer=20= grub-efi=20grub-cfg=20subdir))=0A+=20=20=20(disk-image-installer=20#f)=0A= +=20=20=20(configuration-file=20grub-cfg)=0A+=20=20=20= (configuration-file-generator=20grub-efi-configuration-file)))=0A+=0A= +(define=20grub-efi-netboot-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20'grub-efi-netboot-bootloader=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"efi/Guix"))=0A+=0A+(define=20= grub-efi-netboot-removable-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20= 'grub-efi-netboot-removable-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "efi/boot"))=0A=20=0A=20(define=20grub-mkrescue-bootloader=0A=20=20=20= (bootloader=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=2056bef57cb7..32dae92531=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-15,6=20+15,7=20@@=0A=20;;;=20= Copyright=20=C2=A9=202020=20Pierre=20Langlois=20= =0A=20;;;=20Copyright=20=C2=A9=202021=20Vincent=20= Legoll=20=0A=20;;;=20Copyright=20=C2=A9=202021=20= Brice=20Waegeneire=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-65,13=20+66,17=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20xorg)=0A=20=20=20#:use-module=20= (gnu=20packages=20web)=0A=20=20=20#:use-module=20(guix=20build-system=20= gnu)=0A+=20=20#:use-module=20(guix=20build-system=20trivial)=0A=20=20=20= #:use-module=20(guix=20download)=0A+=20=20#:use-module=20(guix=20gexp)=0A= =20=20=20#:use-module=20(guix=20git-download)=0A=20=20=20#:use-module=20= ((guix=20licenses)=20#:prefix=20license:)=0A=20=20=20#:use-module=20= (guix=20packages)=0A=20=20=20#:use-module=20(guix=20utils)=0A=20=20=20= #:use-module=20(srfi=20srfi-1)=0A=20=20=20#:use-module=20(srfi=20= srfi-26)=0A+=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs)=0A=20=20=20#:use-module=20(ice-9=20regex))=0A=20=0A=20= (define=20unifont=0A@@=20-353,6=20+358,91=20@@=20menu=20to=20select=20= one=20of=20the=20installed=20operating=20systems.")=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(scandir=20input-dir))=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A=20=0A= +(define-public=20(make-grub-efi-netboot=20name=20subdir)=0A+=20=20"Make=20= a=20grub-efi-netboot=20package=20named=20NAME,=20which=20will=20be=20= able=20to=20boot=20over=0A+network=20via=20TFTP=20by=20accessing=20its=20= files=20in=20the=20SUBDIR=20of=20a=20TFTP=20root=20directory.=0A+This=20= package=20is=20also=20able=20to=20boot=20from=20local=20storage=20= devices.=0A+=0A+A=20bootloader-installer=20basically=20needs=20to=20copy=20= the=20package=20content=20into=20the=0A+bootloader-target=20directory,=20= which=20will=20usually=20be=20the=20TFTP=20root,=20as=0A+'grub-mknetdir'=20= will=20be=20invoked=20already=20during=20the=20package=20creation.=0A+=0A= +Alternatively=20the=20bootloader-target=20directory=20can=20be=20a=20= mounted=20EFI=20System=0A+Partition=20(ESP),=20or=20a=20similar=20= partition=20with=20a=20FAT=20file=20system,=20for=20booting=0A+from=20= local=20storage=20devices.=0A+=0A+The=20name=20of=20the=20GRUB=20EFI=20= binary=20will=20conform=20to=20the=20UEFI=20specification=20for=0A= +removable=20media.=20=20Depending=20on=20the=20system=20it=20will=20be=20= e.g.=20bootx64.efi=20or=0A+bootaa64.efi=20below=20SUBDIR.=0A+=0A+The=20= SUBDIR=20argument=20needs=20to=20be=20set=20to=20\"efi/boot\"=20to=20= create=20a=20package=20which=0A+conforms=20to=20the=20UEFI=20= specification=20for=20removable=20media.=0A+=0A+The=20SUBDIR=20argument=20= defaults=20to=20\"efi/Guix\",=20as=20it=20is=20also=20the=20case=20for=0A= +'grub-efi-bootloader'."=0A+=20=20(package=0A+=20=20=20=20(name=20name)=0A= +=20=20=20=20(version=20(package-version=20grub-efi))=0A+=20=20=20=20;;=20= Source=20is=20not=20needed,=20but=20it=20cannot=20be=20omitted.=0A+=20=20= =20=20(source=20#f)=0A+=20=20=20=20(build-system=20trivial-build-system)=0A= +=20=20=20=20(arguments=0A+=20=20=20=20=20(let*=20((system=20= (string-split=20(nix-system->gnu-triplet=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (or=20(%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(arch=20(first=20system))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(boot-efi=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20= the=20supportend=20systems=20and=20the=20names=20defined=20by=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20the=20UEFI=20standard=20for=20= removable=20media.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("i686"=20_=20...)=20=20=20=20=20=20=20=20"/bootia32.efi")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20=20=20=20= "/bootx64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("arm"=20= _=20...)=20=20=20=20=20=20=20=20=20"/bootarm.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("riscv"=20_=20...)=20=20=20=20=20=20=20"/bootriscv32.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Other=20systems=20are=20not=20supported,=20although=20defined.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= (("ia64"=20_=20...)=20=20=20=20=20"/bootia64.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(core-efi=20= (string-append=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20This=20is=20the=20arch=20dependent=20file=20name=20of=20= GRUB,=20e.g.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20i368-efi/core.efi=20or=20arm64-efi/core.efi.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= arch=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20("i686"=20=20=20=20"i386")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ("riscv"=20=20=20"riscv32")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20arch))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "-efi/core.efi")))=0A+=20=20=20=20=20=20=20`(#:modules=20((guix=20build=20= utils))=0A+=20=20=20=20=20=20=20=20=20#:builder=0A+=20=20=20=20=20=20=20=20= =20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(guix=20= build=20utils))=0A+=20=20=20=20=20=20=20=20=20=20=20(let*=20((bootloader=20= (assoc-ref=20%build-inputs=20"grub-efi"))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(net-dir=20(assoc-ref=20%outputs=20"out"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20= (string-append=20net-dir=20"/"=20,subdir=20"/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(boot-efi=20(string-append=20sub-dir=20= ,boot-efi))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (core-efi=20(string-append=20sub-dir=20,core-efi)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20encrypted=20partitions,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"GRUB_ENABLE_CRYPTODISK"=20"y")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(invoke/quiet=20(string-append=20bootloader=20= "/bin/grub-mknetdir")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--net-directory=3D"=20= net-dir)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"--subdir=3D"=20,subdir)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20modules=20must=20be=20preloaded=20to=20allow=20booting=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20from=20an=20ESP=20or=20a=20similar=20partition=20with=20a=20FAT=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20file=20system.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--modules=3Dpart_msdos=20= part_gpt=20fat"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20= GRUB's=20core.efi=20to=20the=20removable=20media=20name.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20boot-efi))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20core-efi=20= boot-efi))))))=0A+=20=20=20=20(inputs=20`(("grub-efi"=20,grub-efi)))=0A+=20= =20=20=20(synopsis=20(package-synopsis=20grub-efi))=0A+=20=20=20=20= (description=20(package-description=20grub-efi))=0A+=20=20=20=20= (home-page=20(package-home-page=20grub-efi))=0A+=20=20=20=20(license=20= (package-license=20grub-efi))))=0A+=0A=20(define-public=20syslinux=0A=20=20= =20(let=20((commit=20"bb41e935cc83c6242de24d2271e067d76af3585c"))=0A=20=20= =20=20=20(package=0A= --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=03-build-kconfig-add-new-module.patch Content-Type: application/octet-stream; name="03-build-kconfig-add-new-module.patch" Content-Transfer-Encoding: quoted-printable build:=20kconfig:=20Add=20new=20module=20to=20modify=20a=20defconfig=20= file.=0A=0AFrom:=20Stefan=20=0A=0A*=20= guix/build/kconfig.scm=20(modify-defconfig):=20New=20file=20with=20a=20= new=20function.=0A*=20gnu/packages/bootloaders.scm=20= (make-u-boot-package,=0Amake-u-boot-sunxi64-package):=20Adding=20new=20= key=20arguments=20to=20pass=20and/or=20modify=0Aa=20defconfig=20file.=0A= (u-boot-am335x-boneblack,=20u-boot-pinebook,=20u-boot-novena):=20= Simplify=20functions=0Aby=20using=20the=20new=20key=20arguments=20of=20= the=20former=20functions.=0A*=20Makefile.am:=20Adding=20= guix/build/kconfig.scm=20to=20MODULES.=0A---=0A=20Makefile.am=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=20=201=20=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2087=20+++++++++++--------------=0A= =20guix/build/kconfig.scm=20=20=20=20=20=20=20|=20=20148=20= ++++++++++++++++++++++++++++++++++++++++++=0A=203=20files=20changed,=20= 186=20insertions(+),=2050=20deletions(-)=0A=20create=20mode=20100644=20= guix/build/kconfig.scm=0A=0Adiff=20--git=20a/Makefile.am=20b/Makefile.am=0A= index=200129011ebf..c17a417703=20100644=0A---=20a/Makefile.am=0A+++=20= b/Makefile.am=0A@@=20-217,6=20+217,7=20@@=20MODULES=20=3D=09=09=09=09=09= \=0A=20=20=20guix/build/waf-build-system.scm=09=09\=0A=20=20=20= guix/build/haskell-build-system.scm=09=09\=0A=20=20=20= guix/build/julia-build-system.scm=09=09\=0A+=20=20guix/build/kconfig.scm=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\=0A= =20=20=20guix/build/linux-module-build-system.scm=09\=0A=20=20=20= guix/build/store-copy.scm=09=09=09\=0A=20=20=20guix/build/json.scm=09=09=09= =09\=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=2032dae92531..38cf933c22=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-717,8=20+717,9=20@@=20def=20= test_ctrl_c"))=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=20=20= This=20package=20provides=20its=0A=20board-independent=20tools.")))=0A=20= =0A-(define-public=20(make-u-boot-package=20board=20triplet)=0A-=20=20= "Returns=20a=20u-boot=20package=20for=20BOARD=20cross-compiled=20for=20= TRIPLET."=0A+(define*-public=20(make-u-boot-package=20board=20triplet=20= #:key=20defconfig=20configs)=0A+=20=20"Returns=20a=20u-boot=20package=20= for=20BOARD=20cross-compiled=20for=20TRIPLET=20with=20the=0A+optional=20= DEFCONFIG=20file=20and=20optional=20configuration=20changes=20from=20= CONFIGS."=0A=20=20=20(let=20((same-arch?=20(lambda=20()=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string=3D?=20= (%current-system)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gnu-triplet->nix-system=20= triplet)))))=0A@@=20-736,8=20+737,11=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20(arguments=0A=20=20=20=20=20=20=20=20= `(#:modules=20((ice-9=20ftw)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20= gnu-build-system))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix=20build=20gnu-build-system)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20utils))=0A= +=20=20=20=20=20=20=20=20=20#:imported-modules=20= (,@%gnu-build-system-modules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig))=0A= =20=20=20=20=20=20=20=20=20=20#:test-target=20"test"=0A=20=20=20=20=20=20= =20=20=20=20#:make-flags=0A=20=20=20=20=20=20=20=20=20=20(list=20= "HOSTCC=3Dgcc"=0A@@=20-748,9=20+752,18=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20=20=20=20(modify-phases=20= %standard-phases=0A=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20= outputs=20make-flags=20#:allow-other-keys)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((config-name=20(string-append=20,board=20= "_defconfig")))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(file-exists?=20(string-append=20"configs/"=20config-name))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20invoke=20= "make"=20`(,@make-flags=20,config-name))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let*=20((config-name=20(string-append=20,board=20= "_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(config-file=20(string-append=20"configs/"=20config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (defconfig=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(configs=20',configs))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(when=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Replace=20the=20board-specific=20= defconfig=20with=20the=20given=20one.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(copy-file=20defconfig=20config-file))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(file-exists?=20= config-file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(when=20configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20config-file=20= configs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(apply=20invoke=20"make"=20`(,@make-flags=20,config-name)))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(begin=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (display=20"Invalid=20board=20name.=20Valid=20board=20names=20are:"=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(current-error-port))=0A@@=20-801,7=20+814,11=20@@=20= board-independent=20tools.")))=0A=20=20=20(make-u-boot-package=20"malta"=20= "mips64el-linux-gnuabi64"))=0A=20=0A=20(define-public=20= u-boot-am335x-boneblack=0A-=20=20(let=20((base=20(make-u-boot-package=20= "am335x_evm"=20"arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"am335x_evm"=20"arm-linux-gnueabihf"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20device=20= trees=20to=20build=20image=20small=20enough=20to=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20fit=20within=20typical=20partitioning=20= schemes=20where=20the=20first=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20partition=20begins=20at=20sector=202048.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:configs=20'("CONFIG_OF_LIST=3D\"am335x-evm=20= am335x-boneblack\""))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(name=20= "u-boot-am335x-boneblack")=0A@@=20-810,25=20+827,13=20@@=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20the=20BeagleBone=20Black,=20which=20was=20removed=20= upstream,=0A=20adjusted=20from=20the=20am335x_evm=20build=20with=20= several=20device=20trees=20removed=20so=20that=0A-it=20fits=20within=20= common=20partitioning=20schemes.")=0A-=20=20=20=20=20=20(arguments=0A-=20= =20=20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-defconfig=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20devicetrees=20to=20= build=20image=20small=20enough=20to=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20fit=20within=20typical=20partitioning=20schemes=20where=20= the=20first=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition=20begins=20at=20sector=202048.=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(substitute*=20"configs/am335x_evm_defconfig"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(("CONFIG_OF_LIST=3D.*$")=20= "CONFIG_OF_LIST=3D\"am335x-evm=20am335x-boneblack\"\n"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+it=20fits=20within=20= common=20partitioning=20schemes."))))=0A=20=0A=20(define-public=20= u-boot-am335x-evm=0A=20=20=20(make-u-boot-package=20"am335x_evm"=20= "arm-linux-gnueabihf"))=0A=20=0A-(define-public=20= (make-u-boot-sunxi64-package=20board=20triplet)=0A-=20=20(let=20((base=20= (make-u-boot-package=20board=20triplet)))=0A+(define*-public=20= (make-u-boot-sunxi64-package=20board=20triplet=20#:key=20defconfig=20= configs)=0A+=20=20(let=20((base=20(make-u-boot-package=20board=20triplet=20= #:defconfig=20defconfig=20#:configs=20configs)))=0A=20=20=20=20=20= (package=0A=20=20=20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20= (arguments=0A@@=20-858,20=20+863,10=20@@=20it=20fits=20within=20common=20= partitioning=20schemes.")=0A=20=20=20(make-u-boot-sunxi64-package=20= "pine64-lts"=20"aarch64-linux-gnu"))=0A=20=0A=20(define-public=20= u-boot-pinebook=0A-=20=20(let=20((base=20(make-u-boot-sunxi64-package=20= "pinebook"=20"aarch64-linux-gnu")))=0A-=20=20=20=20(package=0A-=20=20=20=20= =20=20(inherit=20base)=0A-=20=20=20=20=20=20(arguments=0A-=20=20=20=20=20= =20=20(substitute-keyword-arguments=20(package-arguments=20base)=0A-=20=20= =20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20=20=20=20=20=20= `(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-after=20'unpack=20'patch-pinebook-config=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Fix=20regression=20with=20LCD=20video=20output=20= introduced=20in=202020.01=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20https://patchwork.ozlabs.org/patch/1225130/=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(substitute*=20"configs/pinebook_defconfig"=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy")=20= "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy\nCONFIG_VIDEO_BPP32=3Dy"))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+=20=20= (make-u-boot-sunxi64-package=20"pinebook"=20"aarch64-linux-gnu"=0A+=20=20= =20;;=20Fix=20regression=20with=20LCD=20video=20output=20introduced=20in=20= 2020.01=0A+=20=20=20;;=20https://patchwork.ozlabs.org/patch/1225130/=0A+=20= =20=20#:configs=20'("CONFIG_VIDEO_BPP32=3Dy")))=0A=20=0A=20= (define-public=20u-boot-bananapi-m2-ultra=0A=20=20=20= (make-u-boot-package=20"Bananapi_M2_Ultra"=20"arm-linux-gnueabihf"))=0A= @@=20-895,25=20+890,17=20@@=20it=20fits=20within=20common=20partitioning=20= schemes.")=0A=20=20=20(make-u-boot-package=20"mx6cuboxi"=20= "arm-linux-gnueabihf"))=0A=20=0A=20(define-public=20u-boot-novena=0A-=20=20= (let=20((base=20(make-u-boot-package=20"novena"=20= "arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20(make-u-boot-package=20= "novena"=20"arm-linux-gnueabihf"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20= from=20FAT=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition,=20allowing=20it=20to=20be=20installed=20at=20a=20device=20= offset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20= '("CONFIG_SPL_FS_FAT=3D"))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20= =20(inherit=20base)=0A=20=20=20=20=20=20=20(description=20"U-Boot=20is=20= a=20bootloader=20used=20mostly=20for=20ARM=20boards.=20It=0A=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20Novena.=20=20Be=20advised=20that=20this=20version,=20= contrary=0A-to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition.")=0A-=20=20=20=20=20=20(arguments=0A-=20=20= =20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-novena-defconfig=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Patch=20configuration=20to=20disable=20= loading=20u-boot.img=20from=20FAT=20partition,=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20allowing=20it=20to=20be=20installed=20at=20a=20= device=20offset.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20= _=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(substitute*=20= "configs/novena_defconfig"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(("CONFIG_SPL_FS_FAT=3Dy")=20"#=20CONFIG_SPL_FS_FAT=20is=20= not=20set"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t)))))))))=0A+to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition."))))=0A=20=0A=20(define-public=20= u-boot-cubieboard=0A=20=20=20(make-u-boot-package=20"Cubieboard"=20= "arm-linux-gnueabihf"))=0Adiff=20--git=20a/guix/build/kconfig.scm=20= b/guix/build/kconfig.scm=0Anew=20file=20mode=20100644=0Aindex=20= 0000000000..09ddf59dd0=0A---=20/dev/null=0A+++=20= b/guix/build/kconfig.scm=0A@@=20-0,0=20+1,148=20@@=0A+;;;=20GNU=20Guix=20= ---=20Functional=20package=20management=20for=20GNU=0A+;;;=20Copyright=20= =C2=A9=202020=20Stefan=20=0A+;;;=0A+;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20GNU=20Guix=20= is=20free=20software;=20you=20can=20redistribute=20it=20and/or=20modify=20= it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20General=20Public=20= License=20as=20published=20by=0A+;;;=20the=20Free=20Software=20= Foundation;=20either=20version=203=20of=20the=20License,=20or=20(at=0A= +;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(guix=20build=20= kconfig)=0A+=20=20#:use-module=20=20(ice-9=20rdelim)=0A+=20=20= #:use-module=20=20(ice-9=20regex)=0A+=20=20#:use-module=20=20(srfi=20= srfi-1)=0A+=20=20#:use-module=20=20(srfi=20srfi-26)=0A+=20=20#:export=20= (modify-defconfig))=0A+=0A+;;=20Commentary:=0A+;;=0A+;;=20Builder-side=20= code=20to=20modify=20configurations=20for=20the=20Kconfig=20build=20= system=20as=0A+;;=20used=20by=20Linux=20and=20U-Boot.=0A+;;=0A+;;=20= Code:=0A+=0A+(define=20(modify-defconfig=20defconfig=20configs)=0A+=20=20= "This=20function=20can=20modify=20a=20given=20DEFCONFIG=20file=20by=20= adding,=20changing=20or=0A+removing=20the=20list=20of=20strings=20in=20= CONFIGS.=20=20This=20allows=20an=20easy=20customization=20of=0A+Kconfig=20= based=20projects=20like=20the=20kernel=20Linux=20or=20the=20bootloader=20= 'Das=20U-Boot'.=0A+=0A+These=20are=20examples=20for=20CONFIGS=20to=20add=20= or=20change=20or=20remove=0A+configurations=20to/from=20DEFCONFIG:=0A+=0A= +'(\"CONFIG_A=3D\\\"a\\\"\"=0A+=20=20\"CONFIG_B=3D0\"=0A+=20=20= \"CONFIG_C=3Dy\"=0A+=20=20\"CONFIG_D=3Dm\"=0A+=20=20\"CONFIG_E=3D\"=0A+=20= =20\"CONFIG_F\"=0A+=20=20\"#=20CONFIG_G=20is=20not=20set\")=0A+=0A= +Instead=20of=20a=20list,=20CONFGIS=20can=20be=20a=20string=20with=20one=20= configuration=20per=20line."=0A+=20=20(define=20config-rx=0A+=20=20=20=20= (make-regexp=0A+=20=20=20=20=20;;=20(match:substring=20(string-match=20= "=3D(.*)"=20"=3D")=201)=20returns=20"",=20but=20the=0A+=20=20=20=20=20;;=20= pattern=20"=3D(.+)?"=20makes=20it=20return=20#f=20instead.=20=20For=20a=20= "CONFIG_A=3D"=20we=20like=0A+=20=20=20=20=20;;=20to=20get=20#f,=20which=20= as=20a=20value=20emits=20"#=20=E2=80=A6=20is=20not=20set".=0A+=20=20=20=20= =20"^(#[\\t=20]*)?(CONFIG_[A-Z0-9_]+)([\\t=20]*=3D[\\t=20]*(.+)?|([\\t=20= ]+is[\\t=20]+not[\\t=20]+set))?$"))=0A+=0A+=20=20(define=20= (config-string->pair=20config-string)=0A+=20=20=20=20"Parse=20a=20= config-string=20like=20\"CONFIG_EXAMPLE=3Dy\"=20into=20a=20key-value=20= pair.=0A+Spaces=20get=20trimmed.=0A+\"CONFIG_A=3Dy\"=20=20=20=20=20=20=20= =20=20=20=20=20->=20'(\"CONFIG_A\"=20.=20\"y\")=0A+\"CONFIG_B=3D\\\"\\\"\"= =20=20=20=20=20=20=20=20=20->=20'(\"CONFIG_B\"=20.=20\"\\\"\\\"\")=0A= +\"CONFIG_C=3D\"=20=20=20=20=20=20=20=20=20=20=20=20=20->=20= '(\"CONFIG_C\"=20.=20#f)=0A+\"CONFIG_D\"=20=20=20=20=20=20=20=20=20=20=20= =20=20=20->=20'(\"CONFIG_D\"=20.=20#f)=0A+\"#=20CONFIG_E=20is=20not=20= set\"=20->=20'(\"CONFIG_E\"=20.=20#f)=0A+\"#=20Anything=20else\"=20=20=20= =20=20=20=20->=20'(\"#=20Anything=20else\"=20.=20\"\")"=0A+=20=20=20=20= (let=20((match=20(regexp-exec=20config-rx=20(string-trim-both=20= config-string))))=0A+=20=20=20=20=20=20(if=20(not=20match)=0A+=20=20=20=20= =20=20=20=20=20=20;;=20This=20is=20some=20unparsable=20config-string.=0A= +=20=20=20=20=20=20=20=20=20=20;;=20We=20keep=20it=20as=20it=20is.=0A+=20= =20=20=20=20=20=20=20=20=20(cons=20config-string=20"")=0A+=20=20=20=20=20= =20=20=20=20=20(let*=20((comment=20(match:substring=20match=201))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(key=20(match:substring=20= match=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(unset=20= (match:substring=20match=205))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(value=20(and=20(not=20comment)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= unset)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(match:substring=20match=204))))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(if=20(or=20(and=20comment=20(not=20unset))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20(not=20= comment)=20unset))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= This=20is=20just=20some=20comment=20or=20strange=20line,=20which=20we=20= keep=20as=20is.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20= config-string=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20key=20value))))))=0A+=0A+=20=20(define=20(pair->config-string=20= pair)=0A+=20=20=20=20"Convert=20a=20PAIR=20back=20to=20a=20= config-string."=0A+=20=20=20=20(let*=20((key=20(car=20pair))=0A+=20=20=20= =20=20=20=20=20=20=20=20(value=20(cdr=20pair)))=0A+=20=20=20=20=20=20(if=20= (string?=20value)=0A+=20=20=20=20=20=20=20=20=20=20(if=20(string-null?=20= value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20key=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20key=20"=3D"=20value))=0A+=20=20= =20=20=20=20=20=20=20=20(string-append=20"#=20"=20key=20"=20is=20not=20= set"))))=0A+=0A+=20=20(define=20(remove-pair=20pair=20blacklist)=0A+=20=20= =20=20"Turn=20a=20key-value=20PAIR=20into=20'(""=20.=20""),=20if=20its=20= key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20(let*=20((key=20= (first=20pair)))=0A+=20=20=20=20=20=20(if=20(member=20key=20blacklist)=0A= +=20=20=20=20=20=20=20=20=20=20'(""=20.=20"")=0A+=20=20=20=20=20=20=20=20= =20=20pair)))=0A+=0A+=20=20(define=20(remove-config-string=20= config-string=20blacklist)=0A+=20=20=20=20"Remove=20the=20CONFIG-STRING,=20= if=20its=20key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20= (pair->config-string=20(remove-pair=20(config-string->pair=20= config-string)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20blacklist)))=0A= +=0A+=20=20(define*=20(write-lines=20input=20#:key=20(line-modifier=20= identity))=0A+=20=20=20=20"Write=20all=20lines=20from=20the=20INPUT=20= after=20applying=20the=20LINE-MODIFIER=20to=20the=0A+=20= current-output-port."=0A+=20=20=20=20(let=20loop=20((line=20(read-line=20= input)))=0A+=20=20=20=20=20=20(when=20(not=20(eof-object?=20line))=0A+=20= =20=20=20=20=20=20=20(display=20(line-modifier=20line))=0A+=20=20=20=20=20= =20=20=20(newline)=0A+=20=20=20=20=20=20=20=20(loop=20(read-line=20= input)))))=0A+=0A+=20=20(let*=20((modified-defconfig=20(string-append=20= defconfig=20".mod"))=0A+=20=20=20=20=20=20=20=20=20;;=20Split=20the=20= configs=20into=20a=20list=20of=20single=20configuations.=0A+=20=20=20=20=20= =20=20=20=20;;=20To=20minimize=20mistakes,=20we=20support=20a=20string=20= and=20a=20list=20of=20strings,=0A+=20=20=20=20=20=20=20=20=20;;=20each=20= with=20newlines=20to=20separate=20configurations.=0A+=20=20=20=20=20=20=20= =20=20(config-list=20(fold-right=20append=20'()=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(map=20(lambda=20(s)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-split=20s=20#\newline))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(if=20(string?=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(list=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20configs))))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20= key-value=20pairs=20from=20the=20config-list.=0A+=20=20=20=20=20=20=20=20= =20(pairs=20(map=20(lambda=20(config-string)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(config-string->pair=20= config-string))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20config-list))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20a=20= blacklist=20of=20config=20keys=20from=20pairs.=0A+=20=20=20=20=20=20=20=20= =20(blacklist=20(map=20(lambda=20(config-pair)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(first=20= config-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20pairs))=0A+=20=20=20=20=20=20=20=20=20= (remove-config-string=20(cut=20remove-config-string=20<>=20blacklist)))=0A= +=20=20=20=20;;=20Write=20to=20the=20modified-defconfig=20file=20first=20= the=20content=20of=20the=20defconfig=0A+=20=20=20=20;;=20file=20with=20= removed=20lines,=20and=20afterwards=20the=20configs.=0A+=20=20=20=20= (call-with-output-file=20modified-defconfig=0A+=20=20=20=20=20=20(lambda=20= (output)=0A+=20=20=20=20=20=20=20=20(with-output-to-port=20output=0A+=20=20= =20=20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20= =20(call-with-input-file=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input=20#:=20line-modifier=20remove-config-string)))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(call-with-input-string=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-join=20(map=20= pair->config-string=20pairs)=20"\n")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input)))))))=0A+=20=20=20=20;;=20Ensure=20the=20= modified-defconfig=20file=20is=20used.=0A+=20=20=20=20(delete-file=20= defconfig)=0A+=20=20=20=20(rename-file=20modified-defconfig=20= defconfig)))=0A= --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=04-gnu-bootloader-add-u-boot.patch Content-Type: application/octet-stream; name="04-gnu-bootloader-add-u-boot.patch" Content-Transfer-Encoding: 7bit gnu: bootloader: Add U-Boot packages for Raspberry Pi models. From: Stefan * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name' and 'description'. (make-preinstalled-u-boot-package): New function to make minimal packages. (%u-boot-rpi-efi-configs): New helper list with config strings. (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): New helper strings. (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4, u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi, u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages. --- gnu/packages/bootloaders.scm | 172 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 4 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 38cf933c22..e3bd6733cb 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -717,17 +717,30 @@ def test_ctrl_c")) also initializes the boards (RAM etc). This package provides its board-independent tools."))) -(define*-public (make-u-boot-package board triplet #:key defconfig configs) +(define*-public (make-u-boot-package board + triplet + #:key + defconfig + configs + name + description) "Returns a u-boot package for BOARD cross-compiled for TRIPLET with the -optional DEFCONFIG file and optional configuration changes from CONFIGS." +optional DEFCONFIG file and optional configuration changes from CONFIGS. +Either NAME, if used, or otherwise BOARD will be part of the package name. +DESCRIPTION will be appended to the package description." (let ((same-arch? (lambda () (string=? (%current-system) (gnu-triplet->nix-system triplet))))) (package (inherit u-boot) (name (string-append "u-boot-" - (string-replace-substring (string-downcase board) - "_" "-"))) + (string-replace-substring + (string-downcase (or name board)) + "_" "-"))) + (description (if description + (string-append (package-description u-boot) + "\n" description) + (package-description u-boot))) (native-inputs `(,@(if (not (same-arch?)) `(("cross-gcc" ,(cross-gcc triplet)) @@ -1023,6 +1036,157 @@ to Novena upstream, does not load u-boot.img from the first partition.")))) `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define*-public (make-preinstalled-u-boot-package board + triplet + #:key + defconfig + configs + name + description + (u-boot-file "u-boot.bin")) + "Returns a package with a single U-BOOT-FILE for BOARD cross-compiled for +TRIPLET with the optional DEFCONFIG file and optional configuration changes +from CONFIGS. Either NAME, if used, or otherwise BOARD will be part of the +package name. DESCRIPTION will be appended to the package description." + (let* ((name-suffix "-complete") + (u-boot-package (make-u-boot-package board + triplet + #:defconfig defconfig + #:configs configs + #:name (string-append + (or name board) + name-suffix) + #:description description))) + (package + (name (string-drop-right (package-name u-boot-package) + (string-length name-suffix))) + (version (package-version u-boot-package)) + (source #f) + (build-system trivial-build-system) + (arguments + `(#:builder + (begin + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink (string-append (assoc-ref %build-inputs "u-boot") + "/libexec/" + ,u-boot-file) + (string-append out "/" ,u-boot-file)))))) + (inputs `(("u-boot" ,u-boot-package))) + (home-page (package-home-page u-boot-package)) + (synopsis (package-synopsis u-boot-package)) + (description (package-description u-boot-package)) + (license (package-license u-boot-package))))) + +(define-public %u-boot-rpi-efi-configs + '("CONFIG_OF_EMBED=" + "CONFIG_OF_BOARD=y" + "CONFIG_BOOTDELAY=0")) + +(define %u-boot-rpi-description-32-bit + "This is a 32-bit build of U-Boot.") + +(define %u-boot-rpi-description-64-bit + "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi +variants.") + +(define %u-boot-rpi-efi-description + "It allows network booting and uses the device-tree from the firmware, +allowing the usage of overlays. It can act as an EFI firmware for the +grub-efi-netboot-removable-bootloader.") + +(define %u-boot-rpi-efi-description-32-bit + (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-0-w + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-2 + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-3 + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-4 + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-64" + #:description %u-boot-rpi-description-64-bit)) + +(define-public u-boot-rpi-0-w-efi + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:name "rpi-0-w-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:name "rpi-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-2-efi + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:name "rpi-2-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-3-efi + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-4-efi + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-efi-64" + #:configs %u-boot-rpi-efi-configs + #:description (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-64-bit))) + (define-public vboot-utils (package (name "vboot-utils") --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=05-gnu-linux-correct-name-of.patch Content-Type: application/octet-stream; name="05-gnu-linux-correct-name-of.patch" Content-Transfer-Encoding: 7bit gnu: linux: Correct name of EXTRAVERSION and prepend "-" to content. From: Stefan gnu/packages/linux.scm (make-linux-libre): Move the comment for the configuration-file argument to the correct position between the extra-version and configuration-file arguments. gnu/packages/linux.scm (make-linux-libre*): Move the comment for the configuration-file argument to the correct position between the extra-version and configuration-file arguments. Remove the underscore from the environment variable EXTRAVERSION. Prepend a hyphen to the content of EXTRAVERSION. --- gnu/packages/linux.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 84ea849108..6ba1119da4 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -749,9 +749,9 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (define* (make-linux-libre version hash-string supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options) @@ -770,9 +770,9 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (define* (make-linux-libre* version source supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options)) @@ -838,7 +838,7 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (format #t "`CROSS_COMPILE' set to `~a'~%" (getenv "CROSS_COMPILE")))) - (setenv "EXTRA_VERSION" ,extra-version) + (setenv "EXTRAVERSION" (string-append "-" ,extra-version)) (let ((build (assoc-ref %standard-phases 'build)) (config (assoc-ref (or native-inputs inputs) "kconfig"))) --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=06-gnu-linux-new-function-to.patch Content-Type: application/octet-stream; name="06-gnu-linux-new-function-to.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20New=20function=20to=20modify=20the=20configuration=20of=20= a=20Linux=20kernel.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(make-linux-libre*)=20= ['set-environment]:=20Splitted=20this=0Anew=20phase=20out=20of=20and=20= adding=20it=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20= allow=20a=20replacement=20and=20reuse=20from=20(modify-linux).=0A= (modify-linux):=20New=20function=20to=20make=20a=20customized=20Linux=20= package=20inherited=0Afrom=20another=20Linux=20package,=20which=20will=20= be=20build=20with=20an=20own=20defconfig=20or=0Aconfiguration=20changes.=0A= (make-defconfig):=20Function=20to=20get=20a=20defconfig=20from=20an=20= uri=20and=20sha256.=0A---=0A=20gnu/packages/linux.scm=20|=20=20111=20= ++++++++++++++++++++++++++++++++++++++++++++++--=0A=201=20file=20= changed,=20107=20insertions(+),=204=20deletions(-)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= 6ba1119da4..4b2096b2fb=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-54,6=20+54,7=20@@=0A=20;;;=20Copyright=20= =C2=A9=202020=20David=20Dashyan=20=0A=20;;;=20Copyright=20= =C2=A9=202020=20pukkamustard=20=0A=20;;;=20= Copyright=20=C2=A9=202021=20B.=20Wilson=20=0A= +;;;=20Copyright=20=C2=A9=202021=20Stefan=20= =0A=20;;;=0A=20;;;=20This=20file=20is=20= part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-165,7=20+166,8=20@@=0A=20=20=20= #:use-module=20(srfi=20srfi-1)=0A=20=20=20#:use-module=20(srfi=20srfi-2)=0A= =20=20=20#:use-module=20(srfi=20srfi-26)=0A-=20=20#:use-module=20(ice-9=20= match))=0A+=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs))=0A=20=0A=20(define-public=20= (system->linux-architecture=20arch)=0A=20=20=20"Return=20the=20Linux=20= architecture=20name=20for=20ARCH,=20a=20Guix=20system=20name=20such=20as=0A= @@=20-820,8=20+822,8=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20= or=20#f=20if=20there=20is=20no=20such=20configuration."=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(substitute*=20(find-files=20"."=20= "^Makefile(\\.include)?$")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(("/bin/pwd")=20"pwd"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t))=0A-=20=20=20=20=20=20=20=20=20(replace=20'configure=0A-=20=20=20=20=20= =20=20=20=20=20=20(lambda*=20(#:key=20inputs=20native-inputs=20target=20= #:allow-other-keys)=0A+=20=20=20=20=20=20=20=20=20(add-before=20= 'configure=20'set-environment=0A+=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20target=20#:allow-other-keys)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Avoid=20introducing=20timestamps=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setenv=20"KCONFIG_NOTIMESTAMP"=20"1")=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(setenv=20"KBUILD_BUILD_TIMESTAMP"=20= (getenv=20"SOURCE_DATE_EPOCH"))=0A@@=20-839,7=20+841,9=20@@=20for=20ARCH=20= and=20optionally=20VARIANT,=20or=20#f=20if=20there=20is=20no=20such=20= configuration."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(getenv=20"CROSS_COMPILE"))))=0A=20=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setenv=20"EXTRAVERSION"=20(string-append=20= "-"=20,extra-version))=0A-=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= #t))=0A+=20=20=20=20=20=20=20=20=20(replace=20'configure=0A+=20=20=20=20=20= =20=20=20=20=20=20(lambda*=20(#:key=20inputs=20native-inputs=20= #:allow-other-keys)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20= ((build=20=20(assoc-ref=20%standard-phases=20'build))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(config=20(assoc-ref=20(or=20= native-inputs=20inputs)=20"kconfig")))=0A=20=0A@@=20-1154,6=20+1158,105=20= @@=20It=20has=20been=20modified=20to=20remove=20all=20non-free=20binary=20= blobs.")=0A=20=20=20=20=20=20=20(inherit=20base-linux-libre)=0A=20=20=20=20= =20=20=20(inputs=20`(("cpio"=20,cpio)=20,@(package-inputs=20= base-linux-libre))))))=0A=20=0A+=0C=0A+;;;=0A+;;;=20Linux=20kernel=20= customization=20functions.=0A+;;;=0A+=0A+(define*-public=20(modify-linux=20= #:key=20name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(linux=20linux-libre)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20defconfig=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(configs=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= extra-version)=0A+=20=20"Make=20a=20Linux=20package=20NAME=20as=20a=20= modification=20of=20another=20LINUX=20package.=0A+=0A+If=20NAME=20is=20= not=20given,=20then=20it=20defaults=20to=20the=20same=20name=20as=20the=20= LINUX=20package.=0A+=0A+A=20DEFCONFIG=20file=20to=20be=20used=20can=20be=20= given=20as=20a=20package,=20as=20a=20file=20like=20object=0A= +(file-append,=20local-file=20etc.),=20or=20as=20a=20string=20with=20the=20= name=20of=20a=20defconfig=20file=0A+available=20in=20the=20Linux=20= sources.=20=20If=20DEFCONFIG=20is=20not=20given,=20then=20a=20defconfig=0A= +file=20will=20be=20saved=20from=20the=20LINUX=20package=20= configuration.=0A+=0A+Additional=20CONFIGS=20will=20be=20used=20to=20= modify=20the=20given=20or=20saved=20defconfig,=20which=0A+will=20finally=20= be=20used=20to=20build=20Linux.=0A+=0A+CONFIGS=20can=20be=20a=20list=20= of=20strings,=20with=20one=20configuration=20per=20line.=20=20The=20= usual=0A+defconfig=20syntax=20has=20to=20be=20used,=20but=20there=20is=20= a=20special=20extension=20to=20ease=20the=0A+removal=20of=20= configurations.=20=20Comment=20lines=20are=20supported=20as=20well.=0A+=0A= +Here=20is=20an=20explaining=20usage=20example:=0A+=0A+=20=20'(;;=20This=20= string=20defines=20the=20version=20tail=20in=20'uname=20-r'.=0A+=20=20=20= =20\"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\"=0A+=20=20=20=20;;=20This=20= '#=20CONFIG_=E2=80=A6=20is=20not=20set'=20syntax=20has=20to=20match=20= exactly!=0A+=20=20=20=20\"#=20CONFIG_BOOT_CONFIG=20is=20not=20set\"=0A+=20= =20=20=20\"CONFIG_NFS_SWAP=3Dy\"=0A+=20=20=20=20;;=20This=20is=20a=20= multiline=20configuration:=0A+=20=20=20=20\"CONFIG_E1000=3Dy=0A+#=20This=20= is=20a=20comment,=20below=20follows=20the=20special=20removal=20= extension:=0A+CONFIG_CMDLINE_EXTEND=0A+CONFIG_CMDLINE_FORCE=3D\")=0A+=0A= +A=20string=20of=20configurations=20instead=20of=20a=20list=20of=20= configuration=20strings=20is=20also=0A+possible.=0A+=0A+EXTRA-VERSION=20= can=20be=20a=20string=20overwriting=20the=20EXTRAVERSION=20setting=20of=20= the=20LINUX=0A+package,=20after=20being=20prepended=20by=20a=20hyphen.=20= =20It=20will=20be=20visible=20in=20the=20output=0A+of=20'uname=20-r'=20= behind=20the=20Linux=20version=20numbers."=0A+=20=20(package=0A+=20=20=20= =20(inherit=20linux)=0A+=20=20=20=20(name=20(or=20name=20(package-name=20= linux)))=0A+=20=20=20=20(arguments=0A+=20=20=20=20=20= (substitute-keyword-arguments=0A+=20=20=20=20=20=20=20=20=20= (package-arguments=20linux)=0A+=20=20=20=20=20=20=20((#:imported-modules=20= imported-modules=20%gnu-build-system-modules)=0A+=20=20=20=20=20=20=20=20= `((guix=20build=20kconfig)=20,@imported-modules))=0A+=20=20=20=20=20=20=20= ((#:modules=20modules)=0A+=20=20=20=20=20=20=20=20`((guix=20build=20= kconfig)=20,@modules))=0A+=20=20=20=20=20=20=20((#:phases=20phases)=0A+=20= =20=20=20=20=20=20=20`(modify-phases=20,phases=0A+=20=20=20=20=20=20=20=20= =20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20#:allow-other-keys=20#:rest=20arguments)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((configs=20= (string-append=20"arch/"=20(getenv=20"ARCH")=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20"/configs/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix_defconfig=20= (string-append=20configs=20"guix_defconfig")))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20,(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20`(begin=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Call=20the=20= original=20'configure=20phase.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(apply=20(assoc-ref=20,phases=20= 'configure)=20arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Save=20a=20defconfig=20file.=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"savedefconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20the=20saved=20= defconfig=20to=20the=20proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20"defconfig"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((string?=20defconfig)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Use=20another=20existing=20defconfig=20from=20the=20Linux=20sources.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `(rename-file=20(string-append=20configs=20,defconfig)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20guix_defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(else=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Copy=20the=20defconfig=20input=20to=20the=20= proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20'(copy-file=20(assoc-ref=20inputs=20"guix_defconfig")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(modify-defconfig=20guix_defconfig=20',configs)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,@(if=20extra-version=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((setenv=20"EXTRAVERSION"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,(string-append=20"-"=20= extra-version)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"guix_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#t))))))=0A+=20=20=20=20(native-inputs=0A+=20=20=20=20=20=20= (append=20(if=20(and=20(not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string?=20defconfig))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'()=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20The=20defconfig=20should=20be=20a=20= package=20or=20file-like=20object.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20`(("guix_defconfig"=20,defconfig)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(package-native-inputs=20linux)))))=0A+=0A= +(define-public=20(make-defconfig=20uri=20sha256-as-base32)=0A+=20=20= (origin=20(method=20url-fetch)=0A+=20=20=20=20=20=20=20=20=20=20(uri=20= uri)=0A+=20=20=20=20=20=20=20=20=20=20(sha256=20(base32=20= sha256-as-base32))))=0A=20=0A=20=0C=0A=20;;;=0A= --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=07-gnu-raspberry-pi-add-defconfig.patch Content-Type: application/octet-stream; name="07-gnu-raspberry-pi-add-defconfig.patch" Content-Transfer-Encoding: quoted-printable gnu:=20raspberry-pi:=20Add=20defconfig=20objects=20to=20build=20= customized=20Linux=20kernels.=0A=0AFrom:=20Stefan=20= =0A=0Agnu/packages/raspberry-pi.scm=20= (make-raspi-defconig):=20New=20function=20to=20make=0Adownloaded=20= defconfig=20objects=20from=20the=20Linux=20repository=20of=20the=20= Raspberry=20Pi=0AFoundation.=0A(%bcm2709-defconfig,=20= %bcm2710-defconfig,=20%bcm2711-defconfig,=0A%bcm2835-defconfig,=20= %bcmrpi-defconfig,=20%bcm2711-defconfig-64,=0A%bcmrpi3-defconfig):=20New=20= variables=20containing=20defconfig=20objects=20to=20build=0ALinux=20= kernels=20customized=20for=20Raspberry=20Pi=20single=20board=20= computers.=0A---=0A=20gnu/packages/raspberry-pi.scm=20|=20=20=2044=20= ++++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2043=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/gnu/packages/raspberry-pi.scm=20b/gnu/packages/raspberry-pi.scm=0A= index=20bb38b8b218..a2ab300531=20100644=0A---=20= a/gnu/packages/raspberry-pi.scm=0A+++=20b/gnu/packages/raspberry-pi.scm=0A= @@=20-1,5=20+1,6=20@@=0A=20;;;=20GNU=20Guix=20---=20Functional=20package=20= management=20for=20GNU=0A=20;;;=20Copyright=20=C2=A9=202020=20Danny=20= Milosavljevic=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-25,9=20+26,10=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20commencement)=0A=20=20=20= #:use-module=20(gnu=20packages=20cross-base)=0A=20=20=20#:use-module=20= (gnu=20packages=20documentation)=0A+=20=20#:use-module=20(gnu=20packages=20= embedded)=0A=20=20=20#:use-module=20(gnu=20packages=20file)=0A=20=20=20= #:use-module=20(gnu=20packages=20gcc)=0A-=20=20#:use-module=20(gnu=20= packages=20embedded)=0A+=20=20#:use-module=20(gnu=20packages=20linux)=0A=20= =20=20#:use-module=20(guix=20build-system=20gnu)=0A=20=20=20#:use-module=20= (guix=20download)=0A=20=20=20#:use-module=20(guix=20git-download)=0A@@=20= -235,3=20+237,43=20@@=20Raspberry=20Pi.=20=20Note:=20It=20does=20not=20= work=20on=20Raspberry=20Pi=201.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(install-file=20"arm64.bin"=20libexec)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#t))))))))=0A=20=20=20=20=20(supported-systems=20= '("aarch64-linux"))))=0A+=0A+(define=20(make-raspi-defconfig=20arch=20= defconfig=20sha256-as-base32)=0A+=20=20"Make=20for=20the=20architecture=20= ARCH=20a=20file-like=20object=20from=20the=20DEFCONFIG=20file=0A+with=20= the=20hash=20SHA256-AS-BASE32.=20=20This=20object=20can=20be=20used=20as=20= the=20#:defconfig=0A+argument=20of=20the=20function=20(modify-linux)."=0A= +=20=20(make-defconfig=0A+=20=20=20(string-append=0A+=20=20=20=20= "https://raw.githubusercontent.com/raspberrypi/linux/raspberrypi-kernel_1.= 20210430-1/arch/"=0A+=20=20=20=20arch=20"/configs/"=20defconfig)=0A+=20=20= =20sha256-as-base32))=0A+=0A+(define-public=20%bcm2709-defconfig=0A+=20=20= (make-raspi-defconfig=0A+=20=20=20"arm"=20"bcm2709_defconfig"=0A+=20=20=20= "0yvrmid2jakl929d1mv00gidnqbf91ffhj61c9gl75f7km48811c"))=0A+=0A= +(define-public=20%bcm2711-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2711_defconfig"=0A+=20=20=20= "19hb6nwna7sk3b4rn5yjfhldrs3c1lv24q08w4gpa4xzh1byv7jj"))=0A+=0A= +(define-public=20%bcm2835-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2835_defconfig"=0A+=20=20=20= "17dmvabqvxwqn6lgv1x8rfh2wqf1r2xmm10nkdnrgwkmgv8bh2d5"))=0A+=0A= +(define-public=20%bcmrpi-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcmrpi_defconfig"=0A+=20=20=20= "0lcmr6nxdd53m3k8hqb5k6c5b7vbdgmfvcliqyl95snp45rxjjkw"))=0A+=0A= +(define-public=20%bcm2711-defconfig-64=0A+=20=20(make-raspi-defconfig=0A= +=20=20=20"arm64"=20"bcm2711_defconfig"=0A+=20=20=20= "0xf38nczwinr0j8vhsn8nd8h4ysjn77xphg7xnssz04gclb7fndr"))=0A+=0A= +(define-public=20%bcmrpi3-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm64"=20"bcmrpi3_defconfig"=0A+=20=20=20= "01k098snd7kbmhz68j93mj2fwp39c56g9r8rgaw17js5r0w0zbhy"))=0A= --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=08-gnu-raspberry-pi-add-helpers.patch Content-Type: application/octet-stream; name="08-gnu-raspberry-pi-add-helpers.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add helpers for config.txt file generation. From: Stefan * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): New functions. (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt %raspi-u-boot-bootloader-txt): New variables. --- gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index a2ab300531..0707516f72 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -238,6 +238,59 @@ Raspberry Pi. Note: It does not work on Raspberry Pi 1.") #t)))))))) (supported-systems '("aarch64-linux")))) +(define-public (raspi-config-file name content) + "Make a configuration file like config.txt for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (plain-file + name + (if (list? content) + (string-join content "\n" 'suffix) + content))) + +(define-public %raspi-config-txt + ;; A config.txt file to start the ARM cores up in 64-bit mode if necessary + ;; and to include a dtb.txt, bootloader.txt, and a custom.txt, each with + ;; separated configurations for the Raspberry Pi firmware. + (raspi-config-file + "config.txt" + `("# See https://www.raspberrypi.org/documentation/configuration/config-txt/README.md for details." + "" + ,(string-append "arm_64bit=" (if (target-aarch64?) "1" "0")) + "include dtb.txt" + "include bootloader.txt" + "include custom.txt"))) + +(define-public %raspi-bcm27-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; downstream device tree files bcm27*.dtb will be used. + (raspi-config-file + "dtb.txt" + "upstream_kernel=0")) + +(define-public %raspi-bcm28-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; upstream device tree files bcm28*.dtb will be used. + ;; This also implies the use of the dtoverlay=upstream. + (raspi-config-file + "dtb.txt" + "upstream_kernel=1")) + +(define-public %raspi-u-boot-bootloader-txt + ;; A bootloader.txt file to be included by the config.txt to load the + ;; U-Boot bootloader. + (raspi-config-file + "bootloader.txt" + '("dtoverlay=upstream" + "enable_uart=1" + "kernel=u-boot.bin"))) + +(define-public (raspi-custom-txt content) + "Make a custom.txt file for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (raspi-config-file "custom.txt" content)) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=09-gnu-raspberry-pi-new-function.patch Content-Type: application/octet-stream; name="09-gnu-raspberry-pi-new-function.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: New function to make a package with device-tree files. From: Stefan * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to make a package with device-tree files for Raspberry Pi models from the kernel given as argument. --- gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 0707516f72..d808f61ac2 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages file) #:use-module (gnu packages gcc) #:use-module (gnu packages linux) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concatenated with a newline character. Alternatively CONTENT can be a string with the full file content." (raspi-config-file "custom.txt" content)) +(define-public (make-raspi-bcm28-dtbs linux) + "Make a package with the device-tree files for Raspberry Pi models from the +kernel LINUX." + (package + (inherit linux) + (name "raspi-bcm28-dtbs") + (source #f) + (build-system copy-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'unpack)) + #:install-plan + (list (list (string-append (assoc-ref %build-inputs "linux") + "/lib/dtbs/broadcom/") + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) + (inputs `(("linux" ,linux))) + (synopsis "Device-tree files for a Raspberry Pi") + (description + (simple-format #f "The device-tree files for Raspberry Pi models from ~a." + (package-name linux))))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369 Content-Disposition: attachment; filename=10-gnu-raspberry-pi-add-a.patch Content-Type: application/octet-stream; name="10-gnu-raspberry-pi-add-a.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. From: Stefan * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. --- gnu/packages/raspberry-pi.scm | 19 +++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 73 ++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 77 +++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index d808f61ac2..d52a4a72c5 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -312,6 +315,22 @@ kernel LINUX." (simple-format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. + ;; It neither installs firmware nor device-tree files for the Raspberry Pi. + ;; It just assumes them to be existing in boot/efi in the same way that some + ;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + ;; It creates firmware configuration files and a bootloader-chain with U-Boot + ;; to provide an EFI API for the final GRUB bootloader. + ;; It also serves as a blue-print to create an own bootloader-chain with + ;; firmwre and device-tree packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-efi-64) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 0000000000..a1e41e3399 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,73 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 0000000000..7e18f00d86 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,77 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #| It is possible to use a specific defconfig file, + for example the "bcmrpi3_defconfig" with the + variable shown below. Unfortunately the kernel + build from the linux-libre sources with this + defconfig file does not boot. + #:extra-version "gnu-bcmrpi3" + #:defconfig %bcmrpi3-defconfig + |#)) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 --Apple-Mail=_B6AEB1F9-A6A1-473E-A99F-86D875ECF369-- From debbugs-submit-bounces@debbugs.gnu.org Sun May 16 08:46:55 2021 Received: (at 48314) by debbugs.gnu.org; 16 May 2021 12:46:55 +0000 Received: from localhost ([127.0.0.1]:49801 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1liGAZ-0001fw-PA for submit@debbugs.gnu.org; Sun, 16 May 2021 08:46:55 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:57230) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1liGAY-0001fi-CG for 48314@debbugs.gnu.org; Sun, 16 May 2021 08:46:55 -0400 Received: from smtp.vodafone.de (smtpa05.fra-mediabeam.com [10.2.0.36]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 3C3DF121686 for <48314@debbugs.gnu.org>; Sun, 16 May 2021 14:46:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1621169207; bh=+CER+tPC/zcEbcCZSFnOzSpE5YcxcaXM7jKZ1aklb/Y=; h=From:Subject:Date:To; b=HkKwcg/eoUtZGQZ54WX9hlvbU0wXAyEOpNHG9dUerAy1Ct/fLb+2XBSDHrNe9odGF vRSu+khY/NxyClphSM5qDsWGPdtuxD4QSg2gyfKMSnshvO7csKrJ8zMg/f9b3zPbCG HpmQn2GnQ0ndIua6xm9LtZO5J0b9bulDmRqhvNMI= Received: from macbook-pro.kuh-wiese.my-router.de (ipservice-092-218-117-017.092.218.pools.vodafone-ip.de [92.218.117.17]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id C22F91401A2 for <48314@debbugs.gnu.org>; Sun, 16 May 2021 12:46:46 +0000 (UTC) From: Stefan Content-Type: multipart/mixed; boundary="Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC" Subject: Patches to install guix system on Raspberry Pi Message-Id: <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> Date: Sun, 16 May 2021 14:46:45 +0200 To: 48314@debbugs.gnu.org Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 133401 X-purgate-ID: 155817::1621169207-00000827-41ED31CE/0/0 X-Debbugs-Envelope-To: 48314 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi! There were errors in the patches 05 and 06 in the EXTRAVERSION handling = and in the modify-linux function. Here an updated patch series. They apply to commit = f661e6883ec345258634940ce5d52957e1bb90c3. Bye Stefan --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=01-gnu-qemu-disable-tests-on.patch Content-Type: application/octet-stream; name="01-gnu-qemu-disable-tests-on.patch" Content-Transfer-Encoding: 7bit gnu: qemu: Disable tests on aarch64. From: Stefan * gnu/packages/virtualization.scm (qemu): Disable tests on aarch64 because of . --- gnu/packages/virtualization.scm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index a2df3e763c..0f90a7feea 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -172,10 +172,11 @@ (outputs '("out" "static" "doc")) ;5.3 MiB of HTML docs (build-system gnu-build-system) (arguments - ;; FIXME: Disable tests on i686 to work around - ;; . - `(#:tests? ,(or (%current-target-system) - (not (string=? "i686-linux" (%current-system)))) + ;; FIXME: Disable tests on aarch64 and i686 to work around + ;; and . + `(#:tests? ,(and (not (target-aarch64?)) + (or (%current-target-system) + (not (string=? "i686-linux" (%current-system))))) #:configure-flags (let ((gcc (string-append (assoc-ref %build-inputs "gcc") "/bin/gcc")) (out (assoc-ref %outputs "out"))) --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=02-gnu-bootloader-rework-chaining.patch Content-Type: application/octet-stream; name="02-gnu-bootloader-rework-chaining.patch" Content-Transfer-Encoding: quoted-printable gnu:=20bootloader:=20Rework=20chaining,=20add=20= grub-efi-netboot-removable-bootloader.=0A=0AFrom:=20Stefan=20= =0A=0A*=20doc/guix.texi=20(Bootloader=20= Configuration):=20Describe=20the=20new=0A= =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99.=20=20Mention=20= used=20sub-directories=20and=0Athat=20the=20UEFI=20Boot=20Manager=20is=20= not=20modified.=20=20Advice=20to=20disable=20write-access=0Aover=20TFTP.=0A= *=20gnu/bootloader.scm=20(efi-bootloader-profile):=20Allow=20a=20list=20= of=20packages=20and=0Acollect=20everything=20directly=20in=20the=20= profile,=20avoiding=20a=20separate=20collection=0Adirectory.=20=20= Renamed=20the=20profile=20from=20"bootloader-profile"=20to=0A= "efi-bootloader-profile".=0A[bootloader-collection]:=20Renamed=20to=20= =E2=80=A6=0A[efi-bootloader-profile-hook]:=20=E2=80=A6=20this=20and=20= removed=20unused=20modules=20and=20the=0Acreation=20of=20the=20now=20= unneeded=20collection=20directory.=0A(efi-bootloader-chain):=20Added=20= packages=20and=20disk-image-installer=20arguments.=0ARemoved=20handling=20= of=20the=20collection=20directory,=20now=20only=20calling=20the=20given=0A= installer=20procedure.=0A*=20gnu/bootloader/grub.scm=20= (make-grub-efi-netboot-installer):=20New=20helper.=0A= (make-grub-configuration):=20New=20helper=20based=20on=20= (grub-configuration-file).=0AAdding=20grub=20argument,=20fixed=20= indentation,=20removend=20code=20to=20get=20grub.=0A= (grub-configuration-file):=20Now=20using=20(make-grub-configuration).=0A= (grub-efi-configuration-file):=20New=20function=20using=20= (make-grub-configuration).=0AInstead=20of=20getting=20the=20grub-efi=20= package=20from=20the=20bootloader-configuration=0Athis=20function=20= refers=20to=20the=20grub-efi=20package=20directly.=0A(grub-cfg):=20New=20= variable=20to=20replace=20"/boot/grub/grub.cfg".=0A= (install-grub-efi-netboot):=20Removed,=20the=20functionality=20got=20= moved.=0A(make-grub-efi-netboot-installer):=20New=20helper=20function=20= to=20return=20a=20customized=0Ainstaller=20for=20a=20certain=20= efi-sub-directory.=20=20The=20installer=20basically=20copies=0Aa=20= pre-installed=20efi-bootloader-profile,=20and=20adds=20needed=20symlinks=20= for=20booting=0Aover=20network,=20or=20=E2=80=93=20on=20an=20ESP=20=E2=80=93= =20an=20intermediate=20grub-cfg=20to=20load=20the=20final=0Agrub-cfg=20= file.=0A(grub-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=0A= (grub-efi-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=20=20= Removed=20inheritance,=0Agiving=20complete=20set=20of=20fields.=0A= (make-grub-efi-netboot-bootloader):=20New=20helper=20function.=0A= (grub-efi-netboot-bootloader):=20Now=20using=20the=20helper.=0A= (grub-efi-netboot-removable-bootloader):=20New=20bootloader=20using=20= the=20helper.=0AIt=20uses=20the=20efi-sub-directory=20"efi/boot"=20for=20= removable=20media.=0A*=20gnu/packages/bootloaders.scm=20= (make-grub-efi-netboot):=20New=20function=20to=20return=0Aa=20grub-efi=20= package=20pre-installed=20via=20grub-mknetdir,=20customized=20for=20an=0A= efi-sub-directory=20and=20able=20to=20boot=20via=20network=20and=20local=20= storage.=0A=0AThe=20rework=20allows=20to=20use=20an=20= (efi-bootloader-chain)=20like=20this,=20which=20is=20able=0Ato=20boot=20= over=20network=20or=20local=20storage,=20depending=20on=20the=20= symlink-support=20at=0Athe=20bootloader-target:=0A=0A(operating-system=0A= =20(bootloader=0A=20=20=20(bootloader-configuration=0A=20=20=20=20=20= (bootloader=0A=20=20=20=20=20=20=20(efi-bootloader-chain=0A=20=20=20=20=20= =20=20=20=20grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20= =20=20#:packages=20(list=20my-firmware-package=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20my-u-boot-package)=0A= =20=20=20=20=20=20=20=20=20#:files=20(list=20(plain-file=20"config.txt"=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"kernel=3Du-boot.bin"))=0A=20=20=20=20=20=20= =20=20=20#:hooks=20my-special-bootloader-profile-manipulator))=0A=20=20=20= =20=20(target=20"/booti/efi")=0A=20=20=20=20=20=E2=80=A6))=0A=20=E2=80=A6)= =0A)=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=2024=20+++-=0A=20gnu/bootloader.scm=20=20=20=20=20=20=20=20=20= =20=20|=20=20104=20+++++++++---------=0A=20gnu/bootloader/grub.scm=20=20=20= =20=20=20|=20=20241=20++++++++++++++++++++++++++----------------=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2090=20++++++++++++++++=0A=204=20= files=20changed,=20308=20insertions(+),=20151=20deletions(-)=0A=0Adiff=20= --git=20a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20= 0947b9f028..40cef21f78=20100644=0A---=20a/doc/guix.texi=0A+++=20= b/doc/guix.texi=0A@@=20-32595,8=20+32595,9=20@@=20The=20type=20of=20a=20= bootloader=20configuration=20declaration.=0A=20@cindex=20BIOS,=20= bootloader=0A=20The=20bootloader=20to=20use,=20as=20a=20= @code{bootloader}=20object.=20=20For=20now=0A=20@code{grub-bootloader},=20= @code{grub-efi-bootloader},=0A-@code{grub-efi-netboot-bootloader},=20= @code{extlinux-bootloader}=20and=0A-@code{u-boot-bootloader}=20are=20= supported.=0A+@code{grub-efi-netboot-bootloader},=0A= +@code{grub-efi-netboot-removable-bootloader},=0A= +@code{extlinux-bootloader}=20and=20@code{u-boot-bootloader}=20are=20= supported.=0A=20=0A=20@cindex=20ARM,=20bootloaders=0A=20@cindex=20= AArch64,=20bootloaders=0A@@=20-32622,9=20+32623,10=20@@=20build=20a=20= diskless=20Guix=20system.=0A=20=0A=20The=20installation=20of=20the=20= @code{grub-efi-netboot-bootloader}=20generates=20the=20content=0A=20of=20= the=20TFTP=20root=20directory=20at=20@code{target}=0A-(@pxref{Bootloader=20= Configuration,=20@code{target}}),=20to=20be=20served=20by=20a=20TFTP=20= server.=0A-=20You=20may=20want=20to=20mount=20your=20TFTP=20server=20= directory=20onto=20@code{target}=20to=20move=20the=0A-required=20files=20= to=20the=20TFTP=20server=20automatically.=0A+(@pxref{Bootloader=20= Configuration,=20@code{target}})=20below=20the=20sub-directory=0A= +@file{efi/Guix},=20to=20be=20served=20by=20a=20TFTP=20server.=20=20You=20= may=20want=20to=20mount=20your=20TFTP=0A+server=20directory=20onto=20= @code{target}=20to=20move=20the=20required=20files=20to=20the=20TFTP=0A= +server=20automatically=20during=20installation.=0A=20=0A=20If=20you=20= plan=20to=20use=20an=20NFS=20root=20file=20system=20as=20well=20= (actually=20if=20you=20mount=20the=0A=20store=20from=20an=20NFS=20= share),=20then=20the=20TFTP=20server=20needs=20to=20serve=20the=20file=0A= @@=20-32655,13=20+32657,23=20@@=20TFTP,=20for=20example=20by=20copying=20= them=20into=20the=20TFTP=20root=20directory=20at=20@code{target}.=0A=20= It=20is=20important=20to=20note=20that=20symlinks=20pointing=20outside=20= the=20TFTP=20root=20directory=0A=20may=20need=20to=20be=20allowed=20in=20= the=20configuration=20of=20your=20TFTP=20server.=20=20Further=20the=0A=20= store=20link=20exposes=20the=20whole=20store=20through=20TFTP@.=20=20= Both=20points=20need=20to=20be=0A-considered=20carefully=20for=20= security=20aspects.=0A+considered=20carefully=20for=20security=20= aspects.=20=20It=20is=20advised=20to=20disable=20any=20TFTP=0A+write=20= access!=0A+=0A+Please=20note,=20that=20this=20bootloader=20will=20not=20= modify=20the=20=E2=80=98UEFI=20Boot=20Manager=E2=80=99=20of=0A+the=20= system.=0A=20=0A=20Beside=20the=20@code{grub-efi-netboot-bootloader},=20= the=20already=20mentioned=20TFTP=20and=0A=20NFS=20servers,=20you=20also=20= need=20a=20properly=20configured=20DHCP=20server=20to=20make=20the=20= booting=0A=20over=20netboot=20possible.=20=20For=20all=20this=20we=20can=20= currently=20only=20recommend=20you=20to=20look=0A=20for=20instructions=20= about=20@acronym{PXE,=20Preboot=20eXecution=20Environment}.=0A=20=0A= +@vindex=20grub-efi-netboot-removable-bootloader=0A= +@code{grub-efi-netboot-removable-bootloader}=20is=20identical=20to=0A= +@code{grub-efi-netboot-bootloader}=20with=20the=20exception=20that=20= the=20sub-directory=0A+@file{efi/boot}=20will=20be=20used=20instead=20of=20= @file{efi/Guix}=20to=20comply=20to=20the=20UEFI=0A+specification=20for=20= removable=20media.=0A+=0A=20@item=20@code{target}=0A=20This=20is=20a=20= string=20denoting=20the=20target=20onto=20which=20to=20install=20the=0A=20= bootloader.=0Adiff=20--git=20a/gnu/bootloader.scm=20b/gnu/bootloader.scm=0A= index=206d7352ddd2..f7c4a8f338=20100644=0A---=20a/gnu/bootloader.scm=0A= +++=20b/gnu/bootloader.scm=0A@@=20-232,26=20+232,22=20@@=20record."=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20(force=20%bootloaders))=0A=20=20=20=20= =20=20=20(leave=20(G_=20"~a:=20no=20such=20bootloader~%")=20name)))=0A=20= =0A-(define=20(efi-bootloader-profile=20files=20bootloader-package=20= hooks)=0A-=20=20"Creates=20a=20profile=20with=20BOOTLOADER-PACKAGE=20and=20= a=20directory=20collection/=20with=0A-links=20to=20additional=20FILES=20= from=20the=20store.=20=20This=20collection=20is=20meant=20to=20be=20used=0A= -by=20the=20bootloader=20installer.=0A+(define=20(efi-bootloader-profile=20= packages=20files=20hooks)=0A+=20=20"Creates=20a=20profile=20from=20the=20= lists=20of=20PACKAGES=20and=20FILES=20from=20the=20store.=0A+This=20= profile=20is=20meant=20to=20be=20used=20by=20the=20bootloader-installer.=0A= =20=0A=20FILES=20is=20a=20list=20of=20file=20or=20directory=20names=20= from=20the=20store,=20which=20will=20be=0A-symlinked=20into=20the=20= collection/=20directory.=20=20If=20a=20directory=20name=20ends=20with=20= '/',=0A-then=20the=20directory=20content=20instead=20of=20the=20= directory=20itself=20will=20be=20symlinked=0A-into=20the=20collection/=20= directory.=0A+symlinked=20into=20the=20profile.=20=20If=20a=20directory=20= name=20ends=20with=20'/',=20then=20the=0A+directory=20content=20instead=20= of=20the=20directory=20itself=20will=20be=20symlinked=20into=20the=0A= +profile.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A+FILES=20may=20contain=20= file=20like=20objects=20produced=20by=20procedures=20like=20plain-file,=0A= =20local-file,=20etc.,=20or=20package=20contents=20produced=20with=20= file-append.=0A=20=0A=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A-=20=20(define=20(bootloader-collection=20= manifest)=0A+=20=20(define=20(efi-bootloader-profile-hook=20manifest)=0A=20= =20=20=20=20(define=20build=0A-=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(ice-9=20ftw)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(srfi=20srfi-26))=0A+=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils))=0A=20=20=20=20=20=20=20= =20=20=20=20#~(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20((guix=20build=20utils)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:select=20(mkdir-p=20= strip-store-file-name))=0A@@=20-275,7=20+271,7=20@@=20HOOKS=20lists=20= additional=20hook=20functions=20to=20modify=20the=20profile."=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20(define=20(name-is-store-entry?=20name)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Return=20#t=20if=20NAME=20is=20= a=20direct=20store=20entry=20and=20nothing=20inside."=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(string-index=20(strip-store-file-name=20= name)=20#\/)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20(let*=20= ((collection=20(string-append=20#$output=20"/collection"))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(let*=20((output=20#$output)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20'#$files)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(directories=20(filter=20= name-ends-with-/?=20files))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(names-from-directories=0A@@=20-284,11=20+280,11=20@@=20= HOOKS=20lists=20additional=20hook=20functions=20to=20modify=20the=20= profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20directories))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(names=20(append=20= names-from-directories=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20= name-ends-with-/?=20files))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20collection)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20output)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (every=20file-exists?=20names)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(for-each=20(lambda=20(name)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-to=20name=20collection=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(symlink-to=20name=20= output=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (name-is-store-entry?=20name)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20strip-store-file-name=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20basename)))=0A@@=20= -296,57=20+292,63=20@@=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#t)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#f)))))=0A=20=0A-=20=20=20=20(gexp->derivation=20= "bootloader-collection"=0A+=20=20=20=20(gexp->derivation=20= "efi-bootloader-profile"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20build=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:local-build?=20#t=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:substitutable?=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:properties=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((type=20.=20profile-hook)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hook=20.=20bootloader-collection))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (hook=20.=20efi-bootloader-profile-hook))))=0A=20=0A-=20=20(profile=20= (content=20(packages->manifest=20(list=20bootloader-package)))=0A-=20=20=20= =20=20=20=20=20=20=20=20(name=20"bootloader-profile")=0A-=20=20=20=20=20=20= =20=20=20=20=20(hooks=20(append=20(list=20bootloader-collection)=20= hooks))=0A+=20=20(profile=20(content=20(packages->manifest=20packages))=0A= +=20=20=20=20=20=20=20=20=20=20=20(name=20"efi-bootloader-profile")=0A+=20= =20=20=20=20=20=20=20=20=20=20(hooks=20(cons=20= efi-bootloader-profile-hook=20hooks))=0A=20=20=20=20=20=20=20=20=20=20=20= =20(locales?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (allow-collisions?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (relative-symlinks?=20#f)))=0A=20=0A-(define*=20(efi-bootloader-chain=20= files=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20final-bootloader=0A+(define*=20= (efi-bootloader-chain=20final-bootloader=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(packages=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20= '())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hooks=20'())=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= installer)=0A-=20=20"Define=20a=20bootloader=20chain=20with=20= FINAL-BOOTLOADER=20as=20the=20final=20bootloader=20and=0A-certain=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20installer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= disk-image-installer)=0A+=20=20"Define=20a=20chain=20of=20bootloaders=20= with=20the=20FINAL-BOOTLOADER,=20optional=20PACKAGES,=0A+and=20optional=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A-local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=20=20They=20= will=20be=0A-collected=20inside=20a=20directory=20collection/=20inside=20= a=20generated=20bootloader=20profile,=0A-which=20will=20be=20passed=20to=20= the=20INSTALLER.=0A+The=20package=20of=20the=20FINAL-BOOTLOADER=20and=20= all=20PACKAGES=20and=20FILES=20will=20be=20placed=0A+in=20an=20= efi-bootloader-profile,=20which=20will=20be=20passed=20to=20the=20= INSTALLER.=0A+=0A+FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20procedures=20like=20plain-file,=0A+local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=0A=20=0A=20If=20= a=20directory=20name=20in=20FILES=20ends=20with=20'/',=20then=20the=20= directory=20content=20instead=0A-of=20the=20directory=20itself=20will=20= be=20symlinked=20into=20the=20collection/=20directory.=0A+of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=20= efi-bootloader-profile.=0A=20=0A=20The=20procedures=20in=20the=20HOOKS=20= list=20can=20be=20used=20to=20further=20modify=20the=20bootloader=0A=20= profile.=20=20It=20is=20possible=20to=20pass=20a=20single=20function=20= instead=20of=20a=20list.=0A=20=0A-If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20function=20will=20be=20called=20to=20install=0A= -the=20bootloader.=20=20Otherwise=20the=20installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A-=20=20(let*=20= ((final-installer=20(or=20installer=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A-=20=20=20=20=20=20=20=20=20= (profile=20(efi-bootloader-profile=20files=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(bootloader-package=20final-bootloader)=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20hooks=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20= hooks)))))=0A-=20=20=20=20(bootloader=0A-=20=20=20=20=20(inherit=20= final-bootloader)=0A-=20=20=20=20=20(package=20profile)=0A-=20=20=20=20=20= (installer=0A-=20=20=20=20=20=20#~(lambda=20(bootloader=20target=20= mount-point)=0A-=20=20=20=20=20=20=20=20=20=20(#$final-installer=20= bootloader=20target=20mount-point)=0A-=20=20=20=20=20=20=20=20=20=20= (copy-recursively=0A-=20=20=20=20=20=20=20=20=20=20=20(string-append=20= bootloader=20"/collection")=0A-=20=20=20=20=20=20=20=20=20=20=20= (string-append=20mount-point=20target)=0A-=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A-=20=20=20=20=20=20=20=20=20=20=20#:log=20= (%make-void-port=20"w")))))))=0A+If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20gexp=20procedure=20will=20be=20called=20to=0A= +install=20the=20efi-bootloader-profile.=20=20Otherwise=20the=20= installer=20of=20the=0A+FINAL-BOOTLOADER=20will=20be=20called.=0A+=0A+If=20= the=20DISK-IMAGE-INSTALLER=20is=20used,=20then=20this=20gexp=20procedure=20= will=20be=20called=0A+to=20install=20the=20efi-bootloader-profile=20into=20= a=20disk-image.=20=20Otherwise=20the=0A+disk-image-installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A+=20=20(bootloader=0A+=20=20=20= =20(inherit=20final-bootloader)=0A+=20=20=20=20(name=20= "efi-bootloader-chain")=0A+=20=20=20=20(package=0A+=20=20=20=20=20= (efi-bootloader-profile=20(cons=20(bootloader-package=20= final-bootloader)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20packages)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20files=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= hooks=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20hooks))))=0A+=20=20=20=20= (installer=0A+=20=20=20=20=20(or=20installer=0A+=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A+=20=20=20=20= (disk-image-installer=0A+=20=20=20=20=20(or=20disk-image-installer=0A+=20= =20=20=20=20=20=20=20=20(bootloader-disk-image-installer=20= final-bootloader)))))=0Adiff=20--git=20a/gnu/bootloader/grub.scm=20= b/gnu/bootloader/grub.scm=0Aindex=20ce146aba3c..c03a04818e=20100644=0A= ---=20a/gnu/bootloader/grub.scm=0A+++=20b/gnu/bootloader/grub.scm=0A@@=20= -50,11=20+50,12=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-color-highlight=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-gfxmode=0A=20=0A-=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-netboot=0A+=20=20=20=20=20=20=20=20=20=20=20=20= make-grub-efi-netboot-installer=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-mkrescue-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-minimal-bootloader=0A=20=0A@@=20-346,7=20+347,7=20@@=20code."=0A=20=20= =20=20=20=20=20=20=20((or=20#f=20(?=20string?))=0A=20=20=20=20=20=20=20=20= =20=20#~(format=20#f=20"search=20--file=20--set=20~a"=20#$file)))))=0A=20= =0A-(define*=20(grub-configuration-file=20config=20entries=0A+(define*=20= (make-grub-configuration=20grub=20config=20entries=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale=20#f)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(system=20(%current-system))=0A@@=20-376,27=20= +377,27=20@@=20when=20booting=20a=20root=20file=20system=20on=20a=20= Btrfs=20subvolume."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (initrd=20(normalize-file=20(menu-entry-initrd=20entry)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20device-mount-point=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20store-directory-prefix)))=0A-=20=20=20=20=20=20= =20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A-=20=20=20=20=20=20=20=20= =20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20INITRD=20= in=20case=0A-=20=20=20=20=20=20=20=20=20;;=20DEVICE-MOUNT-POINT=20is=20= not=20"/",=20meaning=20that=20the=20store=20is=20on=20a=0A-=20=20=20=20=20= =20=20=20=20;;=20separate=20partition.=0A-=0A-=20=20=20=20=20=20=20=20=20= ;;=20When=20BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20= the=20linux=20and=0A-=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20= to=20allow=20booting=20from=20a=20Btrfs=20subvolume.=0A-=20=20=20=20=20=20= =20=20=20#~(format=20port=20"menuentry=20~s=20{=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20= INITRD=20in=20case=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= DEVICE-MOUNT-POINT=20is=20not=20"/",=20meaning=20that=20the=20store=20is=20= on=20a=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20separate=20partition.=0A= +=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20When=20= BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20the=20linux=20= and=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20to=20= allow=20booting=20from=20a=20Btrfs=20subvolume.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20#~(format=20port=20"menuentry=20~s=20{=0A=20=20=20~a=0A=20=20= =20linux=20~a=20~a=0A=20=20=20initrd=20~a=0A=20}~%"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20#$label=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$linux=20= (string-join=20(list=20#$@arguments))=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#$initrd))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#$label=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #$linux=20(string-join=20(list=20#$@arguments))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#$initrd))=0A=20=20=20=20=20=20= =20=20=20=20=20(let=20((kernel=20(menu-entry-multiboot-kernel=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(arguments=20= (menu-entry-multiboot-arguments=20entry))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(modules=20(menu-entry-multiboot-modules=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(root-index=201))=20=20= =20=20=20=20=20=20=20=20=20=20;=20XXX=20EFI=20will=20need=20root-index=20= 2=0A-=20=20=20=20=20=20=20=20#~(format=20port=20"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20#~(format=20port=20"=0A=20menuentry=20~s=20{=0A=20=20=20= multiboot=20~a=20root=3Ddevice:hd0s~a~a~a=0A=20}~%"=0A@@=20-434,9=20= +435,7=20@@=20menuentry=20~s=20{=0A=20=20=20(define=20locale-config=0A=20= =20=20=20=20(let*=20((entry=20(first=20all-entries))=0A=20=20=20=20=20=20= =20=20=20=20=20=20(device=20(menu-entry-device=20entry))=0A-=20=20=20=20=20= =20=20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20= entry))=0A-=20=20=20=20=20=20=20=20=20=20=20(bootloader=20= (bootloader-configuration-bootloader=20config))=0A-=20=20=20=20=20=20=20=20= =20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20=20=20=20= =20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20entry)))=0A= =20=20=20=20=20=20=20#~(let=20((locale=20#$(and=20locale=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (locale-definition-source=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale-name->definition=20= locale))))=0A@@=20-462,8=20+461,6=20@@=20set=20lang=3D~a~%"=0A=20=0A=20=20= =20(define=20keyboard-layout-config=0A=20=20=20=20=20(let*=20((layout=20= (bootloader-configuration-keyboard-layout=20config))=0A-=20=20=20=20=20=20= =20=20=20=20=20(grub=20=20=20(bootloader-package=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-configuration-bootloader=20config)))=0A=20=20=20=20=20=20=20=20= =20=20=20=20(keymap*=20(and=20layout=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(keyboard-layout-file=20layout=20= #:grub=20grub)))=0A=20=20=20=20=20=20=20=20=20=20=20=20(entry=20(first=20= all-entries))=0A@@=20-514,6=20+511,16=20@@=20fi~%"))))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:options=20'(#:local-build?=20#t=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:substitutable?=20#f)))=0A=20=0A+(define=20= (grub-configuration-file=20config=20.=20args)=0A+=20=20(let*=20= ((bootloader=20(bootloader-configuration-bootloader=20config))=0A+=20=20=20= =20=20=20=20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20= =20(apply=20make-grub-configuration=20grub=20config=20args)))=0A+=0A= +(define=20(grub-efi-configuration-file=20.=20args)=0A+=20=20(apply=20= make-grub-configuration=20grub-efi=20args))=0A+=0A+(define=20grub-cfg=20= "/boot/grub/grub.cfg")=0A+=0A=20=0C=0A=20=0A=20;;;=0A@@=20-607,42=20= +614,31=20@@=20fi~%"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"--bootloader-id=3DGuix"=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"--efi-directory"=20= target-esp)))))=0A=20=0A-(define=20(install-grub-efi-netboot=20subdir)=0A= -=20=20"Define=20a=20grub-efi-netboot=20bootloader=20installer=20for=20= installation=20in=20SUBDIR,=0A-which=20is=20usually=20efi/Guix=20or=20= efi/boot."=0A-=20=20(let*=20((system=20(string-split=20= (nix-system->gnu-triplet=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (%current-target-system)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A-=20=20=20=20=20=20=20=20= =20(arch=20(first=20system))=0A-=20=20=20=20=20=20=20=20=20= (boot-efi-link=20(match=20system=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20the=20= supportend=20systems=20and=20the=20names=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20defined=20by=20the=20= UEFI=20standard=20for=20removable=20media.=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("i686"=20_=20...)=20= =20=20=20=20=20=20=20"/bootia32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20= =20=20=20"/bootx64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("arm"=20_=20...)=20=20=20=20=20=20=20=20= =20"/bootarm.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("riscv"=20_=20...)=20=20=20=20=20=20=20= "/bootriscv32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Other=20systems=20are=20not=20supported,=20= although=20defined.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("ia64"=20_=20...)=20=20=20=20=20= "/bootia64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A-=20=20=20=20=20=20=20=20=20(core-efi=20(string-append=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20This=20is=20= the=20arch=20dependent=20file=20name=20of=20GRUB,=20e.g.=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20i368-efi/core.efi=20or=20= arm64-efi/core.efi.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20arch=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20("i686"=20=20=20=20"i386")=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("riscv"=20=20=20= "riscv32")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(_=20=20=20=20=20=20=20=20=20arch))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"-efi/core.efi")))=0A-=20=20=20=20= (with-imported-modules=0A-=20=20=20=20=20'((guix=20build=20union))=0A-=20= =20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A-=20=20=20=20= =20=20=20=20=20"Install=20the=20BOOTLOADER,=20which=20must=20be=20the=20= package=20grub,=20as=20e.g.=0A-bootx64.efi=20or=20bootaa64.efi=20into=20= SUBDIR,=20which=20is=20usually=20efi/Guix=20or=20efi/boot,=0A-below=20= the=20directory=20TARGET=20for=20the=20system=20whose=20root=20is=20= mounted=20at=20MOUNT-POINT.=0A+(define*=20= (make-grub-efi-netboot-installer=20grub-efi=20grub-cfg=20subdir)=0A+=20=20= "Make=20a=20bootloader-installer=20for=20a=20grub-efi-netboot=20= bootloader,=20which=20expects=0A+its=20files=20in=20SUBDIR=20and=20its=20= configuration=20file=20in=20GRUB-CFG.=0A+=0A+As=20a=20grub-efi-netboot=20= package=20is=20already=20preinstalled=20by=20'grub-mknetdir',=20the=0A= +installer=20basically=20copies=20all=20files=20from=20the=20= bootloader-package=20(or=20profile)=0A+into=20the=20bootloader-target=20= directory.=0A+=0A+Additionally=20for=20network=20booting=20over=20TFTP,=20= two=20relative=20symlinks=20to=20the=20store=0A+and=20to=20the=20= GRUB-CFG=20file=20are=20necessary.=20=20Due=20to=20this=20a=20TFTP=20= root=20directory=20must=0A+not=20be=20located=20on=20a=20FAT=20= file-system.=0A+=0A+If=20the=20bootloader-target=20does=20not=20support=20= symlinks,=20then=20it=20is=20assumed=20to=20be=20a=0A+kind=20of=20EFI=20= System=20Partition=20(ESP).=20=20In=20this=20case=20an=20intermediate=20= configuration=0A+file=20is=20created=20with=20the=20help=20of=20GRUB-EFI=20= to=20load=20the=20GRUB-CFG.=0A+=0A+The=20installer=20is=20usable=20for=20= any=20efi-bootloader-chain,=20which=20prepares=20the=0A= +bootloader-profile=20in=20a=20way=20ready=20for=20copying.=0A+=0A+The=20= installer=20does=20not=20manipulate=20the=20system's=20'UEFI=20Boot=20= Manager'."=0A+=20=20(with-imported-modules=20'((guix=20build=20union))=0A= +=20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A+=20=20=20= =20=20=20=20=20"Copy=20the=20BOOTLOADER,=20which=20must=20be=20a=20= preinstalled=20grub-efi-netboot=0A+package=20with=20a=20SUBDIR=20like=20= efi/boot=20or=20efi/Guix,=20below=20the=20directory=0A+TARGET=20for=20= the=20system=20whose=20root=20is=20mounted=20at=20MOUNT-POINT.=0A=20=0A=20= MOUNT-POINT=20is=20the=20last=20argument=20in=20'guix=20system=20init=20= /etc/config.scm=20mnt/point'=0A=20or=20'/'=20for=20other=20'guix=20= system'=20commands.=0A@@=20-651,17=20+647,18=20@@=20TARGET=20is=20the=20= target=20argument=20given=20to=20the=20bootloader-configuration=20in=0A=20= =0A=20(operating-system=0A=20=20(bootloader=20(bootloader-configuration=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20(target=20\"/boot\")=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(target=20\"/boot/efi\")=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=E2=80=A6))=0A=20=20=E2=80=A6)=0A=20=0A=20= TARGET=20is=20required=20to=20be=20an=20absolute=20directory=20name,=20= usually=20mounted=20via=20NFS,=0A=20and=20finally=20needs=20to=20be=20= provided=20by=20a=20TFTP=20server=20as=20the=20TFTP=20root=20directory.=0A= =20=0A+Usually=20the=20installer=20will=20be=20used=20to=20prepare=20= network=20booting=20over=20TFTP.=20=20Then=0A=20GRUB=20will=20load=20= tftp://server/SUBDIR/grub.cfg=20and=20this=20file=20will=20instruct=20it=20= to=0A=20load=20more=20files=20from=20the=20store=20like=20= tftp://server/gnu/store/=E2=80=A6-linux=E2=80=A6/Image.=0A=20=0A-To=20= make=20this=20possible=20two=20symlinks=20will=20be=20created.=20The=20= first=20symlink=20points=0A+To=20make=20this=20possible=20two=20symlinks=20= will=20be=20created.=20=20The=20first=20symlink=20points=0A=20relatively=20= form=20MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20to=0A=20= MOUNT-POINT/boot/grub/grub.cfg,=20and=20the=20second=20symlink=20points=20= relatively=20from=0A=20MOUNT-POINT/TARGET/%store-prefix=20to=20= MOUNT-POINT/%store-prefix.=0A@@=20-671,34=20+668,78=20@@=20paths=20on=20= the=20TFTP=20server=20side=20are=20unknown.=0A=20=0A=20It=20is=20also=20= important=20to=20note=20that=20both=20symlinks=20will=20point=20outside=20= the=20TFTP=20root=0A=20directory=20and=20that=20the=20= TARGET/%store-prefix=20symlink=20makes=20the=20whole=20store=0A= -accessible=20via=20TFTP.=20Possibly=20the=20TFTP=20server=20must=20be=20= configured=0A-to=20allow=20accesses=20outside=20its=20TFTP=20root=20= directory.=20This=20may=20need=20to=20be=0A-considered=20for=20security=20= aspects."=0A-=20=20=20=20=20=20=20=20=20(use-modules=20((guix=20build=20= union)=20#:select=20(symlink-relative)))=0A-=20=20=20=20=20=20=20=20=20= (let*=20((net-dir=20(string-append=20mount-point=20target=20"/"))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20(string-append=20= net-dir=20#$subdir=20"/"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(store=20(string-append=20mount-point=20(%store-prefix)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= net-dir=20(%store-prefix)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(grub-cfg=20(string-append=20mount-point=20"/boot/grub/grub.cfg"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(grub-cfg-link=20= (string-append=20sub-dir=20(basename=20grub-cfg)))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(boot-efi-link=20(string-append=20sub-dir=20= #$boot-efi-link)))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20store-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20store-link))=0A-=20=20=20=20=20=20=20= =20=20=20=20(symlink-relative=20store=20store-link)=0A-=20=20=20=20=20=20= =20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg,=20= which=20points=20into=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20grub-cfg-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A-=20=20=20=20=20=20= =20=20=20=20=20(symlink-relative=20grub-cfg=20grub-cfg-link)=0A-=20=20=20= =20=20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= encrypted=20partitions,=0A-=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "GRUB_ENABLE_CRYPTODISK"=20"y")=0A-=20=20=20=20=20=20=20=20=20=20=20= (invoke/quiet=20(string-append=20bootloader=20"/bin/grub-mknetdir")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"--net-directory=3D"=20net-dir)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "--subdir=3D"=20#$subdir))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= Prepare=20the=20bootloader=20symlink,=20which=20points=20to=20core.efi=20= of=20GRUB.=0A-=20=20=20=20=20=20=20=20=20=20=20(false-if-exception=20= (delete-file=20boot-efi-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (symlink=20#$core-efi=20boot-efi-link))))))=0A+accessible=20via=20TFTP.=20= =20Possibly=20the=20TFTP=20server=20must=20be=20configured=20to=20allow=0A= +accesses=20outside=20its=20TFTP=20root=20directory.=20=20This=20all=20= may=20need=20to=20be=20considered=0A+for=20security=20aspects.=20=20It=20= is=20advised=20to=20disable=20any=20TFTP=20write=20access!=0A+=0A+The=20= installer=20can=20also=20be=20used=20to=20prepare=20booting=20from=20= local=20storages,=20if=20the=0A+underlying=20file-system,=20like=20FAT=20= on=20an=20EFI=20System=20Partition=20(ESP),=20does=20not=0A+support=20= symlinks.=20=20In=20this=20case=20the=20= MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20will=20be=0A+created=20with=20the=20= help=20of=20GRUB-EFI=20to=20load=20the=20/boot/grub/grub.cfg=20file.=20=20= A=0A+symlink=20to=20the=20store=20is=20not=20needed=20in=20this=20case."=0A= +=20=20=20=20=20=20=20=20;;=20In=20context=20of=20a=20disk=20image=20= creation=20TARGET=20will=20be=20#f=20and=20an=0A+=20=20=20=20=20=20=20=20= ;;=20installer=20is=20expected=20to=20do=20necessary=20installations=20= on=20MOUNT-POINT,=0A+=20=20=20=20=20=20=20=20;;=20which=20will=20become=20= the=20root=20file=20system.=0A+=20=20=20=20=20=20=20=20;;=20If=20TARGET=20= is=20#f,=20this=20installer=20has=20nothing=20to=20do,=20as=20it=20only=20= cares=0A+=20=20=20=20=20=20=20=20;;=20about=20the=20EFI=20System=20= Partition=20(ESP).=0A+=20=20=20=20=20=20=20=20(when=20target=0A+=20=20=20= =20=20=20=20=20=20=20(use-modules=20((guix=20build=20union)=20#:select=20= (symlink-relative))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(ice-9=20popen)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(ice-9=20rdelim))=0A+=20=20=20=20=20=20=20= =20=20=20(let*=20((mount-point/target=20(string-append=20mount-point=20= target=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= When=20installing=20Guix,=20it=20is=20common=20to=20mount=20TARGET=20= below=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= MOUNT-POINT=20rather=20than=20the=20root=20directory.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bootloader-target=20(if=20= (file-exists?=20mount-point/target)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mount-point/target=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20target))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20= (string-append=20mount-point=20(%store-prefix)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= bootloader-target=20(%store-prefix)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(grub-cfg=20(string-append=20mount-point=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (grub-cfg-link=20(string-append=20bootloader-target=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$subdir=20"/"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(basename=20= grub-cfg))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Copy=20the=20= bootloader=20into=20the=20bootloader-target=20directory.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Should=20we=20beforehand=20recursively=20= delete=20any=20existing=20file?=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (copy-recursively=20bootloader=20bootloader-target=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:log=20(%make-void-port=20= "w"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20For=20TFTP=20we=20need=20= to=20install=20additional=20relative=20symlinks.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20If=20we=20install=20on=20an=20EFI=20System=20= Partition=20(ESP)=20or=20some=20other=20FAT=0A+=20=20=20=20=20=20=20=20=20= =20=20=20;;=20file-system,=20then=20symlinks=20cannot=20be=20created=20= and=20are=20not=20needed.=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Therefore=20we=20ignore=20exceptions=20when=20trying.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20(dirname=20= grub-cfg-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(if=20(unspecified?=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(false-if-exception=20(symlink-relative=20grub-cfg=20= grub-cfg-link)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Symlinks=20are=20supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(mkdir-p=20(dirname=20store-link))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20= store-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-relative=20store=20store-link))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Creating=20symlinks=20does=20not=20seem=20to=20be=20= supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Probably=20= an=20ESP=20is=20used.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Instead=20we=20can=20script=20to=20search=20and=20load=20the=20actual=20= grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((probe=20= #$(file-append=20grub-efi=20"/sbin/grub-probe"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(port=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-pipe*=20OPEN_READ=20= probe=20"--target=3Dfs_uuid"=20grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(search-root=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20(read-line=20port)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((?=20eof-object?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20There=20is=20no=20UUID=20= available.=20As=20a=20fallback=20search=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20everywhere=20for=20= the=20grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20"search=20--file=20--set=20"=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(fs-uuid=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20UUID=20to=20load=20the=20= grub.cfg=20from=20is=20known.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"search=20= --fs-uuid=20--set=20"=20fs-uuid))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(load-grub-cfg=20(string-append=20"configfile=20= "=20#$grub-cfg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (close-pipe=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-output-to-file=20grub-cfg-link=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(display=20(string-join=20(list=20search-root=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= load-grub-cfg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "\n")))))))))))=0A=20=0A=20=0C=0A=20=0A@@=20-716,7=20+757,7=20@@=20= considered=20for=20security=20aspects."=0A=20=20=20=20(package=20grub)=0A= =20=20=20=20(installer=20install-grub)=0A=20=20=20=20= (disk-image-installer=20install-grub-disk-image)=0A-=20=20=20= (configuration-file=20"/boot/grub/grub.cfg")=0A+=20=20=20= (configuration-file=20grub-cfg)=0A=20=20=20=20= (configuration-file-generator=20grub-configuration-file)))=0A=20=0A=20= (define=20grub-minimal-bootloader=0A@@=20-726,17=20+767,29=20@@=20= considered=20for=20security=20aspects."=0A=20=0A=20(define=20= grub-efi-bootloader=0A=20=20=20(bootloader=0A-=20=20=20(inherit=20= grub-bootloader)=0A+=20=20=20(name=20'grub-efi)=0A+=20=20=20(package=20= grub-efi)=0A=20=20=20=20(installer=20install-grub-efi)=0A=20=20=20=20= (disk-image-installer=20#f)=0A-=20=20=20(name=20'grub-efi)=0A-=20=20=20= (package=20grub-efi)))=0A+=20=20=20(configuration-file=20grub-cfg)=0A+=20= =20=20(configuration-file-generator=20grub-configuration-file)))=0A=20=0A= -(define=20grub-efi-netboot-bootloader=0A+(define=20= (make-grub-efi-netboot-bootloader=20name=20subdir)=0A=20=20=20= (bootloader=0A-=20=20=20(inherit=20grub-efi-bootloader)=0A-=20=20=20= (name=20'grub-efi-netboot-bootloader)=0A-=20=20=20(installer=20= (install-grub-efi-netboot=20"efi/Guix"))))=0A+=20=20=20(name=20name)=0A+=20= =20=20(package=20(make-grub-efi-netboot=20(symbol->string=20name)=20= subdir))=0A+=20=20=20(installer=20(make-grub-efi-netboot-installer=20= grub-efi=20grub-cfg=20subdir))=0A+=20=20=20(disk-image-installer=20#f)=0A= +=20=20=20(configuration-file=20grub-cfg)=0A+=20=20=20= (configuration-file-generator=20grub-efi-configuration-file)))=0A+=0A= +(define=20grub-efi-netboot-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20'grub-efi-netboot-bootloader=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"efi/Guix"))=0A+=0A+(define=20= grub-efi-netboot-removable-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20= 'grub-efi-netboot-removable-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "efi/boot"))=0A=20=0A=20(define=20grub-mkrescue-bootloader=0A=20=20=20= (bootloader=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=2056bef57cb7..32dae92531=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-15,6=20+15,7=20@@=0A=20;;;=20= Copyright=20=C2=A9=202020=20Pierre=20Langlois=20= =0A=20;;;=20Copyright=20=C2=A9=202021=20Vincent=20= Legoll=20=0A=20;;;=20Copyright=20=C2=A9=202021=20= Brice=20Waegeneire=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-65,13=20+66,17=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20xorg)=0A=20=20=20#:use-module=20= (gnu=20packages=20web)=0A=20=20=20#:use-module=20(guix=20build-system=20= gnu)=0A+=20=20#:use-module=20(guix=20build-system=20trivial)=0A=20=20=20= #:use-module=20(guix=20download)=0A+=20=20#:use-module=20(guix=20gexp)=0A= =20=20=20#:use-module=20(guix=20git-download)=0A=20=20=20#:use-module=20= ((guix=20licenses)=20#:prefix=20license:)=0A=20=20=20#:use-module=20= (guix=20packages)=0A=20=20=20#:use-module=20(guix=20utils)=0A=20=20=20= #:use-module=20(srfi=20srfi-1)=0A=20=20=20#:use-module=20(srfi=20= srfi-26)=0A+=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs)=0A=20=20=20#:use-module=20(ice-9=20regex))=0A=20=0A=20= (define=20unifont=0A@@=20-353,6=20+358,91=20@@=20menu=20to=20select=20= one=20of=20the=20installed=20operating=20systems.")=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(scandir=20input-dir))=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A=20=0A= +(define-public=20(make-grub-efi-netboot=20name=20subdir)=0A+=20=20"Make=20= a=20grub-efi-netboot=20package=20named=20NAME,=20which=20will=20be=20= able=20to=20boot=20over=0A+network=20via=20TFTP=20by=20accessing=20its=20= files=20in=20the=20SUBDIR=20of=20a=20TFTP=20root=20directory.=0A+This=20= package=20is=20also=20able=20to=20boot=20from=20local=20storage=20= devices.=0A+=0A+A=20bootloader-installer=20basically=20needs=20to=20copy=20= the=20package=20content=20into=20the=0A+bootloader-target=20directory,=20= which=20will=20usually=20be=20the=20TFTP=20root,=20as=0A+'grub-mknetdir'=20= will=20be=20invoked=20already=20during=20the=20package=20creation.=0A+=0A= +Alternatively=20the=20bootloader-target=20directory=20can=20be=20a=20= mounted=20EFI=20System=0A+Partition=20(ESP),=20or=20a=20similar=20= partition=20with=20a=20FAT=20file=20system,=20for=20booting=0A+from=20= local=20storage=20devices.=0A+=0A+The=20name=20of=20the=20GRUB=20EFI=20= binary=20will=20conform=20to=20the=20UEFI=20specification=20for=0A= +removable=20media.=20=20Depending=20on=20the=20system=20it=20will=20be=20= e.g.=20bootx64.efi=20or=0A+bootaa64.efi=20below=20SUBDIR.=0A+=0A+The=20= SUBDIR=20argument=20needs=20to=20be=20set=20to=20\"efi/boot\"=20to=20= create=20a=20package=20which=0A+conforms=20to=20the=20UEFI=20= specification=20for=20removable=20media.=0A+=0A+The=20SUBDIR=20argument=20= defaults=20to=20\"efi/Guix\",=20as=20it=20is=20also=20the=20case=20for=0A= +'grub-efi-bootloader'."=0A+=20=20(package=0A+=20=20=20=20(name=20name)=0A= +=20=20=20=20(version=20(package-version=20grub-efi))=0A+=20=20=20=20;;=20= Source=20is=20not=20needed,=20but=20it=20cannot=20be=20omitted.=0A+=20=20= =20=20(source=20#f)=0A+=20=20=20=20(build-system=20trivial-build-system)=0A= +=20=20=20=20(arguments=0A+=20=20=20=20=20(let*=20((system=20= (string-split=20(nix-system->gnu-triplet=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (or=20(%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(arch=20(first=20system))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(boot-efi=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20= the=20supportend=20systems=20and=20the=20names=20defined=20by=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20the=20UEFI=20standard=20for=20= removable=20media.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("i686"=20_=20...)=20=20=20=20=20=20=20=20"/bootia32.efi")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20=20=20=20= "/bootx64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("arm"=20= _=20...)=20=20=20=20=20=20=20=20=20"/bootarm.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("riscv"=20_=20...)=20=20=20=20=20=20=20"/bootriscv32.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Other=20systems=20are=20not=20supported,=20although=20defined.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= (("ia64"=20_=20...)=20=20=20=20=20"/bootia64.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(core-efi=20= (string-append=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20This=20is=20the=20arch=20dependent=20file=20name=20of=20= GRUB,=20e.g.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20i368-efi/core.efi=20or=20arm64-efi/core.efi.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= arch=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20("i686"=20=20=20=20"i386")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ("riscv"=20=20=20"riscv32")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20arch))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "-efi/core.efi")))=0A+=20=20=20=20=20=20=20`(#:modules=20((guix=20build=20= utils))=0A+=20=20=20=20=20=20=20=20=20#:builder=0A+=20=20=20=20=20=20=20=20= =20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(guix=20= build=20utils))=0A+=20=20=20=20=20=20=20=20=20=20=20(let*=20((bootloader=20= (assoc-ref=20%build-inputs=20"grub-efi"))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(net-dir=20(assoc-ref=20%outputs=20"out"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20= (string-append=20net-dir=20"/"=20,subdir=20"/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(boot-efi=20(string-append=20sub-dir=20= ,boot-efi))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (core-efi=20(string-append=20sub-dir=20,core-efi)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20encrypted=20partitions,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"GRUB_ENABLE_CRYPTODISK"=20"y")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(invoke/quiet=20(string-append=20bootloader=20= "/bin/grub-mknetdir")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--net-directory=3D"=20= net-dir)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"--subdir=3D"=20,subdir)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20modules=20must=20be=20preloaded=20to=20allow=20booting=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20from=20an=20ESP=20or=20a=20similar=20partition=20with=20a=20FAT=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20file=20system.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--modules=3Dpart_msdos=20= part_gpt=20fat"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20= GRUB's=20core.efi=20to=20the=20removable=20media=20name.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20boot-efi))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20core-efi=20= boot-efi))))))=0A+=20=20=20=20(inputs=20`(("grub-efi"=20,grub-efi)))=0A+=20= =20=20=20(synopsis=20(package-synopsis=20grub-efi))=0A+=20=20=20=20= (description=20(package-description=20grub-efi))=0A+=20=20=20=20= (home-page=20(package-home-page=20grub-efi))=0A+=20=20=20=20(license=20= (package-license=20grub-efi))))=0A+=0A=20(define-public=20syslinux=0A=20=20= =20(let=20((commit=20"bb41e935cc83c6242de24d2271e067d76af3585c"))=0A=20=20= =20=20=20(package=0A= --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=03-build-kconfig-add-new-module.patch Content-Type: application/octet-stream; name="03-build-kconfig-add-new-module.patch" Content-Transfer-Encoding: quoted-printable build:=20kconfig:=20Add=20new=20module=20to=20modify=20a=20defconfig=20= file.=0A=0AFrom:=20Stefan=20=0A=0A*=20= guix/build/kconfig.scm=20(modify-defconfig):=20New=20file=20with=20a=20= new=20function.=0A*=20gnu/packages/bootloaders.scm=20= (make-u-boot-package,=0Amake-u-boot-sunxi64-package):=20Adding=20new=20= key=20arguments=20to=20pass=20and/or=20modify=0Aa=20defconfig=20file.=0A= (u-boot-am335x-boneblack,=20u-boot-pinebook,=20u-boot-novena):=20= Simplify=20functions=0Aby=20using=20the=20new=20key=20arguments=20of=20= the=20former=20functions.=0A*=20Makefile.am:=20Adding=20= guix/build/kconfig.scm=20to=20MODULES.=0A---=0A=20Makefile.am=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=20=201=20=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2087=20+++++++++++--------------=0A= =20guix/build/kconfig.scm=20=20=20=20=20=20=20|=20=20148=20= ++++++++++++++++++++++++++++++++++++++++++=0A=203=20files=20changed,=20= 186=20insertions(+),=2050=20deletions(-)=0A=20create=20mode=20100644=20= guix/build/kconfig.scm=0A=0Adiff=20--git=20a/Makefile.am=20b/Makefile.am=0A= index=200129011ebf..c17a417703=20100644=0A---=20a/Makefile.am=0A+++=20= b/Makefile.am=0A@@=20-217,6=20+217,7=20@@=20MODULES=20=3D=09=09=09=09=09= \=0A=20=20=20guix/build/waf-build-system.scm=09=09\=0A=20=20=20= guix/build/haskell-build-system.scm=09=09\=0A=20=20=20= guix/build/julia-build-system.scm=09=09\=0A+=20=20guix/build/kconfig.scm=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\=0A= =20=20=20guix/build/linux-module-build-system.scm=09\=0A=20=20=20= guix/build/store-copy.scm=09=09=09\=0A=20=20=20guix/build/json.scm=09=09=09= =09\=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=2032dae92531..38cf933c22=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-717,8=20+717,9=20@@=20def=20= test_ctrl_c"))=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=20=20= This=20package=20provides=20its=0A=20board-independent=20tools.")))=0A=20= =0A-(define-public=20(make-u-boot-package=20board=20triplet)=0A-=20=20= "Returns=20a=20u-boot=20package=20for=20BOARD=20cross-compiled=20for=20= TRIPLET."=0A+(define*-public=20(make-u-boot-package=20board=20triplet=20= #:key=20defconfig=20configs)=0A+=20=20"Returns=20a=20u-boot=20package=20= for=20BOARD=20cross-compiled=20for=20TRIPLET=20with=20the=0A+optional=20= DEFCONFIG=20file=20and=20optional=20configuration=20changes=20from=20= CONFIGS."=0A=20=20=20(let=20((same-arch?=20(lambda=20()=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string=3D?=20= (%current-system)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gnu-triplet->nix-system=20= triplet)))))=0A@@=20-736,8=20+737,11=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20(arguments=0A=20=20=20=20=20=20=20=20= `(#:modules=20((ice-9=20ftw)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20= gnu-build-system))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix=20build=20gnu-build-system)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20utils))=0A= +=20=20=20=20=20=20=20=20=20#:imported-modules=20= (,@%gnu-build-system-modules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig))=0A= =20=20=20=20=20=20=20=20=20=20#:test-target=20"test"=0A=20=20=20=20=20=20= =20=20=20=20#:make-flags=0A=20=20=20=20=20=20=20=20=20=20(list=20= "HOSTCC=3Dgcc"=0A@@=20-748,9=20+752,18=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20=20=20=20(modify-phases=20= %standard-phases=0A=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20= outputs=20make-flags=20#:allow-other-keys)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((config-name=20(string-append=20,board=20= "_defconfig")))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(file-exists?=20(string-append=20"configs/"=20config-name))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20invoke=20= "make"=20`(,@make-flags=20,config-name))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let*=20((config-name=20(string-append=20,board=20= "_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(config-file=20(string-append=20"configs/"=20config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (defconfig=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(configs=20',configs))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(when=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Replace=20the=20board-specific=20= defconfig=20with=20the=20given=20one.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(copy-file=20defconfig=20config-file))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(file-exists?=20= config-file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(when=20configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20config-file=20= configs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(apply=20invoke=20"make"=20`(,@make-flags=20,config-name)))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(begin=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (display=20"Invalid=20board=20name.=20Valid=20board=20names=20are:"=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(current-error-port))=0A@@=20-801,7=20+814,11=20@@=20= board-independent=20tools.")))=0A=20=20=20(make-u-boot-package=20"malta"=20= "mips64el-linux-gnuabi64"))=0A=20=0A=20(define-public=20= u-boot-am335x-boneblack=0A-=20=20(let=20((base=20(make-u-boot-package=20= "am335x_evm"=20"arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"am335x_evm"=20"arm-linux-gnueabihf"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20device=20= trees=20to=20build=20image=20small=20enough=20to=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20fit=20within=20typical=20partitioning=20= schemes=20where=20the=20first=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20partition=20begins=20at=20sector=202048.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:configs=20'("CONFIG_OF_LIST=3D\"am335x-evm=20= am335x-boneblack\""))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(name=20= "u-boot-am335x-boneblack")=0A@@=20-810,25=20+827,13=20@@=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20the=20BeagleBone=20Black,=20which=20was=20removed=20= upstream,=0A=20adjusted=20from=20the=20am335x_evm=20build=20with=20= several=20device=20trees=20removed=20so=20that=0A-it=20fits=20within=20= common=20partitioning=20schemes.")=0A-=20=20=20=20=20=20(arguments=0A-=20= =20=20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-defconfig=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20devicetrees=20to=20= build=20image=20small=20enough=20to=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20fit=20within=20typical=20partitioning=20schemes=20where=20= the=20first=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition=20begins=20at=20sector=202048.=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(substitute*=20"configs/am335x_evm_defconfig"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(("CONFIG_OF_LIST=3D.*$")=20= "CONFIG_OF_LIST=3D\"am335x-evm=20am335x-boneblack\"\n"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+it=20fits=20within=20= common=20partitioning=20schemes."))))=0A=20=0A=20(define-public=20= u-boot-am335x-evm=0A=20=20=20(make-u-boot-package=20"am335x_evm"=20= "arm-linux-gnueabihf"))=0A=20=0A-(define-public=20= (make-u-boot-sunxi64-package=20board=20triplet)=0A-=20=20(let=20((base=20= (make-u-boot-package=20board=20triplet)))=0A+(define*-public=20= (make-u-boot-sunxi64-package=20board=20triplet=20#:key=20defconfig=20= configs)=0A+=20=20(let=20((base=20(make-u-boot-package=20board=20triplet=20= #:defconfig=20defconfig=20#:configs=20configs)))=0A=20=20=20=20=20= (package=0A=20=20=20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20= (arguments=0A@@=20-858,20=20+863,10=20@@=20it=20fits=20within=20common=20= partitioning=20schemes.")=0A=20=20=20(make-u-boot-sunxi64-package=20= "pine64-lts"=20"aarch64-linux-gnu"))=0A=20=0A=20(define-public=20= u-boot-pinebook=0A-=20=20(let=20((base=20(make-u-boot-sunxi64-package=20= "pinebook"=20"aarch64-linux-gnu")))=0A-=20=20=20=20(package=0A-=20=20=20=20= =20=20(inherit=20base)=0A-=20=20=20=20=20=20(arguments=0A-=20=20=20=20=20= =20=20(substitute-keyword-arguments=20(package-arguments=20base)=0A-=20=20= =20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20=20=20=20=20=20= `(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-after=20'unpack=20'patch-pinebook-config=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Fix=20regression=20with=20LCD=20video=20output=20= introduced=20in=202020.01=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20https://patchwork.ozlabs.org/patch/1225130/=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(substitute*=20"configs/pinebook_defconfig"=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy")=20= "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy\nCONFIG_VIDEO_BPP32=3Dy"))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+=20=20= (make-u-boot-sunxi64-package=20"pinebook"=20"aarch64-linux-gnu"=0A+=20=20= =20;;=20Fix=20regression=20with=20LCD=20video=20output=20introduced=20in=20= 2020.01=0A+=20=20=20;;=20https://patchwork.ozlabs.org/patch/1225130/=0A+=20= =20=20#:configs=20'("CONFIG_VIDEO_BPP32=3Dy")))=0A=20=0A=20= (define-public=20u-boot-bananapi-m2-ultra=0A=20=20=20= (make-u-boot-package=20"Bananapi_M2_Ultra"=20"arm-linux-gnueabihf"))=0A= @@=20-895,25=20+890,17=20@@=20it=20fits=20within=20common=20partitioning=20= schemes.")=0A=20=20=20(make-u-boot-package=20"mx6cuboxi"=20= "arm-linux-gnueabihf"))=0A=20=0A=20(define-public=20u-boot-novena=0A-=20=20= (let=20((base=20(make-u-boot-package=20"novena"=20= "arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20(make-u-boot-package=20= "novena"=20"arm-linux-gnueabihf"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20= from=20FAT=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition,=20allowing=20it=20to=20be=20installed=20at=20a=20device=20= offset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20= '("CONFIG_SPL_FS_FAT=3D"))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20= =20(inherit=20base)=0A=20=20=20=20=20=20=20(description=20"U-Boot=20is=20= a=20bootloader=20used=20mostly=20for=20ARM=20boards.=20It=0A=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20Novena.=20=20Be=20advised=20that=20this=20version,=20= contrary=0A-to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition.")=0A-=20=20=20=20=20=20(arguments=0A-=20=20= =20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-novena-defconfig=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Patch=20configuration=20to=20disable=20= loading=20u-boot.img=20from=20FAT=20partition,=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20allowing=20it=20to=20be=20installed=20at=20a=20= device=20offset.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20= _=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(substitute*=20= "configs/novena_defconfig"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(("CONFIG_SPL_FS_FAT=3Dy")=20"#=20CONFIG_SPL_FS_FAT=20is=20= not=20set"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t)))))))))=0A+to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition."))))=0A=20=0A=20(define-public=20= u-boot-cubieboard=0A=20=20=20(make-u-boot-package=20"Cubieboard"=20= "arm-linux-gnueabihf"))=0Adiff=20--git=20a/guix/build/kconfig.scm=20= b/guix/build/kconfig.scm=0Anew=20file=20mode=20100644=0Aindex=20= 0000000000..09ddf59dd0=0A---=20/dev/null=0A+++=20= b/guix/build/kconfig.scm=0A@@=20-0,0=20+1,148=20@@=0A+;;;=20GNU=20Guix=20= ---=20Functional=20package=20management=20for=20GNU=0A+;;;=20Copyright=20= =C2=A9=202020=20Stefan=20=0A+;;;=0A+;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20GNU=20Guix=20= is=20free=20software;=20you=20can=20redistribute=20it=20and/or=20modify=20= it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20General=20Public=20= License=20as=20published=20by=0A+;;;=20the=20Free=20Software=20= Foundation;=20either=20version=203=20of=20the=20License,=20or=20(at=0A= +;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(guix=20build=20= kconfig)=0A+=20=20#:use-module=20=20(ice-9=20rdelim)=0A+=20=20= #:use-module=20=20(ice-9=20regex)=0A+=20=20#:use-module=20=20(srfi=20= srfi-1)=0A+=20=20#:use-module=20=20(srfi=20srfi-26)=0A+=20=20#:export=20= (modify-defconfig))=0A+=0A+;;=20Commentary:=0A+;;=0A+;;=20Builder-side=20= code=20to=20modify=20configurations=20for=20the=20Kconfig=20build=20= system=20as=0A+;;=20used=20by=20Linux=20and=20U-Boot.=0A+;;=0A+;;=20= Code:=0A+=0A+(define=20(modify-defconfig=20defconfig=20configs)=0A+=20=20= "This=20function=20can=20modify=20a=20given=20DEFCONFIG=20file=20by=20= adding,=20changing=20or=0A+removing=20the=20list=20of=20strings=20in=20= CONFIGS.=20=20This=20allows=20an=20easy=20customization=20of=0A+Kconfig=20= based=20projects=20like=20the=20kernel=20Linux=20or=20the=20bootloader=20= 'Das=20U-Boot'.=0A+=0A+These=20are=20examples=20for=20CONFIGS=20to=20add=20= or=20change=20or=20remove=0A+configurations=20to/from=20DEFCONFIG:=0A+=0A= +'(\"CONFIG_A=3D\\\"a\\\"\"=0A+=20=20\"CONFIG_B=3D0\"=0A+=20=20= \"CONFIG_C=3Dy\"=0A+=20=20\"CONFIG_D=3Dm\"=0A+=20=20\"CONFIG_E=3D\"=0A+=20= =20\"CONFIG_F\"=0A+=20=20\"#=20CONFIG_G=20is=20not=20set\")=0A+=0A= +Instead=20of=20a=20list,=20CONFGIS=20can=20be=20a=20string=20with=20one=20= configuration=20per=20line."=0A+=20=20(define=20config-rx=0A+=20=20=20=20= (make-regexp=0A+=20=20=20=20=20;;=20(match:substring=20(string-match=20= "=3D(.*)"=20"=3D")=201)=20returns=20"",=20but=20the=0A+=20=20=20=20=20;;=20= pattern=20"=3D(.+)?"=20makes=20it=20return=20#f=20instead.=20=20For=20a=20= "CONFIG_A=3D"=20we=20like=0A+=20=20=20=20=20;;=20to=20get=20#f,=20which=20= as=20a=20value=20emits=20"#=20=E2=80=A6=20is=20not=20set".=0A+=20=20=20=20= =20"^(#[\\t=20]*)?(CONFIG_[A-Z0-9_]+)([\\t=20]*=3D[\\t=20]*(.+)?|([\\t=20= ]+is[\\t=20]+not[\\t=20]+set))?$"))=0A+=0A+=20=20(define=20= (config-string->pair=20config-string)=0A+=20=20=20=20"Parse=20a=20= config-string=20like=20\"CONFIG_EXAMPLE=3Dy\"=20into=20a=20key-value=20= pair.=0A+Spaces=20get=20trimmed.=0A+\"CONFIG_A=3Dy\"=20=20=20=20=20=20=20= =20=20=20=20=20->=20'(\"CONFIG_A\"=20.=20\"y\")=0A+\"CONFIG_B=3D\\\"\\\"\"= =20=20=20=20=20=20=20=20=20->=20'(\"CONFIG_B\"=20.=20\"\\\"\\\"\")=0A= +\"CONFIG_C=3D\"=20=20=20=20=20=20=20=20=20=20=20=20=20->=20= '(\"CONFIG_C\"=20.=20#f)=0A+\"CONFIG_D\"=20=20=20=20=20=20=20=20=20=20=20= =20=20=20->=20'(\"CONFIG_D\"=20.=20#f)=0A+\"#=20CONFIG_E=20is=20not=20= set\"=20->=20'(\"CONFIG_E\"=20.=20#f)=0A+\"#=20Anything=20else\"=20=20=20= =20=20=20=20->=20'(\"#=20Anything=20else\"=20.=20\"\")"=0A+=20=20=20=20= (let=20((match=20(regexp-exec=20config-rx=20(string-trim-both=20= config-string))))=0A+=20=20=20=20=20=20(if=20(not=20match)=0A+=20=20=20=20= =20=20=20=20=20=20;;=20This=20is=20some=20unparsable=20config-string.=0A= +=20=20=20=20=20=20=20=20=20=20;;=20We=20keep=20it=20as=20it=20is.=0A+=20= =20=20=20=20=20=20=20=20=20(cons=20config-string=20"")=0A+=20=20=20=20=20= =20=20=20=20=20(let*=20((comment=20(match:substring=20match=201))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(key=20(match:substring=20= match=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(unset=20= (match:substring=20match=205))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(value=20(and=20(not=20comment)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= unset)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(match:substring=20match=204))))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(if=20(or=20(and=20comment=20(not=20unset))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20(not=20= comment)=20unset))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= This=20is=20just=20some=20comment=20or=20strange=20line,=20which=20we=20= keep=20as=20is.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20= config-string=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20key=20value))))))=0A+=0A+=20=20(define=20(pair->config-string=20= pair)=0A+=20=20=20=20"Convert=20a=20PAIR=20back=20to=20a=20= config-string."=0A+=20=20=20=20(let*=20((key=20(car=20pair))=0A+=20=20=20= =20=20=20=20=20=20=20=20(value=20(cdr=20pair)))=0A+=20=20=20=20=20=20(if=20= (string?=20value)=0A+=20=20=20=20=20=20=20=20=20=20(if=20(string-null?=20= value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20key=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20key=20"=3D"=20value))=0A+=20=20= =20=20=20=20=20=20=20=20(string-append=20"#=20"=20key=20"=20is=20not=20= set"))))=0A+=0A+=20=20(define=20(remove-pair=20pair=20blacklist)=0A+=20=20= =20=20"Turn=20a=20key-value=20PAIR=20into=20'(""=20.=20""),=20if=20its=20= key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20(let*=20((key=20= (first=20pair)))=0A+=20=20=20=20=20=20(if=20(member=20key=20blacklist)=0A= +=20=20=20=20=20=20=20=20=20=20'(""=20.=20"")=0A+=20=20=20=20=20=20=20=20= =20=20pair)))=0A+=0A+=20=20(define=20(remove-config-string=20= config-string=20blacklist)=0A+=20=20=20=20"Remove=20the=20CONFIG-STRING,=20= if=20its=20key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20= (pair->config-string=20(remove-pair=20(config-string->pair=20= config-string)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20blacklist)))=0A= +=0A+=20=20(define*=20(write-lines=20input=20#:key=20(line-modifier=20= identity))=0A+=20=20=20=20"Write=20all=20lines=20from=20the=20INPUT=20= after=20applying=20the=20LINE-MODIFIER=20to=20the=0A+=20= current-output-port."=0A+=20=20=20=20(let=20loop=20((line=20(read-line=20= input)))=0A+=20=20=20=20=20=20(when=20(not=20(eof-object?=20line))=0A+=20= =20=20=20=20=20=20=20(display=20(line-modifier=20line))=0A+=20=20=20=20=20= =20=20=20(newline)=0A+=20=20=20=20=20=20=20=20(loop=20(read-line=20= input)))))=0A+=0A+=20=20(let*=20((modified-defconfig=20(string-append=20= defconfig=20".mod"))=0A+=20=20=20=20=20=20=20=20=20;;=20Split=20the=20= configs=20into=20a=20list=20of=20single=20configuations.=0A+=20=20=20=20=20= =20=20=20=20;;=20To=20minimize=20mistakes,=20we=20support=20a=20string=20= and=20a=20list=20of=20strings,=0A+=20=20=20=20=20=20=20=20=20;;=20each=20= with=20newlines=20to=20separate=20configurations.=0A+=20=20=20=20=20=20=20= =20=20(config-list=20(fold-right=20append=20'()=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(map=20(lambda=20(s)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-split=20s=20#\newline))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(if=20(string?=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(list=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20configs))))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20= key-value=20pairs=20from=20the=20config-list.=0A+=20=20=20=20=20=20=20=20= =20(pairs=20(map=20(lambda=20(config-string)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(config-string->pair=20= config-string))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20config-list))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20a=20= blacklist=20of=20config=20keys=20from=20pairs.=0A+=20=20=20=20=20=20=20=20= =20(blacklist=20(map=20(lambda=20(config-pair)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(first=20= config-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20pairs))=0A+=20=20=20=20=20=20=20=20=20= (remove-config-string=20(cut=20remove-config-string=20<>=20blacklist)))=0A= +=20=20=20=20;;=20Write=20to=20the=20modified-defconfig=20file=20first=20= the=20content=20of=20the=20defconfig=0A+=20=20=20=20;;=20file=20with=20= removed=20lines,=20and=20afterwards=20the=20configs.=0A+=20=20=20=20= (call-with-output-file=20modified-defconfig=0A+=20=20=20=20=20=20(lambda=20= (output)=0A+=20=20=20=20=20=20=20=20(with-output-to-port=20output=0A+=20=20= =20=20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20= =20(call-with-input-file=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input=20#:=20line-modifier=20remove-config-string)))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(call-with-input-string=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-join=20(map=20= pair->config-string=20pairs)=20"\n")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input)))))))=0A+=20=20=20=20;;=20Ensure=20the=20= modified-defconfig=20file=20is=20used.=0A+=20=20=20=20(delete-file=20= defconfig)=0A+=20=20=20=20(rename-file=20modified-defconfig=20= defconfig)))=0A= --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=04-gnu-bootloader-add-u-boot.patch Content-Type: application/octet-stream; name="04-gnu-bootloader-add-u-boot.patch" Content-Transfer-Encoding: 7bit gnu: bootloader: Add U-Boot packages for Raspberry Pi models. From: Stefan * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name' and 'description'. (make-preinstalled-u-boot-package): New function to make minimal packages. (%u-boot-rpi-efi-configs): New helper list with config strings. (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): New helper strings. (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4, u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi, u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages. --- gnu/packages/bootloaders.scm | 172 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 4 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 38cf933c22..e3bd6733cb 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -717,17 +717,30 @@ def test_ctrl_c")) also initializes the boards (RAM etc). This package provides its board-independent tools."))) -(define*-public (make-u-boot-package board triplet #:key defconfig configs) +(define*-public (make-u-boot-package board + triplet + #:key + defconfig + configs + name + description) "Returns a u-boot package for BOARD cross-compiled for TRIPLET with the -optional DEFCONFIG file and optional configuration changes from CONFIGS." +optional DEFCONFIG file and optional configuration changes from CONFIGS. +Either NAME, if used, or otherwise BOARD will be part of the package name. +DESCRIPTION will be appended to the package description." (let ((same-arch? (lambda () (string=? (%current-system) (gnu-triplet->nix-system triplet))))) (package (inherit u-boot) (name (string-append "u-boot-" - (string-replace-substring (string-downcase board) - "_" "-"))) + (string-replace-substring + (string-downcase (or name board)) + "_" "-"))) + (description (if description + (string-append (package-description u-boot) + "\n" description) + (package-description u-boot))) (native-inputs `(,@(if (not (same-arch?)) `(("cross-gcc" ,(cross-gcc triplet)) @@ -1023,6 +1036,157 @@ to Novena upstream, does not load u-boot.img from the first partition.")))) `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define*-public (make-preinstalled-u-boot-package board + triplet + #:key + defconfig + configs + name + description + (u-boot-file "u-boot.bin")) + "Returns a package with a single U-BOOT-FILE for BOARD cross-compiled for +TRIPLET with the optional DEFCONFIG file and optional configuration changes +from CONFIGS. Either NAME, if used, or otherwise BOARD will be part of the +package name. DESCRIPTION will be appended to the package description." + (let* ((name-suffix "-complete") + (u-boot-package (make-u-boot-package board + triplet + #:defconfig defconfig + #:configs configs + #:name (string-append + (or name board) + name-suffix) + #:description description))) + (package + (name (string-drop-right (package-name u-boot-package) + (string-length name-suffix))) + (version (package-version u-boot-package)) + (source #f) + (build-system trivial-build-system) + (arguments + `(#:builder + (begin + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink (string-append (assoc-ref %build-inputs "u-boot") + "/libexec/" + ,u-boot-file) + (string-append out "/" ,u-boot-file)))))) + (inputs `(("u-boot" ,u-boot-package))) + (home-page (package-home-page u-boot-package)) + (synopsis (package-synopsis u-boot-package)) + (description (package-description u-boot-package)) + (license (package-license u-boot-package))))) + +(define-public %u-boot-rpi-efi-configs + '("CONFIG_OF_EMBED=" + "CONFIG_OF_BOARD=y" + "CONFIG_BOOTDELAY=0")) + +(define %u-boot-rpi-description-32-bit + "This is a 32-bit build of U-Boot.") + +(define %u-boot-rpi-description-64-bit + "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi +variants.") + +(define %u-boot-rpi-efi-description + "It allows network booting and uses the device-tree from the firmware, +allowing the usage of overlays. It can act as an EFI firmware for the +grub-efi-netboot-removable-bootloader.") + +(define %u-boot-rpi-efi-description-32-bit + (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-0-w + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-2 + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-3 + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-4 + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-64" + #:description %u-boot-rpi-description-64-bit)) + +(define-public u-boot-rpi-0-w-efi + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:name "rpi-0-w-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:name "rpi-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-2-efi + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:name "rpi-2-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-3-efi + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-4-efi + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-efi-64" + #:configs %u-boot-rpi-efi-configs + #:description (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-64-bit))) + (define-public vboot-utils (package (name "vboot-utils") --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=05-gnu-linux-correct-name-of.patch Content-Type: application/octet-stream; name="05-gnu-linux-correct-name-of.patch" Content-Transfer-Encoding: 7bit gnu: linux: Correct name of EXTRAVERSION and prepend "-" to content. From: Stefan gnu/packages/linux.scm (make-linux-libre): Move the comment for the configuration-file argument to the correct position between the extra-version and configuration-file arguments. gnu/packages/linux.scm (make-linux-libre*): Move the comment for the configuration-file argument to the correct position between the extra-version and configuration-file arguments. Remove the underscore from the environment variable EXTRAVERSION. Prepend a hyphen to the content of EXTRAVERSION. --- gnu/packages/linux.scm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 84ea849108..51e692a8c3 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -749,9 +749,9 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (define* (make-linux-libre version hash-string supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options) @@ -770,9 +770,9 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (define* (make-linux-libre* version source supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options)) @@ -838,7 +838,8 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration." (format #t "`CROSS_COMPILE' set to `~a'~%" (getenv "CROSS_COMPILE")))) - (setenv "EXTRA_VERSION" ,extra-version) + (setenv "EXTRAVERSION" ,(and extra-version + (string-append "-" extra-version))) (let ((build (assoc-ref %standard-phases 'build)) (config (assoc-ref (or native-inputs inputs) "kconfig"))) --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=06-gnu-linux-new-function-to.patch Content-Type: application/octet-stream; name="06-gnu-linux-new-function-to.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20New=20function=20to=20modify=20the=20configuration=20of=20= a=20Linux=20kernel.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(system->linux-srcarch):=20New=20= function=20to=20return=20the=0Arelevent=20folder=20name=20below=20arch/=20= in=20the=20Linux=20source=20code.=0A(make-linux-libre*)=20= ['set-environment]:=20Splitted=20this=20new=20phase=20out=20of=20and=0A= adding=20it=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20= allow=20a=20replacement=20and=20reuse=20from=20(modify-linux).=0A= (modify-linux):=20New=20function=20to=20make=20a=20customized=20Linux=20= package=20inherited=0Afrom=20another=20Linux=20package,=20which=20will=20= be=20build=20with=20an=20own=20defconfig=20or=0Aconfiguration=20changes.=0A= (make-defconfig):=20Function=20to=20get=20a=20defconfig=20from=20an=20= uri.=0A---=0A=20gnu/packages/linux.scm=20|=20=20132=20= +++++++++++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20= changed,=20128=20insertions(+),=204=20deletions(-)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= 51e692a8c3..983f0c2b22=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-54,6=20+54,7=20@@=0A=20;;;=20Copyright=20= =C2=A9=202020=20David=20Dashyan=20=0A=20;;;=20Copyright=20= =C2=A9=202020=20pukkamustard=20=0A=20;;;=20= Copyright=20=C2=A9=202021=20B.=20Wilson=20=0A= +;;;=20Copyright=20=C2=A9=202021=20Stefan=20= =0A=20;;;=0A=20;;;=20This=20file=20is=20= part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-165,7=20+166,8=20@@=0A=20=20=20= #:use-module=20(srfi=20srfi-1)=0A=20=20=20#:use-module=20(srfi=20srfi-2)=0A= =20=20=20#:use-module=20(srfi=20srfi-26)=0A-=20=20#:use-module=20(ice-9=20= match))=0A+=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs))=0A=20=0A=20(define-public=20= (system->linux-architecture=20arch)=0A=20=20=20"Return=20the=20Linux=20= architecture=20name=20for=20ARCH,=20a=20Guix=20system=20name=20such=20as=0A= @@=20-181,6=20+183,21=20@@=0A=20=20=20=20=20=20=20=20=20=20=20= ((string-prefix?=20"riscv"=20arch)=20"riscv")=0A=20=20=20=20=20=20=20=20=20= =20=20(else=20arch))))=0A=20=0A+(define-public=20(system->linux-srcarch=20= arch)=0A+=20=20"Return=20for=20a=20Guix=20system=20ARCH=20name=20the=20= SRCARCH=20name,=20which=20is=20set=20in=20the=0A+toplevel=20Makefile=20= of=20Linux=20and=20denotes=20the=20architecture=20specific=20directory=20= name=0A+below=20arch/=20in=20its=20source=20code.=20=20Some=20few=20= architectures=20share=20a=20common=20folder.=0A+It=20resembles=20the=20= definition=20of=20SRCARCH=20based=20on=20ARCH=20in=20the=20Makefile=20= and=20may=0A+be=20used=20to=20place=20a=20defconfig=20file=20in=20the=20= proper=20path."=0A+=20=20(let=20((linux-arch=20= (system->linux-architecture=20arch)))=0A+=20=20=20=20(match=20linux-arch=0A= +=20=20=20=20=20=20("i386"=20=20=20=20"x86")=0A+=20=20=20=20=20=20= ("x86_64"=20=20"x86")=0A+=20=20=20=20=20=20("sparc32"=20"sparc")=0A+=20=20= =20=20=20=20("sparc64"=20"sparc")=0A+=20=20=20=20=20=20("sh64"=20=20=20=20= "sh")=0A+=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20linux-arch))))=0A= +=0A=20(define-public=20(system->defconfig=20system)=0A=20=20=20"Some=20= systems=20(notably=20powerpc-linux)=20require=20a=20special=20target=20= for=20kernel=0A=20defconfig.=20=20Return=20the=20appropriate=20make=20= target=20if=20applicable,=20otherwise=20return=0A@@=20-820,8=20+837,8=20= @@=20for=20ARCH=20and=20optionally=20VARIANT,=20or=20#f=20if=20there=20= is=20no=20such=20configuration."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(substitute*=20(find-files=20"."=20"^Makefile(\\.include)?$")=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(("/bin/pwd")=20"pwd"))=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t))=0A-=20=20=20=20=20=20=20=20=20= (replace=20'configure=0A-=20=20=20=20=20=20=20=20=20=20=20(lambda*=20= (#:key=20inputs=20native-inputs=20target=20#:allow-other-keys)=0A+=20=20=20= =20=20=20=20=20=20(add-before=20'configure=20'set-environment=0A+=20=20=20= =20=20=20=20=20=20=20=20(lambda*=20(#:key=20target=20#:allow-other-keys)=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Avoid=20introducing=20= timestamps=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "KCONFIG_NOTIMESTAMP"=20"1")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"KBUILD_BUILD_TIMESTAMP"=20(getenv=20"SOURCE_DATE_EPOCH"))=0A= @@=20-840,7=20+857,9=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20= or=20#f=20if=20there=20is=20no=20such=20configuration."=0A=20=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(setenv=20"EXTRAVERSION"=20,(and=20= extra-version=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"-"=20extra-version)))=0A-=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20#t))=0A+=20=20=20=20=20=20=20=20=20(replace=20'configure=0A+=20= =20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20inputs=20native-inputs=20= #:allow-other-keys)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20= ((build=20=20(assoc-ref=20%standard-phases=20'build))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(config=20(assoc-ref=20(or=20= native-inputs=20inputs)=20"kconfig")))=0A=20=0A@@=20-1155,6=20+1174,111=20= @@=20It=20has=20been=20modified=20to=20remove=20all=20non-free=20binary=20= blobs.")=0A=20=20=20=20=20=20=20(inherit=20base-linux-libre)=0A=20=20=20=20= =20=20=20(inputs=20`(("cpio"=20,cpio)=20,@(package-inputs=20= base-linux-libre))))))=0A=20=0A+=0C=0A+;;;=0A+;;;=20Linux=20kernel=20= customization=20functions.=0A+;;;=0A+=0A+(define*-public=20(modify-linux=20= #:key=20name=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(linux=20linux-libre)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20source=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(configs=20"")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20extra-version)=0A+=20=20"Make=20a=20Linux=20= package=20NAME=20as=20a=20modification=20of=20another=20LINUX=20package.=0A= +=0A+If=20NAME=20is=20not=20given,=20then=20it=20defaults=20to=20the=20= same=20name=20as=20the=20LINUX=20package.=0A+=0A+Unless=20SOURCE=20is=20= given=20the=20source=20of=20LINUX=20is=20used.=0A+=0A+A=20DEFCONFIG=20= file=20to=20be=20used=20can=20be=20given=20as=20a=20package,=20as=20a=20= file=20like=20object=0A+(file-append,=20local-file=20etc.),=20or=20as=20= a=20string=20with=20the=20name=20of=20a=20defconfig=20file=0A+available=20= in=20the=20Linux=20sources.=20=20If=20DEFCONFIG=20is=20not=20given,=20= then=20a=20defconfig=0A+file=20will=20be=20saved=20from=20the=20LINUX=20= package=20configuration.=0A+=0A+Additional=20CONFIGS=20will=20be=20used=20= to=20modify=20the=20given=20or=20saved=20defconfig,=20which=0A+will=20= finally=20be=20used=20to=20build=20Linux.=0A+=0A+CONFIGS=20can=20be=20a=20= list=20of=20strings,=20with=20one=20configuration=20per=20line.=20=20The=20= usual=0A+defconfig=20syntax=20has=20to=20be=20used,=20but=20there=20is=20= a=20special=20extension=20to=20ease=20the=0A+removal=20of=20= configurations.=20=20Comment=20lines=20are=20supported=20as=20well.=0A+=0A= +Here=20is=20an=20explaining=20usage=20example:=0A+=0A+=20=20'(;;=20This=20= string=20defines=20the=20version=20tail=20in=20'uname=20-r'.=0A+=20=20=20= =20\"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\"=0A+=20=20=20=20;;=20This=20= '#=20CONFIG_=E2=80=A6=20is=20not=20set'=20syntax=20has=20to=20match=20= exactly!=0A+=20=20=20=20\"#=20CONFIG_BOOT_CONFIG=20is=20not=20set\"=0A+=20= =20=20=20\"CONFIG_NFS_SWAP=3Dy\"=0A+=20=20=20=20;;=20This=20is=20a=20= multiline=20configuration:=0A+=20=20=20=20\"CONFIG_E1000=3Dy=0A+#=20This=20= is=20a=20comment,=20below=20follow=20two=20special=20removal=20= extensions:=0A+CONFIG_CMDLINE_EXTEND=0A+CONFIG_CMDLINE_FORCE=3D\")=0A+=0A= +A=20string=20of=20configurations=20instead=20of=20a=20list=20of=20= configuration=20strings=20is=20also=0A+possible.=0A+=0A+EXTRA-VERSION=20= can=20be=20a=20string=20overwriting=20the=20EXTRAVERSION=20setting=20of=20= the=20LINUX=0A+package,=20after=20being=20prepended=20by=20a=20hyphen.=20= =20It=20will=20be=20visible=20in=20the=20output=0A+of=20'uname=20-r'=20= behind=20the=20Linux=20version=20numbers."=0A+=20=20(package=0A+=20=20=20= =20(inherit=20linux)=0A+=20=20=20=20(name=20(or=20name=20(package-name=20= linux)))=0A+=20=20=20=20(source=20(or=20source=20(package-source=20= linux)))=0A+=20=20=20=20(arguments=0A+=20=20=20=20=20= (substitute-keyword-arguments=0A+=20=20=20=20=20=20=20=20=20= (package-arguments=20linux)=0A+=20=20=20=20=20=20=20((#:imported-modules=20= imported-modules=20%gnu-build-system-modules)=0A+=20=20=20=20=20=20=20=20= `((guix=20build=20kconfig)=20,@imported-modules))=0A+=20=20=20=20=20=20=20= ((#:modules=20modules)=0A+=20=20=20=20=20=20=20=20`((guix=20build=20= kconfig)=20,@modules))=0A+=20=20=20=20=20=20=20((#:phases=20phases)=0A+=20= =20=20=20=20=20=20=20`(modify-phases=20,phases=0A+=20=20=20=20=20=20=20=20= =20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20#:allow-other-keys=20#:rest=20arguments)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((srcarch=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,(system->linux-srcarch=20(or=20(%current-target-system)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(configs=20(string-append=20"arch/"=20srcarch=20= "/configs/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix_defconfig=20(string-append=20configs=20= "guix_defconfig")))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20`(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Call=20the=20original=20'configure=20= phase.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(apply=20(assoc-ref=20,phases=20'configure)=20arguments)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20Save=20a=20defconfig=20file.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(invoke=20"make"=20= "savedefconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Move=20the=20saved=20defconfig=20to=20the=20= proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(rename-file=20"defconfig"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((string?=20defconfig)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Use=20another=20existing=20= defconfig=20from=20the=20Linux=20sources.=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20`(rename-file=20(string-append=20= configs=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= guix_defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(else=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Copy=20the=20defconfig=20input=20to=20the=20proper=20= location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20'(copy-file=20(assoc-ref=20inputs=20"guix_defconfig")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(modify-defconfig=20guix_defconfig=20',configs)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20,@(if=20extra-version=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((setenv=20= "EXTRAVERSION"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"-"=20= extra-version)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"guix_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#t))))))=0A+=20=20=20=20(native-inputs=0A+=20=20=20=20=20=20= (append=20(if=20(or=20(not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(string?=20defconfig))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'()=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20The=20defconfig=20should=20be=20a=20= package=20or=20file-like=20object.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20`(("guix_defconfig"=20,defconfig)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(package-native-inputs=20linux)))))=0A+=0A= +(define-public=20(make-defconfig=20uri=20sha256-as-base32)=0A+=20=20= (origin=20(method=20url-fetch)=0A+=20=20=20=20=20=20=20=20=20=20(uri=20= uri)=0A+=20=20=20=20=20=20=20=20=20=20(sha256=20(base32=20= sha256-as-base32))))=0A=20=0A=20=0C=0A=20;;;=0A= --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=07-gnu-raspberry-pi-add-defconfig.patch Content-Type: application/octet-stream; name="07-gnu-raspberry-pi-add-defconfig.patch" Content-Transfer-Encoding: quoted-printable gnu:=20raspberry-pi:=20Add=20defconfig=20objects=20to=20build=20= customized=20Linux=20kernels.=0A=0AFrom:=20Stefan=20= =0A=0Agnu/packages/raspberry-pi.scm=20= (make-raspi-defconig):=20New=20function=20to=20make=0Adownloaded=20= defconfig=20objects=20from=20the=20Linux=20repository=20of=20the=20= Raspberry=20Pi=0AFoundation.=0A(%bcm2709-defconfig,=20= %bcm2710-defconfig,=20%bcm2711-defconfig,=0A%bcm2835-defconfig,=20= %bcmrpi-defconfig,=20%bcm2711-defconfig-64,=0A%bcmrpi3-defconfig):=20New=20= variables=20containing=20defconfig=20objects=20to=20build=0ALinux=20= kernels=20customized=20for=20Raspberry=20Pi=20single=20board=20= computers.=0A---=0A=20gnu/packages/raspberry-pi.scm=20|=20=20=2044=20= ++++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2043=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/gnu/packages/raspberry-pi.scm=20b/gnu/packages/raspberry-pi.scm=0A= index=20bb38b8b218..a2ab300531=20100644=0A---=20= a/gnu/packages/raspberry-pi.scm=0A+++=20b/gnu/packages/raspberry-pi.scm=0A= @@=20-1,5=20+1,6=20@@=0A=20;;;=20GNU=20Guix=20---=20Functional=20package=20= management=20for=20GNU=0A=20;;;=20Copyright=20=C2=A9=202020=20Danny=20= Milosavljevic=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-25,9=20+26,10=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20commencement)=0A=20=20=20= #:use-module=20(gnu=20packages=20cross-base)=0A=20=20=20#:use-module=20= (gnu=20packages=20documentation)=0A+=20=20#:use-module=20(gnu=20packages=20= embedded)=0A=20=20=20#:use-module=20(gnu=20packages=20file)=0A=20=20=20= #:use-module=20(gnu=20packages=20gcc)=0A-=20=20#:use-module=20(gnu=20= packages=20embedded)=0A+=20=20#:use-module=20(gnu=20packages=20linux)=0A=20= =20=20#:use-module=20(guix=20build-system=20gnu)=0A=20=20=20#:use-module=20= (guix=20download)=0A=20=20=20#:use-module=20(guix=20git-download)=0A@@=20= -235,3=20+237,43=20@@=20Raspberry=20Pi.=20=20Note:=20It=20does=20not=20= work=20on=20Raspberry=20Pi=201.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(install-file=20"arm64.bin"=20libexec)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#t))))))))=0A=20=20=20=20=20(supported-systems=20= '("aarch64-linux"))))=0A+=0A+(define=20(make-raspi-defconfig=20arch=20= defconfig=20sha256-as-base32)=0A+=20=20"Make=20for=20the=20architecture=20= ARCH=20a=20file-like=20object=20from=20the=20DEFCONFIG=20file=0A+with=20= the=20hash=20SHA256-AS-BASE32.=20=20This=20object=20can=20be=20used=20as=20= the=20#:defconfig=0A+argument=20of=20the=20function=20(modify-linux)."=0A= +=20=20(make-defconfig=0A+=20=20=20(string-append=0A+=20=20=20=20= "https://raw.githubusercontent.com/raspberrypi/linux/raspberrypi-kernel_1.= 20210430-1/arch/"=0A+=20=20=20=20arch=20"/configs/"=20defconfig)=0A+=20=20= =20sha256-as-base32))=0A+=0A+(define-public=20%bcm2709-defconfig=0A+=20=20= (make-raspi-defconfig=0A+=20=20=20"arm"=20"bcm2709_defconfig"=0A+=20=20=20= "0yvrmid2jakl929d1mv00gidnqbf91ffhj61c9gl75f7km48811c"))=0A+=0A= +(define-public=20%bcm2711-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2711_defconfig"=0A+=20=20=20= "19hb6nwna7sk3b4rn5yjfhldrs3c1lv24q08w4gpa4xzh1byv7jj"))=0A+=0A= +(define-public=20%bcm2835-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2835_defconfig"=0A+=20=20=20= "17dmvabqvxwqn6lgv1x8rfh2wqf1r2xmm10nkdnrgwkmgv8bh2d5"))=0A+=0A= +(define-public=20%bcmrpi-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcmrpi_defconfig"=0A+=20=20=20= "0lcmr6nxdd53m3k8hqb5k6c5b7vbdgmfvcliqyl95snp45rxjjkw"))=0A+=0A= +(define-public=20%bcm2711-defconfig-64=0A+=20=20(make-raspi-defconfig=0A= +=20=20=20"arm64"=20"bcm2711_defconfig"=0A+=20=20=20= "0xf38nczwinr0j8vhsn8nd8h4ysjn77xphg7xnssz04gclb7fndr"))=0A+=0A= +(define-public=20%bcmrpi3-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm64"=20"bcmrpi3_defconfig"=0A+=20=20=20= "01k098snd7kbmhz68j93mj2fwp39c56g9r8rgaw17js5r0w0zbhy"))=0A= --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=08-gnu-raspberry-pi-add-helpers.patch Content-Type: application/octet-stream; name="08-gnu-raspberry-pi-add-helpers.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add helpers for config.txt file generation. From: Stefan * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): New functions. (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt %raspi-u-boot-bootloader-txt): New variables. --- gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index a2ab300531..0707516f72 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -238,6 +238,59 @@ Raspberry Pi. Note: It does not work on Raspberry Pi 1.") #t)))))))) (supported-systems '("aarch64-linux")))) +(define-public (raspi-config-file name content) + "Make a configuration file like config.txt for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (plain-file + name + (if (list? content) + (string-join content "\n" 'suffix) + content))) + +(define-public %raspi-config-txt + ;; A config.txt file to start the ARM cores up in 64-bit mode if necessary + ;; and to include a dtb.txt, bootloader.txt, and a custom.txt, each with + ;; separated configurations for the Raspberry Pi firmware. + (raspi-config-file + "config.txt" + `("# See https://www.raspberrypi.org/documentation/configuration/config-txt/README.md for details." + "" + ,(string-append "arm_64bit=" (if (target-aarch64?) "1" "0")) + "include dtb.txt" + "include bootloader.txt" + "include custom.txt"))) + +(define-public %raspi-bcm27-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; downstream device tree files bcm27*.dtb will be used. + (raspi-config-file + "dtb.txt" + "upstream_kernel=0")) + +(define-public %raspi-bcm28-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; upstream device tree files bcm28*.dtb will be used. + ;; This also implies the use of the dtoverlay=upstream. + (raspi-config-file + "dtb.txt" + "upstream_kernel=1")) + +(define-public %raspi-u-boot-bootloader-txt + ;; A bootloader.txt file to be included by the config.txt to load the + ;; U-Boot bootloader. + (raspi-config-file + "bootloader.txt" + '("dtoverlay=upstream" + "enable_uart=1" + "kernel=u-boot.bin"))) + +(define-public (raspi-custom-txt content) + "Make a custom.txt file for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (raspi-config-file "custom.txt" content)) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=09-gnu-raspberry-pi-new-function.patch Content-Type: application/octet-stream; name="09-gnu-raspberry-pi-new-function.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: New function to make a package with device-tree files. From: Stefan * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to make a package with device-tree files for Raspberry Pi models from the kernel given as argument. --- gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 0707516f72..d808f61ac2 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages file) #:use-module (gnu packages gcc) #:use-module (gnu packages linux) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concatenated with a newline character. Alternatively CONTENT can be a string with the full file content." (raspi-config-file "custom.txt" content)) +(define-public (make-raspi-bcm28-dtbs linux) + "Make a package with the device-tree files for Raspberry Pi models from the +kernel LINUX." + (package + (inherit linux) + (name "raspi-bcm28-dtbs") + (source #f) + (build-system copy-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'unpack)) + #:install-plan + (list (list (string-append (assoc-ref %build-inputs "linux") + "/lib/dtbs/broadcom/") + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) + (inputs `(("linux" ,linux))) + (synopsis "Device-tree files for a Raspberry Pi") + (description + (simple-format #f "The device-tree files for Raspberry Pi models from ~a." + (package-name linux))))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC Content-Disposition: attachment; filename=10-gnu-raspberry-pi-add-a.patch Content-Type: application/octet-stream; name="10-gnu-raspberry-pi-add-a.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. From: Stefan * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. --- gnu/packages/raspberry-pi.scm | 19 +++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 73 ++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 77 +++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index d808f61ac2..d52a4a72c5 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -312,6 +315,22 @@ kernel LINUX." (simple-format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. + ;; It neither installs firmware nor device-tree files for the Raspberry Pi. + ;; It just assumes them to be existing in boot/efi in the same way that some + ;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + ;; It creates firmware configuration files and a bootloader-chain with U-Boot + ;; to provide an EFI API for the final GRUB bootloader. + ;; It also serves as a blue-print to create an own bootloader-chain with + ;; firmwre and device-tree packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-efi-64) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 0000000000..a1e41e3399 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,73 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 0000000000..7e18f00d86 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,77 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #| It is possible to use a specific defconfig file, + for example the "bcmrpi3_defconfig" with the + variable shown below. Unfortunately the kernel + build from the linux-libre sources with this + defconfig file does not boot. + #:extra-version "gnu-bcmrpi3" + #:defconfig %bcmrpi3-defconfig + |#)) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 --Apple-Mail=_86284009-8FBA-4824-A8C2-0E82155DD3CC-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 14:11:10 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 18:11:10 +0000 Received: from localhost ([127.0.0.1]:60772 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lufR0-00046p-7k for submit@debbugs.gnu.org; Sat, 19 Jun 2021 14:11:10 -0400 Received: from dd26836.kasserver.com ([85.13.145.193]:52622) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lufQy-00046e-0V for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 14:11:09 -0400 Received: from localhost (84-115-233-88.cable.dynamic.surfer.at [84.115.233.88]) by dd26836.kasserver.com (Postfix) with ESMTPSA id 3443533656BF; Sat, 19 Jun 2021 20:11:05 +0200 (CEST) Date: Sat, 19 Jun 2021 20:11:03 +0200 From: Danny Milosavljevic To: Stefan Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Message-ID: <20210619201103.69502840@scratchpost.org> In-Reply-To: <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/B=p+e+FA=egdOIVZ1iBk4M6"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Mark H Weaver , Leo Famulari , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --Sig_/B=p+e+FA=egdOIVZ1iBk4M6 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi Stefan, Thanks! Pushed 05-gnu-linux-correct-name-of.patch to guix master as commit b04cba9e= e533945f90ffd72637f064c60188f945. (I've also started testing the other patches of this patchset, but it will = take a while) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 84ea849108..51e692a8c3 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -749,9 +749,9 @@ for ARCH and optionally VARIANT, or #f if there is no s= uch configuration." =20 (define* (make-linux-libre version hash-string supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options) @@ -770,9 +770,9 @@ for ARCH and optionally VARIANT, or #f if there is no s= uch configuration." =20 (define* (make-linux-libre* version source supported-systems #:key + (extra-version #f) ;; A function that takes an arch and a variant. ;; See kernel-config for an example. - (extra-version #f) (configuration-file #f) (defconfig "defconfig") (extra-options %default-extra-linux-options)) @@ -838,7 +838,8 @@ for ARCH and optionally VARIANT, or #f if there is no s= uch configuration." (format #t "`CROSS_COMPILE' set to `~a'~%" (getenv "CROSS_COMPILE")))) =20 - (setenv "EXTRA_VERSION" ,extra-version) + (setenv "EXTRAVERSION" ,(and extra-version + (string-append "-" extra-version= ))) =20 (let ((build (assoc-ref %standard-phases 'build)) (config (assoc-ref (or native-inputs inputs) "kconfig")= )) --Sig_/B=p+e+FA=egdOIVZ1iBk4M6 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAmDOMzcACgkQ5xo1VCww uqVnVgf+MFlQTHVvJg/06G3HbaXgAe0tqPql7swHL83tSPikO1XRB9VjGp2FdzSH NqFiGnGhVwUboEH4x3i6DuK8BOPz2A6Xc8aUDG4taNr0Tc9rttde5qg7cOY5lzj5 4dJuDURrUvvM5HQir73Kb/kgkAqvpqLQMwESl6uYE6nPDdLZaQLXuSYclnkrVFAI MpViIUWfEVuMJlKId59YnzSXcoTgFwHgFN7SO1dGAyjL9Dl4+EqQMWkUAR1UQ32s oXEaapihBsIN+bkNA9iSDXSTM02mJvdg0vDjEsFARSIzsK4x1n/2TC7Um+Fzq6Hp Dr2r5W3qo9c8pOvHYWxbdyjNCHN/Tw== =f5GG -----END PGP SIGNATURE----- --Sig_/B=p+e+FA=egdOIVZ1iBk4M6-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 14:13:15 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 18:13:15 +0000 Received: from localhost ([127.0.0.1]:60776 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lufT1-00049o-Jm for submit@debbugs.gnu.org; Sat, 19 Jun 2021 14:13:15 -0400 Received: from dd26836.kasserver.com ([85.13.145.193]:52764) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lufSz-00049g-Mq for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 14:13:14 -0400 Received: from localhost (84-115-233-88.cable.dynamic.surfer.at [84.115.233.88]) by dd26836.kasserver.com (Postfix) with ESMTPSA id 0430133656BF; Sat, 19 Jun 2021 20:13:12 +0200 (CEST) Date: Sat, 19 Jun 2021 20:13:11 +0200 From: Danny Milosavljevic To: Stefan Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Message-ID: <20210619201311.7f3c5f60@scratchpost.org> In-Reply-To: <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/7=OrwH2x/twUNYXbFYhssfB"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --Sig_/7=OrwH2x/twUNYXbFYhssfB Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi Stefan, Since bug 43534 is closed, does that mean I can drop patch 01-gnu-qemu-disa= ble-tests-on.patch ? --Sig_/7=OrwH2x/twUNYXbFYhssfB Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAmDOM7gACgkQ5xo1VCww uqVt6gf/YjZphtgKR4fzrQCi9gra8qv1hMqQvAPlE1MKha8AFUEPnHI29vIKX/pT w2TUUEoh10mk0yfOD+V+WhU4YB3PyN1x6J86iAIF3dY9MPejh/vPWxUsMXsY3uVH VyKDwYjfkHJbDlS3hr4wVXHic+IKixR3tBF4myXpyA5IVSqL/92Q1EWCTH9CVEby 5E9qH9tgGhoCbuCtYOSeNuhS+W5z2YirRaogcSRaNS7zzH7eNBWSxXuehfBYDHX+ +M5ZeJSu3bKghk2CK5x6ioxbGxe/lv97fy+vPtVN5OX7Nff5OQBrCc7yhdhoVe0b AFsbNwinvUkU1xRhcNOSmQRMZcRJOg== =QWVZ -----END PGP SIGNATURE----- --Sig_/7=OrwH2x/twUNYXbFYhssfB-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 15:04:25 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 19:04:26 +0000 Received: from localhost ([127.0.0.1]:60805 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugGX-0005M4-Nb for submit@debbugs.gnu.org; Sat, 19 Jun 2021 15:04:25 -0400 Received: from dd26836.kasserver.com ([85.13.145.193]:55500) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugGV-0005Lu-0h for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 15:04:24 -0400 Received: from localhost (84-115-233-88.cable.dynamic.surfer.at [84.115.233.88]) by dd26836.kasserver.com (Postfix) with ESMTPSA id 589F13366D34; Sat, 19 Jun 2021 21:04:21 +0200 (CEST) Date: Sat, 19 Jun 2021 21:04:17 +0200 From: Danny Milosavljevic To: Stefan Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Message-ID: <20210619210417.67c21720@scratchpost.org> In-Reply-To: <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/O5TIUvI4qrn+FQ=OYXBA7=3"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --Sig_/O5TIUvI4qrn+FQ=OYXBA7=3 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi Stefan, In 04-gnu-bootloader-add-u-boot.patch, I think that having #:name is too ma= gical (it still only replaces part of the package name, and then still only after substitution). But if made non-magical, then it has too little benefit. Likewise for #:description. If it's alright with you, can we just drop #:name xxx and #:description xxx altogether and instead do: (define-public u-boot-rpi-3-efi (package (inherit (make-preinstalled-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" #:name "rpi-3-efi" #:configs %u-boot-rpi-efi-configs #:description %u-boot-rpi-efi-description-32-bit)) (name "u-boot-rpi-3-efi") (description %u-boot-rpi-efi-description-32-bit))) And similar for all the other u-boot definitions, and for the usage of make-u-boot-package inside make-preinstalled-u-boot-package ? Or are there upsides to doing it like you did it? I'm aware that the same can be said for "board" ... which is used already. However, that parameter is also used for something else, so it needs to be = there. NAME isn't used for anything else but for doing what a regular package inhe= rit could do anyway. Is there a downside when using package inherit? --Sig_/O5TIUvI4qrn+FQ=OYXBA7=3 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAmDOP7EACgkQ5xo1VCww uqVAaAf9HBxCMDHNFiQOsIsHVDFut+nWPG+PQGUa/IvGqBZglqoAZU/PH1XpmAhB kuF4mcd4OUl88BADffwa2ur3ymgdrxYZweOlEZNPg5GoqoJd9LoEGjBJdfU+l4kK /aWZlDWxLSX1LLRZGO5vIydWdEO+ClzRPmVit1z6UnGCZOLrs2hpnxNVoAI/7VaK aVLhfskhoiR98rUOH5RseV2vxzafpkWL7QEkMbnUieE8WnNmi4ziYWADlJmnJjBc n0gIoIrKdKoITdRME1oJM1kt/E4wC0nK5vdzn9/JtnYlp3saHgxJb4wbSxWNcbLW S22zXd1f9GsnncLbh9wtJJzCNdGgLQ== =1Gd1 -----END PGP SIGNATURE----- --Sig_/O5TIUvI4qrn+FQ=OYXBA7=3-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 15:10:31 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 19:10:31 +0000 Received: from localhost ([127.0.0.1]:60821 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugMQ-0005Vn-TC for submit@debbugs.gnu.org; Sat, 19 Jun 2021 15:10:31 -0400 Received: from dd26836.kasserver.com ([85.13.145.193]:55860) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugMP-0005Vd-AK for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 15:10:29 -0400 Received: from localhost (84-115-233-88.cable.dynamic.surfer.at [84.115.233.88]) by dd26836.kasserver.com (Postfix) with ESMTPSA id 4E1B03363A83; Sat, 19 Jun 2021 21:10:28 +0200 (CEST) Date: Sat, 19 Jun 2021 21:10:26 +0200 From: Danny Milosavljevic To: Stefan Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Message-ID: <20210619211026.5eb44073@scratchpost.org> In-Reply-To: <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <53799D56-08BA-401A-BC09-81BA61736AAC@vodafonemail.de> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/qEN/eaE_SGKCmQvvbRJsRQp"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Mark H Weaver , Leo Famulari , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --Sig_/qEN/eaE_SGKCmQvvbRJsRQp Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi Mark, Hi Leo, could you look at 06-gnu-linux-new-function-to.patch of this patchset? It provides the user a means of (slightly) editing kernel configs using a high-level interface, called "modify-linux". What do you think? @Stefan: On the other hand, I'm not sure of the general utility of make-def= config. I've never needed something like it in decades. Is it worth exporting as p= ublic from (gnu packages linux) ? Sounds like a too weird special case to have g= eneral utility. --Sig_/qEN/eaE_SGKCmQvvbRJsRQp Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAmDOQSIACgkQ5xo1VCww uqX35Qf/UePQutH3t4R3n2mL1izoKqJD7RNq+4T6RYkC+Ic8I4w3+aig9akcAmR0 7WxTZ33N3bhhV05VrMH8kyZftlSQky6JfslqgxIkJXFZwi81Qf+2unr5+GAaVdy5 +ATIRs2/M4C+/Xs55dMoVaOpw4ZfhGcG4nVKLkt3UbUdxSA7ZS4B3V/UwvzpF2NQ COTP9VzrqEzH8aVlGgWgOn/XuV4YxLMUrNFncTegjtDs/HVnq1NlhBkCwVGEw2+a g7mF2O/QbEV2GKu12jipQWf6+fajBqCaNEuYSvwN/ny+x1p+f8PrB5+spBadFdwf 7rVmslqAuLXnUFV+4RClU3pRfjhGRg== =qGer -----END PGP SIGNATURE----- --Sig_/qEN/eaE_SGKCmQvvbRJsRQp-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 15:10:41 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 19:10:41 +0000 Received: from localhost ([127.0.0.1]:60824 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugMb-0005WM-3a for submit@debbugs.gnu.org; Sat, 19 Jun 2021 15:10:41 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:58738) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugMZ-0005Vx-0t for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 15:10:40 -0400 Received: from smtp.vodafone.de (smtpa04.fra-mediabeam.com [10.2.0.35]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 0FB79120A08; Sat, 19 Jun 2021 21:10:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1624129832; bh=kwn29f707Ds93cXXwnV2HOAyUekUKP+t72N5whZ+cn0=; h=From:Subject:Date:References:Cc:In-Reply-To:To; b=Oop08xHrdop1rmFlf2wI0KT5paL3gz+9WwzNoeBCRzaaNdk/z80dX2kW5Vt5qBzOK /LlUlI5p/p/8h8JdczBzqMx4dCkWfm0xGr4XflH4rsGw2pBQhegOwU4NYMKeZUqco+ jmr+GGV7Q22rJ6arFh8eJeYxwravSQM3dpYMo0aA= Received: from smtpclient.apple (ipservice-092-212-012-132.092.212.pools.vodafone-ip.de [92.212.12.132]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id ABB3614019F; Sat, 19 Jun 2021 19:10:31 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Date: Sat, 19 Jun 2021 21:10:30 +0200 Message-Id: References: <20210619201311.7f3c5f60@scratchpost.org> In-Reply-To: <20210619201311.7f3c5f60@scratchpost.org> To: Danny Milosavljevic X-Mailer: iPhone Mail (18F72) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 407 X-purgate-ID: 155817::1624129831-00000699-81302983/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Danny! > Since bug 43534 is closed, does that mean I can drop patch 01-gnu-qemu-dis= able-tests-on.patch ? Yes. On the other side I have a bad experience with qemu substitutes for aarch64 a= nd building qemu on a Raspberry takes a night and then still fails during th= e test. I hope the substitute situation improves, otherwise this patch shoul= d still be considered. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 15:18:55 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 19:18:55 +0000 Received: from localhost ([127.0.0.1]:60838 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugUZ-0005ic-B4 for submit@debbugs.gnu.org; Sat, 19 Jun 2021 15:18:55 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:34382) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lugUW-0005iP-Tt for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 15:18:53 -0400 Received: from smtp.vodafone.de (smtpa05.fra-mediabeam.com [10.2.0.36]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 2814B122612; Sat, 19 Jun 2021 21:18:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1624130327; bh=BfdpO7Q+D/ERLQJCwim8nHIs4SI4Eo8TcLOeIgcCdZY=; h=From:Subject:Date:References:Cc:In-Reply-To:To; b=my2z6IRn288kJ34afj0DJsyecfqxDSMoyEPlWHAJ3c7uZ7L9IMFc0rMwa8V3cJvVU LDu2+DeTeTz0+PCZwzcQE1XLnNmEnN5q7IpNVnoQSGRuKv4K5AcKJ0pfj9ilLTvHyQ vWOph449urVTaLcuE3ckSyKFO5NDtOfvcy3YKhTY= Received: from smtpclient.apple (ipservice-092-212-012-132.092.212.pools.vodafone-ip.de [92.212.12.132]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 9863E140180; Sat, 19 Jun 2021 19:18:46 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Date: Sat, 19 Jun 2021 21:18:46 +0200 Message-Id: <56852507-062B-4242-8584-488E691DCD84@vodafonemail.de> References: <20210619210417.67c21720@scratchpost.org> In-Reply-To: <20210619210417.67c21720@scratchpost.org> To: Danny Milosavljevic X-Mailer: iPhone Mail (18F72) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 151 X-purgate-ID: 155817::1624130327-00000827-F88D74D5/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Danny! > If it's alright with you, can we just drop #:name xxx and #:description xx= x > altogether That=E2=80=99s OK. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 19 16:22:00 2021 Received: (at 48314) by debbugs.gnu.org; 19 Jun 2021 20:22:00 +0000 Received: from localhost ([127.0.0.1]:60869 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1luhTc-00012h-83 for submit@debbugs.gnu.org; Sat, 19 Jun 2021 16:22:00 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:36966) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1luhTY-00012R-9n for 48314@debbugs.gnu.org; Sat, 19 Jun 2021 16:21:58 -0400 Received: from smtp.vodafone.de (smtpa08.fra-mediabeam.com [10.2.0.39]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 84809122634; Sat, 19 Jun 2021 22:21:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1624134109; bh=VVo5vl+MNCaSaGEXEX14Lk/QUJS/ugQdht5XcdraNU4=; h=From:Subject:Date:References:Cc:In-Reply-To:To; b=EcoDqArbMZ7cQhGREh+47uqRey2kazCnL9RQwiENlQRU2/ia3s9j9JqenigTq+41w UY18NPTFKh0TYTLNxcFIRuKwexlXBsA8SgPf8qnyTvA2Ps8t9CTr0pL3wsGtN1lr6h PkQhqZbo0XjwDwi3JhqT/BWqng6T3KpCufYkFFyY= Received: from smtpclient.apple (ipservice-092-212-012-132.092.212.pools.vodafone-ip.de [92.212.12.132]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 98E6B140195; Sat, 19 Jun 2021 20:21:48 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Date: Sat, 19 Jun 2021 22:21:48 +0200 Message-Id: <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> References: <20210619211026.5eb44073@scratchpost.org> In-Reply-To: <20210619211026.5eb44073@scratchpost.org> To: Danny Milosavljevic X-Mailer: iPhone Mail (18F72) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 2326 X-purgate-ID: 155817::1624134109-000006F1-2A6E2F08/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Mark H Weaver , Leo Famulari , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi! > @Stefan: On the other hand, I'm not sure of the general utility of make-de= fconfig. There is currently no simple way change the Linux configuration. Also by mod= ifying the final .config as of today (which kind of contains all CONFIG_=E2=80= =A6-variables), as far as I know dependencies will not be resolved and confl= icting configurations can easily happen. A defconfig however gets striped down to a minimum of required CONFIG_=E2=80= =A6-variables and all =E2=80=9Cmissing=E2=80=9D ones get either default valu= es or get determined through dependecies. So adding /removing/changing some f= ew configurations to a defconfig is less error-prone. Further defconfig file= s are easier to maintain in git. There is a reason that only defconfig files= are maintained in the Linux sources. Please note that the patch allows to select a defconfig file from the Linux s= ources (if the parameter is a string), and also to provide an own defconfig f= ile (if it is a file-like object). > Sounds like a too weird special case to have general utility. Well, there is the need already in Guix to have e.g. the predefined linux-li= bre-arm64-generic kernel, wich just uses a certain defconfig file from the L= inux sources. But this possibility is not exported. There are many defconfig files for all sorts of boards, especially for arm32= . Why shouldn=E2=80=99t we allow to use any of these? Why should users be re= strict to =E2=80=9Cselected=E2=80=9D configurations? Why should Guix=E2=80=99= kernel configuration be preferred over the plain x86_64_defconfig? And take a look at the last patch: In order to make that kernel boot on a Ra= spberry from an NFS root, some few configurations are missing, which can eas= ily be added with the =E2=80=9Cmodify-linux=E2=80=9D function. By the way, m= aybe =E2=80=9Ccustomize-linux=E2=80=9D would be a better name. And there is another patch from me to make the NFS root test pass. As the Li= nux kernel build by Guix is not able to boot over NFS root in qemu, I used t= he same function there to add the missing configurations. Oh, and finally, I need the same underlying kconfig.scm and a similar defcon= fig modification for U-Boot as well, which allowed me to simplify the existi= ng U-Boot packages. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 28 14:58:41 2021 Received: (at 48314) by debbugs.gnu.org; 28 Jul 2021 18:58:42 +0000 Received: from localhost ([127.0.0.1]:55835 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m8olN-0005XP-NN for submit@debbugs.gnu.org; Wed, 28 Jul 2021 14:58:41 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:32864) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m8olK-0005X7-Ar for 48314@debbugs.gnu.org; Wed, 28 Jul 2021 14:58:40 -0400 Received: from smtp.vodafone.de (smtpa03.fra-mediabeam.com [10.2.0.34]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 560CD122D71; Wed, 28 Jul 2021 20:58:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1627498711; bh=06bEoW6bE6MU4w77ND78YHNOa7pKCtdpGCcdk87Xf90=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=VsD5gqyF2bPJOZSZlEIPLkngszRKNojjO3SEMot5ul+/opqYEP3c5OY4+EVpXt9mO 8jgNEzVhgiiGoww3NUciybPt0ziVx9rinT7Te1eLRnsfYWsjotjNB0vWCBUmjUoeQR KyF3Uz1a+mKA5a7EWqJzoNxBuz7yifQt5p7/x5oo= Received: from macbook-pro.kuh-wiese.my-router.de (dslb-090-186-146-148.090.186.pools.vodafone-ip.de [90.186.146.148]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 3B730140202; Wed, 28 Jul 2021 18:58:30 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi From: Stefan In-Reply-To: <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> Date: Wed, 28 Jul 2021 20:58:35 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> To: Danny Milosavljevic X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 145 X-purgate-ID: 155817::1627498711-00000B26-A20DB0B7/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Mark H Weaver , Leo Famulari , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Danny! Are there any news on this topic=C2=B9? Bye Stefan =C2=B9 From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 31 18:07:35 2021 Received: (at 48314) by debbugs.gnu.org; 31 Oct 2021 22:07:35 +0000 Received: from localhost ([127.0.0.1]:33243 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mhIzH-0005Sf-Ok for submit@debbugs.gnu.org; Sun, 31 Oct 2021 18:07:35 -0400 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:34068) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mhIzF-0005SO-T5 for 48314@debbugs.gnu.org; Sun, 31 Oct 2021 18:07:34 -0400 Received: from smtp.vodafone.de (smtpa07.fra-mediabeam.com [10.2.0.38]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id C397A616E2; Sun, 31 Oct 2021 23:07:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1635718031; bh=gr6sMolYwftUkWc7AIKLt3y7TrXMj+TNDKOb67LKOHg=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=BHCUdqv5FxG9SYdybjiXxO5HsDiKVDpERKJ+RlNHDmnnKUtOVattmtamO1HgKdBWe OG6Y2mGEZMLsGdryxT2Vn3wGZWBRa4FDYXPGfttkJMu5yPCLMmOOs+PpCmGqiS97nm /TS/LDKO7v7CAnEjNW5vvDzqgLoT3FIpvgihahy0= Received: from macbook-pro.kuh-wiese.my-router.de (dialin-145-254-041-056.pools.arcor-ip.net [145.254.41.56]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Hj9Hz0zM0zFpVS; Sun, 31 Oct 2021 22:07:10 +0000 (UTC) Content-Type: multipart/mixed; boundary="Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830" Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi From: Stefan In-Reply-To: Date: Sun, 31 Oct 2021 23:07:09 +0100 Message-Id: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> To: 48314@debbugs.gnu.org X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 128468 X-purgate-ID: 149169::1635718031-000039E6-967F771E/0/0 X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi! I did a rebase of the patch series to avoid bit-rotting. One patch got = obsolete meanwhile. This series applies on GIT commit = 1a80b8909a521b91d30649a011b0257d0fadc18c. Bye Stefan --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=01-gnu-bootloader-rework-chaining Content-Type: application/octet-stream; name="01-gnu-bootloader-rework-chaining" Content-Transfer-Encoding: quoted-printable gnu:=20bootloader:=20Rework=20chaining,=20add=20= grub-efi-netboot-removable-bootloader.=0A=0AFrom:=20Stefan=20= =0A=0A*=20doc/guix.texi=20(Bootloader=20= Configuration):=20Describe=20the=20new=0A= =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99.=20=20Mention=20= used=20sub-directories=20and=0Athat=20the=20UEFI=20Boot=20Manager=20is=20= not=20modified.=20=20Advice=20to=20disable=20write-access=0Aover=20TFTP.=0A= *=20gnu/bootloader.scm=20(efi-bootloader-profile):=20Allow=20a=20list=20= of=20packages=20and=0Acollect=20everything=20directly=20in=20the=20= profile,=20avoiding=20a=20separate=20collection=0Adirectory.=20=20= Renamed=20the=20profile=20from=20"bootloader-profile"=20to=0A= "efi-bootloader-profile".=0A[bootloader-collection]:=20Renamed=20to=20= =E2=80=A6=0A[efi-bootloader-profile-hook]:=20=E2=80=A6=20this=20and=20= removed=20unused=20modules=20and=20the=0Acreation=20of=20the=20now=20= unneeded=20collection=20directory.=0A(efi-bootloader-chain):=20Added=20= packages=20and=20disk-image-installer=20arguments.=0ARemoved=20handling=20= of=20the=20collection=20directory,=20now=20only=20calling=20the=20given=0A= installer=20procedure.=0A*=20gnu/bootloader/grub.scm=20= (make-grub-efi-netboot-installer):=20New=20helper.=0A= (make-grub-configuration):=20New=20helper=20based=20on=20= (grub-configuration-file).=0AAdding=20grub=20argument,=20fixed=20= indentation,=20removend=20code=20to=20get=20grub.=0A= (grub-configuration-file):=20Now=20using=20(make-grub-configuration).=0A= (grub-efi-configuration-file):=20New=20function=20using=20= (make-grub-configuration).=0AInstead=20of=20getting=20the=20grub-efi=20= package=20from=20the=20bootloader-configuration=0Athis=20function=20= refers=20to=20the=20grub-efi=20package=20directly.=0A(grub-cfg):=20New=20= variable=20to=20replace=20"/boot/grub/grub.cfg".=0A= (install-grub-efi-netboot):=20Removed,=20the=20functionality=20got=20= moved.=0A(make-grub-efi-netboot-installer):=20New=20helper=20function=20= to=20return=20a=20customized=0Ainstaller=20for=20a=20certain=20= efi-sub-directory.=20=20The=20installer=20basically=20copies=0Aa=20= pre-installed=20efi-bootloader-profile,=20and=20adds=20needed=20symlinks=20= for=20booting=0Aover=20network,=20or=20=E2=80=93=20on=20an=20ESP=20=E2=80=93= =20an=20intermediate=20grub-cfg=20to=20load=20the=20final=0Agrub-cfg=20= file.=0A(grub-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=0A= (grub-efi-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=20=20= Removed=20inheritance,=0Agiving=20complete=20set=20of=20fields.=0A= (make-grub-efi-netboot-bootloader):=20New=20helper=20function.=0A= (grub-efi-netboot-bootloader):=20Now=20using=20the=20helper.=0A= (grub-efi-netboot-removable-bootloader):=20New=20bootloader=20using=20= the=20helper.=0AIt=20uses=20the=20efi-sub-directory=20"efi/boot"=20for=20= removable=20media.=0A*=20gnu/packages/bootloaders.scm=20= (make-grub-efi-netboot):=20New=20function=20to=20return=0Aa=20grub-efi=20= package=20pre-installed=20via=20grub-mknetdir,=20customized=20for=20an=0A= efi-sub-directory=20and=20able=20to=20boot=20via=20network=20and=20local=20= storage.=0A=0AThe=20rework=20allows=20to=20use=20an=20= (efi-bootloader-chain)=20like=20this,=20which=20is=20able=0Ato=20boot=20= over=20network=20or=20local=20storage,=20depending=20on=20the=20= symlink-support=20at=0Athe=20bootloader-target:=0A=0A(operating-system=0A= =20(bootloader=0A=20=20=20(bootloader-configuration=0A=20=20=20=20=20= (bootloader=0A=20=20=20=20=20=20=20(efi-bootloader-chain=0A=20=20=20=20=20= =20=20=20=20grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20= =20=20#:packages=20(list=20my-firmware-package=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20my-u-boot-package)=0A= =20=20=20=20=20=20=20=20=20#:files=20(list=20(plain-file=20"config.txt"=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"kernel=3Du-boot.bin"))=0A=20=20=20=20=20=20= =20=20=20#:hooks=20my-special-bootloader-profile-manipulator))=0A=20=20=20= =20=20(target=20"/booti/efi")=0A=20=20=20=20=20=E2=80=A6))=0A=20=E2=80=A6)= =0A)=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=2024=20+++-=0A=20gnu/bootloader.scm=20=20=20=20=20=20=20=20=20= =20=20|=20=20104=20+++++++++---------=0A=20gnu/bootloader/grub.scm=20=20=20= =20=20=20|=20=20241=20++++++++++++++++++++++++++----------------=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2090=20++++++++++++++++=0A=204=20= files=20changed,=20308=20insertions(+),=20151=20deletions(-)=0A=0Adiff=20= --git=20a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20= ea1973f02c..1dad33cfae=20100644=0A---=20a/doc/guix.texi=0A+++=20= b/doc/guix.texi=0A@@=20-33853,8=20+33853,9=20@@=20The=20type=20of=20a=20= bootloader=20configuration=20declaration.=0A=20@cindex=20BIOS,=20= bootloader=0A=20The=20bootloader=20to=20use,=20as=20a=20= @code{bootloader}=20object.=20=20For=20now=0A=20@code{grub-bootloader},=20= @code{grub-efi-bootloader},=0A-@code{grub-efi-netboot-bootloader},=20= @code{extlinux-bootloader}=20and=0A-@code{u-boot-bootloader}=20are=20= supported.=0A+@code{grub-efi-netboot-bootloader},=0A= +@code{grub-efi-netboot-removable-bootloader},=0A= +@code{extlinux-bootloader}=20and=20@code{u-boot-bootloader}=20are=20= supported.=0A=20=0A=20@cindex=20ARM,=20bootloaders=0A=20@cindex=20= AArch64,=20bootloaders=0A@@=20-33880,9=20+33881,10=20@@=20build=20a=20= diskless=20Guix=20system.=0A=20=0A=20The=20installation=20of=20the=20= @code{grub-efi-netboot-bootloader}=20generates=20the=0A=20content=20of=20= the=20TFTP=20root=20directory=20at=20@code{targets}=20(@pxref{Bootloader=0A= -Configuration,=20@code{targets}}),=20to=20be=20served=20by=20a=20TFTP=20= server.=20=20You=20may=0A-want=20to=20mount=20your=20TFTP=20server=20= directories=20onto=20the=20@code{targets}=20to=0A-move=20the=20required=20= files=20to=20the=20TFTP=20server=20automatically.=0A+Configuration,=20= @code{targets}})=20below=20the=20sub-directory=20@file{efi/Guix},=20to=20= be=0A+served=20by=20a=20TFTP=20server.=20=20You=20may=20want=20to=20= mount=20your=20TFTP=20server=20directories=0A+onto=20the=20= @code{targets}=20to=20move=20the=20required=20files=20to=20the=20TFTP=20= server=0A+automatically=20during=20installation.=0A=20=0A=20If=20you=20= plan=20to=20use=20an=20NFS=20root=20file=20system=20as=20well=20= (actually=20if=20you=20mount=20the=0A=20store=20from=20an=20NFS=20= share),=20then=20the=20TFTP=20server=20needs=20to=20serve=20the=20file=0A= @@=20-33916,13=20+33918,23=20@@=20directory=20to=20your=20= @code{targets}.=0A=20It=20is=20important=20to=20note=20that=20symlinks=20= pointing=20outside=20the=20TFTP=20root=20directory=0A=20may=20need=20to=20= be=20allowed=20in=20the=20configuration=20of=20your=20TFTP=20server.=20=20= Further=20the=0A=20store=20link=20exposes=20the=20whole=20store=20= through=20TFTP@.=20=20Both=20points=20need=20to=20be=0A-considered=20= carefully=20for=20security=20aspects.=0A+considered=20carefully=20for=20= security=20aspects.=20=20It=20is=20advised=20to=20disable=20any=20TFTP=0A= +write=20access!=0A+=0A+Please=20note,=20that=20this=20bootloader=20will=20= not=20modify=20the=20=E2=80=98UEFI=20Boot=20Manager=E2=80=99=20of=0A+the=20= system.=0A=20=0A=20Beside=20the=20@code{grub-efi-netboot-bootloader},=20= the=20already=20mentioned=20TFTP=20and=0A=20NFS=20servers,=20you=20also=20= need=20a=20properly=20configured=20DHCP=20server=20to=20make=20the=20= booting=0A=20over=20netboot=20possible.=20=20For=20all=20this=20we=20can=20= currently=20only=20recommend=20you=20to=20look=0A=20for=20instructions=20= about=20@acronym{PXE,=20Preboot=20eXecution=20Environment}.=0A=20=0A= +@vindex=20grub-efi-netboot-removable-bootloader=0A= +@code{grub-efi-netboot-removable-bootloader}=20is=20identical=20to=0A= +@code{grub-efi-netboot-bootloader}=20with=20the=20exception=20that=20= the=20sub-directory=0A+@file{efi/boot}=20will=20be=20used=20instead=20of=20= @file{efi/Guix}=20to=20comply=20to=20the=20UEFI=0A+specification=20for=20= removable=20media.=0A+=0A=20@item=20@code{targets}=0A=20This=20is=20a=20= list=20of=20strings=20denoting=20the=20targets=20onto=20which=20to=20= install=20the=0A=20bootloader.=0Adiff=20--git=20a/gnu/bootloader.scm=20= b/gnu/bootloader.scm=0Aindex=20d1c72c0c85..cddb8daf93=20100644=0A---=20= a/gnu/bootloader.scm=0A+++=20b/gnu/bootloader.scm=0A@@=20-261,26=20= +261,22=20@@=20instead~%")))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (force=20%bootloaders))=0A=20=20=20=20=20=20=20(leave=20(G_=20"~a:=20no=20= such=20bootloader~%")=20name)))=0A=20=0A-(define=20= (efi-bootloader-profile=20files=20bootloader-package=20hooks)=0A-=20=20= "Creates=20a=20profile=20with=20BOOTLOADER-PACKAGE=20and=20a=20directory=20= collection/=20with=0A-links=20to=20additional=20FILES=20from=20the=20= store.=20=20This=20collection=20is=20meant=20to=20be=20used=0A-by=20the=20= bootloader=20installer.=0A+(define=20(efi-bootloader-profile=20packages=20= files=20hooks)=0A+=20=20"Creates=20a=20profile=20from=20the=20lists=20of=20= PACKAGES=20and=20FILES=20from=20the=20store.=0A+This=20profile=20is=20= meant=20to=20be=20used=20by=20the=20bootloader-installer.=0A=20=0A=20= FILES=20is=20a=20list=20of=20file=20or=20directory=20names=20from=20the=20= store,=20which=20will=20be=0A-symlinked=20into=20the=20collection/=20= directory.=20=20If=20a=20directory=20name=20ends=20with=20'/',=0A-then=20= the=20directory=20content=20instead=20of=20the=20directory=20itself=20= will=20be=20symlinked=0A-into=20the=20collection/=20directory.=0A= +symlinked=20into=20the=20profile.=20=20If=20a=20directory=20name=20ends=20= with=20'/',=20then=20the=0A+directory=20content=20instead=20of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=0A+profile.=0A=20= =0A-FILES=20may=20contain=20file=20like=20objects=20produced=20by=20= functions=20like=20plain-file,=0A+FILES=20may=20contain=20file=20like=20= objects=20produced=20by=20procedures=20like=20plain-file,=0A=20= local-file,=20etc.,=20or=20package=20contents=20produced=20with=20= file-append.=0A=20=0A=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A-=20=20(define=20(bootloader-collection=20= manifest)=0A+=20=20(define=20(efi-bootloader-profile-hook=20manifest)=0A=20= =20=20=20=20(define=20build=0A-=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(ice-9=20ftw)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(srfi=20srfi-26))=0A+=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils))=0A=20=20=20=20=20=20=20= =20=20=20=20#~(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20((guix=20build=20utils)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:select=20(mkdir-p=20= strip-store-file-name))=0A@@=20-304,7=20+300,7=20@@=20HOOKS=20lists=20= additional=20hook=20functions=20to=20modify=20the=20profile."=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20(define=20(name-is-store-entry?=20name)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Return=20#t=20if=20NAME=20is=20= a=20direct=20store=20entry=20and=20nothing=20inside."=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(string-index=20(strip-store-file-name=20= name)=20#\/)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20(let*=20= ((collection=20(string-append=20#$output=20"/collection"))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(let*=20((output=20#$output)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20'#$files)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(directories=20(filter=20= name-ends-with-/?=20files))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(names-from-directories=0A@@=20-313,11=20+309,11=20@@=20= HOOKS=20lists=20additional=20hook=20functions=20to=20modify=20the=20= profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20directories))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(names=20(append=20= names-from-directories=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20= name-ends-with-/?=20files))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20collection)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20output)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (every=20file-exists?=20names)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(for-each=20(lambda=20(name)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-to=20name=20collection=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(symlink-to=20name=20= output=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (name-is-store-entry?=20name)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20strip-store-file-name=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20basename)))=0A@@=20= -325,57=20+321,63=20@@=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#t)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#f)))))=0A=20=0A-=20=20=20=20(gexp->derivation=20= "bootloader-collection"=0A+=20=20=20=20(gexp->derivation=20= "efi-bootloader-profile"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20build=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:local-build?=20#t=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:substitutable?=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:properties=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((type=20.=20profile-hook)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hook=20.=20bootloader-collection))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (hook=20.=20efi-bootloader-profile-hook))))=0A=20=0A-=20=20(profile=20= (content=20(packages->manifest=20(list=20bootloader-package)))=0A-=20=20=20= =20=20=20=20=20=20=20=20(name=20"bootloader-profile")=0A-=20=20=20=20=20=20= =20=20=20=20=20(hooks=20(append=20(list=20bootloader-collection)=20= hooks))=0A+=20=20(profile=20(content=20(packages->manifest=20packages))=0A= +=20=20=20=20=20=20=20=20=20=20=20(name=20"efi-bootloader-profile")=0A+=20= =20=20=20=20=20=20=20=20=20=20(hooks=20(cons=20= efi-bootloader-profile-hook=20hooks))=0A=20=20=20=20=20=20=20=20=20=20=20= =20(locales?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (allow-collisions?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (relative-symlinks?=20#f)))=0A=20=0A-(define*=20(efi-bootloader-chain=20= files=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20final-bootloader=0A+(define*=20= (efi-bootloader-chain=20final-bootloader=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(packages=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20= '())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hooks=20'())=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= installer)=0A-=20=20"Define=20a=20bootloader=20chain=20with=20= FINAL-BOOTLOADER=20as=20the=20final=20bootloader=20and=0A-certain=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20installer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= disk-image-installer)=0A+=20=20"Define=20a=20chain=20of=20bootloaders=20= with=20the=20FINAL-BOOTLOADER,=20optional=20PACKAGES,=0A+and=20optional=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A-local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=20=20They=20= will=20be=0A-collected=20inside=20a=20directory=20collection/=20inside=20= a=20generated=20bootloader=20profile,=0A-which=20will=20be=20passed=20to=20= the=20INSTALLER.=0A+The=20package=20of=20the=20FINAL-BOOTLOADER=20and=20= all=20PACKAGES=20and=20FILES=20will=20be=20placed=0A+in=20an=20= efi-bootloader-profile,=20which=20will=20be=20passed=20to=20the=20= INSTALLER.=0A+=0A+FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20procedures=20like=20plain-file,=0A+local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=0A=20=0A=20If=20= a=20directory=20name=20in=20FILES=20ends=20with=20'/',=20then=20the=20= directory=20content=20instead=0A-of=20the=20directory=20itself=20will=20= be=20symlinked=20into=20the=20collection/=20directory.=0A+of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=20= efi-bootloader-profile.=0A=20=0A=20The=20procedures=20in=20the=20HOOKS=20= list=20can=20be=20used=20to=20further=20modify=20the=20bootloader=0A=20= profile.=20=20It=20is=20possible=20to=20pass=20a=20single=20function=20= instead=20of=20a=20list.=0A=20=0A-If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20function=20will=20be=20called=20to=20install=0A= -the=20bootloader.=20=20Otherwise=20the=20installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A-=20=20(let*=20= ((final-installer=20(or=20installer=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A-=20=20=20=20=20=20=20=20=20= (profile=20(efi-bootloader-profile=20files=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(bootloader-package=20final-bootloader)=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20hooks=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20= hooks)))))=0A-=20=20=20=20(bootloader=0A-=20=20=20=20=20(inherit=20= final-bootloader)=0A-=20=20=20=20=20(package=20profile)=0A-=20=20=20=20=20= (installer=0A-=20=20=20=20=20=20#~(lambda=20(bootloader=20target=20= mount-point)=0A-=20=20=20=20=20=20=20=20=20=20(#$final-installer=20= bootloader=20target=20mount-point)=0A-=20=20=20=20=20=20=20=20=20=20= (copy-recursively=0A-=20=20=20=20=20=20=20=20=20=20=20(string-append=20= bootloader=20"/collection")=0A-=20=20=20=20=20=20=20=20=20=20=20= (string-append=20mount-point=20target)=0A-=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A-=20=20=20=20=20=20=20=20=20=20=20#:log=20= (%make-void-port=20"w")))))))=0A+If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20gexp=20procedure=20will=20be=20called=20to=0A= +install=20the=20efi-bootloader-profile.=20=20Otherwise=20the=20= installer=20of=20the=0A+FINAL-BOOTLOADER=20will=20be=20called.=0A+=0A+If=20= the=20DISK-IMAGE-INSTALLER=20is=20used,=20then=20this=20gexp=20procedure=20= will=20be=20called=0A+to=20install=20the=20efi-bootloader-profile=20into=20= a=20disk-image.=20=20Otherwise=20the=0A+disk-image-installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A+=20=20(bootloader=0A+=20=20=20= =20(inherit=20final-bootloader)=0A+=20=20=20=20(name=20= "efi-bootloader-chain")=0A+=20=20=20=20(package=0A+=20=20=20=20=20= (efi-bootloader-profile=20(cons=20(bootloader-package=20= final-bootloader)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20packages)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20files=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= hooks=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20hooks))))=0A+=20=20=20=20= (installer=0A+=20=20=20=20=20(or=20installer=0A+=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A+=20=20=20=20= (disk-image-installer=0A+=20=20=20=20=20(or=20disk-image-installer=0A+=20= =20=20=20=20=20=20=20=20(bootloader-disk-image-installer=20= final-bootloader)))))=0Adiff=20--git=20a/gnu/bootloader/grub.scm=20= b/gnu/bootloader/grub.scm=0Aindex=20d8e888ff40..2235363c6d=20100644=0A= ---=20a/gnu/bootloader/grub.scm=0A+++=20b/gnu/bootloader/grub.scm=0A@@=20= -50,11=20+50,12=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-color-highlight=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-gfxmode=0A=20=0A-=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-netboot=0A+=20=20=20=20=20=20=20=20=20=20=20=20= make-grub-efi-netboot-installer=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-mkrescue-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-minimal-bootloader=0A=20=0A@@=20-346,7=20+347,7=20@@=20code."=0A=20=20= =20=20=20=20=20=20=20((or=20#f=20(?=20string?))=0A=20=20=20=20=20=20=20=20= =20=20#~(format=20#f=20"search=20--file=20--set=20~a"=20#$file)))))=0A=20= =0A-(define*=20(grub-configuration-file=20config=20entries=0A+(define*=20= (make-grub-configuration=20grub=20config=20entries=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale=20#f)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(system=20(%current-system))=0A@@=20-376,27=20= +377,27=20@@=20when=20booting=20a=20root=20file=20system=20on=20a=20= Btrfs=20subvolume."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (initrd=20(normalize-file=20(menu-entry-initrd=20entry)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20device-mount-point=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20store-directory-prefix)))=0A-=20=20=20=20=20=20= =20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A-=20=20=20=20=20=20=20=20= =20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20INITRD=20= in=20case=0A-=20=20=20=20=20=20=20=20=20;;=20DEVICE-MOUNT-POINT=20is=20= not=20"/",=20meaning=20that=20the=20store=20is=20on=20a=0A-=20=20=20=20=20= =20=20=20=20;;=20separate=20partition.=0A-=0A-=20=20=20=20=20=20=20=20=20= ;;=20When=20BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20= the=20linux=20and=0A-=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20= to=20allow=20booting=20from=20a=20Btrfs=20subvolume.=0A-=20=20=20=20=20=20= =20=20=20#~(format=20port=20"menuentry=20~s=20{=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20= INITRD=20in=20case=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= DEVICE-MOUNT-POINT=20is=20not=20"/",=20meaning=20that=20the=20store=20is=20= on=20a=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20separate=20partition.=0A= +=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20When=20= BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20the=20linux=20= and=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20to=20= allow=20booting=20from=20a=20Btrfs=20subvolume.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20#~(format=20port=20"menuentry=20~s=20{=0A=20=20=20~a=0A=20=20= =20linux=20~a=20~a=0A=20=20=20initrd=20~a=0A=20}~%"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20#$label=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$linux=20= (string-join=20(list=20#$@arguments))=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#$initrd))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#$label=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #$linux=20(string-join=20(list=20#$@arguments))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#$initrd))=0A=20=20=20=20=20=20= =20=20=20=20=20(let=20((kernel=20(menu-entry-multiboot-kernel=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(arguments=20= (menu-entry-multiboot-arguments=20entry))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(modules=20(menu-entry-multiboot-modules=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(root-index=201))=20=20= =20=20=20=20=20=20=20=20=20=20;=20XXX=20EFI=20will=20need=20root-index=20= 2=0A-=20=20=20=20=20=20=20=20#~(format=20port=20"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20#~(format=20port=20"=0A=20menuentry=20~s=20{=0A=20=20=20= multiboot=20~a=20root=3Ddevice:hd0s~a~a~a=0A=20}~%"=0A@@=20-434,9=20= +435,7=20@@=20menuentry=20~s=20{=0A=20=20=20(define=20locale-config=0A=20= =20=20=20=20(let*=20((entry=20(first=20all-entries))=0A=20=20=20=20=20=20= =20=20=20=20=20=20(device=20(menu-entry-device=20entry))=0A-=20=20=20=20=20= =20=20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20= entry))=0A-=20=20=20=20=20=20=20=20=20=20=20(bootloader=20= (bootloader-configuration-bootloader=20config))=0A-=20=20=20=20=20=20=20=20= =20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20=20=20=20= =20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20entry)))=0A= =20=20=20=20=20=20=20#~(let=20((locale=20#$(and=20locale=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (locale-definition-source=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale-name->definition=20= locale))))=0A@@=20-462,8=20+461,6=20@@=20set=20lang=3D~a~%"=0A=20=0A=20=20= =20(define=20keyboard-layout-config=0A=20=20=20=20=20(let*=20((layout=20= (bootloader-configuration-keyboard-layout=20config))=0A-=20=20=20=20=20=20= =20=20=20=20=20(grub=20=20=20(bootloader-package=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-configuration-bootloader=20config)))=0A=20=20=20=20=20=20=20=20= =20=20=20=20(keymap*=20(and=20layout=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(keyboard-layout-file=20layout=20= #:grub=20grub)))=0A=20=20=20=20=20=20=20=20=20=20=20=20(entry=20(first=20= all-entries))=0A@@=20-514,6=20+511,16=20@@=20fi~%"))))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:options=20'(#:local-build?=20#t=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:substitutable?=20#f)))=0A=20=0A+(define=20= (grub-configuration-file=20config=20.=20args)=0A+=20=20(let*=20= ((bootloader=20(bootloader-configuration-bootloader=20config))=0A+=20=20=20= =20=20=20=20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20= =20(apply=20make-grub-configuration=20grub=20config=20args)))=0A+=0A= +(define=20(grub-efi-configuration-file=20.=20args)=0A+=20=20(apply=20= make-grub-configuration=20grub-efi=20args))=0A+=0A+(define=20grub-cfg=20= "/boot/grub/grub.cfg")=0A+=0A=20=0C=0A=20=0A=20;;;=0A@@=20-607,42=20= +614,31=20@@=20fi~%"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"--bootloader-id=3DGuix"=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"--efi-directory"=20= target-esp)))))=0A=20=0A-(define=20(install-grub-efi-netboot=20subdir)=0A= -=20=20"Define=20a=20grub-efi-netboot=20bootloader=20installer=20for=20= installation=20in=20SUBDIR,=0A-which=20is=20usually=20efi/Guix=20or=20= efi/boot."=0A-=20=20(let*=20((system=20(string-split=20= (nix-system->gnu-triplet=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (%current-target-system)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A-=20=20=20=20=20=20=20=20= =20(arch=20(first=20system))=0A-=20=20=20=20=20=20=20=20=20= (boot-efi-link=20(match=20system=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20the=20= supportend=20systems=20and=20the=20names=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20defined=20by=20the=20= UEFI=20standard=20for=20removable=20media.=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("i686"=20_=20...)=20= =20=20=20=20=20=20=20"/bootia32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20= =20=20=20"/bootx64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("arm"=20_=20...)=20=20=20=20=20=20=20=20= =20"/bootarm.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("riscv"=20_=20...)=20=20=20=20=20=20=20= "/bootriscv32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Other=20systems=20are=20not=20supported,=20= although=20defined.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("ia64"=20_=20...)=20=20=20=20=20= "/bootia64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A-=20=20=20=20=20=20=20=20=20(core-efi=20(string-append=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20This=20is=20= the=20arch=20dependent=20file=20name=20of=20GRUB,=20e.g.=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20i368-efi/core.efi=20or=20= arm64-efi/core.efi.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20arch=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20("i686"=20=20=20=20"i386")=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("riscv"=20=20=20= "riscv32")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(_=20=20=20=20=20=20=20=20=20arch))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"-efi/core.efi")))=0A-=20=20=20=20= (with-imported-modules=0A-=20=20=20=20=20'((guix=20build=20union))=0A-=20= =20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A-=20=20=20=20= =20=20=20=20=20"Install=20the=20BOOTLOADER,=20which=20must=20be=20the=20= package=20grub,=20as=20e.g.=0A-bootx64.efi=20or=20bootaa64.efi=20into=20= SUBDIR,=20which=20is=20usually=20efi/Guix=20or=20efi/boot,=0A-below=20= the=20directory=20TARGET=20for=20the=20system=20whose=20root=20is=20= mounted=20at=20MOUNT-POINT.=0A+(define*=20= (make-grub-efi-netboot-installer=20grub-efi=20grub-cfg=20subdir)=0A+=20=20= "Make=20a=20bootloader-installer=20for=20a=20grub-efi-netboot=20= bootloader,=20which=20expects=0A+its=20files=20in=20SUBDIR=20and=20its=20= configuration=20file=20in=20GRUB-CFG.=0A+=0A+As=20a=20grub-efi-netboot=20= package=20is=20already=20preinstalled=20by=20'grub-mknetdir',=20the=0A= +installer=20basically=20copies=20all=20files=20from=20the=20= bootloader-package=20(or=20profile)=0A+into=20the=20bootloader-target=20= directory.=0A+=0A+Additionally=20for=20network=20booting=20over=20TFTP,=20= two=20relative=20symlinks=20to=20the=20store=0A+and=20to=20the=20= GRUB-CFG=20file=20are=20necessary.=20=20Due=20to=20this=20a=20TFTP=20= root=20directory=20must=0A+not=20be=20located=20on=20a=20FAT=20= file-system.=0A+=0A+If=20the=20bootloader-target=20does=20not=20support=20= symlinks,=20then=20it=20is=20assumed=20to=20be=20a=0A+kind=20of=20EFI=20= System=20Partition=20(ESP).=20=20In=20this=20case=20an=20intermediate=20= configuration=0A+file=20is=20created=20with=20the=20help=20of=20GRUB-EFI=20= to=20load=20the=20GRUB-CFG.=0A+=0A+The=20installer=20is=20usable=20for=20= any=20efi-bootloader-chain,=20which=20prepares=20the=0A= +bootloader-profile=20in=20a=20way=20ready=20for=20copying.=0A+=0A+The=20= installer=20does=20not=20manipulate=20the=20system's=20'UEFI=20Boot=20= Manager'."=0A+=20=20(with-imported-modules=20'((guix=20build=20union))=0A= +=20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A+=20=20=20= =20=20=20=20=20"Copy=20the=20BOOTLOADER,=20which=20must=20be=20a=20= preinstalled=20grub-efi-netboot=0A+package=20with=20a=20SUBDIR=20like=20= efi/boot=20or=20efi/Guix,=20below=20the=20directory=0A+TARGET=20for=20= the=20system=20whose=20root=20is=20mounted=20at=20MOUNT-POINT.=0A=20=0A=20= MOUNT-POINT=20is=20the=20last=20argument=20in=20'guix=20system=20init=20= /etc/config.scm=20mnt/point'=0A=20or=20'/'=20for=20other=20'guix=20= system'=20commands.=0A@@=20-652,17=20+648,18=20@@=20= bootloader-configuration=20in:=0A=20=0A=20(operating-system=0A=20=20= (bootloader=20(bootloader-configuration=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(targets=20'(\"/boot\"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(targets=20'(\"/boot/efi\"))=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=E2=80=A6))=0A=20=20=E2=80=A6)=0A=20=0A=20TARGET=20is=20= required=20to=20be=20an=20absolute=20directory=20name,=20usually=20= mounted=20via=20NFS,=0A=20and=20finally=20needs=20to=20be=20provided=20= by=20a=20TFTP=20server=20as=20the=20TFTP=20root=20directory.=0A=20=0A= +Usually=20the=20installer=20will=20be=20used=20to=20prepare=20network=20= booting=20over=20TFTP.=20=20Then=0A=20GRUB=20will=20load=20= tftp://server/SUBDIR/grub.cfg=20and=20this=20file=20will=20instruct=20it=20= to=0A=20load=20more=20files=20from=20the=20store=20like=20= tftp://server/gnu/store/=E2=80=A6-linux=E2=80=A6/Image.=0A=20=0A-To=20= make=20this=20possible=20two=20symlinks=20will=20be=20created.=20The=20= first=20symlink=20points=0A+To=20make=20this=20possible=20two=20symlinks=20= will=20be=20created.=20=20The=20first=20symlink=20points=0A=20relatively=20= form=20MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20to=0A=20= MOUNT-POINT/boot/grub/grub.cfg,=20and=20the=20second=20symlink=20points=20= relatively=20from=0A=20MOUNT-POINT/TARGET/%store-prefix=20to=20= MOUNT-POINT/%store-prefix.=0A@@=20-672,34=20+669,78=20@@=20paths=20on=20= the=20TFTP=20server=20side=20are=20unknown.=0A=20=0A=20It=20is=20also=20= important=20to=20note=20that=20both=20symlinks=20will=20point=20outside=20= the=20TFTP=20root=0A=20directory=20and=20that=20the=20= TARGET/%store-prefix=20symlink=20makes=20the=20whole=20store=0A= -accessible=20via=20TFTP.=20Possibly=20the=20TFTP=20server=20must=20be=20= configured=0A-to=20allow=20accesses=20outside=20its=20TFTP=20root=20= directory.=20This=20may=20need=20to=20be=0A-considered=20for=20security=20= aspects."=0A-=20=20=20=20=20=20=20=20=20(use-modules=20((guix=20build=20= union)=20#:select=20(symlink-relative)))=0A-=20=20=20=20=20=20=20=20=20= (let*=20((net-dir=20(string-append=20mount-point=20target=20"/"))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20(string-append=20= net-dir=20#$subdir=20"/"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(store=20(string-append=20mount-point=20(%store-prefix)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= net-dir=20(%store-prefix)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(grub-cfg=20(string-append=20mount-point=20"/boot/grub/grub.cfg"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(grub-cfg-link=20= (string-append=20sub-dir=20(basename=20grub-cfg)))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(boot-efi-link=20(string-append=20sub-dir=20= #$boot-efi-link)))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20store-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20store-link))=0A-=20=20=20=20=20=20=20= =20=20=20=20(symlink-relative=20store=20store-link)=0A-=20=20=20=20=20=20= =20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg,=20= which=20points=20into=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20grub-cfg-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A-=20=20=20=20=20=20= =20=20=20=20=20(symlink-relative=20grub-cfg=20grub-cfg-link)=0A-=20=20=20= =20=20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= encrypted=20partitions,=0A-=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "GRUB_ENABLE_CRYPTODISK"=20"y")=0A-=20=20=20=20=20=20=20=20=20=20=20= (invoke/quiet=20(string-append=20bootloader=20"/bin/grub-mknetdir")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"--net-directory=3D"=20net-dir)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "--subdir=3D"=20#$subdir))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= Prepare=20the=20bootloader=20symlink,=20which=20points=20to=20core.efi=20= of=20GRUB.=0A-=20=20=20=20=20=20=20=20=20=20=20(false-if-exception=20= (delete-file=20boot-efi-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (symlink=20#$core-efi=20boot-efi-link))))))=0A+accessible=20via=20TFTP.=20= =20Possibly=20the=20TFTP=20server=20must=20be=20configured=20to=20allow=0A= +accesses=20outside=20its=20TFTP=20root=20directory.=20=20This=20all=20= may=20need=20to=20be=20considered=0A+for=20security=20aspects.=20=20It=20= is=20advised=20to=20disable=20any=20TFTP=20write=20access!=0A+=0A+The=20= installer=20can=20also=20be=20used=20to=20prepare=20booting=20from=20= local=20storages,=20if=20the=0A+underlying=20file-system,=20like=20FAT=20= on=20an=20EFI=20System=20Partition=20(ESP),=20does=20not=0A+support=20= symlinks.=20=20In=20this=20case=20the=20= MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20will=20be=0A+created=20with=20the=20= help=20of=20GRUB-EFI=20to=20load=20the=20/boot/grub/grub.cfg=20file.=20=20= A=0A+symlink=20to=20the=20store=20is=20not=20needed=20in=20this=20case."=0A= +=20=20=20=20=20=20=20=20;;=20In=20context=20of=20a=20disk=20image=20= creation=20TARGET=20will=20be=20#f=20and=20an=0A+=20=20=20=20=20=20=20=20= ;;=20installer=20is=20expected=20to=20do=20necessary=20installations=20= on=20MOUNT-POINT,=0A+=20=20=20=20=20=20=20=20;;=20which=20will=20become=20= the=20root=20file=20system.=0A+=20=20=20=20=20=20=20=20;;=20If=20TARGET=20= is=20#f,=20this=20installer=20has=20nothing=20to=20do,=20as=20it=20only=20= cares=0A+=20=20=20=20=20=20=20=20;;=20about=20the=20EFI=20System=20= Partition=20(ESP).=0A+=20=20=20=20=20=20=20=20(when=20target=0A+=20=20=20= =20=20=20=20=20=20=20(use-modules=20((guix=20build=20union)=20#:select=20= (symlink-relative))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(ice-9=20popen)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(ice-9=20rdelim))=0A+=20=20=20=20=20=20=20= =20=20=20(let*=20((mount-point/target=20(string-append=20mount-point=20= target=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= When=20installing=20Guix,=20it=20is=20common=20to=20mount=20TARGET=20= below=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= MOUNT-POINT=20rather=20than=20the=20root=20directory.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bootloader-target=20(if=20= (file-exists?=20mount-point/target)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mount-point/target=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20target))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20= (string-append=20mount-point=20(%store-prefix)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= bootloader-target=20(%store-prefix)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(grub-cfg=20(string-append=20mount-point=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (grub-cfg-link=20(string-append=20bootloader-target=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$subdir=20"/"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(basename=20= grub-cfg))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Copy=20the=20= bootloader=20into=20the=20bootloader-target=20directory.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Should=20we=20beforehand=20recursively=20= delete=20any=20existing=20file?=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (copy-recursively=20bootloader=20bootloader-target=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:log=20(%make-void-port=20= "w"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20For=20TFTP=20we=20need=20= to=20install=20additional=20relative=20symlinks.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20If=20we=20install=20on=20an=20EFI=20System=20= Partition=20(ESP)=20or=20some=20other=20FAT=0A+=20=20=20=20=20=20=20=20=20= =20=20=20;;=20file-system,=20then=20symlinks=20cannot=20be=20created=20= and=20are=20not=20needed.=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Therefore=20we=20ignore=20exceptions=20when=20trying.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20(dirname=20= grub-cfg-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(if=20(unspecified?=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(false-if-exception=20(symlink-relative=20grub-cfg=20= grub-cfg-link)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Symlinks=20are=20supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(mkdir-p=20(dirname=20store-link))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20= store-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-relative=20store=20store-link))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Creating=20symlinks=20does=20not=20seem=20to=20be=20= supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Probably=20= an=20ESP=20is=20used.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Instead=20we=20can=20script=20to=20search=20and=20load=20the=20actual=20= grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((probe=20= #$(file-append=20grub-efi=20"/sbin/grub-probe"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(port=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-pipe*=20OPEN_READ=20= probe=20"--target=3Dfs_uuid"=20grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(search-root=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20(read-line=20port)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((?=20eof-object?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20There=20is=20no=20UUID=20= available.=20As=20a=20fallback=20search=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20everywhere=20for=20= the=20grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20"search=20--file=20--set=20"=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(fs-uuid=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20UUID=20to=20load=20the=20= grub.cfg=20from=20is=20known.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"search=20= --fs-uuid=20--set=20"=20fs-uuid))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(load-grub-cfg=20(string-append=20"configfile=20= "=20#$grub-cfg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (close-pipe=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-output-to-file=20grub-cfg-link=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(display=20(string-join=20(list=20search-root=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= load-grub-cfg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "\n")))))))))))=0A=20=0A=20=0C=0A=20=0A@@=20-717,7=20+758,7=20@@=20= considered=20for=20security=20aspects."=0A=20=20=20=20(package=20grub)=0A= =20=20=20=20(installer=20install-grub)=0A=20=20=20=20= (disk-image-installer=20install-grub-disk-image)=0A-=20=20=20= (configuration-file=20"/boot/grub/grub.cfg")=0A+=20=20=20= (configuration-file=20grub-cfg)=0A=20=20=20=20= (configuration-file-generator=20grub-configuration-file)))=0A=20=0A=20= (define=20grub-minimal-bootloader=0A@@=20-727,17=20+768,29=20@@=20= considered=20for=20security=20aspects."=0A=20=0A=20(define=20= grub-efi-bootloader=0A=20=20=20(bootloader=0A-=20=20=20(inherit=20= grub-bootloader)=0A+=20=20=20(name=20'grub-efi)=0A+=20=20=20(package=20= grub-efi)=0A=20=20=20=20(installer=20install-grub-efi)=0A=20=20=20=20= (disk-image-installer=20#f)=0A-=20=20=20(name=20'grub-efi)=0A-=20=20=20= (package=20grub-efi)))=0A+=20=20=20(configuration-file=20grub-cfg)=0A+=20= =20=20(configuration-file-generator=20grub-configuration-file)))=0A=20=0A= -(define=20grub-efi-netboot-bootloader=0A+(define=20= (make-grub-efi-netboot-bootloader=20name=20subdir)=0A=20=20=20= (bootloader=0A-=20=20=20(inherit=20grub-efi-bootloader)=0A-=20=20=20= (name=20'grub-efi-netboot-bootloader)=0A-=20=20=20(installer=20= (install-grub-efi-netboot=20"efi/Guix"))))=0A+=20=20=20(name=20name)=0A+=20= =20=20(package=20(make-grub-efi-netboot=20(symbol->string=20name)=20= subdir))=0A+=20=20=20(installer=20(make-grub-efi-netboot-installer=20= grub-efi=20grub-cfg=20subdir))=0A+=20=20=20(disk-image-installer=20#f)=0A= +=20=20=20(configuration-file=20grub-cfg)=0A+=20=20=20= (configuration-file-generator=20grub-efi-configuration-file)))=0A+=0A= +(define=20grub-efi-netboot-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20'grub-efi-netboot-bootloader=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"efi/Guix"))=0A+=0A+(define=20= grub-efi-netboot-removable-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20= 'grub-efi-netboot-removable-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "efi/boot"))=0A=20=0A=20(define=20grub-mkrescue-bootloader=0A=20=20=20= (bootloader=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=20706ddf0207..601912011b=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-15,6=20+15,7=20@@=0A=20;;;=20= Copyright=20=C2=A9=202020,=202021=20Pierre=20Langlois=20= =0A=20;;;=20Copyright=20=C2=A9=202021=20Vincent=20= Legoll=20=0A=20;;;=20Copyright=20=C2=A9=202021=20= Brice=20Waegeneire=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-66,13=20+67,17=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20virtualization)=0A=20=20=20= #:use-module=20(gnu=20packages=20xorg)=0A=20=20=20#:use-module=20(guix=20= build-system=20gnu)=0A+=20=20#:use-module=20(guix=20build-system=20= trivial)=0A=20=20=20#:use-module=20(guix=20download)=0A+=20=20= #:use-module=20(guix=20gexp)=0A=20=20=20#:use-module=20(guix=20= git-download)=0A=20=20=20#:use-module=20((guix=20licenses)=20#:prefix=20= license:)=0A=20=20=20#:use-module=20(guix=20packages)=0A=20=20=20= #:use-module=20(guix=20utils)=0A=20=20=20#:use-module=20(srfi=20srfi-1)=0A= =20=20=20#:use-module=20(srfi=20srfi-26)=0A+=20=20#:use-module=20(ice-9=20= match)=0A+=20=20#:use-module=20(ice-9=20optargs)=0A=20=20=20#:use-module=20= (ice-9=20regex))=0A=20=0A=20(define=20unifont=0A@@=20-366,6=20+371,91=20= @@=20menu=20to=20select=20one=20of=20the=20installed=20operating=20= systems.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (scandir=20input-dir))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#t)))))))))=0A=20=0A+(define-public=20(make-grub-efi-netboot=20= name=20subdir)=0A+=20=20"Make=20a=20grub-efi-netboot=20package=20named=20= NAME,=20which=20will=20be=20able=20to=20boot=20over=0A+network=20via=20= TFTP=20by=20accessing=20its=20files=20in=20the=20SUBDIR=20of=20a=20TFTP=20= root=20directory.=0A+This=20package=20is=20also=20able=20to=20boot=20= from=20local=20storage=20devices.=0A+=0A+A=20bootloader-installer=20= basically=20needs=20to=20copy=20the=20package=20content=20into=20the=0A= +bootloader-target=20directory,=20which=20will=20usually=20be=20the=20= TFTP=20root,=20as=0A+'grub-mknetdir'=20will=20be=20invoked=20already=20= during=20the=20package=20creation.=0A+=0A+Alternatively=20the=20= bootloader-target=20directory=20can=20be=20a=20mounted=20EFI=20System=0A= +Partition=20(ESP),=20or=20a=20similar=20partition=20with=20a=20FAT=20= file=20system,=20for=20booting=0A+from=20local=20storage=20devices.=0A+=0A= +The=20name=20of=20the=20GRUB=20EFI=20binary=20will=20conform=20to=20the=20= UEFI=20specification=20for=0A+removable=20media.=20=20Depending=20on=20= the=20system=20it=20will=20be=20e.g.=20bootx64.efi=20or=0A+bootaa64.efi=20= below=20SUBDIR.=0A+=0A+The=20SUBDIR=20argument=20needs=20to=20be=20set=20= to=20\"efi/boot\"=20to=20create=20a=20package=20which=0A+conforms=20to=20= the=20UEFI=20specification=20for=20removable=20media.=0A+=0A+The=20= SUBDIR=20argument=20defaults=20to=20\"efi/Guix\",=20as=20it=20is=20also=20= the=20case=20for=0A+'grub-efi-bootloader'."=0A+=20=20(package=0A+=20=20=20= =20(name=20name)=0A+=20=20=20=20(version=20(package-version=20grub-efi))=0A= +=20=20=20=20;;=20Source=20is=20not=20needed,=20but=20it=20cannot=20be=20= omitted.=0A+=20=20=20=20(source=20#f)=0A+=20=20=20=20(build-system=20= trivial-build-system)=0A+=20=20=20=20(arguments=0A+=20=20=20=20=20(let*=20= ((system=20(string-split=20(nix-system->gnu-triplet=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(or=20(%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(%current-system)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20(arch=20(first=20system))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(boot-efi=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (match=20system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20are=20the=20supportend=20systems=20and=20the=20names=20defined=20= by=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20the=20UEFI=20= standard=20for=20removable=20media.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(("i686"=20_=20...)=20=20=20=20=20=20=20=20"/bootia32.efi")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20=20= =20=20"/bootx64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("arm"=20_=20...)=20=20=20=20=20=20=20=20=20"/bootarm.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("riscv"=20_=20...)=20=20=20=20=20=20=20"/bootriscv32.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Other=20systems=20are=20not=20supported,=20although=20defined.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= (("ia64"=20_=20...)=20=20=20=20=20"/bootia64.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(core-efi=20= (string-append=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20This=20is=20the=20arch=20dependent=20file=20name=20of=20= GRUB,=20e.g.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20i368-efi/core.efi=20or=20arm64-efi/core.efi.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= arch=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20("i686"=20=20=20=20"i386")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ("riscv"=20=20=20"riscv32")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20arch))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "-efi/core.efi")))=0A+=20=20=20=20=20=20=20`(#:modules=20((guix=20build=20= utils))=0A+=20=20=20=20=20=20=20=20=20#:builder=0A+=20=20=20=20=20=20=20=20= =20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(guix=20= build=20utils))=0A+=20=20=20=20=20=20=20=20=20=20=20(let*=20((bootloader=20= (assoc-ref=20%build-inputs=20"grub-efi"))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(net-dir=20(assoc-ref=20%outputs=20"out"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20= (string-append=20net-dir=20"/"=20,subdir=20"/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(boot-efi=20(string-append=20sub-dir=20= ,boot-efi))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (core-efi=20(string-append=20sub-dir=20,core-efi)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20encrypted=20partitions,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"GRUB_ENABLE_CRYPTODISK"=20"y")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(invoke/quiet=20(string-append=20bootloader=20= "/bin/grub-mknetdir")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--net-directory=3D"=20= net-dir)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"--subdir=3D"=20,subdir)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20modules=20must=20be=20preloaded=20to=20allow=20booting=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20from=20an=20ESP=20or=20a=20similar=20partition=20with=20a=20FAT=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20file=20system.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--modules=3Dpart_msdos=20= part_gpt=20fat"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20= GRUB's=20core.efi=20to=20the=20removable=20media=20name.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20boot-efi))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20core-efi=20= boot-efi))))))=0A+=20=20=20=20(inputs=20`(("grub-efi"=20,grub-efi)))=0A+=20= =20=20=20(synopsis=20(package-synopsis=20grub-efi))=0A+=20=20=20=20= (description=20(package-description=20grub-efi))=0A+=20=20=20=20= (home-page=20(package-home-page=20grub-efi))=0A+=20=20=20=20(license=20= (package-license=20grub-efi))))=0A+=0A=20(define-public=20syslinux=0A=20=20= =20(let=20((commit=20"bb41e935cc83c6242de24d2271e067d76af3585c"))=0A=20=20= =20=20=20(package=0A= --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=02-build-kconfig-add-new-module Content-Type: application/octet-stream; name="02-build-kconfig-add-new-module" Content-Transfer-Encoding: quoted-printable build:=20kconfig:=20Add=20new=20module=20to=20modify=20a=20defconfig=20= file.=0A=0AFrom:=20Stefan=20=0A=0A*=20= guix/build/kconfig.scm=20(modify-defconfig):=20New=20file=20with=20a=20= new=20function.=0A*=20gnu/packages/bootloaders.scm=20= (make-u-boot-package,=0Amake-u-boot-sunxi64-package):=20Adding=20new=20= key=20arguments=20to=20pass=20and/or=20modify=0Aa=20defconfig=20file.=0A= (u-boot-am335x-boneblack,=20u-boot-pinebook,=20u-boot-novena):=20= Simplify=20functions=0Aby=20using=20the=20new=20key=20arguments=20of=20= the=20former=20functions.=0A*=20Makefile.am:=20Adding=20= guix/build/kconfig.scm=20to=20MODULES.=0A---=0A=20Makefile.am=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=20=201=20=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2087=20+++++++++++--------------=0A= =20guix/build/kconfig.scm=20=20=20=20=20=20=20|=20=20148=20= ++++++++++++++++++++++++++++++++++++++++++=0A=203=20files=20changed,=20= 186=20insertions(+),=2050=20deletions(-)=0A=20create=20mode=20100644=20= guix/build/kconfig.scm=0A=0Adiff=20--git=20a/Makefile.am=20b/Makefile.am=0A= index=20d608b08899..06cceebf07=20100644=0A---=20a/Makefile.am=0A+++=20= b/Makefile.am=0A@@=20-221,6=20+221,7=20@@=20MODULES=20=3D=09=09=09=09=09= \=0A=20=20=20guix/build/waf-build-system.scm=09=09\=0A=20=20=20= guix/build/haskell-build-system.scm=09=09\=0A=20=20=20= guix/build/julia-build-system.scm=09=09\=0A+=20=20guix/build/kconfig.scm=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\=0A= =20=20=20guix/build/linux-module-build-system.scm=09\=0A=20=20=20= guix/build/store-copy.scm=09=09=09\=0A=20=20=20guix/build/json.scm=09=09=09= =09\=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=20601912011b..3bc5600c7c=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-733,8=20+733,9=20@@=20def=20= test_ctrl_c"))=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=20=20= This=20package=20provides=20its=0A=20board-independent=20tools.")))=0A=20= =0A-(define-public=20(make-u-boot-package=20board=20triplet)=0A-=20=20= "Returns=20a=20u-boot=20package=20for=20BOARD=20cross-compiled=20for=20= TRIPLET."=0A+(define*-public=20(make-u-boot-package=20board=20triplet=20= #:key=20defconfig=20configs)=0A+=20=20"Returns=20a=20u-boot=20package=20= for=20BOARD=20cross-compiled=20for=20TRIPLET=20with=20the=0A+optional=20= DEFCONFIG=20file=20and=20optional=20configuration=20changes=20from=20= CONFIGS."=0A=20=20=20(let=20((same-arch?=20(lambda=20()=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string=3D?=20= (%current-system)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gnu-triplet->nix-system=20= triplet)))))=0A@@=20-752,8=20+753,11=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20(arguments=0A=20=20=20=20=20=20=20=20= `(#:modules=20((ice-9=20ftw)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20= gnu-build-system))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix=20build=20gnu-build-system)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20utils))=0A= +=20=20=20=20=20=20=20=20=20#:imported-modules=20= (,@%gnu-build-system-modules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig))=0A= =20=20=20=20=20=20=20=20=20=20#:test-target=20"test"=0A=20=20=20=20=20=20= =20=20=20=20#:make-flags=0A=20=20=20=20=20=20=20=20=20=20(list=20= "HOSTCC=3Dgcc"=0A@@=20-764,9=20+768,18=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20=20=20=20(modify-phases=20= %standard-phases=0A=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20= outputs=20make-flags=20#:allow-other-keys)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((config-name=20(string-append=20,board=20= "_defconfig")))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(file-exists?=20(string-append=20"configs/"=20config-name))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20invoke=20= "make"=20`(,@make-flags=20,config-name))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let*=20((config-name=20(string-append=20,board=20= "_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(config-file=20(string-append=20"configs/"=20config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (defconfig=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(configs=20',configs))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(when=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Replace=20the=20board-specific=20= defconfig=20with=20the=20given=20one.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(copy-file=20defconfig=20config-file))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(file-exists?=20= config-file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(when=20configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20config-file=20= configs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(apply=20invoke=20"make"=20`(,@make-flags=20,config-name)))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(begin=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (display=20"Invalid=20board=20name.=20Valid=20board=20names=20are:"=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(current-error-port))=0A@@=20-820,7=20+833,11=20@@=20= board-independent=20tools.")))=0A=20=20=20(make-u-boot-package=20"malta"=20= "mips64el-linux-gnuabi64"))=0A=20=0A=20(define-public=20= u-boot-am335x-boneblack=0A-=20=20(let=20((base=20(make-u-boot-package=20= "am335x_evm"=20"arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"am335x_evm"=20"arm-linux-gnueabihf"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20device=20= trees=20to=20build=20image=20small=20enough=20to=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20fit=20within=20typical=20partitioning=20= schemes=20where=20the=20first=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20partition=20begins=20at=20sector=202048.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:configs=20'("CONFIG_OF_LIST=3D\"am335x-evm=20= am335x-boneblack\""))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(name=20= "u-boot-am335x-boneblack")=0A@@=20-829,25=20+846,13=20@@=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20the=20BeagleBone=20Black,=20which=20was=20removed=20= upstream,=0A=20adjusted=20from=20the=20am335x_evm=20build=20with=20= several=20device=20trees=20removed=20so=20that=0A-it=20fits=20within=20= common=20partitioning=20schemes.")=0A-=20=20=20=20=20=20(arguments=0A-=20= =20=20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-defconfig=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20devicetrees=20to=20= build=20image=20small=20enough=20to=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20fit=20within=20typical=20partitioning=20schemes=20where=20= the=20first=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition=20begins=20at=20sector=202048.=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(substitute*=20"configs/am335x_evm_defconfig"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(("CONFIG_OF_LIST=3D.*$")=20= "CONFIG_OF_LIST=3D\"am335x-evm=20am335x-boneblack\"\n"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+it=20fits=20within=20= common=20partitioning=20schemes."))))=0A=20=0A=20(define-public=20= u-boot-am335x-evm=0A=20=20=20(make-u-boot-package=20"am335x_evm"=20= "arm-linux-gnueabihf"))=0A=20=0A-(define-public=20= (make-u-boot-sunxi64-package=20board=20triplet)=0A-=20=20(let=20((base=20= (make-u-boot-package=20board=20triplet)))=0A+(define*-public=20= (make-u-boot-sunxi64-package=20board=20triplet=20#:key=20defconfig=20= configs)=0A+=20=20(let=20((base=20(make-u-boot-package=20board=20triplet=20= #:defconfig=20defconfig=20#:configs=20configs)))=0A=20=20=20=20=20= (package=0A=20=20=20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20= (arguments=0A@@=20-877,20=20+882,10=20@@=20it=20fits=20within=20common=20= partitioning=20schemes.")=0A=20=20=20(make-u-boot-sunxi64-package=20= "pine64-lts"=20"aarch64-linux-gnu"))=0A=20=0A=20(define-public=20= u-boot-pinebook=0A-=20=20(let=20((base=20(make-u-boot-sunxi64-package=20= "pinebook"=20"aarch64-linux-gnu")))=0A-=20=20=20=20(package=0A-=20=20=20=20= =20=20(inherit=20base)=0A-=20=20=20=20=20=20(arguments=0A-=20=20=20=20=20= =20=20(substitute-keyword-arguments=20(package-arguments=20base)=0A-=20=20= =20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20=20=20=20=20=20= `(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-after=20'unpack=20'patch-pinebook-config=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Fix=20regression=20with=20LCD=20video=20output=20= introduced=20in=202020.01=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20https://patchwork.ozlabs.org/patch/1225130/=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(substitute*=20"configs/pinebook_defconfig"=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy")=20= "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy\nCONFIG_VIDEO_BPP32=3Dy"))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+=20=20= (make-u-boot-sunxi64-package=20"pinebook"=20"aarch64-linux-gnu"=0A+=20=20= =20;;=20Fix=20regression=20with=20LCD=20video=20output=20introduced=20in=20= 2020.01=0A+=20=20=20;;=20https://patchwork.ozlabs.org/patch/1225130/=0A+=20= =20=20#:configs=20'("CONFIG_VIDEO_BPP32=3Dy")))=0A=20=0A=20= (define-public=20u-boot-bananapi-m2-ultra=0A=20=20=20= (make-u-boot-package=20"Bananapi_M2_Ultra"=20"arm-linux-gnueabihf"))=0A= @@=20-941,25=20+936,17=20@@=20device=20while=20it's=20being=20turned=20= on=20(and=20a=20while=20longer).")=0A=20=20=20(make-u-boot-package=20= "mx6cuboxi"=20"arm-linux-gnueabihf"))=0A=20=0A=20(define-public=20= u-boot-novena=0A-=20=20(let=20((base=20(make-u-boot-package=20"novena"=20= "arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20(make-u-boot-package=20= "novena"=20"arm-linux-gnueabihf"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20= from=20FAT=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition,=20allowing=20it=20to=20be=20installed=20at=20a=20device=20= offset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20= '("CONFIG_SPL_FS_FAT=3D"))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20= =20(inherit=20base)=0A=20=20=20=20=20=20=20(description=20"U-Boot=20is=20= a=20bootloader=20used=20mostly=20for=20ARM=20boards.=20It=0A=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20Novena.=20=20Be=20advised=20that=20this=20version,=20= contrary=0A-to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition.")=0A-=20=20=20=20=20=20(arguments=0A-=20=20= =20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-novena-defconfig=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Patch=20configuration=20to=20disable=20= loading=20u-boot.img=20from=20FAT=20partition,=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20allowing=20it=20to=20be=20installed=20at=20a=20= device=20offset.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20= _=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(substitute*=20= "configs/novena_defconfig"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(("CONFIG_SPL_FS_FAT=3Dy")=20"#=20CONFIG_SPL_FS_FAT=20is=20= not=20set"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t)))))))))=0A+to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition."))))=0A=20=0A=20(define-public=20= u-boot-cubieboard=0A=20=20=20(make-u-boot-package=20"Cubieboard"=20= "arm-linux-gnueabihf"))=0Adiff=20--git=20a/guix/build/kconfig.scm=20= b/guix/build/kconfig.scm=0Anew=20file=20mode=20100644=0Aindex=20= 0000000000..09ddf59dd0=0A---=20/dev/null=0A+++=20= b/guix/build/kconfig.scm=0A@@=20-0,0=20+1,148=20@@=0A+;;;=20GNU=20Guix=20= ---=20Functional=20package=20management=20for=20GNU=0A+;;;=20Copyright=20= =C2=A9=202020=20Stefan=20=0A+;;;=0A+;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20GNU=20Guix=20= is=20free=20software;=20you=20can=20redistribute=20it=20and/or=20modify=20= it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20General=20Public=20= License=20as=20published=20by=0A+;;;=20the=20Free=20Software=20= Foundation;=20either=20version=203=20of=20the=20License,=20or=20(at=0A= +;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(guix=20build=20= kconfig)=0A+=20=20#:use-module=20=20(ice-9=20rdelim)=0A+=20=20= #:use-module=20=20(ice-9=20regex)=0A+=20=20#:use-module=20=20(srfi=20= srfi-1)=0A+=20=20#:use-module=20=20(srfi=20srfi-26)=0A+=20=20#:export=20= (modify-defconfig))=0A+=0A+;;=20Commentary:=0A+;;=0A+;;=20Builder-side=20= code=20to=20modify=20configurations=20for=20the=20Kconfig=20build=20= system=20as=0A+;;=20used=20by=20Linux=20and=20U-Boot.=0A+;;=0A+;;=20= Code:=0A+=0A+(define=20(modify-defconfig=20defconfig=20configs)=0A+=20=20= "This=20function=20can=20modify=20a=20given=20DEFCONFIG=20file=20by=20= adding,=20changing=20or=0A+removing=20the=20list=20of=20strings=20in=20= CONFIGS.=20=20This=20allows=20an=20easy=20customization=20of=0A+Kconfig=20= based=20projects=20like=20the=20kernel=20Linux=20or=20the=20bootloader=20= 'Das=20U-Boot'.=0A+=0A+These=20are=20examples=20for=20CONFIGS=20to=20add=20= or=20change=20or=20remove=0A+configurations=20to/from=20DEFCONFIG:=0A+=0A= +'(\"CONFIG_A=3D\\\"a\\\"\"=0A+=20=20\"CONFIG_B=3D0\"=0A+=20=20= \"CONFIG_C=3Dy\"=0A+=20=20\"CONFIG_D=3Dm\"=0A+=20=20\"CONFIG_E=3D\"=0A+=20= =20\"CONFIG_F\"=0A+=20=20\"#=20CONFIG_G=20is=20not=20set\")=0A+=0A= +Instead=20of=20a=20list,=20CONFGIS=20can=20be=20a=20string=20with=20one=20= configuration=20per=20line."=0A+=20=20(define=20config-rx=0A+=20=20=20=20= (make-regexp=0A+=20=20=20=20=20;;=20(match:substring=20(string-match=20= "=3D(.*)"=20"=3D")=201)=20returns=20"",=20but=20the=0A+=20=20=20=20=20;;=20= pattern=20"=3D(.+)?"=20makes=20it=20return=20#f=20instead.=20=20For=20a=20= "CONFIG_A=3D"=20we=20like=0A+=20=20=20=20=20;;=20to=20get=20#f,=20which=20= as=20a=20value=20emits=20"#=20=E2=80=A6=20is=20not=20set".=0A+=20=20=20=20= =20"^(#[\\t=20]*)?(CONFIG_[A-Z0-9_]+)([\\t=20]*=3D[\\t=20]*(.+)?|([\\t=20= ]+is[\\t=20]+not[\\t=20]+set))?$"))=0A+=0A+=20=20(define=20= (config-string->pair=20config-string)=0A+=20=20=20=20"Parse=20a=20= config-string=20like=20\"CONFIG_EXAMPLE=3Dy\"=20into=20a=20key-value=20= pair.=0A+Spaces=20get=20trimmed.=0A+\"CONFIG_A=3Dy\"=20=20=20=20=20=20=20= =20=20=20=20=20->=20'(\"CONFIG_A\"=20.=20\"y\")=0A+\"CONFIG_B=3D\\\"\\\"\"= =20=20=20=20=20=20=20=20=20->=20'(\"CONFIG_B\"=20.=20\"\\\"\\\"\")=0A= +\"CONFIG_C=3D\"=20=20=20=20=20=20=20=20=20=20=20=20=20->=20= '(\"CONFIG_C\"=20.=20#f)=0A+\"CONFIG_D\"=20=20=20=20=20=20=20=20=20=20=20= =20=20=20->=20'(\"CONFIG_D\"=20.=20#f)=0A+\"#=20CONFIG_E=20is=20not=20= set\"=20->=20'(\"CONFIG_E\"=20.=20#f)=0A+\"#=20Anything=20else\"=20=20=20= =20=20=20=20->=20'(\"#=20Anything=20else\"=20.=20\"\")"=0A+=20=20=20=20= (let=20((match=20(regexp-exec=20config-rx=20(string-trim-both=20= config-string))))=0A+=20=20=20=20=20=20(if=20(not=20match)=0A+=20=20=20=20= =20=20=20=20=20=20;;=20This=20is=20some=20unparsable=20config-string.=0A= +=20=20=20=20=20=20=20=20=20=20;;=20We=20keep=20it=20as=20it=20is.=0A+=20= =20=20=20=20=20=20=20=20=20(cons=20config-string=20"")=0A+=20=20=20=20=20= =20=20=20=20=20(let*=20((comment=20(match:substring=20match=201))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(key=20(match:substring=20= match=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(unset=20= (match:substring=20match=205))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(value=20(and=20(not=20comment)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= unset)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(match:substring=20match=204))))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(if=20(or=20(and=20comment=20(not=20unset))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20(not=20= comment)=20unset))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= This=20is=20just=20some=20comment=20or=20strange=20line,=20which=20we=20= keep=20as=20is.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20= config-string=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20key=20value))))))=0A+=0A+=20=20(define=20(pair->config-string=20= pair)=0A+=20=20=20=20"Convert=20a=20PAIR=20back=20to=20a=20= config-string."=0A+=20=20=20=20(let*=20((key=20(car=20pair))=0A+=20=20=20= =20=20=20=20=20=20=20=20(value=20(cdr=20pair)))=0A+=20=20=20=20=20=20(if=20= (string?=20value)=0A+=20=20=20=20=20=20=20=20=20=20(if=20(string-null?=20= value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20key=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20key=20"=3D"=20value))=0A+=20=20= =20=20=20=20=20=20=20=20(string-append=20"#=20"=20key=20"=20is=20not=20= set"))))=0A+=0A+=20=20(define=20(remove-pair=20pair=20blacklist)=0A+=20=20= =20=20"Turn=20a=20key-value=20PAIR=20into=20'(""=20.=20""),=20if=20its=20= key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20(let*=20((key=20= (first=20pair)))=0A+=20=20=20=20=20=20(if=20(member=20key=20blacklist)=0A= +=20=20=20=20=20=20=20=20=20=20'(""=20.=20"")=0A+=20=20=20=20=20=20=20=20= =20=20pair)))=0A+=0A+=20=20(define=20(remove-config-string=20= config-string=20blacklist)=0A+=20=20=20=20"Remove=20the=20CONFIG-STRING,=20= if=20its=20key=20is=20listed=20in=20BLACKLIST."=0A+=20=20=20=20= (pair->config-string=20(remove-pair=20(config-string->pair=20= config-string)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20blacklist)))=0A= +=0A+=20=20(define*=20(write-lines=20input=20#:key=20(line-modifier=20= identity))=0A+=20=20=20=20"Write=20all=20lines=20from=20the=20INPUT=20= after=20applying=20the=20LINE-MODIFIER=20to=20the=0A+=20= current-output-port."=0A+=20=20=20=20(let=20loop=20((line=20(read-line=20= input)))=0A+=20=20=20=20=20=20(when=20(not=20(eof-object?=20line))=0A+=20= =20=20=20=20=20=20=20(display=20(line-modifier=20line))=0A+=20=20=20=20=20= =20=20=20(newline)=0A+=20=20=20=20=20=20=20=20(loop=20(read-line=20= input)))))=0A+=0A+=20=20(let*=20((modified-defconfig=20(string-append=20= defconfig=20".mod"))=0A+=20=20=20=20=20=20=20=20=20;;=20Split=20the=20= configs=20into=20a=20list=20of=20single=20configuations.=0A+=20=20=20=20=20= =20=20=20=20;;=20To=20minimize=20mistakes,=20we=20support=20a=20string=20= and=20a=20list=20of=20strings,=0A+=20=20=20=20=20=20=20=20=20;;=20each=20= with=20newlines=20to=20separate=20configurations.=0A+=20=20=20=20=20=20=20= =20=20(config-list=20(fold-right=20append=20'()=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(map=20(lambda=20(s)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-split=20s=20#\newline))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(if=20(string?=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(list=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20configs))))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20= key-value=20pairs=20from=20the=20config-list.=0A+=20=20=20=20=20=20=20=20= =20(pairs=20(map=20(lambda=20(config-string)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(config-string->pair=20= config-string))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20config-list))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20a=20= blacklist=20of=20config=20keys=20from=20pairs.=0A+=20=20=20=20=20=20=20=20= =20(blacklist=20(map=20(lambda=20(config-pair)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(first=20= config-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20pairs))=0A+=20=20=20=20=20=20=20=20=20= (remove-config-string=20(cut=20remove-config-string=20<>=20blacklist)))=0A= +=20=20=20=20;;=20Write=20to=20the=20modified-defconfig=20file=20first=20= the=20content=20of=20the=20defconfig=0A+=20=20=20=20;;=20file=20with=20= removed=20lines,=20and=20afterwards=20the=20configs.=0A+=20=20=20=20= (call-with-output-file=20modified-defconfig=0A+=20=20=20=20=20=20(lambda=20= (output)=0A+=20=20=20=20=20=20=20=20(with-output-to-port=20output=0A+=20=20= =20=20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20= =20(call-with-input-file=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input=20#:=20line-modifier=20remove-config-string)))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(call-with-input-string=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-join=20(map=20= pair->config-string=20pairs)=20"\n")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20(input)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(write-lines=20input)))))))=0A+=20=20=20=20;;=20Ensure=20the=20= modified-defconfig=20file=20is=20used.=0A+=20=20=20=20(delete-file=20= defconfig)=0A+=20=20=20=20(rename-file=20modified-defconfig=20= defconfig)))=0A= --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=03-gnu-bootloader-add-u-boot Content-Type: application/octet-stream; name="03-gnu-bootloader-add-u-boot" Content-Transfer-Encoding: 7bit gnu: bootloader: Add U-Boot packages for Raspberry Pi models. From: Stefan * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name' and 'description'. (make-preinstalled-u-boot-package): New function to make minimal packages. (%u-boot-rpi-efi-configs): New helper list with config strings. (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): New helper strings. (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4, u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi, u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages. --- gnu/packages/bootloaders.scm | 172 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 4 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 3bc5600c7c..5121f3a6ea 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -733,17 +733,30 @@ def test_ctrl_c")) also initializes the boards (RAM etc). This package provides its board-independent tools."))) -(define*-public (make-u-boot-package board triplet #:key defconfig configs) +(define*-public (make-u-boot-package board + triplet + #:key + defconfig + configs + name + description) "Returns a u-boot package for BOARD cross-compiled for TRIPLET with the -optional DEFCONFIG file and optional configuration changes from CONFIGS." +optional DEFCONFIG file and optional configuration changes from CONFIGS. +Either NAME, if used, or otherwise BOARD will be part of the package name. +DESCRIPTION will be appended to the package description." (let ((same-arch? (lambda () (string=? (%current-system) (gnu-triplet->nix-system triplet))))) (package (inherit u-boot) (name (string-append "u-boot-" - (string-replace-substring (string-downcase board) - "_" "-"))) + (string-replace-substring + (string-downcase (or name board)) + "_" "-"))) + (description (if description + (string-append (package-description u-boot) + "\n" description) + (package-description u-boot))) (native-inputs `(,@(if (not (same-arch?)) `(("cross-gcc" ,(cross-gcc triplet)) @@ -1071,6 +1084,157 @@ to Novena upstream, does not load u-boot.img from the first partition.")))) `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define*-public (make-preinstalled-u-boot-package board + triplet + #:key + defconfig + configs + name + description + (u-boot-file "u-boot.bin")) + "Returns a package with a single U-BOOT-FILE for BOARD cross-compiled for +TRIPLET with the optional DEFCONFIG file and optional configuration changes +from CONFIGS. Either NAME, if used, or otherwise BOARD will be part of the +package name. DESCRIPTION will be appended to the package description." + (let* ((name-suffix "-complete") + (u-boot-package (make-u-boot-package board + triplet + #:defconfig defconfig + #:configs configs + #:name (string-append + (or name board) + name-suffix) + #:description description))) + (package + (name (string-drop-right (package-name u-boot-package) + (string-length name-suffix))) + (version (package-version u-boot-package)) + (source #f) + (build-system trivial-build-system) + (arguments + `(#:builder + (begin + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink (string-append (assoc-ref %build-inputs "u-boot") + "/libexec/" + ,u-boot-file) + (string-append out "/" ,u-boot-file)))))) + (inputs `(("u-boot" ,u-boot-package))) + (home-page (package-home-page u-boot-package)) + (synopsis (package-synopsis u-boot-package)) + (description (package-description u-boot-package)) + (license (package-license u-boot-package))))) + +(define-public %u-boot-rpi-efi-configs + '("CONFIG_OF_EMBED=" + "CONFIG_OF_BOARD=y" + "CONFIG_BOOTDELAY=0")) + +(define %u-boot-rpi-description-32-bit + "This is a 32-bit build of U-Boot.") + +(define %u-boot-rpi-description-64-bit + "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi +variants.") + +(define %u-boot-rpi-efi-description + "It allows network booting and uses the device-tree from the firmware, +allowing the usage of overlays. It can act as an EFI firmware for the +grub-efi-netboot-removable-bootloader.") + +(define %u-boot-rpi-efi-description-32-bit + (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-0-w + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-2 + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-3 + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-4 + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4" + #:description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-64" + #:description %u-boot-rpi-description-64-bit)) + +(define-public u-boot-rpi-0-w-efi + (make-preinstalled-u-boot-package + "rpi_0_w" + "arm-linux-gnueabihf" + #:name "rpi-0-w-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi + (make-preinstalled-u-boot-package + "rpi" + "arm-linux-gnueabihf" + #:name "rpi-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-2-efi + (make-preinstalled-u-boot-package + "rpi_2" + "arm-linux-gnueabihf" + #:name "rpi-2-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-3-efi + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-4-efi + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4-efi" + #:configs %u-boot-rpi-efi-configs + #:description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-efi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-efi-64" + #:configs %u-boot-rpi-efi-configs + #:description (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-64-bit))) + (define-public vboot-utils (package (name "vboot-utils") --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=04-gnu-linux-new-function-to Content-Type: application/octet-stream; name="04-gnu-linux-new-function-to" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20New=20function=20to=20modify=20the=20configuration=20of=20= a=20Linux=20kernel.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(system->linux-srcarch):=20New=20= function=20to=20return=20the=0Arelevent=20folder=20name=20below=20arch/=20= in=20the=20Linux=20source=20code.=0A(make-linux-libre*)=20= ['set-environment]:=20Splitted=20this=20new=20phase=20out=20of=20and=0A= adding=20it=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20= allow=20a=20replacement=20and=20reuse=20from=20(modify-linux).=0A= (modify-linux):=20New=20function=20to=20make=20a=20customized=20Linux=20= package=20inherited=0Afrom=20another=20Linux=20package,=20which=20will=20= be=20build=20with=20an=20own=20defconfig=20or=0Aconfiguration=20changes.=0A= (make-defconfig):=20Function=20to=20get=20a=20defconfig=20from=20an=20= uri.=0A---=0A=20gnu/packages/linux.scm=20|=20=20130=20= +++++++++++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20= changed,=20127=20insertions(+),=203=20deletions(-)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= f4c1867c5d..d8ff747d20=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-53,6=20+53,7=20@@=0A=20;;;=20Copyright=20= =C2=A9=202021=20B.=20Wilson=20=0A=20;;;=20= Copyright=20=C2=A9=202021=20Ivan=20Gankevich=20=0A=20= ;;;=20Copyright=20=C2=A9=202021=20Olivier=20Dion=20= =0A+;;;=20Copyright=20=C2=A9=202021=20Stefan=20= =0A=20;;;=0A=20;;;=20This=20file=20is=20= part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-166,6=20+167,7=20@@=0A=20=20=20= #:use-module=20(srfi=20srfi-2)=0A=20=20=20#:use-module=20(srfi=20= srfi-26)=0A=20=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs)=0A=20=20=20#:use-module=20(ice-9=20regex))=0A=20=0A=20= (define-public=20(system->linux-architecture=20arch)=0A@@=20-182,6=20= +184,21=20@@=0A=20=20=20=20=20=20=20=20=20=20=20((string-prefix?=20= "riscv"=20arch)=20"riscv")=0A=20=20=20=20=20=20=20=20=20=20=20(else=20= arch))))=0A=20=0A+(define-public=20(system->linux-srcarch=20arch)=0A+=20=20= "Return=20for=20a=20Guix=20system=20ARCH=20name=20the=20SRCARCH=20name,=20= which=20is=20set=20in=20the=0A+toplevel=20Makefile=20of=20Linux=20and=20= denotes=20the=20architecture=20specific=20directory=20name=0A+below=20= arch/=20in=20its=20source=20code.=20=20Some=20few=20architectures=20= share=20a=20common=20folder.=0A+It=20resembles=20the=20definition=20of=20= SRCARCH=20based=20on=20ARCH=20in=20the=20Makefile=20and=20may=0A+be=20= used=20to=20place=20a=20defconfig=20file=20in=20the=20proper=20path."=0A= +=20=20(let=20((linux-arch=20(system->linux-architecture=20arch)))=0A+=20= =20=20=20(match=20linux-arch=0A+=20=20=20=20=20=20("i386"=20=20=20=20= "x86")=0A+=20=20=20=20=20=20("x86_64"=20=20"x86")=0A+=20=20=20=20=20=20= ("sparc32"=20"sparc")=0A+=20=20=20=20=20=20("sparc64"=20"sparc")=0A+=20=20= =20=20=20=20("sh64"=20=20=20=20"sh")=0A+=20=20=20=20=20=20(_=20=20=20=20=20= =20=20=20=20linux-arch))))=0A+=0A=20(define-public=20(system->defconfig=20= system)=0A=20=20=20"Some=20systems=20(notably=20powerpc-linux)=20require=20= a=20special=20target=20for=20kernel=0A=20defconfig.=20=20Return=20the=20= appropriate=20make=20target=20if=20applicable,=20otherwise=20return=0A@@=20= -811,8=20+828,8=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20or=20= #f=20if=20there=20is=20no=20such=20configuration."=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(substitute*=20(find-files=20"."=20= "^Makefile(\\.include)?$")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(("/bin/pwd")=20"pwd"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t))=0A-=20=20=20=20=20=20=20=20=20(replace=20'configure=0A-=20=20=20=20=20= =20=20=20=20=20=20(lambda*=20(#:key=20inputs=20native-inputs=20target=20= #:allow-other-keys)=0A+=20=20=20=20=20=20=20=20=20(add-before=20= 'configure=20'set-environment=0A+=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20target=20#:allow-other-keys)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Avoid=20introducing=20timestamps=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setenv=20"KCONFIG_NOTIMESTAMP"=20"1")=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(setenv=20"KBUILD_BUILD_TIMESTAMP"=20= (getenv=20"SOURCE_DATE_EPOCH"))=0A@@=20-831,7=20+848,9=20@@=20for=20ARCH=20= and=20optionally=20VARIANT,=20or=20#f=20if=20there=20is=20no=20such=20= configuration."=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"EXTRAVERSION"=20,(and=20extra-version=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(string-append=20"-"=20extra-version)))=0A= -=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20#t))=0A+=20=20=20=20=20=20=20= =20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20=20=20=20(lambda*=20= (#:key=20inputs=20native-inputs=20#:allow-other-keys)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(let=20((build=20=20(assoc-ref=20= %standard-phases=20'build))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(config=20(assoc-ref=20(or=20native-inputs=20inputs)=20= "kconfig")))=0A=20=0A@@=20-1163,6=20+1182,111=20@@=20It=20has=20been=20= modified=20to=20remove=20all=20non-free=20binary=20blobs.")=0A=20=20=20=20= =20=20=20(inherit=20base-linux-libre)=0A=20=20=20=20=20=20=20(inputs=20= `(("cpio"=20,cpio)=20,@(package-inputs=20base-linux-libre))))))=0A=20=0A= +=0C=0A+;;;=0A+;;;=20Linux=20kernel=20customization=20functions.=0A+;;;=0A= +=0A+(define*-public=20(modify-linux=20#:key=20name=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(linux=20linux-libre)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= source=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20defconfig=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(configs=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= extra-version)=0A+=20=20"Make=20a=20Linux=20package=20NAME=20as=20a=20= modification=20of=20another=20LINUX=20package.=0A+=0A+If=20NAME=20is=20= not=20given,=20then=20it=20defaults=20to=20the=20same=20name=20as=20the=20= LINUX=20package.=0A+=0A+Unless=20SOURCE=20is=20given=20the=20source=20of=20= LINUX=20is=20used.=0A+=0A+A=20DEFCONFIG=20file=20to=20be=20used=20can=20= be=20given=20as=20a=20package,=20as=20a=20file=20like=20object=0A= +(file-append,=20local-file=20etc.),=20or=20as=20a=20string=20with=20the=20= name=20of=20a=20defconfig=20file=0A+available=20in=20the=20Linux=20= sources.=20=20If=20DEFCONFIG=20is=20not=20given,=20then=20a=20defconfig=0A= +file=20will=20be=20saved=20from=20the=20LINUX=20package=20= configuration.=0A+=0A+Additional=20CONFIGS=20will=20be=20used=20to=20= modify=20the=20given=20or=20saved=20defconfig,=20which=0A+will=20finally=20= be=20used=20to=20build=20Linux.=0A+=0A+CONFIGS=20can=20be=20a=20list=20= of=20strings,=20with=20one=20configuration=20per=20line.=20=20The=20= usual=0A+defconfig=20syntax=20has=20to=20be=20used,=20but=20there=20is=20= a=20special=20extension=20to=20ease=20the=0A+removal=20of=20= configurations.=20=20Comment=20lines=20are=20supported=20as=20well.=0A+=0A= +Here=20is=20an=20explaining=20usage=20example:=0A+=0A+=20=20'(;;=20This=20= string=20defines=20the=20version=20tail=20in=20'uname=20-r'.=0A+=20=20=20= =20\"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\"=0A+=20=20=20=20;;=20This=20= '#=20CONFIG_=E2=80=A6=20is=20not=20set'=20syntax=20has=20to=20match=20= exactly!=0A+=20=20=20=20\"#=20CONFIG_BOOT_CONFIG=20is=20not=20set\"=0A+=20= =20=20=20\"CONFIG_NFS_SWAP=3Dy\"=0A+=20=20=20=20;;=20This=20is=20a=20= multiline=20configuration:=0A+=20=20=20=20\"CONFIG_E1000=3Dy=0A+#=20This=20= is=20a=20comment,=20below=20follow=20two=20special=20removal=20= extensions:=0A+CONFIG_CMDLINE_EXTEND=0A+CONFIG_CMDLINE_FORCE=3D\")=0A+=0A= +A=20string=20of=20configurations=20instead=20of=20a=20list=20of=20= configuration=20strings=20is=20also=0A+possible.=0A+=0A+EXTRA-VERSION=20= can=20be=20a=20string=20overwriting=20the=20EXTRAVERSION=20setting=20of=20= the=20LINUX=0A+package,=20after=20being=20prepended=20by=20a=20hyphen.=20= =20It=20will=20be=20visible=20in=20the=20output=0A+of=20'uname=20-r'=20= behind=20the=20Linux=20version=20numbers."=0A+=20=20(package=0A+=20=20=20= =20(inherit=20linux)=0A+=20=20=20=20(name=20(or=20name=20(package-name=20= linux)))=0A+=20=20=20=20(source=20(or=20source=20(package-source=20= linux)))=0A+=20=20=20=20(arguments=0A+=20=20=20=20=20= (substitute-keyword-arguments=0A+=20=20=20=20=20=20=20=20=20= (package-arguments=20linux)=0A+=20=20=20=20=20=20=20((#:imported-modules=20= imported-modules=20%gnu-build-system-modules)=0A+=20=20=20=20=20=20=20=20= `((guix=20build=20kconfig)=20,@imported-modules))=0A+=20=20=20=20=20=20=20= ((#:modules=20modules)=0A+=20=20=20=20=20=20=20=20`((guix=20build=20= kconfig)=20,@modules))=0A+=20=20=20=20=20=20=20((#:phases=20phases)=0A+=20= =20=20=20=20=20=20=20`(modify-phases=20,phases=0A+=20=20=20=20=20=20=20=20= =20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20#:allow-other-keys=20#:rest=20arguments)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((srcarch=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,(system->linux-srcarch=20(or=20(%current-target-system)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(configs=20(string-append=20"arch/"=20srcarch=20= "/configs/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix_defconfig=20(string-append=20configs=20= "guix_defconfig")))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ,(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((not=20= defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Call=20the=20original=20'configure=20phase.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20= (assoc-ref=20,phases=20'configure)=20arguments)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Save=20a=20defconfig=20= file.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(invoke=20"make"=20"savedefconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20the=20saved=20defconfig=20= to=20the=20proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(rename-file=20"defconfig"=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20((string?=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Use=20another=20existing=20defconfig=20= from=20the=20Linux=20sources.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20`(rename-file=20(string-append=20configs=20,defconfig)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20guix_defconfig))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(else=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Copy=20the=20defconfig=20input=20to=20= the=20proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20'(copy-file=20(assoc-ref=20inputs=20"guix_defconfig")=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(modify-defconfig=20guix_defconfig=20',configs)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20,@(if=20extra-version=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((setenv=20= "EXTRAVERSION"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20,(string-append=20"-"=20= extra-version)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"guix_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#t))))))=0A+=20=20=20=20(native-inputs=0A+=20=20=20=20=20= (append=20(if=20(or=20(not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string?=20defconfig))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20'()=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20The=20defconfig=20should=20be=20a=20package=20= or=20file-like=20object.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20`(("guix_defconfig"=20,defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(package-native-inputs=20linux)))))=0A+=0A+(define-public=20= (make-defconfig=20uri=20sha256-as-base32)=0A+=20=20(origin=20(method=20= url-fetch)=0A+=20=20=20=20=20=20=20=20=20=20(uri=20uri)=0A+=20=20=20=20=20= =20=20=20=20=20(sha256=20(base32=20sha256-as-base32))))=0A=20=0A=20=0C=0A= =20;;;=0A= --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=05-gnu-raspberry-pi-add-defconfig Content-Type: application/octet-stream; name="05-gnu-raspberry-pi-add-defconfig" Content-Transfer-Encoding: quoted-printable gnu:=20raspberry-pi:=20Add=20defconfig=20objects=20to=20build=20= customized=20Linux=20kernels.=0A=0AFrom:=20Stefan=20= =0A=0Agnu/packages/raspberry-pi.scm=20= (make-raspi-defconig):=20New=20function=20to=20make=0Adownloaded=20= defconfig=20objects=20from=20the=20Linux=20repository=20of=20the=20= Raspberry=20Pi=0AFoundation.=0A(%bcm2709-defconfig,=20= %bcm2710-defconfig,=20%bcm2711-defconfig,=0A%bcm2835-defconfig,=20= %bcmrpi-defconfig,=20%bcm2711-defconfig-64,=0A%bcmrpi3-defconfig):=20New=20= variables=20containing=20defconfig=20objects=20to=20build=0ALinux=20= kernels=20customized=20for=20Raspberry=20Pi=20single=20board=20= computers.=0A---=0A=20gnu/packages/raspberry-pi.scm=20|=20=20=2044=20= ++++++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2043=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/gnu/packages/raspberry-pi.scm=20b/gnu/packages/raspberry-pi.scm=0A= index=20bb38b8b218..a2ab300531=20100644=0A---=20= a/gnu/packages/raspberry-pi.scm=0A+++=20b/gnu/packages/raspberry-pi.scm=0A= @@=20-1,5=20+1,6=20@@=0A=20;;;=20GNU=20Guix=20---=20Functional=20package=20= management=20for=20GNU=0A=20;;;=20Copyright=20=C2=A9=202020=20Danny=20= Milosavljevic=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-25,9=20+26,10=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20commencement)=0A=20=20=20= #:use-module=20(gnu=20packages=20cross-base)=0A=20=20=20#:use-module=20= (gnu=20packages=20documentation)=0A+=20=20#:use-module=20(gnu=20packages=20= embedded)=0A=20=20=20#:use-module=20(gnu=20packages=20file)=0A=20=20=20= #:use-module=20(gnu=20packages=20gcc)=0A-=20=20#:use-module=20(gnu=20= packages=20embedded)=0A+=20=20#:use-module=20(gnu=20packages=20linux)=0A=20= =20=20#:use-module=20(guix=20build-system=20gnu)=0A=20=20=20#:use-module=20= (guix=20download)=0A=20=20=20#:use-module=20(guix=20git-download)=0A@@=20= -235,3=20+237,43=20@@=20Raspberry=20Pi.=20=20Note:=20It=20does=20not=20= work=20on=20Raspberry=20Pi=201.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(install-file=20"arm64.bin"=20libexec)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#t))))))))=0A=20=20=20=20=20(supported-systems=20= '("aarch64-linux"))))=0A+=0A+(define=20(make-raspi-defconfig=20arch=20= defconfig=20sha256-as-base32)=0A+=20=20"Make=20for=20the=20architecture=20= ARCH=20a=20file-like=20object=20from=20the=20DEFCONFIG=20file=0A+with=20= the=20hash=20SHA256-AS-BASE32.=20=20This=20object=20can=20be=20used=20as=20= the=20#:defconfig=0A+argument=20of=20the=20function=20(modify-linux)."=0A= +=20=20(make-defconfig=0A+=20=20=20(string-append=0A+=20=20=20=20= "https://raw.githubusercontent.com/raspberrypi/linux/raspberrypi-kernel_1.= 20210430-1/arch/"=0A+=20=20=20=20arch=20"/configs/"=20defconfig)=0A+=20=20= =20sha256-as-base32))=0A+=0A+(define-public=20%bcm2709-defconfig=0A+=20=20= (make-raspi-defconfig=0A+=20=20=20"arm"=20"bcm2709_defconfig"=0A+=20=20=20= "0yvrmid2jakl929d1mv00gidnqbf91ffhj61c9gl75f7km48811c"))=0A+=0A= +(define-public=20%bcm2711-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2711_defconfig"=0A+=20=20=20= "19hb6nwna7sk3b4rn5yjfhldrs3c1lv24q08w4gpa4xzh1byv7jj"))=0A+=0A= +(define-public=20%bcm2835-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2835_defconfig"=0A+=20=20=20= "17dmvabqvxwqn6lgv1x8rfh2wqf1r2xmm10nkdnrgwkmgv8bh2d5"))=0A+=0A= +(define-public=20%bcmrpi-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcmrpi_defconfig"=0A+=20=20=20= "0lcmr6nxdd53m3k8hqb5k6c5b7vbdgmfvcliqyl95snp45rxjjkw"))=0A+=0A= +(define-public=20%bcm2711-defconfig-64=0A+=20=20(make-raspi-defconfig=0A= +=20=20=20"arm64"=20"bcm2711_defconfig"=0A+=20=20=20= "0xf38nczwinr0j8vhsn8nd8h4ysjn77xphg7xnssz04gclb7fndr"))=0A+=0A= +(define-public=20%bcmrpi3-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm64"=20"bcmrpi3_defconfig"=0A+=20=20=20= "01k098snd7kbmhz68j93mj2fwp39c56g9r8rgaw17js5r0w0zbhy"))=0A= --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=06-gnu-raspberry-pi-add-helpers Content-Type: application/octet-stream; name="06-gnu-raspberry-pi-add-helpers" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add helpers for config.txt file generation. From: Stefan * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): New functions. (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt %raspi-u-boot-bootloader-txt): New variables. --- gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index a2ab300531..0707516f72 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -238,6 +238,59 @@ Raspberry Pi. Note: It does not work on Raspberry Pi 1.") #t)))))))) (supported-systems '("aarch64-linux")))) +(define-public (raspi-config-file name content) + "Make a configuration file like config.txt for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (plain-file + name + (if (list? content) + (string-join content "\n" 'suffix) + content))) + +(define-public %raspi-config-txt + ;; A config.txt file to start the ARM cores up in 64-bit mode if necessary + ;; and to include a dtb.txt, bootloader.txt, and a custom.txt, each with + ;; separated configurations for the Raspberry Pi firmware. + (raspi-config-file + "config.txt" + `("# See https://www.raspberrypi.org/documentation/configuration/config-txt/README.md for details." + "" + ,(string-append "arm_64bit=" (if (target-aarch64?) "1" "0")) + "include dtb.txt" + "include bootloader.txt" + "include custom.txt"))) + +(define-public %raspi-bcm27-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; downstream device tree files bcm27*.dtb will be used. + (raspi-config-file + "dtb.txt" + "upstream_kernel=0")) + +(define-public %raspi-bcm28-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; upstream device tree files bcm28*.dtb will be used. + ;; This also implies the use of the dtoverlay=upstream. + (raspi-config-file + "dtb.txt" + "upstream_kernel=1")) + +(define-public %raspi-u-boot-bootloader-txt + ;; A bootloader.txt file to be included by the config.txt to load the + ;; U-Boot bootloader. + (raspi-config-file + "bootloader.txt" + '("dtoverlay=upstream" + "enable_uart=1" + "kernel=u-boot.bin"))) + +(define-public (raspi-custom-txt content) + "Make a custom.txt file for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (raspi-config-file "custom.txt" content)) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=07-gnu-raspberry-pi-new-function Content-Type: application/octet-stream; name="07-gnu-raspberry-pi-new-function" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: New function to make a package with device-tree files. From: Stefan * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to make a package with device-tree files for Raspberry Pi models from the kernel given as argument. --- gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 0707516f72..d808f61ac2 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages file) #:use-module (gnu packages gcc) #:use-module (gnu packages linux) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concatenated with a newline character. Alternatively CONTENT can be a string with the full file content." (raspi-config-file "custom.txt" content)) +(define-public (make-raspi-bcm28-dtbs linux) + "Make a package with the device-tree files for Raspberry Pi models from the +kernel LINUX." + (package + (inherit linux) + (name "raspi-bcm28-dtbs") + (source #f) + (build-system copy-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'unpack)) + #:install-plan + (list (list (string-append (assoc-ref %build-inputs "linux") + "/lib/dtbs/broadcom/") + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) + (inputs `(("linux" ,linux))) + (synopsis "Device-tree files for a Raspberry Pi") + (description + (simple-format #f "The device-tree files for Raspberry Pi models from ~a." + (package-name linux))))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830 Content-Disposition: attachment; filename=08-gnu-raspberry-pi-add-a Content-Type: application/octet-stream; name="08-gnu-raspberry-pi-add-a" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. From: Stefan * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. --- gnu/packages/raspberry-pi.scm | 19 +++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 73 ++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 77 +++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index d808f61ac2..d52a4a72c5 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -312,6 +315,22 @@ kernel LINUX." (simple-format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. + ;; It neither installs firmware nor device-tree files for the Raspberry Pi. + ;; It just assumes them to be existing in boot/efi in the same way that some + ;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + ;; It creates firmware configuration files and a bootloader-chain with U-Boot + ;; to provide an EFI API for the final GRUB bootloader. + ;; It also serves as a blue-print to create an own bootloader-chain with + ;; firmwre and device-tree packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-efi-64) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 0000000000..a1e41e3399 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,73 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 0000000000..7e18f00d86 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,77 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #| It is possible to use a specific defconfig file, + for example the "bcmrpi3_defconfig" with the + variable shown below. Unfortunately the kernel + build from the linux-libre sources with this + defconfig file does not boot. + #:extra-version "gnu-bcmrpi3" + #:defconfig %bcmrpi3-defconfig + |#)) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 --Apple-Mail=_B617970F-0E65-4178-8B28-B9F0969B3830-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 13 08:57:58 2021 Received: (at control) by debbugs.gnu.org; 13 Nov 2021 13:57:58 +0000 Received: from localhost ([127.0.0.1]:46760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mltXZ-0001af-TY for submit@debbugs.gnu.org; Sat, 13 Nov 2021 08:57:58 -0500 Received: from smtpout2.vodafonemail.de ([145.253.239.133]:33014) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mltXW-0001aP-OH for control@debbugs.gnu.org; Sat, 13 Nov 2021 08:57:55 -0500 Received: from smtp.vodafone.de (unknown [10.2.0.35]) by smtpout2.vodafonemail.de (Postfix) with ESMTP id 8A782120A46; Sat, 13 Nov 2021 14:57:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-smtpout-mb-15sep; t=1636811868; bh=7XsSSLR/FevFlC2nGao0puljOdqkjgw47UBKHnaR3iU=; h=From:Subject:Date:Cc:To; b=jk4c9Nzaf4/IquWYFoo6coi0G9c1xXg/5CPH+K7+7CWRYFNlGLxbhkcqAetY3JALe qgQEg2NVKQmlprQjq7v7lIqFfTwGJbrJI/lBK5Lmg49wuxVTeMQtkwbGx5jgENcwdt /YuMEPxH/4whXtzOHx0SwYeD0xInLWUvnr45AX4E= Received: from macbook-pro.kuh-wiese.my-router.de (dslb-088-070-113-047.088.070.pools.vodafone-ip.de [88.70.113.47]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4HrxqJ1lM9z9tMn; Sat, 13 Nov 2021 13:57:47 +0000 (UTC) From: Stefan Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Subject: Adding patch tags Date: Sat, 13 Nov 2021 14:57:33 +0100 Message-Id: To: control@debbugs.gnu.org Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 334 X-purgate-ID: 149169::1636811868-00006A1F-763C90EB/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: control Cc: =?utf-8?Q?Ludovic_Court=C3=A8s?= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) tags 47744 + patch tags 48314 + patch block 47744 by 48314 retitle 48314 [PATCH] Install guix system on Raspberry Pi retitle 47744 [PATCH] nfs-root test is failing quit Hi Ludovic! Just for your information: The nfs-root test is kind of fixed, it was = once blocking some other issue that you linked. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 13 13:06:22 2021 Received: (at 48314) by debbugs.gnu.org; 13 Nov 2021 18:06:22 +0000 Received: from localhost ([127.0.0.1]:48027 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlxPx-0004Pm-PS for submit@debbugs.gnu.org; Sat, 13 Nov 2021 13:06:22 -0500 Received: from cascadia.aikidev.net ([173.255.214.101]:38646) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlxPu-0004PY-2a for 48314@debbugs.gnu.org; Sat, 13 Nov 2021 13:06:20 -0500 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:21:21:0:100e]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 6B3971AC25; Sat, 13 Nov 2021 10:06:11 -0800 (PST) From: Vagrant Cascadian To: Stefan , 48314@debbugs.gnu.org Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi In-Reply-To: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> Date: Sat, 13 Nov 2021 10:05:47 -0800 Message-ID: <87czn4aq2s.fsf@ponder> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2021-10-31, Stefan wrote: > I did a rebase of the patch series to avoid bit-rotting. One patch got obsolete meanwhile. > > This series applies on GIT commit 1a80b8909a521b91d30649a011b0257d0fadc18c. And still applies on master as of 193d7b5b450d2004c26720e488a9cce930542e9e :) Subject: [PATCH 3/8] * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name' and 'description'. ... (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4, u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi, u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages. The u-boot-rpi-0-w and u-boot-rpi variants are ARMv6 boards, and Guix's armhf baseline is ARMv7, so those won't work with guix system. Are there other use-cases for providing u-boot builds for these boards? Upstream provides defconfigs for these variants: armv6 variants (unsupported on guix's armhf, maybe other use-cases?): rpi_0_w rpi armhf-capable variants: rpi_2 rpi_3_32b rpi_4_32b aarch64 variants: rpi_3 rpi_3_b_plus rpi_4 rpi_arm64 (supports rpi 3 and 4 variants?) +(define-public u-boot-rpi-3 + (make-preinstalled-u-boot-package + "rpi_3_32b" + "arm-linux-gnueabihf" + #:name "rpi-3" + #:description %u-boot-rpi-description-32-bit)) I would name this "u-boot-rpi-3-32b" +(define-public u-boot-rpi-4 + (make-preinstalled-u-boot-package + "rpi_4_32b" + "arm-linux-gnueabihf" + #:name "rpi-4" + #:description %u-boot-rpi-description-32-bit)) And this "u-boot-rpi-4-32b". +(define-public u-boot-rpi-64 + (make-preinstalled-u-boot-package + "rpi_arm64" + "aarch64-linux-gnu" + #:name "rpi-64" + #:description %u-boot-rpi-description-64-bit)) And this "u-boot-rpi-arm64". In other words, keep names consistent with the upstream defconfig they are based on. I presume you didn't add the aarch64 rpi_3 and rpi_4 variants because they are supported by rpi_arm64? I think without addressing the rest of the patch series, adding to guix master the following packages could make the remaining diff smaller: u-boot-rpi-2 (rpi_2_defconfig) u-boot-rpi-3-32b (rpi_3_32b_defconfig) u-boot-rpi-4-32b (rpi_4_32b_defconfig) u-boot-rpi-arm64 (rpi_arm64_defconfig) We wouldn't have a relevent installation configuration, but at least it would allow building them and manually copying u-boot.bin to the firmware partition... live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYY/+gAAKCRDcUY/If5cW quCEAP4qWZUmOoFzSzr9IAEciGDq1GtmAkTpByfpGYp9N43UOAEA6qfQUtP/OWCl mY66LgQssmL/BipkXW6FXbQixP3Epwk= =Dw5b -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 13 13:24:19 2021 Received: (at 48314) by debbugs.gnu.org; 13 Nov 2021 18:24:19 +0000 Received: from localhost ([127.0.0.1]:48036 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlxhL-0004sv-LK for submit@debbugs.gnu.org; Sat, 13 Nov 2021 13:24:19 -0500 Received: from cascadia.aikidev.net ([173.255.214.101]:38672) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlxhG-0004sa-Ae for 48314@debbugs.gnu.org; Sat, 13 Nov 2021 13:24:18 -0500 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:21:21:0:100e]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 8A90C1AC25; Sat, 13 Nov 2021 10:24:07 -0800 (PST) From: Vagrant Cascadian To: Stefan , 48314@debbugs.gnu.org Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi In-Reply-To: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> Date: Sat, 13 Nov 2021 10:23:59 -0800 Message-ID: <87a6i7c3sw.fsf@ponder> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2021-10-31, Stefan wrote: ... Subject: [PATCH 3/8] * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name' and 'description'. (make-preinstalled-u-boot-package): New function to make minimal packages. +(define*-public (make-preinstalled-u-boot-package board + triplet + #:key + defconfig + configs + name + description + (u-boot-file "u-boot.bin")) + "Returns a package with a single U-BOOT-FILE for BOARD cross-compiled for +TRIPLET with the optional DEFCONFIG file and optional configuration changes +from CONFIGS. Either NAME, if used, or otherwise BOARD will be part of the +package name. DESCRIPTION will be appended to the package description." u-boot-file appears to be hard-coded; there may be other boards which use a different u-boot artifact. Also, why return a single file, rather than just building a package and then allowing other functions to pick the appropriate file out of the resulting package? I wondered "why does it have to be cross-compiled" but then realized that came from the existing make-u-boot-package function. I've mostly been building u-boot natively these days. :) live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYZACwgAKCRDcUY/If5cW qnWGAP9uooKKUAaUXpv9QlckQptiHVjOe9Htm7L6dNLaqDwRiQEAx0Cy4tB+jrAS bvKHMzVyrqdJvlI1kqKM+5ORgkTV0wM= =RuTm -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 13 13:51:55 2021 Received: (at 48314) by debbugs.gnu.org; 13 Nov 2021 18:51:55 +0000 Received: from localhost ([127.0.0.1]:48070 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mly83-0005dH-JU for submit@debbugs.gnu.org; Sat, 13 Nov 2021 13:51:55 -0500 Received: from cascadia.aikidev.net ([173.255.214.101]:38720) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mly81-0005d5-VT for 48314@debbugs.gnu.org; Sat, 13 Nov 2021 13:51:54 -0500 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:21:21:0:100e]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id A589E1AC25; Sat, 13 Nov 2021 10:51:47 -0800 (PST) From: Vagrant Cascadian To: Stefan , 48314@debbugs.gnu.org Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi In-Reply-To: <87czn4aq2s.fsf@ponder> References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> <87czn4aq2s.fsf@ponder> Date: Sat, 13 Nov 2021 10:51:38 -0800 Message-ID: <875ysvc2it.fsf@ponder> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2021-11-13, Vagrant Cascadian wrote: > Subject: [PATCH 3/8] * gnu/packages/bootloader.scm (make-u-boot-package): Add > keyword parameters 'name' and 'description'. > ... > (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, > u-boot-rpi-4, u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, > u-boot-rpi-2-efi, u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New > packages. ... > +(define-public u-boot-rpi-64 > + (make-preinstalled-u-boot-package > + "rpi_arm64" > + "aarch64-linux-gnu" > + #:name "rpi-64" > + #:description %u-boot-rpi-description-64-bit)) > > And this "u-boot-rpi-arm64". > > In other words, keep names consistent with the upstream defconfig they > are based on. ... > I think without addressing the rest of the patch series, adding to guix > master the following packages could make the remaining diff smaller: > > u-boot-rpi-2 (rpi_2_defconfig) > u-boot-rpi-3-32b (rpi_3_32b_defconfig) > u-boot-rpi-4-32b (rpi_4_32b_defconfig) > u-boot-rpi-arm64 (rpi_arm64_defconfig) Patch that builds, but haven't tested on an actual board (do have rpi2 and rpi3b+ could test sometime): diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 706ddf0207..f5a3fd51e0 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -994,6 +994,18 @@ (define-public u-boot-pinebook-pro-rk3399 `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define-public u-boot-rpi-2 + (make-u-boot-package "rpi_2" "arm-linux-gnueabihf")) + +(define-public u-boot-rpi-3-32b + (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf")) + +(define-public u-boot-rpi-4-32b + (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf")) + +(define-public u-boot-rpi-arm64 + (make-u-boot-package "rpi_arm64" "aarch64-linux-gnu")) + (define-public vboot-utils (package (name "vboot-utils") Which leads me to wonder, why have the name and description argument at all, when you could just inherit and set the name, like done with the boneblack? (define-public u-boot-am335x-boneblack (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf"))) (package (inherit base) (name "u-boot-am335x-boneblack") (description "U-Boot is a bootloader used mostly for ARM boards. It also initializes the boards (RAM etc). ... And of course, thanks for working on this! :) live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYZAJPwAKCRDcUY/If5cW qnxYAP0Z7B/K+KyoxrUExE7pXIkYiRyTF+WD8UKCOGclCukR4gD/bZKdtBpvgjOA D6LTIr2JWJZbDpiSroRJDq5hGDfgWwI= =HhQ2 -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 13 15:21:33 2021 Received: (at 48314) by debbugs.gnu.org; 13 Nov 2021 20:21:33 +0000 Received: from localhost ([127.0.0.1]:48268 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlzWn-0001rU-HL for submit@debbugs.gnu.org; Sat, 13 Nov 2021 15:21:33 -0500 Received: from cascadia.aikidev.net ([173.255.214.101]:38808) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mlzWl-0001rD-CW for 48314@debbugs.gnu.org; Sat, 13 Nov 2021 15:21:32 -0500 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:21:21:0:100e]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id DC6931AC25; Sat, 13 Nov 2021 12:21:24 -0800 (PST) From: Vagrant Cascadian To: Stefan , 48314@debbugs.gnu.org Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi In-Reply-To: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> Date: Sat, 13 Nov 2021 12:21:10 -0800 Message-ID: <87zgq7ajt5.fsf@ponder> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2021-10-31, Stefan wrote: > +(define-public %u-boot-rpi-efi-configs > + '("CONFIG_OF_EMBED=" > + "CONFIG_OF_BOARD=y" > + "CONFIG_BOOTDELAY=0")) This is surely a matter of opinion, but CONFIG_BOOTDELAY=0 is kind of nasty; it makes it nearly impossible to debug from a u-boot prompt if needed. The default is probably "2" ... long enough to actually interrupt it, but short enough that it shouldn't cause huge delays in the boot process... I know grub-efi will add it's own delay, so in a working environment, this just seems like an additional two seconds, but u-boot's EFI implementation is changing often enough that I wouldn't be surprised if you need to occasionally debug something. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYZAePQAKCRDcUY/If5cW qsx8AQCVOpicppWo+OHD/jlMDlBJ/27wMT3mFNLksdYI75+iUQD/VHPEdzfJpsv6 9cW4FCgwCuRy5dtkOqh7migzIkd8XAA= =UWBU -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 17 09:00:39 2021 Received: (at 48314) by debbugs.gnu.org; 17 Nov 2021 14:00:39 +0000 Received: from localhost ([127.0.0.1]:60465 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mnLUM-0001oP-SP for submit@debbugs.gnu.org; Wed, 17 Nov 2021 09:00:39 -0500 Received: from mail-40131.protonmail.ch ([185.70.40.131]:45110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mnLUK-0001o8-Bf for 48314@debbugs.gnu.org; Wed, 17 Nov 2021 09:00:37 -0500 Date: Wed, 17 Nov 2021 14:00:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1637157624; bh=+1DVFYonn5b0c1cC896cpWoPHJoO8G0wGwk4iXUr1Jw=; h=Date:To:From:Reply-To:Subject:From; b=n9SnDMedjF4TNnC43xPhJqX/MOeg4enkasig+0zNYHbtEr9rJJHdnqlJRBrhgRBHs oMHU+LP+ZXsCHLj1LHpN39v2lHyomPW0pco8lznKepCdBAl0KssgHKoKodaB5PdSCW Bn9o5JyehqYjzjHk+OYPP0f9vwp3eLGwgoLbqE2g= To: "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> From: phodina Subject: Install guix system on Raspberry Pi Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_HfDmXki0BJpRSro8yOfiB45iVY6BSkPBPuYxeHwxtM" X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_HfDmXki0BJpRSro8yOfiB45iVY6BSkPBPuYxeHwxtM Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Stefan, I've attempted to cross compile the system on x86_64 machine and I must rep= ort here are still several issue. - Firstly it has to be attempted off the branch core-updates as there is th= e latest packaged meson build system which allows cross compilation. guix system: error: gnu/packages/glib.scm:172:2: glib@2.62.6: build system = `meson' does not support cross builds Note that a minor issue happens when applying your patches on top of core-u= pdates is patch-04 failing due to collision in the header with your email a= ddress. - Secondly there are some packages that need to be patched. See the attache= d file. - Thirdly there is some issue in the optional test cases in the package lso= f which fail if executed on btrfs (unfortunately that's my case so I disabl= ed them, just the optional part). If I apply all the changes I can build the system. - However, that brings me to the last issue. There is a package efivar whic= h does not build. The issue there is described here [1]. Then again I haven't actually ran the system on Raspberry Pi itself. I'll a= ttempt to setup Debian and build it natively as you suggested. Kind regards Petr PS: Sorry Stefan for the late answer [1]: https://github.com/rhboot/efivar/issues/186 --b1_HfDmXki0BJpRSro8yOfiB45iVY6BSkPBPuYxeHwxtM Content-Type: text/x-patch; name=0001-Fixes-to-cross-compile-system-for-aarch64.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-Fixes-to-cross-compile-system-for-aarch64.patch RnJvbSA0OGNjZGUwYjEzYTQ3MTA0MGVjY2Q4N2U0MDlhZTBjZmUyOWZiYzc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogVHVlLCAxNiBOb3YgMjAyMSAxNDoxNjoxNiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIEZp eGVzIHRvIGNyb3NzIGNvbXBpbGUgc3lzdGVtIGZvciBhYXJjaDY0LgoKCmRpZmYgLS1naXQgYS9n bnUvcGFja2FnZXMvY2VydHMuc2NtIGIvZ251L3BhY2thZ2VzL2NlcnRzLnNjbQppbmRleCAzOWMz ZWJkMTI4Li4zMTFkNWQ0OTc0IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvY2VydHMuc2NtCisr KyBiL2dudS9wYWNrYWdlcy9jZXJ0cy5zY20KQEAgLTE1OCw3ICsxNTgsNyBAQCB0aGF0IHdhcyBv cmlnaW5hbGx5IGNvbnRyaWJ1dGVkIHRvIERlYmlhbi4iKQogICAgICAgICAgICAgICAgICcoc2V0 LXBhdGhzIGluc3RhbGwtbG9jYWxlIHVucGFjaykpCiAgICAgICAgICAoYWRkLWFmdGVyICd1bnBh Y2sgJ2luc3RhbGwKICAgICAgICAgICAgKGxhbWJkYSBfCi0gICAgICAgICAgICAgKGxldCAoKGNl cnRzZGlyIChzdHJpbmctYXBwZW5kICVvdXRwdXQgIi9ldGMvc3NsL2NlcnRzLyIpKSkKKyAgICAg ICAgICAgICAobGV0ICgoY2VydHNkaXIgKHN0cmluZy1hcHBlbmQgKGFzc29jLXJlZiAlb3V0cHV0 cyAib3V0IikgIi9ldGMvc3NsL2NlcnRzLyIpKSkKICAgICAgICAgICAgICAgICh3aXRoLWRpcmVj dG9yeS1leGN1cnNpb24gIm5zcy9saWIvY2tmdy9idWlsdGlucy8iCiAgICAgICAgICAgICAgICAg ICh1bmxlc3MgKGZpbGUtZXhpc3RzPyAiYmxhY2tsaXN0LnR4dCIpCiAgICAgICAgICAgICAgICAg ICAgKGNhbGwtd2l0aC1vdXRwdXQtZmlsZSAiYmxhY2tsaXN0LnR4dCIgKGNvbnN0ICN0KSkpCkBA IC0yMDYsNyArMjA2LDcgQEAgdGFrZW4gZnJvbSB0aGUgTlNTIHBhY2thZ2UgYW5kIHRodXMgdWx0 aW1hdGVseSBmcm9tIHRoZSBNb3ppbGxhIHByb2plY3QuIikKIAogICAgICAgICAgICA7OyBDcmVh dGUgaGFzaCBzeW1saW5rcyBzdWl0YWJsZSBmb3IgT3BlblNTTCAoJ1NTTF9DRVJUX0RJUicgYW5k CiAgICAgICAgICAgIDs7IHNpbWlsYXIuKQotICAgICAgICAgICAoY2hkaXIgKHN0cmluZy1hcHBl bmQgJW91dHB1dCAiL2V0Yy9zc2wvY2VydHMiKSkKKyAgICAgICAgICAgKGNoZGlyIChzdHJpbmct YXBwZW5kIChhc3NvYy1yZWYgJW91dHB1dHMgIm91dCIpICIvZXRjL3NzbC9jZXJ0cyIpKQogICAg ICAgICAgICAoaW52b2tlIChzdHJpbmctYXBwZW5kIHBlcmwgIi9iaW4vcGVybCIpCiAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgb3BlbnNzbCAiL2Jpbi9jX3JlaGFzaCIpCiAgICAg ICAgICAgICAgICAgICAgIi4iKSkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kaXNrLnNj bSBiL2dudS9wYWNrYWdlcy9kaXNrLnNjbQppbmRleCA3ZDZmMzgxMWRkLi5mZTMwZjBjMDhjIDEw MDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZGlzay5zY20KKysrIGIvZ251L3BhY2thZ2VzL2Rpc2su c2NtCkBAIC00NDcsNyArNDQ3LDcgQEAgdG8gcmVjb3ZlciBkYXRhIG1vcmUgZWZmaWNpZW50bHkg Ynkgb25seSByZWFkaW5nIHRoZSBuZWNlc3NhcnkgYmxvY2tzLiIpCiAgICAgKGJ1aWxkLXN5c3Rl bSBnbnUtYnVpbGQtc3lzdGVtKQogICAgIChhcmd1bWVudHMKICAgICAgYCgjOmNvbmZpZ3VyZS1m bGFncyAobGlzdCAiLS1lbmFibGUtY29tcGF0LXN5bWxpbmtzIikKLSAgICAgICAjOm1ha2UtZmxh Z3MgKGxpc3QgKHN0cmluZy1hcHBlbmQgIlBSRUZJWD0iICVvdXRwdXQpCisgICAgICAgIzptYWtl LWZsYWdzIChsaXN0IChzdHJpbmctYXBwZW5kICJQUkVGSVg9IiAoYXNzb2MtcmVmICVvdXRwdXRz ICJvdXQiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNDPWdjYyIpKSkKICAgICAobmF0 aXZlLWlucHV0cwogICAgICBgKCgiYXV0b2NvbmYiICxhdXRvY29uZikKZGlmZiAtLWdpdCBhL2du dS9wYWNrYWdlcy9saW51eC5zY20gYi9nbnUvcGFja2FnZXMvbGludXguc2NtCmluZGV4IGY4ZGI3 ODE0NDYuLjU5MTA2NDdlN2EgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9saW51eC5zY20KKysr IGIvZ251L3BhY2thZ2VzL2xpbnV4LnNjbQpAQCAtMjg1MSw3ICsyODUxLDcgQEAgZXh0ZXJuYWwg cmF0ZSBjb252ZXJzaW9uLiIpCiAgICAgKGFyZ3VtZW50cwogICAgICAnKCM6dGVzdHM/ICNmICAg ICAgIDsgbm8gdGVzdCBzdWl0ZQogICAgICAgICM6Y29uZmlndXJlLWZsYWdzIDsgYWRkICRsaWJk aXIgdG8gdGhlIFJVTlBBVEggb2YgZXhlY3V0YWJsZXMKLSAgICAgICAobGlzdCAoc3RyaW5nLWFw cGVuZCAiTERGTEFHUz0tV2wsLXJwYXRoPSIgJW91dHB1dCAiL2xpYiIpKSkpCisgICAgICAgKGxp c3QgKHN0cmluZy1hcHBlbmQgIkxERkxBR1M9LVdsLC1ycGF0aD0iIChhc3NvYy1yZWYgJW91dHB1 dHMgIm91dCIpICIvbGliIikpKSkKICAgICAoaG9tZS1wYWdlICJodHRwczovL3d3dy5uZXRmaWx0 ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2luZGV4Lmh0bWwiKQogICAgIChzeW5vcHNpcyAiUHJv Z3JhbXMgdG8gY29uZmlndXJlIExpbnV4IElQIHBhY2tldCBmaWx0ZXJpbmcgcnVsZXMiKQogICAg IChkZXNjcmlwdGlvbgpAQCAtNDMyMyw5ICs0MzIzLDkgQEAgZG0tdGhpbiwgZG0tY2FjaGUgYW5k IGRtLWVyYSBkZXZpY2UtbWFwcGVyIHRhcmdldHMuIikKICAgICAoYnVpbGQtc3lzdGVtIGdudS1i dWlsZC1zeXN0ZW0pCiAgICAgKGFyZ3VtZW50cwogICAgICBgKCM6bWFrZS1mbGFncwotICAgICAg IChsaXN0IChzdHJpbmctYXBwZW5kICJQUkVGSVg9IiAlb3V0cHV0KQotICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kICJJTlNUQUxMX01BTj0iICVvdXRwdXQgIi9zaGFyZS9tYW4iKQotICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kICJMREZMQUdTPS1XbCwtcnBhdGg9IiAlb3V0cHV0ICIvbGli IikKKyAgICAgICAobGlzdCAoc3RyaW5nLWFwcGVuZCAiUFJFRklYPSIgKGFzc29jLXJlZiAlb3V0 cHV0cyAib3V0IikpCisgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIklOU1RBTExfTUFOPSIg KGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikgIi9zaGFyZS9tYW4iKQorICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kICJMREZMQUdTPS1XbCwtcnBhdGg9IiAoYXNzb2MtcmVmICVvdXRwdXRzICJv dXQiKSAiL2xpYiIpCiAgICAgICAgICAgICAgIkJVSUxEX1NUQVRJQz0iKQogICAgICAgICM6cGhh c2VzCiAgICAgICAgKG1vZGlmeS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcwpAQCAtNTM0Myw3ICs1 MzQzLDcgQEAgTGludXggRGV2aWNlIE1hcHBlciBtdWx0aXBhdGhpbmcgZHJpdmVyOgogICAgIChh cmd1bWVudHMKICAgICAgYCgjOm1ha2UtZmxhZ3MKICAgICAgICAobGV0ICgodGFyZ2V0ICwoJWN1 cnJlbnQtdGFyZ2V0LXN5c3RlbSkpKQotICAgICAgICAgKGxpc3QgKHN0cmluZy1hcHBlbmQgInBy ZWZpeD0iICVvdXRwdXQpCisgICAgICAgICAobGlzdCAoc3RyaW5nLWFwcGVuZCAicHJlZml4PSIg KGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikpCiAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZAogICAgICAgICAgICAgICAgICJDQz0iIChpZiB0YXJnZXQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1hcHBlbmQgKGFzc29jLXJlZiAlYnVpbGQtaW5wdXRzICJjcm9zcy1nY2Mi KQpAQCAtNjc5MSwxMCArNjc5MSwxMiBAQCB1bmRlciBPcGVuR0wgZ3JhcGhpY3Mgd29ya2xvYWRz LiIpCiAgICAgKGFyZ3VtZW50cwogICAgICBgKDs7IFRlc3RzIHJlcXVpcmUgYSBVRUZJIHN5c3Rl bSBhbmQgaXMgbm90IGRldGVjdGVkIGluIHRoZSBjaHJvb3QuCiAgICAgICAgIzp0ZXN0cz8gI2YK LSAgICAgICAjOm1ha2UtZmxhZ3MgKGxpc3QgKHN0cmluZy1hcHBlbmQgInByZWZpeD0iICVvdXRw dXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJsaWJkaXI9IiAl b3V0cHV0ICIvbGliIikKKyAgICAgICAjOm1ha2UtZmxhZ3MgKGxpc3QgKHN0cmluZy1hcHBlbmQg InByZWZpeD0iIChhc3NvYy1yZWYgJW91dHB1dHMKKwkgICAib3V0IikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJsaWJkaXI9IiAoYXNzb2MtcmVmICVvdXRwdXRz ICJvdXQiKSAiL2xpYiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k ICJDQ19GT1JfQlVJTEQ9IiAsKGNjLWZvci10YXJnZXQpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCAiTERGTEFHUz0tV2wsLXJwYXRoPSIgJW91dHB1dCAiL2xpYiIp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiTERGTEFHUz0tV2ws LXJwYXRoPSIgKGFzc29jLXJlZgorCQkJCQkJICAlb3V0cHV0cyAib3V0IikgIi9saWIiKSkKICAg ICAgICAjOnBoYXNlcwogICAgICAgIChtb2RpZnktcGhhc2VzICVzdGFuZGFyZC1waGFzZXMKICAg ICAgICAgIChkZWxldGUgJ2NvbmZpZ3VyZSkpKSkKQEAgLTY4MjUsOCArNjgyNyw4IEBAIGludGVy ZmFjZSB0byB0aGUgdmFyaWFibGUgZmFjaWxpdHkgb2YgVUVGSSBib290IGZpcm13YXJlLiIpCiAg ICAgKGJ1aWxkLXN5c3RlbSBnbnUtYnVpbGQtc3lzdGVtKQogICAgIChhcmd1bWVudHMKICAgICAg YCgjOnRlc3RzPyAjZiA7bm8gdGVzdHMKLSAgICAgICAjOm1ha2UtZmxhZ3MgKGxpc3QgKHN0cmlu Zy1hcHBlbmQgInByZWZpeD0iICVvdXRwdXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kICJsaWJkaXI9IiAlb3V0cHV0ICIvbGliIikKKyAgICAgICAjOm1ha2UtZmxh Z3MgKGxpc3QgKHN0cmluZy1hcHBlbmQgInByZWZpeD0iIChhc3NvYy1yZWYgJW91dHB1dHMgIm91 dCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAibGliZGlyPSIg KGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikgIi9saWIiKQogICAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBFRklESVIgZGVub3RlcyBhIHN1YmRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgRUZJIFN5c3RlbSBQYXJ0aXRpb24gd2hlcmUgdGhl IGxvYWRlciB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGluc3RhbGxlZCAo a25vd24gYXMgT1NfVkVORE9SIGluIHRoZSBjb2RlKS4KZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdl cy9sc29mLnNjbSBiL2dudS9wYWNrYWdlcy9sc29mLnNjbQppbmRleCBiMzE3OTAyZWU3Li41MTlm N2YxNWIyIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvbHNvZi5zY20KKysrIGIvZ251L3BhY2th Z2VzL2xzb2Yuc2NtCkBAIC05MCw3ICs5MCwxMCBAQAogICAgICAgICAgICAgICAgIChpbnZva2Ug Ii4vQWRkMlRlc3REQiIpCiAKICAgICAgICAgICAgICAgICA7OyBUaGUg4oCYc3RhbmRhcmTigJkg dGVzdHMgc3VnZ2VzdCBydW5uaW5nIOKAmG9wdGlvbmFs4oCZIG9uZXMgYXMgd2VsbC4KLSAgICAg ICAgICAgICAgICAoaW52b2tlICJtYWtlIiAic3RhbmRhcmQiICJvcHRpb25hbCIpKSkKKwkJCQk7 OyBvcHRpb25hbCB0ZXN0IGZhaWwgb24gQlRSRlMKKwkJCQk7OyBodHRwczovL3d3dy5zcGluaWNz Lm5ldC9saXN0cy9saW51eC1idHJmcy9tc2cwOTA0NC5odG1sCisJCQkJOzsgaHR0cHM6Ly9naXRo dWJtZW1vcnkuY29tL3JlcG8vbHNvZi1vcmcvbHNvZi9pc3N1ZXMvMTUyP3BhZ2U9MgorICAgICAg ICAgICAgICAgIChpbnZva2UgIm1ha2UiICJzdGFuZGFyZCIgKSkpOyJvcHRpb25hbCIpKSkKICAg ICAgICAgICAgICN0KSkKICAgICAgICAgKHJlcGxhY2UgJ2luc3RhbGwKICAgICAgICAgICAobGFt YmRhKiAoIzprZXkgb3V0cHV0cyAjOmFsbG93LW90aGVyLWtleXMpCmRpZmYgLS1naXQgYS9nbnUv cGFja2FnZXMvbWFuLnNjbSBiL2dudS9wYWNrYWdlcy9tYW4uc2NtCmluZGV4IGI0NDMxZTViMDgu LmFjNDkyMGQ4MzYgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9tYW4uc2NtCisrKyBiL2dudS9w YWNrYWdlcy9tYW4uc2NtCkBAIC0xODMsOSArMTgzLDkgQEAgYSBmbGV4aWJsZSBhbmQgY29udmVu aWVudCB3YXkuIikKICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0td2l0 aC1jb2w9IiB1dGlsICIvYmluL2NvbCIpCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IFRoZSBk ZWZhdWx0IHN5c3RlbWQgZGlyZWN0b3JpZXMgaWdub3JlIC0tcHJlZml4LgogICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJW91dHB1dCAiL2xpYi9zeXN0 ZW1kL3N5c3RlbSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhc3Nv Yy1yZWYgJW91dHB1dHMgIm91dCIpICIvbGliL3N5c3RlbWQvc3lzdGVtIikKICAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0td2l0aC1zeXN0ZW1kdG1wZmlsZXNkaXI9Igot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlb3V0cHV0ICIvbGliL3RtcGZp bGVzLmQiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29jLXJl ZiAlb3V0cHV0cyAib3V0IikgIi9saWIvdG1wZmlsZXMuZCIpKQogICAgICAgICAgICAgICAgICAo bWFwIChsYW1iZGEgKHByb2cpCiAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZCAiLS13aXRoLSIgcHJvZyAiPSIgZ3JvZmYtbWluaW1hbAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi9iaW4vIiBwcm9nKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdl cy9udHAuc2NtIGIvZ251L3BhY2thZ2VzL250cC5zY20KaW5kZXggNTViOWE3M2IyMi4uMGQ4YzQw OWI2ZSAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL250cC5zY20KKysrIGIvZ251L3BhY2thZ2Vz L250cC5zY20KQEAgLTE1OSw3ICsxNTksOCBAQCB0aW1lLXN0YW1waW5nIG9yIHJlZmVyZW5jZSBj bG9jaywgc3ViLW1pY3Jvc2Vjb25kIGFjY3VyYWN5IGlzIHBvc3NpYmxlLiIpCiAgICAgICAgICAg ICBgKCgibGliY2FwIiAsbGliY2FwKSkKICAgICAgICAgICAgICcoKSkpKQogICAgKGFyZ3VtZW50 cwotICAgIGAoIzpwaGFzZXMKKyAgICBgKCM6Y29uZmlndXJlLWZsYWdzIChsaXN0ICItLXdpdGgt eWllbGRpbmctc2VsZWN0PXllcyIpCisJICAjOnBoYXNlcwogICAgICAgKG1vZGlmeS1waGFzZXMg JXN0YW5kYXJkLXBoYXNlcwogICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2FibGUtbmV0 d29yay10ZXN0CiAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSBfCi0tIAoyLjMzLjEKCg== --b1_HfDmXki0BJpRSro8yOfiB45iVY6BSkPBPuYxeHwxtM-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 03:38:39 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 07:38:39 +0000 Received: from localhost ([127.0.0.1]:54925 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neu3r-0003bT-3k for submit@debbugs.gnu.org; Thu, 14 Apr 2022 03:38:39 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:45775) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neu3p-0003b2-Qo for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 03:38:38 -0400 Date: Thu, 14 Apr 2022 07:38:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649921907; bh=qvhYsY7XyBJe6gBD2UNvsXfB6eU7kV1bcx2pjv5W+zs=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID; b=a2rLcdLw7DM7DAzFbvyT1EePO+0VhVljtUxWC901T4QJZjNJgYZ47gmXWXAq4rv6O 5FvDRTR7ZMtdxo101+1Hp81AGnhyka0EvGNXgPoXbHKndM3OedqDhPVjypqQpU1tVI U98K60+lLf0lsdKIBMS/Q1tGDOdH5loAOtw+u6tJvz+BQEoXKYnkSVOyagqEuqkV5x ZPhVQOshi/v72fMta25u/zv+BZCN0oFJ/fTUlY7bZG4r+1MnqDG95ivQKXnNvEOziM 7wpdKLZ+eKvIRXu78IllaICt7KV4KW3nTsaWWNYn//jXP7KfmsavYR/857BUlQPJHt Fe+ZazxHZCd4g== To: "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> From: phodina Subject: [PATCH v3] Install guix system on Raspberry Pi Message-ID: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU" X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , =?utf-8?Q?Ludovic_Court=C3=A8s?= , "dannym@scratchpost.org" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: multipart/alternative; boundary="b2_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU" --b2_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGksCgpJJ3ZlIHJlYmFzZWQgdGhlIHBhdGNoZXMgdG8gbGF0ZXN0IG1hc3RlciBhbmQgZml4ZWQg c29tZSBjb25mbGljdHMuCgpIb3dldmVyLCBJJ20gdW5hYmxlIHRvIGJ1aWxkIHRoZSBzeXN0ZW0g b24gbXkgUGluZWJvb2sgKGFhcmNoNjQgZm9yIG5hdGl2ZSBidWlsZCkuCgouL3ByZS1pbnN0LWVu diBndWl4IHN5c3RlbSBidWlsZCBnbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC50 bXBsCnN1YnN0aXR1dGU6IHVwZGF0aW5nIHN1YnN0aXR1dGVzIGZyb20gJ2h0dHBzOi8vY2kuZ3Vp eC5nbnUub3JnJy4uLnN1YnN0aXR1dGU6IHVwZGF0aW5nIHN1YnN0aXR1dGVzIGZyb20gJ2h0dHBz Oi8vY2kuZ3VpeC5nbnUub3JnJy4uLiAxMDAuMCUKc3Vic3RpdHV0ZTogdXBkYXRpbmcgc3Vic3Rp dHV0ZXMgZnJvbSAnaHR0cHM6Ly9ib3JkZWF1eC5ndWl4LmdudS5vc3Vic3RpdHV0ZTogdXBkYXRp bmcgc3Vic3RpdHV0ZXMgZnJvbSAnaHR0cHM6Ly9ib3JkZWF1eC5ndWl4LmdudS5vcmcnLi4uIDEw MC4wJQpUaGUgZm9sbG93aW5nIGRlcml2YXRpb24gd2lsbCBiZSBidWlsdDoKL2dudS9zdG9yZS9w NTBpNGxrOGFqY2dyZ3o4bTExdnFpZnZoNGdnaW4ydy1saW51eC1saWJyZS1hcm02NC1nZW5lcmlj LTUuMTYuMTkuZHJ2CmJ1aWxkaW5nIC9nbnUvc3RvcmUvcDUwaTRsazhhamNncmd6OG0xMXZxaWZ2 aDRnZ2luMnctbGludXgtbGlicmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydi4uLgppY2UtOS9y ZWFkLnNjbToxMjY6NDogSW4gcHJvY2VkdXJlIHJlYWQtZXhwcio6Ci9nbnUvc3RvcmUvOWd4Z2hh NnIwYWI1ZzQ0bW5iM3JneWprcmhjNzA5cnEtbGludXgtbGlicmUtYXJtNjQtZ2VuZXJpYy01LjE2 LjE5LWJ1aWxkZXI6MTozMjkwOiBVbmtub3duICMgb2JqZWN0OiAiIzwiCmJ1aWxkZXIgZm9yIGAv Z251L3N0b3JlL3A1MGk0bGs4YWpjZ3JnejhtMTF2cWlmdmg0Z2dpbjJ3LWxpbnV4LWxpYnJlLWFy bTY0LWdlbmVyaWMtNS4xNi4xOS5kcnYnIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxCmJ1aWxkIG9m IC9nbnUvc3RvcmUvcDUwaTRsazhhamNncmd6OG0xMXZxaWZ2aDRnZ2luMnctbGludXgtbGlicmUt YXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydiBmYWlsZWQKVmlldyBidWlsZCBsb2cgYXQgJy92YXIv bG9nL2d1aXgvZHJ2cy9wNS8waTRsazhhamNncmd6OG0xMXZxaWZ2aDRnZ2luMnctbGludXgtbGli cmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydi5neicuZ3VpeCBzeXN0ZW06IGVycm9yOiBidWls ZCBvZiBgL2dudS9zdG9yZS9wNTBpNGxrOGFqY2dyZ3o4bTExdnFpZnZoNGdnaW4ydy1saW51eC1s aWJyZS1hcm02NC1nZW5lcmljLTUuMTYuMTkuZHJ2JyBmYWlsZWQKClVuZm9ydHVuYXRlbHkgdGhl IGJ1aWxkIGxvZyBpcyBub3QgaGVscGZ1bCB1bmNvdmVyaW5nIHRoZSBjYXVzZSAoYXQgbGVhc3Qg dG8gbWUpLgoKSSd2ZSBhbHNvIGF0dGVtcHRlZCB0byBjcm9zcy1jb21waWxlIHRoZSBzeXN0ZW0g KGZyb20geDg2XzY0KSBidXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhY2thZ2UgdGhhdCBjYW4n dCBiZSBidWlsZCAtIGd1aWxlLWZpYmVycy0xLjEuMC4gSSd2ZSBhdHRhY2hlZCB0aGUgYnVpbGQg bG9nIGFzIHdlbGwuCgpLaW5kIHJlZ2FyZHMsClBldHI= --b2_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsOyBmb250LXNpemU6IDE0cHg7Ij5IaSw8YnI+ PGJyPkkndmUgcmViYXNlZCB0aGUgcGF0Y2hlcyB0byBsYXRlc3QgbWFzdGVyIGFuZCBmaXhlZCBz b21lIGNvbmZsaWN0cy48YnI+PGJyPkhvd2V2ZXIsIEknbSB1bmFibGUgdG8gYnVpbGQgdGhlIHN5 c3RlbSBvbiBteSBQaW5lYm9vayAoYWFyY2g2NCBmb3IgbmF0aXZlIGJ1aWxkKS48YnI+PGJyPjxz cGFuPi4vcHJlLWluc3QtZW52IGd1aXggc3lzdGVtIGJ1aWxkIGdudS9zeXN0ZW0vZXhhbXBsZXMv cmFzcGJlcnJ5LXBpLTY0LnRtcGw8L3NwYW4+PGRpdj48c3Bhbj5zdWJzdGl0dXRlOiB1cGRhdGlu ZyBzdWJzdGl0dXRlcyBmcm9tICc8YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5v Zm9sbG93IG5vb3BlbmVyIiBocmVmPSJodHRwczovL2NpLmd1aXguZ251Lm9yZyI+aHR0cHM6Ly9j aS5ndWl4LmdudS5vcmc8L2E+Jy4uLnN1YnN0aXR1dGU6IHVwZGF0aW5nIHN1YnN0aXR1dGVzIGZy b20gJzxhIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIi IGhyZWY9Imh0dHBzOi8vY2kuZ3VpeC5nbnUub3JnIj5odHRwczovL2NpLmd1aXguZ251Lm9yZzwv YT4nLi4uIDEwMC4wJTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPnN1YnN0aXR1dGU6IHVwZGF0aW5n IHN1YnN0aXR1dGVzIGZyb20gJzxhIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9m b2xsb3cgbm9vcGVuZXIiIGhyZWY9Imh0dHBzOi8vYm9yZGVhdXguZ3VpeC5nbnUub3N1YnN0aXR1 dGUiPmh0dHBzOi8vYm9yZGVhdXguZ3VpeC5nbnUub3N1YnN0aXR1dGU8L2E+OiB1cGRhdGluZyBz dWJzdGl0dXRlcyBmcm9tICc8YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5vZm9s bG93IG5vb3BlbmVyIiBocmVmPSJodHRwczovL2JvcmRlYXV4Lmd1aXguZ251Lm9yZyI+aHR0cHM6 Ly9ib3JkZWF1eC5ndWl4LmdudS5vcmc8L2E+Jy4uLiAxMDAuMCU8L3NwYW4+PC9kaXY+PGRpdj48 c3Bhbj5UaGUgZm9sbG93aW5nIGRlcml2YXRpb24gd2lsbCBiZSBidWlsdDo8L3NwYW4+PC9kaXY+ PGRpdj48c3Bhbj4mbmJzcDsgL2dudS9zdG9yZS9wNTBpNGxrOGFqY2dyZ3o4bTExdnFpZnZoNGdn aW4ydy1saW51eC1saWJyZS1hcm02NC1nZW5lcmljLTUuMTYuMTkuZHJ2PC9zcGFuPjwvZGl2Pjxk aXY+PHNwYW4+YnVpbGRpbmcgL2dudS9zdG9yZS9wNTBpNGxrOGFqY2dyZ3o4bTExdnFpZnZoNGdn aW4ydy1saW51eC1saWJyZS1hcm02NC1nZW5lcmljLTUuMTYuMTkuZHJ2Li4uPC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4+aWNlLTkvcmVhZC5zY206MTI2OjQ6IEluIHByb2NlZHVyZSByZWFkLWV4cHIq Ojwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPi9nbnUvc3RvcmUvOWd4Z2hhNnIwYWI1ZzQ0bW5iM3Jn eWprcmhjNzA5cnEtbGludXgtbGlicmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LWJ1aWxkZXI6MToz MjkwOiBVbmtub3duICMgb2JqZWN0OiAiIyZsdDsiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+YnVp bGRlciBmb3IgYC9nbnUvc3RvcmUvcDUwaTRsazhhamNncmd6OG0xMXZxaWZ2aDRnZ2luMnctbGlu dXgtbGlicmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydicgZmFpbGVkIHdpdGggZXhpdCBjb2Rl IDE8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5idWlsZCBvZiAvZ251L3N0b3JlL3A1MGk0bGs4YWpj Z3JnejhtMTF2cWlmdmg0Z2dpbjJ3LWxpbnV4LWxpYnJlLWFybTY0LWdlbmVyaWMtNS4xNi4xOS5k cnYgZmFpbGVkPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+VmlldyBidWlsZCBsb2cgYXQgJy92YXIv bG9nL2d1aXgvZHJ2cy9wNS8waTRsazhhamNncmd6OG0xMXZxaWZ2aDRnZ2luMnctbGludXgtbGli cmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydi5neicuPC9zcGFuPjwvZGl2PjxzcGFuPmd1aXgg c3lzdGVtOiBlcnJvcjogYnVpbGQgb2YgYC9nbnUvc3RvcmUvcDUwaTRsazhhamNncmd6OG0xMXZx aWZ2aDRnZ2luMnctbGludXgtbGlicmUtYXJtNjQtZ2VuZXJpYy01LjE2LjE5LmRydicgZmFpbGVk PGJyPjxicj5VbmZvcnR1bmF0ZWx5IHRoZSBidWlsZCBsb2cgaXMgbm90IGhlbHBmdWwgdW5jb3Zl cmluZyB0aGUgY2F1c2UgKGF0IGxlYXN0IHRvIG1lKS4gPGJyPjxicj5JJ3ZlIGFsc28gYXR0ZW1w dGVkIHRvIGNyb3NzLWNvbXBpbGUgdGhlIHN5c3RlbSAoZnJvbSB4ODZfNjQpIGJ1dCB0aGVyZSBp cyBhdCBsZWFzdCBvbmUgcGFja2FnZSB0aGF0IGNhbid0IGJlIGJ1aWxkIC0gPHNwYW4+Z3VpbGUt ZmliZXJzLTEuMS4wPC9zcGFuPi4gSSd2ZSBhdHRhY2hlZCB0aGUgYnVpbGQgbG9nIGFzIHdlbGwu PGJyPjxicj48YnI+S2luZCByZWdhcmRzLDxicj5QZXRyPC9zcGFuPjxicj48YnI+PGJyPjwvZGl2 Pg== --b2_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU-- --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0006-gnu-raspberry-pi-Add-helpers-for-config.txt-file-.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0006-gnu-raspberry-pi-Add-helpers-for-config.txt-file-.patch RnJvbSAxM2MzY2Y1ZjFkZjkyM2VkZGNmNDhiNjlmMGMyNmM3Y2ZhMmU2ZDRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg Ni84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGhlbHBlcnMgZm9yIGNvbmZpZy50eHQgZmlsZQog Z2VuZXJhdGlvbi4KCiogZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20gKHJhc3BpLWNvbmZp Zy1maWxlLCByYXNwaS1jdXN0b20tdHh0KToKTmV3IGZ1bmN0aW9ucy4KKCVyYXNwaS1jb25maWct dHh0LCAlcmFzcGktYmNtMjctZHRiLXR4dCwgJXJhc3BpLWJjbTI4LWR0Yi10eHQKJXJhc3BpLXUt Ym9vdC1ib290bG9hZGVyLXR4dCk6IE5ldyB2YXJpYWJsZXMuCgpkaWZmIC0tZ2l0IGEvZ251L3Bh Y2thZ2VzL3Jhc3BiZXJyeS1waS5zY20gYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpp bmRleCBhMmFiMzAwNTMxLi4wNzA3NTE2ZjcyIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvcmFz cGJlcnJ5LXBpLnNjbQorKysgYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpAQCAtMjM4 LDYgKzIzOCw1OSBAQCAoZGVmaW5lLXB1YmxpYyByYXNwaS1hcm02NC1jaGFpbmxvYWRlcgogICAg ICAgICAgICAgICAgI3QpKSkpKSkpKQogICAgIChzdXBwb3J0ZWQtc3lzdGVtcyAnKCJhYXJjaDY0 LWxpbnV4IikpKSkKIAorKGRlZmluZS1wdWJsaWMgKHJhc3BpLWNvbmZpZy1maWxlIG5hbWUgY29u dGVudCkKKyAgIk1ha2UgYSBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSBjb25maWcudHh0IGZvciB0 aGUgUmFzcGJlcnJ5IFBpIGZpcm13YXJlLgorQ09OVEVOVCBjYW4gYmUgYSBsaXN0IG9mIHN0cmlu Z3MsIHdoaWNoIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCBhIG5ld2xpbmUKK2NoYXJhY3Rlci4gIEFs dGVybmF0aXZlbHkgQ09OVEVOVCBjYW4gYmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxlIGNv bnRlbnQuIgorICAocGxhaW4tZmlsZQorICAgbmFtZQorICAgKGlmIChsaXN0PyBjb250ZW50KQor ICAgICAgIChzdHJpbmctam9pbiBjb250ZW50ICJcbiIgJ3N1ZmZpeCkKKyAgICAgICBjb250ZW50 KSkpCisKKyhkZWZpbmUtcHVibGljICVyYXNwaS1jb25maWctdHh0CisgIDs7IEEgY29uZmlnLnR4 dCBmaWxlIHRvIHN0YXJ0IHRoZSBBUk0gY29yZXMgdXAgaW4gNjQtYml0IG1vZGUgaWYgbmVjZXNz YXJ5CisgIDs7IGFuZCB0byBpbmNsdWRlIGEgZHRiLnR4dCwgYm9vdGxvYWRlci50eHQsIGFuZCBh IGN1c3RvbS50eHQsIGVhY2ggd2l0aAorICA7OyBzZXBhcmF0ZWQgY29uZmlndXJhdGlvbnMgZm9y IHRoZSBSYXNwYmVycnkgUGkgZmlybXdhcmUuCisgIChyYXNwaS1jb25maWctZmlsZQorICAgImNv bmZpZy50eHQiCisgICBgKCIjIFNlZSBodHRwczovL3d3dy5yYXNwYmVycnlwaS5vcmcvZG9jdW1l bnRhdGlvbi9jb25maWd1cmF0aW9uL2NvbmZpZy10eHQvUkVBRE1FLm1kIGZvciBkZXRhaWxzLiIK KyAgICAgIiIKKyAgICAgLChzdHJpbmctYXBwZW5kICJhcm1fNjRiaXQ9IiAoaWYgKHRhcmdldC1h YXJjaDY0PykgIjEiICIwIikpCisgICAgICJpbmNsdWRlIGR0Yi50eHQiCisgICAgICJpbmNsdWRl IGJvb3Rsb2FkZXIudHh0IgorICAgICAiaW5jbHVkZSBjdXN0b20udHh0IikpKQorCisoZGVmaW5l LXB1YmxpYyAlcmFzcGktYmNtMjctZHRiLXR4dAorICA7OyBBIGR0Yi50eHQgZmlsZSB0byBiZSBp bmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgOzsgZG93bnN0 cmVhbSBkZXZpY2UgdHJlZSBmaWxlcyBiY20yNyouZHRiIHdpbGwgYmUgdXNlZC4KKyAgKHJhc3Bp LWNvbmZpZy1maWxlCisgICAiZHRiLnR4dCIKKyAgICJ1cHN0cmVhbV9rZXJuZWw9MCIpKQorCiso ZGVmaW5lLXB1YmxpYyAlcmFzcGktYmNtMjgtZHRiLXR4dAorICA7OyBBIGR0Yi50eHQgZmlsZSB0 byBiZSBpbmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgOzsg dXBzdHJlYW0gZGV2aWNlIHRyZWUgZmlsZXMgYmNtMjgqLmR0YiB3aWxsIGJlIHVzZWQuCisgIDs7 IFRoaXMgYWxzbyBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIGR0b3ZlcmxheT11cHN0cmVhbS4KKyAg KHJhc3BpLWNvbmZpZy1maWxlCisgICAiZHRiLnR4dCIKKyAgICJ1cHN0cmVhbV9rZXJuZWw9MSIp KQorCisoZGVmaW5lLXB1YmxpYyAlcmFzcGktdS1ib290LWJvb3Rsb2FkZXItdHh0CisgIDs7IEEg Ym9vdGxvYWRlci50eHQgZmlsZSB0byBiZSBpbmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBs b2FkIHRoZQorICA7OyBVLUJvb3QgYm9vdGxvYWRlci4KKyAgKHJhc3BpLWNvbmZpZy1maWxlCisg ICAiYm9vdGxvYWRlci50eHQiCisgICAnKCJkdG92ZXJsYXk9dXBzdHJlYW0iCisgICAgICJlbmFi bGVfdWFydD0xIgorICAgICAia2VybmVsPXUtYm9vdC5iaW4iKSkpCisKKyhkZWZpbmUtcHVibGlj IChyYXNwaS1jdXN0b20tdHh0IGNvbnRlbnQpCisgICJNYWtlIGEgY3VzdG9tLnR4dCBmaWxlIGZv ciB0aGUgUmFzcGJlcnJ5IFBpIGZpcm13YXJlLgorQ09OVEVOVCBjYW4gYmUgYSBsaXN0IG9mIHN0 cmluZ3MsIHdoaWNoIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCBhIG5ld2xpbmUKK2NoYXJhY3Rlci4g IEFsdGVybmF0aXZlbHkgQ09OVEVOVCBjYW4gYmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxl IGNvbnRlbnQuIgorICAocmFzcGktY29uZmlnLWZpbGUgImN1c3RvbS50eHQiIGNvbnRlbnQpKQor CiAoZGVmaW5lIChtYWtlLXJhc3BpLWRlZmNvbmZpZyBhcmNoIGRlZmNvbmZpZyBzaGEyNTYtYXMt YmFzZTMyKQogICAiTWFrZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSBBUkNIIGEgZmlsZS1saWtlIG9i amVjdCBmcm9tIHRoZSBERUZDT05GSUcgZmlsZQogd2l0aCB0aGUgaGFzaCBTSEEyNTYtQVMtQkFT RTMyLiAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlICM6ZGVmY29uZmlnCi0tIAoyLjM1 LjEKCg== --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0001-gnu-bootloader-Rework-chaining-add-grub-efi-netbo.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0001-gnu-bootloader-Rework-chaining-add-grub-efi-netbo.patch RnJvbSA3YjlhYTRhNTc0MDRkMzlmMmFlZDk0MGFlZjIwMjY2NjdiZmNhMzRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMTowMjowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg MS84XSBnbnU6IGJvb3Rsb2FkZXI6IFJld29yayBjaGFpbmluZywgYWRkCiBncnViLWVmaS1uZXRi b290LXJlbW92YWJsZS1ib290bG9hZGVyLgpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKKiBkb2MvZ3VpeC50ZXhpIChCb290bG9hZGVyIENvbmZpZ3VyYXRpb24pOiBEZXNjcmliZSB0 aGUgbmV3CuKAmGdydWItZWZpLW5ldGJvb3QtcmVtb3ZhYmxlLWJvb3Rsb2FkZXLigJkuICBNZW50 aW9uIHVzZWQgc3ViLWRpcmVjdG9yaWVzIGFuZAp0aGF0IHRoZSBVRUZJIEJvb3QgTWFuYWdlciBp cyBub3QgbW9kaWZpZWQuICBBZHZpY2UgdG8gZGlzYWJsZSB3cml0ZS1hY2Nlc3MKb3ZlciBURlRQ LgoqIGdudS9ib290bG9hZGVyLnNjbSAoZWZpLWJvb3Rsb2FkZXItcHJvZmlsZSk6IEFsbG93IGEg bGlzdCBvZiBwYWNrYWdlcyBhbmQKY29sbGVjdCBldmVyeXRoaW5nIGRpcmVjdGx5IGluIHRoZSBw cm9maWxlLCBhdm9pZGluZyBhIHNlcGFyYXRlIGNvbGxlY3Rpb24KZGlyZWN0b3J5LiAgUmVuYW1l ZCB0aGUgcHJvZmlsZSBmcm9tICJib290bG9hZGVyLXByb2ZpbGUiIHRvCiJlZmktYm9vdGxvYWRl ci1wcm9maWxlIi4KW2Jvb3Rsb2FkZXItY29sbGVjdGlvbl06IFJlbmFtZWQgdG8g4oCmCltlZmkt Ym9vdGxvYWRlci1wcm9maWxlLWhvb2tdOiDigKYgdGhpcyBhbmQgcmVtb3ZlZCB1bnVzZWQgbW9k dWxlcyBhbmQgdGhlCmNyZWF0aW9uIG9mIHRoZSBub3cgdW5uZWVkZWQgY29sbGVjdGlvbiBkaXJl Y3RvcnkuCihlZmktYm9vdGxvYWRlci1jaGFpbik6IEFkZGVkIHBhY2thZ2VzIGFuZCBkaXNrLWlt YWdlLWluc3RhbGxlciBhcmd1bWVudHMuClJlbW92ZWQgaGFuZGxpbmcgb2YgdGhlIGNvbGxlY3Rp b24gZGlyZWN0b3J5LCBub3cgb25seSBjYWxsaW5nIHRoZSBnaXZlbgppbnN0YWxsZXIgcHJvY2Vk dXJlLgoqIGdudS9ib290bG9hZGVyL2dydWIuc2NtIChtYWtlLWdydWItZWZpLW5ldGJvb3QtaW5z dGFsbGVyKTogTmV3IGhlbHBlci4KKG1ha2UtZ3J1Yi1jb25maWd1cmF0aW9uKTogTmV3IGhlbHBl ciBiYXNlZCBvbiAoZ3J1Yi1jb25maWd1cmF0aW9uLWZpbGUpLgpBZGRpbmcgZ3J1YiBhcmd1bWVu dCwgZml4ZWQgaW5kZW50YXRpb24sIHJlbW92ZW5kIGNvZGUgdG8gZ2V0IGdydWIuCihncnViLWNv bmZpZ3VyYXRpb24tZmlsZSk6IE5vdyB1c2luZyAobWFrZS1ncnViLWNvbmZpZ3VyYXRpb24pLgoo Z3J1Yi1lZmktY29uZmlndXJhdGlvbi1maWxlKTogTmV3IGZ1bmN0aW9uIHVzaW5nIChtYWtlLWdy dWItY29uZmlndXJhdGlvbikuCkluc3RlYWQgb2YgZ2V0dGluZyB0aGUgZ3J1Yi1lZmkgcGFja2Fn ZSBmcm9tIHRoZSBib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KdGhpcyBmdW5jdGlvbiByZWZlcnMg dG8gdGhlIGdydWItZWZpIHBhY2thZ2UgZGlyZWN0bHkuCihncnViLWNmZyk6IE5ldyB2YXJpYWJs ZSB0byByZXBsYWNlICIvYm9vdC9ncnViL2dydWIuY2ZnIi4KKGluc3RhbGwtZ3J1Yi1lZmktbmV0 Ym9vdCk6IFJlbW92ZWQsIHRoZSBmdW5jdGlvbmFsaXR5IGdvdCBtb3ZlZC4KKG1ha2UtZ3J1Yi1l ZmktbmV0Ym9vdC1pbnN0YWxsZXIpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGN1 c3RvbWl6ZWQKaW5zdGFsbGVyIGZvciBhIGNlcnRhaW4gZWZpLXN1Yi1kaXJlY3RvcnkuICBUaGUg aW5zdGFsbGVyIGJhc2ljYWxseSBjb3BpZXMKYSBwcmUtaW5zdGFsbGVkIGVmaS1ib290bG9hZGVy LXByb2ZpbGUsIGFuZCBhZGRzIG5lZWRlZCBzeW1saW5rcyBmb3IgYm9vdGluZwpvdmVyIG5ldHdv cmssIG9yIOKAkyBvbiBhbiBFU1Ag4oCTIGFuIGludGVybWVkaWF0ZSBncnViLWNmZyB0byBsb2Fk IHRoZSBmaW5hbApncnViLWNmZyBmaWxlLgooZ3J1Yi1ib290bG9hZGVyKTogTm93IHVzaW5nIHRo ZSBncnViLWNmZyB2YXJpYWJsZS4KKGdydWItZWZpLWJvb3Rsb2FkZXIpOiBOb3cgdXNpbmcgdGhl IGdydWItY2ZnIHZhcmlhYmxlLiAgUmVtb3ZlZCBpbmhlcml0YW5jZSwKZ2l2aW5nIGNvbXBsZXRl IHNldCBvZiBmaWVsZHMuCihtYWtlLWdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcik6IE5ldyBo ZWxwZXIgZnVuY3Rpb24uCihncnViLWVmaS1uZXRib290LWJvb3Rsb2FkZXIpOiBOb3cgdXNpbmcg dGhlIGhlbHBlci4KKGdydWItZWZpLW5ldGJvb3QtcmVtb3ZhYmxlLWJvb3Rsb2FkZXIpOiBOZXcg Ym9vdGxvYWRlciB1c2luZyB0aGUgaGVscGVyLgpJdCB1c2VzIHRoZSBlZmktc3ViLWRpcmVjdG9y eSAiZWZpL2Jvb3QiIGZvciByZW1vdmFibGUgbWVkaWEuCiogZ251L3BhY2thZ2VzL2Jvb3Rsb2Fk ZXJzLnNjbSAobWFrZS1ncnViLWVmaS1uZXRib290KTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybgph IGdydWItZWZpIHBhY2thZ2UgcHJlLWluc3RhbGxlZCB2aWEgZ3J1Yi1ta25ldGRpciwgY3VzdG9t aXplZCBmb3IgYW4KZWZpLXN1Yi1kaXJlY3RvcnkgYW5kIGFibGUgdG8gYm9vdCB2aWEgbmV0d29y ayBhbmQgbG9jYWwgc3RvcmFnZS4KClRoZSByZXdvcmsgYWxsb3dzIHRvIHVzZSBhbiAoZWZpLWJv b3Rsb2FkZXItY2hhaW4pIGxpa2UgdGhpcywgd2hpY2ggaXMgYWJsZQp0byBib290IG92ZXIgbmV0 d29yayBvciBsb2NhbCBzdG9yYWdlLCBkZXBlbmRpbmcgb24gdGhlIHN5bWxpbmstc3VwcG9ydCBh dAp0aGUgYm9vdGxvYWRlci10YXJnZXQ6Cgoob3BlcmF0aW5nLXN5c3RlbQogKGJvb3Rsb2FkZXIK ICAgKGJvb3Rsb2FkZXItY29uZmlndXJhdGlvbgogICAgIChib290bG9hZGVyCiAgICAgICAoZWZp LWJvb3Rsb2FkZXItY2hhaW4KICAgICAgICAgZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9v dGxvYWRlcgogICAgICAgICAjOnBhY2thZ2VzIChsaXN0IG15LWZpcm13YXJlLXBhY2thZ2UKICAg ICAgICAgICAgICAgICAgICAgICAgICBteS11LWJvb3QtcGFja2FnZSkKICAgICAgICAgIzpmaWxl cyAobGlzdCAocGxhaW4tZmlsZSAiY29uZmlnLnR4dCIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAia2VybmVsPXUtYm9vdC5iaW4iKSkKICAgICAgICAgIzpob29rcyBteS1zcGVj aWFsLWJvb3Rsb2FkZXItcHJvZmlsZS1tYW5pcHVsYXRvcikpCiAgICAgKHRhcmdldCAiL2Jvb3Rp L2VmaSIpCiAgICAg4oCmKSkKIOKApikKKQoKZGlmZiAtLWdpdCBhL2RvYy9ndWl4LnRleGkgYi9k b2MvZ3VpeC50ZXhpCmluZGV4IGE4NjViMmUyZTQuLjRiMzUxNDJlOTUgMTAwNjQ0Ci0tLSBhL2Rv Yy9ndWl4LnRleGkKKysrIGIvZG9jL2d1aXgudGV4aQpAQCAtMzU3MTAsOCArMzU3MTAsOSBAQCBU aGUgdHlwZSBvZiBhIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbi4KIEBjaW5k ZXggQklPUywgYm9vdGxvYWRlcgogVGhlIGJvb3Rsb2FkZXIgdG8gdXNlLCBhcyBhIEBjb2Rle2Jv b3Rsb2FkZXJ9IG9iamVjdC4gIEZvciBub3cKIEBjb2Rle2dydWItYm9vdGxvYWRlcn0sIEBjb2Rl e2dydWItZWZpLWJvb3Rsb2FkZXJ9LAotQGNvZGV7Z3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVy fSwgQGNvZGV7ZXh0bGludXgtYm9vdGxvYWRlcn0gYW5kCi1AY29kZXt1LWJvb3QtYm9vdGxvYWRl cn0gYXJlIHN1cHBvcnRlZC4KK0Bjb2Rle2dydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcn0sCitA Y29kZXtncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyfSwKK0Bjb2Rle2V4dGxp bnV4LWJvb3Rsb2FkZXJ9IGFuZCBAY29kZXt1LWJvb3QtYm9vdGxvYWRlcn0gYXJlIHN1cHBvcnRl ZC4KIAogQGNpbmRleCBBUk0sIGJvb3Rsb2FkZXJzCiBAY2luZGV4IEFBcmNoNjQsIGJvb3Rsb2Fk ZXJzCkBAIC0zNTczNyw5ICszNTczOCwxMCBAQCBidWlsZCBhIGRpc2tsZXNzIEd1aXggc3lzdGVt LgogCiBUaGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBAY29kZXtncnViLWVmaS1uZXRib290LWJvb3Rs b2FkZXJ9IGdlbmVyYXRlcyB0aGUKIGNvbnRlbnQgb2YgdGhlIFRGVFAgcm9vdCBkaXJlY3Rvcnkg YXQgQGNvZGV7dGFyZ2V0c30gKEBweHJlZntCb290bG9hZGVyCi1Db25maWd1cmF0aW9uLCBAY29k ZXt0YXJnZXRzfX0pLCB0byBiZSBzZXJ2ZWQgYnkgYSBURlRQIHNlcnZlci4gIFlvdSBtYXkKLXdh bnQgdG8gbW91bnQgeW91ciBURlRQIHNlcnZlciBkaXJlY3RvcmllcyBvbnRvIHRoZSBAY29kZXt0 YXJnZXRzfSB0bwotbW92ZSB0aGUgcmVxdWlyZWQgZmlsZXMgdG8gdGhlIFRGVFAgc2VydmVyIGF1 dG9tYXRpY2FsbHkuCitDb25maWd1cmF0aW9uLCBAY29kZXt0YXJnZXRzfX0pIGJlbG93IHRoZSBz dWItZGlyZWN0b3J5IEBmaWxle2VmaS9HdWl4fSwgdG8gYmUKK3NlcnZlZCBieSBhIFRGVFAgc2Vy dmVyLiAgWW91IG1heSB3YW50IHRvIG1vdW50IHlvdXIgVEZUUCBzZXJ2ZXIgZGlyZWN0b3JpZXMK K29udG8gdGhlIEBjb2Rle3RhcmdldHN9IHRvIG1vdmUgdGhlIHJlcXVpcmVkIGZpbGVzIHRvIHRo ZSBURlRQIHNlcnZlcgorYXV0b21hdGljYWxseSBkdXJpbmcgaW5zdGFsbGF0aW9uLgogCiBJZiB5 b3UgcGxhbiB0byB1c2UgYW4gTkZTIHJvb3QgZmlsZSBzeXN0ZW0gYXMgd2VsbCAoYWN0dWFsbHkg aWYgeW91IG1vdW50IHRoZQogc3RvcmUgZnJvbSBhbiBORlMgc2hhcmUpLCB0aGVuIHRoZSBURlRQ IHNlcnZlciBuZWVkcyB0byBzZXJ2ZSB0aGUgZmlsZQpAQCAtMzU3NzMsMTMgKzM1Nzc1LDIzIEBA IGRpcmVjdG9yeSB0byB5b3VyIEBjb2Rle3RhcmdldHN9LgogSXQgaXMgaW1wb3J0YW50IHRvIG5v dGUgdGhhdCBzeW1saW5rcyBwb2ludGluZyBvdXRzaWRlIHRoZSBURlRQIHJvb3QgZGlyZWN0b3J5 CiBtYXkgbmVlZCB0byBiZSBhbGxvd2VkIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHlvdXIgVEZU UCBzZXJ2ZXIuICBGdXJ0aGVyIHRoZQogc3RvcmUgbGluayBleHBvc2VzIHRoZSB3aG9sZSBzdG9y ZSB0aHJvdWdoIFRGVFBALiAgQm90aCBwb2ludHMgbmVlZCB0byBiZQotY29uc2lkZXJlZCBjYXJl ZnVsbHkgZm9yIHNlY3VyaXR5IGFzcGVjdHMuCitjb25zaWRlcmVkIGNhcmVmdWxseSBmb3Igc2Vj dXJpdHkgYXNwZWN0cy4gIEl0IGlzIGFkdmlzZWQgdG8gZGlzYWJsZSBhbnkgVEZUUAord3JpdGUg YWNjZXNzIQorCitQbGVhc2Ugbm90ZSwgdGhhdCB0aGlzIGJvb3Rsb2FkZXIgd2lsbCBub3QgbW9k aWZ5IHRoZSDigJhVRUZJIEJvb3QgTWFuYWdlcuKAmSBvZgordGhlIHN5c3RlbS4KIAogQmVzaWRl IHRoZSBAY29kZXtncnViLWVmaS1uZXRib290LWJvb3Rsb2FkZXJ9LCB0aGUgYWxyZWFkeSBtZW50 aW9uZWQgVEZUUCBhbmQKIE5GUyBzZXJ2ZXJzLCB5b3UgYWxzbyBuZWVkIGEgcHJvcGVybHkgY29u ZmlndXJlZCBESENQIHNlcnZlciB0byBtYWtlIHRoZSBib290aW5nCiBvdmVyIG5ldGJvb3QgcG9z c2libGUuICBGb3IgYWxsIHRoaXMgd2UgY2FuIGN1cnJlbnRseSBvbmx5IHJlY29tbWVuZCB5b3Ug dG8gbG9vawogZm9yIGluc3RydWN0aW9ucyBhYm91dCBAYWNyb255bXtQWEUsIFByZWJvb3QgZVhl Y3V0aW9uIEVudmlyb25tZW50fS4KIAorQHZpbmRleCBncnViLWVmaS1uZXRib290LXJlbW92YWJs ZS1ib290bG9hZGVyCitAY29kZXtncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVy fSBpcyBpZGVudGljYWwgdG8KK0Bjb2Rle2dydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcn0gd2l0 aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIHN1Yi1kaXJlY3RvcnkKK0BmaWxle2VmaS9ib290fSB3 aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBAZmlsZXtlZmkvR3VpeH0gdG8gY29tcGx5IHRvIHRoZSBV RUZJCitzcGVjaWZpY2F0aW9uIGZvciByZW1vdmFibGUgbWVkaWEuCisKIEBpdGVtIEBjb2Rle3Rh cmdldHN9CiBUaGlzIGlzIGEgbGlzdCBvZiBzdHJpbmdzIGRlbm90aW5nIHRoZSB0YXJnZXRzIG9u dG8gd2hpY2ggdG8gaW5zdGFsbCB0aGUKIGJvb3Rsb2FkZXIuCmRpZmYgLS1naXQgYS9nbnUvYm9v dGxvYWRlci5zY20gYi9nbnUvYm9vdGxvYWRlci5zY20KaW5kZXggOWNmNTQ1Nzg3My4uNzk3OTA4 ZTI0YSAxMDA2NDQKLS0tIGEvZ251L2Jvb3Rsb2FkZXIuc2NtCisrKyBiL2dudS9ib290bG9hZGVy LnNjbQpAQCAtMjU5LDI2ICsyNTksMjIgQEAgKGRlZmluZSAobG9va3VwLWJvb3Rsb2FkZXItYnkt bmFtZSBuYW1lKQogICAgICAgICAgICAgKGZvcmNlICVib290bG9hZGVycykpCiAgICAgICAobGVh dmUgKEdfICJ+YTogbm8gc3VjaCBib290bG9hZGVyfiUiKSBuYW1lKSkpCiAKLShkZWZpbmUgKGVm aS1ib290bG9hZGVyLXByb2ZpbGUgZmlsZXMgYm9vdGxvYWRlci1wYWNrYWdlIGhvb2tzKQotICAi Q3JlYXRlcyBhIHByb2ZpbGUgd2l0aCBCT09UTE9BREVSLVBBQ0tBR0UgYW5kIGEgZGlyZWN0b3J5 IGNvbGxlY3Rpb24vIHdpdGgKLWxpbmtzIHRvIGFkZGl0aW9uYWwgRklMRVMgZnJvbSB0aGUgc3Rv cmUuICBUaGlzIGNvbGxlY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZAotYnkgdGhlIGJvb3Rsb2Fk ZXIgaW5zdGFsbGVyLgorKGRlZmluZSAoZWZpLWJvb3Rsb2FkZXItcHJvZmlsZSBwYWNrYWdlcyBm aWxlcyBob29rcykKKyAgIkNyZWF0ZXMgYSBwcm9maWxlIGZyb20gdGhlIGxpc3RzIG9mIFBBQ0tB R0VTIGFuZCBGSUxFUyBmcm9tIHRoZSBzdG9yZS4KK1RoaXMgcHJvZmlsZSBpcyBtZWFudCB0byBi ZSB1c2VkIGJ5IHRoZSBib290bG9hZGVyLWluc3RhbGxlci4KIAogRklMRVMgaXMgYSBsaXN0IG9m IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIGZyb20gdGhlIHN0b3JlLCB3aGljaCB3aWxsIGJlCi1z eW1saW5rZWQgaW50byB0aGUgY29sbGVjdGlvbi8gZGlyZWN0b3J5LiAgSWYgYSBkaXJlY3Rvcnkg bmFtZSBlbmRzIHdpdGggJy8nLAotdGhlbiB0aGUgZGlyZWN0b3J5IGNvbnRlbnQgaW5zdGVhZCBv ZiB0aGUgZGlyZWN0b3J5IGl0c2VsZiB3aWxsIGJlIHN5bWxpbmtlZAotaW50byB0aGUgY29sbGVj dGlvbi8gZGlyZWN0b3J5Lgorc3ltbGlua2VkIGludG8gdGhlIHByb2ZpbGUuICBJZiBhIGRpcmVj dG9yeSBuYW1lIGVuZHMgd2l0aCAnLycsIHRoZW4gdGhlCitkaXJlY3RvcnkgY29udGVudCBpbnN0 ZWFkIG9mIHRoZSBkaXJlY3RvcnkgaXRzZWxmIHdpbGwgYmUgc3ltbGlua2VkIGludG8gdGhlCitw cm9maWxlLgogCi1GSUxFUyBtYXkgY29udGFpbiBmaWxlIGxpa2Ugb2JqZWN0cyBwcm9kdWNlZCBi eSBmdW5jdGlvbnMgbGlrZSBwbGFpbi1maWxlLAorRklMRVMgbWF5IGNvbnRhaW4gZmlsZSBsaWtl IG9iamVjdHMgcHJvZHVjZWQgYnkgcHJvY2VkdXJlcyBsaWtlIHBsYWluLWZpbGUsCiBsb2NhbC1m aWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRlbnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQu CiAKIEhPT0tTIGxpc3RzIGFkZGl0aW9uYWwgaG9vayBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZSBw cm9maWxlLiIKLSAgKGRlZmluZSAoYm9vdGxvYWRlci1jb2xsZWN0aW9uIG1hbmlmZXN0KQorICAo ZGVmaW5lIChlZmktYm9vdGxvYWRlci1wcm9maWxlLWhvb2sgbWFuaWZlc3QpCiAgICAgKGRlZmlu ZSBidWlsZAotICAgICAgICAod2l0aC1pbXBvcnRlZC1tb2R1bGVzICcoKGd1aXggYnVpbGQgdXRp bHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgZnR3KQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyZmkgc3JmaS0xKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNyZmkgc3JmaS0yNikpCisgICAgICAgICh3aXRoLWltcG9ydGVk LW1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykpCiAgICAgICAgICAgI34oYmVnaW4KICAgICAg ICAgICAgICh1c2UtbW9kdWxlcyAoKGd1aXggYnVpbGQgdXRpbHMpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICM6c2VsZWN0IChta2Rpci1wIHN0cmlwLXN0b3JlLWZpbGUtbmFtZSkpCkBAIC0z MDIsNyArMjk4LDcgQEAgKGRlZmluZSBuYW1lLWVuZHMtd2l0aC0vPyAoY3V0IHN0cmluZy1zdWZm aXg/ICIvIiA8PikpCiAgICAgICAgICAgICAoZGVmaW5lIChuYW1lLWlzLXN0b3JlLWVudHJ5PyBu YW1lKQogICAgICAgICAgICAgICAiUmV0dXJuICN0IGlmIE5BTUUgaXMgYSBkaXJlY3Qgc3RvcmUg ZW50cnkgYW5kIG5vdGhpbmcgaW5zaWRlLiIKICAgICAgICAgICAgICAgKG5vdCAoc3RyaW5nLWlu ZGV4IChzdHJpcC1zdG9yZS1maWxlLW5hbWUgbmFtZSkgI1wvKSkpCi0gICAgICAgICAgICAobGV0 KiAoKGNvbGxlY3Rpb24gKHN0cmluZy1hcHBlbmQgIyRvdXRwdXQgIi9jb2xsZWN0aW9uIikpCisg ICAgICAgICAgICAobGV0KiAoKG91dHB1dCAjJG91dHB1dCkKICAgICAgICAgICAgICAgICAgICAo ZmlsZXMgJyMkZmlsZXMpCiAgICAgICAgICAgICAgICAgICAgKGRpcmVjdG9yaWVzIChmaWx0ZXIg bmFtZS1lbmRzLXdpdGgtLz8gZmlsZXMpKQogICAgICAgICAgICAgICAgICAgIChuYW1lcy1mcm9t LWRpcmVjdG9yaWVzCkBAIC0zMTEsMTEgKzMwNywxMSBAQCAoZGVmaW5lIChuYW1lLWlzLXN0b3Jl LWVudHJ5PyBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmll cykpCiAgICAgICAgICAgICAgICAgICAgKG5hbWVzIChhcHBlbmQgbmFtZXMtZnJvbS1kaXJlY3Rv cmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUgbmFtZS1lbmRz LXdpdGgtLz8gZmlsZXMpKSkpCi0gICAgICAgICAgICAgIChta2Rpci1wIGNvbGxlY3Rpb24pCisg ICAgICAgICAgICAgIChta2Rpci1wIG91dHB1dCkKICAgICAgICAgICAgICAgKGlmIChldmVyeSBm aWxlLWV4aXN0cz8gbmFtZXMpCiAgICAgICAgICAgICAgICAgICAoYmVnaW4KICAgICAgICAgICAg ICAgICAgICAgKGZvci1lYWNoIChsYW1iZGEgKG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN5bWxpbmstdG8gbmFtZSBjb2xsZWN0aW9uCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHN5bWxpbmstdG8gbmFtZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChuYW1lLWlzLXN0b3JlLWVudHJ5PyBuYW1lKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAtc3Rv cmUtZmlsZS1uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiYXNlbmFtZSkpKQpAQCAtMzIzLDU3ICszMTksNjMgQEAgKGRlZmluZSAobmFtZS1pcy1z dG9yZS1lbnRyeT8gbmFtZSkKICAgICAgICAgICAgICAgICAgICAgI3QpCiAgICAgICAgICAgICAg ICAgICAjZikpKSkpCiAKLSAgICAoZ2V4cC0+ZGVyaXZhdGlvbiAiYm9vdGxvYWRlci1jb2xsZWN0 aW9uIgorICAgIChnZXhwLT5kZXJpdmF0aW9uICJlZmktYm9vdGxvYWRlci1wcm9maWxlIgogICAg ICAgICAgICAgICAgICAgICAgIGJ1aWxkCiAgICAgICAgICAgICAgICAgICAgICAgIzpsb2NhbC1i dWlsZD8gI3QKICAgICAgICAgICAgICAgICAgICAgICAjOnN1YnN0aXR1dGFibGU/ICNmCiAgICAg ICAgICAgICAgICAgICAgICAgIzpwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgYCgo dHlwZSAuIHByb2ZpbGUtaG9vaykKLSAgICAgICAgICAgICAgICAgICAgICAgIChob29rIC4gYm9v dGxvYWRlci1jb2xsZWN0aW9uKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGhvb2sgLiBl ZmktYm9vdGxvYWRlci1wcm9maWxlLWhvb2spKSkpCiAKLSAgKHByb2ZpbGUgKGNvbnRlbnQgKHBh Y2thZ2VzLT5tYW5pZmVzdCAobGlzdCBib290bG9hZGVyLXBhY2thZ2UpKSkKLSAgICAgICAgICAg KG5hbWUgImJvb3Rsb2FkZXItcHJvZmlsZSIpCi0gICAgICAgICAgIChob29rcyAoYXBwZW5kIChs aXN0IGJvb3Rsb2FkZXItY29sbGVjdGlvbikgaG9va3MpKQorICAocHJvZmlsZSAoY29udGVudCAo cGFja2FnZXMtPm1hbmlmZXN0IHBhY2thZ2VzKSkKKyAgICAgICAgICAgKG5hbWUgImVmaS1ib290 bG9hZGVyLXByb2ZpbGUiKQorICAgICAgICAgICAoaG9va3MgKGNvbnMgZWZpLWJvb3Rsb2FkZXIt cHJvZmlsZS1ob29rIGhvb2tzKSkKICAgICAgICAgICAgKGxvY2FsZXM/ICNmKQogICAgICAgICAg ICAoYWxsb3ctY29sbGlzaW9ucz8gI2YpCiAgICAgICAgICAgIChyZWxhdGl2ZS1zeW1saW5rcz8g I2YpKSkKIAotKGRlZmluZSogKGVmaS1ib290bG9hZGVyLWNoYWluIGZpbGVzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmluYWwtYm9vdGxvYWRlcgorKGRlZmluZSogKGVmaS1ib290 bG9hZGVyLWNoYWluIGZpbmFsLWJvb3Rsb2FkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjOmtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlcyAnKCkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVzICcoKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaG9va3MgJygpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluc3RhbGxlcikKLSAgIkRlZmluZSBhIGJvb3Rsb2FkZXIgY2hhaW4gd2l0aCBGSU5B TC1CT09UTE9BREVSIGFzIHRoZSBmaW5hbCBib290bG9hZGVyIGFuZAotY2VydGFpbiBkaXJlY3Rv cmllcyBhbmQgZmlsZXMgZnJvbSB0aGUgc3RvcmUgZ2l2ZW4gaW4gdGhlIGxpc3Qgb2YgRklMRVMu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlzay1pbWFnZS1pbnN0YWxsZXIpCisgICJEZWZpbmUgYSBjaGFp biBvZiBib290bG9hZGVycyB3aXRoIHRoZSBGSU5BTC1CT09UTE9BREVSLCBvcHRpb25hbCBQQUNL QUdFUywKK2FuZCBvcHRpb25hbCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZnJvbSB0aGUgc3RvcmUg Z2l2ZW4gaW4gdGhlIGxpc3Qgb2YgRklMRVMuCiAKLUZJTEVTIG1heSBjb250YWluIGZpbGUgbGlr ZSBvYmplY3RzIHByb2R1Y2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIHBsYWluLWZpbGUsCi1sb2NhbC1m aWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRlbnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQu ICBUaGV5IHdpbGwgYmUKLWNvbGxlY3RlZCBpbnNpZGUgYSBkaXJlY3RvcnkgY29sbGVjdGlvbi8g aW5zaWRlIGEgZ2VuZXJhdGVkIGJvb3Rsb2FkZXIgcHJvZmlsZSwKLXdoaWNoIHdpbGwgYmUgcGFz c2VkIHRvIHRoZSBJTlNUQUxMRVIuCitUaGUgcGFja2FnZSBvZiB0aGUgRklOQUwtQk9PVExPQURF UiBhbmQgYWxsIFBBQ0tBR0VTIGFuZCBGSUxFUyB3aWxsIGJlIHBsYWNlZAoraW4gYW4gZWZpLWJv b3Rsb2FkZXItcHJvZmlsZSwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIElOU1RBTExFUi4K KworRklMRVMgbWF5IGNvbnRhaW4gZmlsZSBsaWtlIG9iamVjdHMgcHJvZHVjZWQgYnkgcHJvY2Vk dXJlcyBsaWtlIHBsYWluLWZpbGUsCitsb2NhbC1maWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRl bnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQuCiAKIElmIGEgZGlyZWN0b3J5IG5hbWUgaW4g RklMRVMgZW5kcyB3aXRoICcvJywgdGhlbiB0aGUgZGlyZWN0b3J5IGNvbnRlbnQgaW5zdGVhZAot b2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYgd2lsbCBiZSBzeW1saW5rZWQgaW50byB0aGUgY29sbGVj dGlvbi8gZGlyZWN0b3J5Lgorb2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYgd2lsbCBiZSBzeW1saW5r ZWQgaW50byB0aGUgZWZpLWJvb3Rsb2FkZXItcHJvZmlsZS4KIAogVGhlIHByb2NlZHVyZXMgaW4g dGhlIEhPT0tTIGxpc3QgY2FuIGJlIHVzZWQgdG8gZnVydGhlciBtb2RpZnkgdGhlIGJvb3Rsb2Fk ZXIKIHByb2ZpbGUuICBJdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uIGlu c3RlYWQgb2YgYSBsaXN0LgogCi1JZiB0aGUgSU5TVEFMTEVSIGFyZ3VtZW50IGlzIHVzZWQsIHRo ZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBpbnN0YWxsCi10aGUgYm9vdGxvYWRl ci4gIE90aGVyd2lzZSB0aGUgaW5zdGFsbGVyIG9mIHRoZSBGSU5BTC1CT09UTE9BREVSIHdpbGwg YmUgY2FsbGVkLiIKLSAgKGxldCogKChmaW5hbC1pbnN0YWxsZXIgKG9yIGluc3RhbGxlcgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJvb3Rsb2FkZXItaW5zdGFsbGVyIGZpbmFsLWJv b3Rsb2FkZXIpKSkKLSAgICAgICAgIChwcm9maWxlIChlZmktYm9vdGxvYWRlci1wcm9maWxlIGZp bGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9vdGxvYWRl ci1wYWNrYWdlIGZpbmFsLWJvb3Rsb2FkZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWYgKGxpc3Q/IGhvb2tzKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhvb2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxpc3QgaG9va3MpKSkpKQotICAgIChib290bG9hZGVyCi0gICAg IChpbmhlcml0IGZpbmFsLWJvb3Rsb2FkZXIpCi0gICAgIChwYWNrYWdlIHByb2ZpbGUpCi0gICAg IChpbnN0YWxsZXIKLSAgICAgICN+KGxhbWJkYSAoYm9vdGxvYWRlciB0YXJnZXQgbW91bnQtcG9p bnQpCi0gICAgICAgICAgKCMkZmluYWwtaW5zdGFsbGVyIGJvb3Rsb2FkZXIgdGFyZ2V0IG1vdW50 LXBvaW50KQotICAgICAgICAgIChjb3B5LXJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgIChzdHJpbmct YXBwZW5kIGJvb3Rsb2FkZXIgIi9jb2xsZWN0aW9uIikKLSAgICAgICAgICAgKHN0cmluZy1hcHBl bmQgbW91bnQtcG9pbnQgdGFyZ2V0KQotICAgICAgICAgICAjOmZvbGxvdy1zeW1saW5rcz8gI3QK LSAgICAgICAgICAgIzpsb2cgKCVtYWtlLXZvaWQtcG9ydCAidyIpKSkpKSkpCitJZiB0aGUgSU5T VEFMTEVSIGFyZ3VtZW50IGlzIHVzZWQsIHRoZW4gdGhpcyBnZXhwIHByb2NlZHVyZSB3aWxsIGJl IGNhbGxlZCB0bworaW5zdGFsbCB0aGUgZWZpLWJvb3Rsb2FkZXItcHJvZmlsZS4gIE90aGVyd2lz ZSB0aGUgaW5zdGFsbGVyIG9mIHRoZQorRklOQUwtQk9PVExPQURFUiB3aWxsIGJlIGNhbGxlZC4K KworSWYgdGhlIERJU0stSU1BR0UtSU5TVEFMTEVSIGlzIHVzZWQsIHRoZW4gdGhpcyBnZXhwIHBy b2NlZHVyZSB3aWxsIGJlIGNhbGxlZAordG8gaW5zdGFsbCB0aGUgZWZpLWJvb3Rsb2FkZXItcHJv ZmlsZSBpbnRvIGEgZGlzay1pbWFnZS4gIE90aGVyd2lzZSB0aGUKK2Rpc2staW1hZ2UtaW5zdGFs bGVyIG9mIHRoZSBGSU5BTC1CT09UTE9BREVSIHdpbGwgYmUgY2FsbGVkLiIKKyAgKGJvb3Rsb2Fk ZXIKKyAgICAoaW5oZXJpdCBmaW5hbC1ib290bG9hZGVyKQorICAgIChuYW1lICJlZmktYm9vdGxv YWRlci1jaGFpbiIpCisgICAgKHBhY2thZ2UKKyAgICAgKGVmaS1ib290bG9hZGVyLXByb2ZpbGUg KGNvbnMgKGJvb3Rsb2FkZXItcGFja2FnZSBmaW5hbC1ib290bG9hZGVyKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChsaXN0PyBob29r cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdCBob29rcykpKSkKKyAgICAoaW5zdGFsbGVyCisgICAg IChvciBpbnN0YWxsZXIKKyAgICAgICAgIChib290bG9hZGVyLWluc3RhbGxlciBmaW5hbC1ib290 bG9hZGVyKSkpCisgICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyCisgICAgIChvciBkaXNrLWltYWdl LWluc3RhbGxlcgorICAgICAgICAgKGJvb3Rsb2FkZXItZGlzay1pbWFnZS1pbnN0YWxsZXIgZmlu YWwtYm9vdGxvYWRlcikpKSkpCmRpZmYgLS1naXQgYS9nbnUvYm9vdGxvYWRlci9ncnViLnNjbSBi L2dudS9ib290bG9hZGVyL2dydWIuc2NtCmluZGV4IDEyMGNkNTUwMTIuLjBiYTZhYTRkYWQgMTAw NjQ0Ci0tLSBhL2dudS9ib290bG9hZGVyL2dydWIuc2NtCisrKyBiL2dudS9ib290bG9hZGVyL2dy dWIuc2NtCkBAIC01MCwxMSArNTAsMTIgQEAgKGRlZmluZS1tb2R1bGUgKGdudSBib290bG9hZGVy IGdydWIpCiAgICAgICAgICAgICBncnViLXRoZW1lLWNvbG9yLWhpZ2hsaWdodAogICAgICAgICAg ICAgZ3J1Yi10aGVtZS1nZnhtb2RlCiAKLSAgICAgICAgICAgIGluc3RhbGwtZ3J1Yi1lZmktbmV0 Ym9vdAorICAgICAgICAgICAgbWFrZS1ncnViLWVmaS1uZXRib290LWluc3RhbGxlcgogCiAgICAg ICAgICAgICBncnViLWJvb3Rsb2FkZXIKICAgICAgICAgICAgIGdydWItZWZpLWJvb3Rsb2FkZXIK ICAgICAgICAgICAgIGdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcgorICAgICAgICAgICAgZ3J1 Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9vdGxvYWRlcgogICAgICAgICAgICAgZ3J1Yi1ta3Jl c2N1ZS1ib290bG9hZGVyCiAgICAgICAgICAgICBncnViLW1pbmltYWwtYm9vdGxvYWRlcgogCkBA IC0zNDgsNyArMzQ5LDcgQEAgKGRlZmluZSAoZ3J1Yi1yb290LXNlYXJjaCBkZXZpY2UgZmlsZSkK ICAgICAgICAgKChvciAjZiAoPyBzdHJpbmc/KSkKICAgICAgICAgICN+KGZvcm1hdCAjZiAic2Vh cmNoIC0tZmlsZSAtLXNldCB+YSIgIyRmaWxlKSkpKSkKIAotKGRlZmluZSogKGdydWItY29uZmln dXJhdGlvbi1maWxlIGNvbmZpZyBlbnRyaWVzCisoZGVmaW5lKiAobWFrZS1ncnViLWNvbmZpZ3Vy YXRpb24gZ3J1YiBjb25maWcgZW50cmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICM6a2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZSAjZikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtICglY3VycmVudC1zeXN0 ZW0pKQpAQCAtMzc4LDI3ICszNzksMjcgQEAgKGRlZmluZSAobWVudS1lbnRyeS0+Z2V4cCBlbnRy eSkKICAgICAgICAgICAgICAgICAoaW5pdHJkIChub3JtYWxpemUtZmlsZSAobWVudS1lbnRyeS1p bml0cmQgZW50cnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2 aWNlLW1vdW50LXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RvcmUtZGlyZWN0b3J5LXByZWZpeCkpKQotICAgICAgICAgOzsgSGVyZSBERVZJQ0UgaXMgdGhl IHN0b3JlIGFuZCBERVZJQ0UtTU9VTlQtUE9JTlQgaXMgaXRzIG1vdW50IHBvaW50LgotICAgICAg ICAgOzsgVXNlIHRoZSByaWdodCBmaWxlIG5hbWVzIGZvciBMSU5VWCBhbmQgSU5JVFJEIGluIGNh c2UKLSAgICAgICAgIDs7IERFVklDRS1NT1VOVC1QT0lOVCBpcyBub3QgIi8iLCBtZWFuaW5nIHRo YXQgdGhlIHN0b3JlIGlzIG9uIGEKLSAgICAgICAgIDs7IHNlcGFyYXRlIHBhcnRpdGlvbi4KLQot ICAgICAgICAgOzsgV2hlbiBCVFJGUy1TVUJWT0xVTUUtRklMRS1OQU1FIGlzIGRlZmluZWQsIHBy ZXBlbmQgaXQgdGhlIGxpbnV4IGFuZAotICAgICAgICAgOzsgaW5pdHJkIHBhdGhzLCB0byBhbGxv dyBib290aW5nIGZyb20gYSBCdHJmcyBzdWJ2b2x1bWUuCi0gICAgICAgICAjfihmb3JtYXQgcG9y dCAibWVudWVudHJ5IH5zIHsKKyAgICAgICAgICAgIDs7IEhlcmUgREVWSUNFIGlzIHRoZSBzdG9y ZSBhbmQgREVWSUNFLU1PVU5ULVBPSU5UIGlzIGl0cyBtb3VudCBwb2ludC4KKyAgICAgICAgICAg IDs7IFVzZSB0aGUgcmlnaHQgZmlsZSBuYW1lcyBmb3IgTElOVVggYW5kIElOSVRSRCBpbiBjYXNl CisgICAgICAgICAgICA7OyBERVZJQ0UtTU9VTlQtUE9JTlQgaXMgbm90ICIvIiwgbWVhbmluZyB0 aGF0IHRoZSBzdG9yZSBpcyBvbiBhCisgICAgICAgICAgICA7OyBzZXBhcmF0ZSBwYXJ0aXRpb24u CisKKyAgICAgICAgICAgIDs7IFdoZW4gQlRSRlMtU1VCVk9MVU1FLUZJTEUtTkFNRSBpcyBkZWZp bmVkLCBwcmVwZW5kIGl0IHRoZSBsaW51eCBhbmQKKyAgICAgICAgICAgIDs7IGluaXRyZCBwYXRo cywgdG8gYWxsb3cgYm9vdGluZyBmcm9tIGEgQnRyZnMgc3Vidm9sdW1lLgorICAgICAgICAgICAg I34oZm9ybWF0IHBvcnQgIm1lbnVlbnRyeSB+cyB7CiAgIH5hCiAgIGxpbnV4IH5hIH5hCiAgIGlu aXRyZCB+YQogfX4lIgotICAgICAgICAgICAgICAgICAgICMkbGFiZWwKLSAgICAgICAgICAgICAg ICAgICAjJChncnViLXJvb3Qtc2VhcmNoIGRldmljZSBsaW51eCkKLSAgICAgICAgICAgICAgICAg ICAjJGxpbnV4IChzdHJpbmctam9pbiAobGlzdCAjJEBhcmd1bWVudHMpKQotICAgICAgICAgICAg ICAgICAgICMkaW5pdHJkKSkKKyAgICAgICAgICAgICAgICAgICAgICAjJGxhYmVsCisgICAgICAg ICAgICAgICAgICAgICAgIyQoZ3J1Yi1yb290LXNlYXJjaCBkZXZpY2UgbGludXgpCisgICAgICAg ICAgICAgICAgICAgICAgIyRsaW51eCAoc3RyaW5nLWpvaW4gKGxpc3QgIyRAYXJndW1lbnRzKSkK KyAgICAgICAgICAgICAgICAgICAgICAjJGluaXRyZCkpCiAgICAgICAgICAgKGxldCAoKGtlcm5l bCAobWVudS1lbnRyeS1tdWx0aWJvb3Qta2VybmVsIGVudHJ5KSkKICAgICAgICAgICAgICAgICAo YXJndW1lbnRzIChtZW51LWVudHJ5LW11bHRpYm9vdC1hcmd1bWVudHMgZW50cnkpKQogICAgICAg ICAgICAgICAgIChtb2R1bGVzIChtZW51LWVudHJ5LW11bHRpYm9vdC1tb2R1bGVzIGVudHJ5KSkK ICAgICAgICAgICAgICAgICAocm9vdC1pbmRleCAxKSkgICAgICAgICAgICA7IFhYWCBFRkkgd2ls bCBuZWVkIHJvb3QtaW5kZXggMgotICAgICAgICAjfihmb3JtYXQgcG9ydCAiCisgICAgICAgICAg ICAjfihmb3JtYXQgcG9ydCAiCiBtZW51ZW50cnkgfnMgewogICBtdWx0aWJvb3QgfmEgcm9vdD1k ZXZpY2U6aGQwc35hfmF+YQogfX4lIgpAQCAtNDM1LDkgKzQzNiw3IEBAIChkZWZpbmUgKHN1Z2Fy KQogICAoZGVmaW5lIGxvY2FsZS1jb25maWcKICAgICAobGV0KiAoKGVudHJ5IChmaXJzdCBhbGwt ZW50cmllcykpCiAgICAgICAgICAgIChkZXZpY2UgKG1lbnUtZW50cnktZGV2aWNlIGVudHJ5KSkK LSAgICAgICAgICAgKG1vdW50LXBvaW50IChtZW51LWVudHJ5LWRldmljZS1tb3VudC1wb2ludCBl bnRyeSkpCi0gICAgICAgICAgIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24t Ym9vdGxvYWRlciBjb25maWcpKQotICAgICAgICAgICAoZ3J1YiAoYm9vdGxvYWRlci1wYWNrYWdl IGJvb3Rsb2FkZXIpKSkKKyAgICAgICAgICAgKG1vdW50LXBvaW50IChtZW51LWVudHJ5LWRldmlj ZS1tb3VudC1wb2ludCBlbnRyeSkpKQogICAgICAgI34obGV0ICgobG9jYWxlICMkKGFuZCBsb2Nh bGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZS1kZWZpbml0aW9uLXNvdXJj ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZS1uYW1lLT5kZWZpbml0aW9u IGxvY2FsZSkpKSkKQEAgLTQ2Myw4ICs0NjIsNiBAQCAoZGVmaW5lIGxvY2FsZS1jb25maWcKIAog ICAoZGVmaW5lIGtleWJvYXJkLWxheW91dC1jb25maWcKICAgICAobGV0KiAoKGxheW91dCAoYm9v dGxvYWRlci1jb25maWd1cmF0aW9uLWtleWJvYXJkLWxheW91dCBjb25maWcpKQotICAgICAgICAg ICAoZ3J1YiAgIChib290bG9hZGVyLXBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgKGJvb3Rs b2FkZXItY29uZmlndXJhdGlvbi1ib290bG9hZGVyIGNvbmZpZykpKQogICAgICAgICAgICAoa2V5 bWFwKiAoYW5kIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlib2FyZC1sYXlv dXQtZmlsZSBsYXlvdXQgIzpncnViIGdydWIpKSkKICAgICAgICAgICAgKGVudHJ5IChmaXJzdCBh bGwtZW50cmllcykpCkBAIC01MTUsNiArNTEyLDE2IEBAIChkZWZpbmUgYnVpbGRlcgogICAgICAg ICAgICAgICAgICAjOm9wdGlvbnMgJygjOmxvY2FsLWJ1aWxkPyAjdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjOnN1YnN0aXR1dGFibGU/ICNmKSkpCiAKKyhkZWZpbmUgKGdydWItY29u ZmlndXJhdGlvbi1maWxlIGNvbmZpZyAuIGFyZ3MpCisgIChsZXQqICgoYm9vdGxvYWRlciAoYm9v dGxvYWRlci1jb25maWd1cmF0aW9uLWJvb3Rsb2FkZXIgY29uZmlnKSkKKyAgICAgICAgIChncnVi IChib290bG9hZGVyLXBhY2thZ2UgYm9vdGxvYWRlcikpKQorICAgIChhcHBseSBtYWtlLWdydWIt Y29uZmlndXJhdGlvbiBncnViIGNvbmZpZyBhcmdzKSkpCisKKyhkZWZpbmUgKGdydWItZWZpLWNv bmZpZ3VyYXRpb24tZmlsZSAuIGFyZ3MpCisgIChhcHBseSBtYWtlLWdydWItY29uZmlndXJhdGlv biBncnViLWVmaSBhcmdzKSkKKworKGRlZmluZSBncnViLWNmZyAiL2Jvb3QvZ3J1Yi9ncnViLmNm ZyIpCisKIAwKIAogOzs7CkBAIC02MDgsNDIgKzYxNSwzMSBAQCAoZGVmaW5lIGluc3RhbGwtZ3J1 Yi1lZmkKICAgICAgICAgICAgICAgICAgICAgICAgICItLWJvb3Rsb2FkZXItaWQ9R3VpeCIKICAg ICAgICAgICAgICAgICAgICAgICAgICItLWVmaS1kaXJlY3RvcnkiIHRhcmdldC1lc3ApKSkpKQog Ci0oZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qgc3ViZGlyKQotICAiRGVmaW5lIGEg Z3J1Yi1lZmktbmV0Ym9vdCBib290bG9hZGVyIGluc3RhbGxlciBmb3IgaW5zdGFsbGF0aW9uIGlu IFNVQkRJUiwKLXdoaWNoIGlzIHVzdWFsbHkgZWZpL0d1aXggb3IgZWZpL2Jvb3QuIgotICAobGV0 KiAoKHN5c3RlbSAoc3RyaW5nLXNwbGl0IChuaXgtc3lzdGVtLT5nbnUtdHJpcGxldAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKCVjdXJyZW50LXRhcmdldC1zeXN0ZW0pCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wtKSkKLSAgICAgICAgIChhcmNoIChmaXJz dCBzeXN0ZW0pKQotICAgICAgICAgKGJvb3QtZWZpLWxpbmsgKG1hdGNoIHN5c3RlbQotICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBUaGVzZSBhcmUgdGhlIHN1cHBvcnRlbmQgc3lzdGVtcyBh bmQgdGhlIG5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGRlZmluZWQgYnkgdGhl IFVFRkkgc3RhbmRhcmQgZm9yIHJlbW92YWJsZSBtZWRpYS4KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgiaTY4NiIgXyAuLi4pICAgICAgICAiL2Jvb3RpYTMyLmVmaSIpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICgoIng4Nl82NCIgXyAuLi4pICAgICAgIi9ib290eDY0LmVmaSIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICgoImFybSIgXyAuLi4pICAgICAgICAgIi9ib290YXJt LmVmaSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoImFhcmNoNjQiIF8gLi4uKSAgICAg Ii9ib290YWE2NC5lZmkiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAoKCJyaXNjdiIgXyAu Li4pICAgICAgICIvYm9vdHJpc2N2MzIuZWZpIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg KCgicmlzY3Y2NCIgXyAuLi4pICAgICAiL2Jvb3RyaXNjdjY0LmVmaSIpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIDs7IE90aGVyIHN5c3RlbXMgYXJlIG5vdCBzdXBwb3J0ZWQsIGFsdGhvdWdo IGRlZmluZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7ICgoInJpc2N2MTI4IiBfIC4u LikgIi9ib290cmlzY3YxMjguZWZpIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgKCgi aWE2NCIgXyAuLi4pICAgICAiL2Jvb3RpYTY0LmVmaSIpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICgoXyAuLi4pICAgICAgICAgICAgICAgI2YpKSkKLSAgICAgICAgIChjb3JlLWVmaSAoc3Ry aW5nLWFwcGVuZAotICAgICAgICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBhcmNoIGRlcGVu ZGVudCBmaWxlIG5hbWUgb2YgR1JVQiwgZS5nLgotICAgICAgICAgICAgICAgICAgICA7OyBpMzY4 LWVmaS9jb3JlLmVmaSBvciBhcm02NC1lZmkvY29yZS5lZmkuCi0gICAgICAgICAgICAgICAgICAg IChtYXRjaCBhcmNoCi0gICAgICAgICAgICAgICAgICAgICAgKCJpNjg2IiAgICAiaTM4NiIpCi0g ICAgICAgICAgICAgICAgICAgICAgKCJhYXJjaDY0IiAiYXJtNjQiKQotICAgICAgICAgICAgICAg ICAgICAgICgicmlzY3YiICAgInJpc2N2MzIiKQotICAgICAgICAgICAgICAgICAgICAgIChfICAg ICAgICAgYXJjaCkpCi0gICAgICAgICAgICAgICAgICAgICItZWZpL2NvcmUuZWZpIikpKQotICAg ICh3aXRoLWltcG9ydGVkLW1vZHVsZXMKLSAgICAgJygoZ3VpeCBidWlsZCB1bmlvbikpCi0gICAg ICN+KGxhbWJkYSAoYm9vdGxvYWRlciB0YXJnZXQgbW91bnQtcG9pbnQpCi0gICAgICAgICAiSW5z dGFsbCB0aGUgQk9PVExPQURFUiwgd2hpY2ggbXVzdCBiZSB0aGUgcGFja2FnZSBncnViLCBhcyBl LmcuCi1ib290eDY0LmVmaSBvciBib290YWE2NC5lZmkgaW50byBTVUJESVIsIHdoaWNoIGlzIHVz dWFsbHkgZWZpL0d1aXggb3IgZWZpL2Jvb3QsCi1iZWxvdyB0aGUgZGlyZWN0b3J5IFRBUkdFVCBm b3IgdGhlIHN5c3RlbSB3aG9zZSByb290IGlzIG1vdW50ZWQgYXQgTU9VTlQtUE9JTlQuCisoZGVm aW5lKiAobWFrZS1ncnViLWVmaS1uZXRib290LWluc3RhbGxlciBncnViLWVmaSBncnViLWNmZyBz dWJkaXIpCisgICJNYWtlIGEgYm9vdGxvYWRlci1pbnN0YWxsZXIgZm9yIGEgZ3J1Yi1lZmktbmV0 Ym9vdCBib290bG9hZGVyLCB3aGljaCBleHBlY3RzCitpdHMgZmlsZXMgaW4gU1VCRElSIGFuZCBp dHMgY29uZmlndXJhdGlvbiBmaWxlIGluIEdSVUItQ0ZHLgorCitBcyBhIGdydWItZWZpLW5ldGJv b3QgcGFja2FnZSBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBieSAnZ3J1Yi1ta25ldGRpcicsIHRo ZQoraW5zdGFsbGVyIGJhc2ljYWxseSBjb3BpZXMgYWxsIGZpbGVzIGZyb20gdGhlIGJvb3Rsb2Fk ZXItcGFja2FnZSAob3IgcHJvZmlsZSkKK2ludG8gdGhlIGJvb3Rsb2FkZXItdGFyZ2V0IGRpcmVj dG9yeS4KKworQWRkaXRpb25hbGx5IGZvciBuZXR3b3JrIGJvb3Rpbmcgb3ZlciBURlRQLCB0d28g cmVsYXRpdmUgc3ltbGlua3MgdG8gdGhlIHN0b3JlCithbmQgdG8gdGhlIEdSVUItQ0ZHIGZpbGUg YXJlIG5lY2Vzc2FyeS4gIER1ZSB0byB0aGlzIGEgVEZUUCByb290IGRpcmVjdG9yeSBtdXN0Citu b3QgYmUgbG9jYXRlZCBvbiBhIEZBVCBmaWxlLXN5c3RlbS4KKworSWYgdGhlIGJvb3Rsb2FkZXIt dGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgc3ltbGlua3MsIHRoZW4gaXQgaXMgYXNzdW1lZCB0byBi ZSBhCitraW5kIG9mIEVGSSBTeXN0ZW0gUGFydGl0aW9uIChFU1ApLiAgSW4gdGhpcyBjYXNlIGFu IGludGVybWVkaWF0ZSBjb25maWd1cmF0aW9uCitmaWxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgaGVs cCBvZiBHUlVCLUVGSSB0byBsb2FkIHRoZSBHUlVCLUNGRy4KKworVGhlIGluc3RhbGxlciBpcyB1 c2FibGUgZm9yIGFueSBlZmktYm9vdGxvYWRlci1jaGFpbiwgd2hpY2ggcHJlcGFyZXMgdGhlCiti b290bG9hZGVyLXByb2ZpbGUgaW4gYSB3YXkgcmVhZHkgZm9yIGNvcHlpbmcuCisKK1RoZSBpbnN0 YWxsZXIgZG9lcyBub3QgbWFuaXB1bGF0ZSB0aGUgc3lzdGVtJ3MgJ1VFRkkgQm9vdCBNYW5hZ2Vy Jy4iCisgICh3aXRoLWltcG9ydGVkLW1vZHVsZXMgJygoZ3VpeCBidWlsZCB1bmlvbikpCisgICAg I34obGFtYmRhIChib290bG9hZGVyIHRhcmdldCBtb3VudC1wb2ludCkKKyAgICAgICAgIkNvcHkg dGhlIEJPT1RMT0FERVIsIHdoaWNoIG11c3QgYmUgYSBwcmVpbnN0YWxsZWQgZ3J1Yi1lZmktbmV0 Ym9vdAorcGFja2FnZSB3aXRoIGEgU1VCRElSIGxpa2UgZWZpL2Jvb3Qgb3IgZWZpL0d1aXgsIGJl bG93IHRoZSBkaXJlY3RvcnkKK1RBUkdFVCBmb3IgdGhlIHN5c3RlbSB3aG9zZSByb290IGlzIG1v dW50ZWQgYXQgTU9VTlQtUE9JTlQuCiAKIE1PVU5ULVBPSU5UIGlzIHRoZSBsYXN0IGFyZ3VtZW50 IGluICdndWl4IHN5c3RlbSBpbml0IC9ldGMvY29uZmlnLnNjbSBtbnQvcG9pbnQnCiBvciAnLycg Zm9yIG90aGVyICdndWl4IHN5c3RlbScgY29tbWFuZHMuCkBAIC02NTMsMTcgKzY0OSwxOCBAQCAo ZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qgc3ViZGlyKQogCiAob3BlcmF0aW5nLXN5 c3RlbQogIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAg ICAgKHRhcmdldHMgJyhcIi9ib290XCIpKQorICAgICAgICAgICAgICAodGFyZ2V0cyAnKFwiL2Jv b3QvZWZpXCIpKQogICAgICAgICAgICAgICDigKYpKQogIOKApikKIAogVEFSR0VUIGlzIHJlcXVp cmVkIHRvIGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLCB1c3VhbGx5IG1vdW50ZWQgdmlh IE5GUywKIGFuZCBmaW5hbGx5IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IGEgVEZUUCBzZXJ2ZXIg YXMgdGhlIFRGVFAgcm9vdCBkaXJlY3RvcnkuCiAKK1VzdWFsbHkgdGhlIGluc3RhbGxlciB3aWxs IGJlIHVzZWQgdG8gcHJlcGFyZSBuZXR3b3JrIGJvb3Rpbmcgb3ZlciBURlRQLiAgVGhlbgogR1JV QiB3aWxsIGxvYWQgdGZ0cDovL3NlcnZlci9TVUJESVIvZ3J1Yi5jZmcgYW5kIHRoaXMgZmlsZSB3 aWxsIGluc3RydWN0IGl0IHRvCiBsb2FkIG1vcmUgZmlsZXMgZnJvbSB0aGUgc3RvcmUgbGlrZSB0 ZnRwOi8vc2VydmVyL2dudS9zdG9yZS/igKYtbGludXjigKYvSW1hZ2UuCiAKLVRvIG1ha2UgdGhp cyBwb3NzaWJsZSB0d28gc3ltbGlua3Mgd2lsbCBiZSBjcmVhdGVkLiBUaGUgZmlyc3Qgc3ltbGlu ayBwb2ludHMKK1RvIG1ha2UgdGhpcyBwb3NzaWJsZSB0d28gc3ltbGlua3Mgd2lsbCBiZSBjcmVh dGVkLiAgVGhlIGZpcnN0IHN5bWxpbmsgcG9pbnRzCiByZWxhdGl2ZWx5IGZvcm0gTU9VTlQtUE9J TlQvVEFSR0VUL1NVQkRJUi9ncnViLmNmZyB0bwogTU9VTlQtUE9JTlQvYm9vdC9ncnViL2dydWIu Y2ZnLCBhbmQgdGhlIHNlY29uZCBzeW1saW5rIHBvaW50cyByZWxhdGl2ZWx5IGZyb20KIE1PVU5U LVBPSU5UL1RBUkdFVC8lc3RvcmUtcHJlZml4IHRvIE1PVU5ULVBPSU5ULyVzdG9yZS1wcmVmaXgu CkBAIC02NzMsMzQgKzY3MCw3OCBAQCAoZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qg c3ViZGlyKQogCiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgYm90aCBzeW1saW5r cyB3aWxsIHBvaW50IG91dHNpZGUgdGhlIFRGVFAgcm9vdAogZGlyZWN0b3J5IGFuZCB0aGF0IHRo ZSBUQVJHRVQvJXN0b3JlLXByZWZpeCBzeW1saW5rIG1ha2VzIHRoZSB3aG9sZSBzdG9yZQotYWNj ZXNzaWJsZSB2aWEgVEZUUC4gUG9zc2libHkgdGhlIFRGVFAgc2VydmVyIG11c3QgYmUgY29uZmln dXJlZAotdG8gYWxsb3cgYWNjZXNzZXMgb3V0c2lkZSBpdHMgVEZUUCByb290IGRpcmVjdG9yeS4g VGhpcyBtYXkgbmVlZCB0byBiZQotY29uc2lkZXJlZCBmb3Igc2VjdXJpdHkgYXNwZWN0cy4iCi0g ICAgICAgICAodXNlLW1vZHVsZXMgKChndWl4IGJ1aWxkIHVuaW9uKSAjOnNlbGVjdCAoc3ltbGlu ay1yZWxhdGl2ZSkpKQotICAgICAgICAgKGxldCogKChuZXQtZGlyIChzdHJpbmctYXBwZW5kIG1v dW50LXBvaW50IHRhcmdldCAiLyIpKQotICAgICAgICAgICAgICAgIChzdWItZGlyIChzdHJpbmct YXBwZW5kIG5ldC1kaXIgIyRzdWJkaXIgIi8iKSkKLSAgICAgICAgICAgICAgICAoc3RvcmUgKHN0 cmluZy1hcHBlbmQgbW91bnQtcG9pbnQgKCVzdG9yZS1wcmVmaXgpKSkKLSAgICAgICAgICAgICAg ICAoc3RvcmUtbGluayAoc3RyaW5nLWFwcGVuZCBuZXQtZGlyICglc3RvcmUtcHJlZml4KSkpCi0g ICAgICAgICAgICAgICAgKGdydWItY2ZnIChzdHJpbmctYXBwZW5kIG1vdW50LXBvaW50ICIvYm9v dC9ncnViL2dydWIuY2ZnIikpCi0gICAgICAgICAgICAgICAgKGdydWItY2ZnLWxpbmsgKHN0cmlu Zy1hcHBlbmQgc3ViLWRpciAoYmFzZW5hbWUgZ3J1Yi1jZmcpKSkKLSAgICAgICAgICAgICAgICAo Ym9vdC1lZmktbGluayAoc3RyaW5nLWFwcGVuZCBzdWItZGlyICMkYm9vdC1lZmktbGluaykpKQot ICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBzdG9yZS4KLSAgICAgICAg ICAgKG1rZGlyLXAgKGRpcm5hbWUgc3RvcmUtbGluaykpCi0gICAgICAgICAgIChmYWxzZS1pZi1l eGNlcHRpb24gKGRlbGV0ZS1maWxlIHN0b3JlLWxpbmspKQotICAgICAgICAgICAoc3ltbGluay1y ZWxhdGl2ZSBzdG9yZSBzdG9yZS1saW5rKQotICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1s aW5rIHRvIHRoZSBncnViLmNmZywgd2hpY2ggcG9pbnRzIGludG8gdGhlIHN0b3JlLgotICAgICAg ICAgICAobWtkaXItcCAoZGlybmFtZSBncnViLWNmZy1saW5rKSkKLSAgICAgICAgICAgKGZhbHNl LWlmLWV4Y2VwdGlvbiAoZGVsZXRlLWZpbGUgZ3J1Yi1jZmctbGluaykpCi0gICAgICAgICAgIChz eW1saW5rLXJlbGF0aXZlIGdydWItY2ZnIGdydWItY2ZnLWxpbmspCi0gICAgICAgICAgIDs7IElu c3RhbGwgR1JVQiwgd2hpY2ggcmVmZXJzIHRvIHRoZSBncnViLmNmZywgd2l0aCBzdXBwb3J0IGZv cgotICAgICAgICAgICA7OyBlbmNyeXB0ZWQgcGFydGl0aW9ucywKLSAgICAgICAgICAgKHNldGVu diAiR1JVQl9FTkFCTEVfQ1JZUFRPRElTSyIgInkiKQotICAgICAgICAgICAoaW52b2tlL3F1aWV0 IChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXIgIi9iaW4vZ3J1Yi1ta25ldGRpciIpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0tbmV0LWRpcmVjdG9yeT0iIG5ldC1k aXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0tc3ViZGlyPSIg IyRzdWJkaXIpKQotICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBib290bG9hZGVyIHN5bWxpbmss IHdoaWNoIHBvaW50cyB0byBjb3JlLmVmaSBvZiBHUlVCLgotICAgICAgICAgICAoZmFsc2UtaWYt ZXhjZXB0aW9uIChkZWxldGUtZmlsZSBib290LWVmaS1saW5rKSkKLSAgICAgICAgICAgKHN5bWxp bmsgIyRjb3JlLWVmaSBib290LWVmaS1saW5rKSkpKSkpCithY2Nlc3NpYmxlIHZpYSBURlRQLiAg UG9zc2libHkgdGhlIFRGVFAgc2VydmVyIG11c3QgYmUgY29uZmlndXJlZCB0byBhbGxvdworYWNj ZXNzZXMgb3V0c2lkZSBpdHMgVEZUUCByb290IGRpcmVjdG9yeS4gIFRoaXMgYWxsIG1heSBuZWVk IHRvIGJlIGNvbnNpZGVyZWQKK2ZvciBzZWN1cml0eSBhc3BlY3RzLiAgSXQgaXMgYWR2aXNlZCB0 byBkaXNhYmxlIGFueSBURlRQIHdyaXRlIGFjY2VzcyEKKworVGhlIGluc3RhbGxlciBjYW4gYWxz byBiZSB1c2VkIHRvIHByZXBhcmUgYm9vdGluZyBmcm9tIGxvY2FsIHN0b3JhZ2VzLCBpZiB0aGUK K3VuZGVybHlpbmcgZmlsZS1zeXN0ZW0sIGxpa2UgRkFUIG9uIGFuIEVGSSBTeXN0ZW0gUGFydGl0 aW9uIChFU1ApLCBkb2VzIG5vdAorc3VwcG9ydCBzeW1saW5rcy4gIEluIHRoaXMgY2FzZSB0aGUg TU9VTlQtUE9JTlQvVEFSR0VUL1NVQkRJUi9ncnViLmNmZyB3aWxsIGJlCitjcmVhdGVkIHdpdGgg dGhlIGhlbHAgb2YgR1JVQi1FRkkgdG8gbG9hZCB0aGUgL2Jvb3QvZ3J1Yi9ncnViLmNmZyBmaWxl LiAgQQorc3ltbGluayB0byB0aGUgc3RvcmUgaXMgbm90IG5lZWRlZCBpbiB0aGlzIGNhc2UuIgor ICAgICAgICA7OyBJbiBjb250ZXh0IG9mIGEgZGlzayBpbWFnZSBjcmVhdGlvbiBUQVJHRVQgd2ls bCBiZSAjZiBhbmQgYW4KKyAgICAgICAgOzsgaW5zdGFsbGVyIGlzIGV4cGVjdGVkIHRvIGRvIG5l Y2Vzc2FyeSBpbnN0YWxsYXRpb25zIG9uIE1PVU5ULVBPSU5ULAorICAgICAgICA7OyB3aGljaCB3 aWxsIGJlY29tZSB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgOzsgSWYgVEFSR0VUIGlz ICNmLCB0aGlzIGluc3RhbGxlciBoYXMgbm90aGluZyB0byBkbywgYXMgaXQgb25seSBjYXJlcwor ICAgICAgICA7OyBhYm91dCB0aGUgRUZJIFN5c3RlbSBQYXJ0aXRpb24gKEVTUCkuCisgICAgICAg ICh3aGVuIHRhcmdldAorICAgICAgICAgICh1c2UtbW9kdWxlcyAoKGd1aXggYnVpbGQgdW5pb24p ICM6c2VsZWN0IChzeW1saW5rLXJlbGF0aXZlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGlj ZS05IHBvcGVuKQorICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgcmRlbGltKSkKKyAgICAg ICAgICAobGV0KiAoKG1vdW50LXBvaW50L3RhcmdldCAoc3RyaW5nLWFwcGVuZCBtb3VudC1wb2lu dCB0YXJnZXQgIi8iKSkKKyAgICAgICAgICAgICAgICAgOzsgV2hlbiBpbnN0YWxsaW5nIEd1aXgs IGl0IGlzIGNvbW1vbiB0byBtb3VudCBUQVJHRVQgYmVsb3cKKyAgICAgICAgICAgICAgICAgOzsg TU9VTlQtUE9JTlQgcmF0aGVyIHRoYW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAgICAg ICAgICAoYm9vdGxvYWRlci10YXJnZXQgKGlmIChmaWxlLWV4aXN0cz8gbW91bnQtcG9pbnQvdGFy Z2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50LXBvaW50 L3RhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCkp CisgICAgICAgICAgICAgICAgIChzdG9yZSAoc3RyaW5nLWFwcGVuZCBtb3VudC1wb2ludCAoJXN0 b3JlLXByZWZpeCkpKQorICAgICAgICAgICAgICAgICAoc3RvcmUtbGluayAoc3RyaW5nLWFwcGVu ZCBib290bG9hZGVyLXRhcmdldCAoJXN0b3JlLXByZWZpeCkpKQorICAgICAgICAgICAgICAgICAo Z3J1Yi1jZmcgKHN0cmluZy1hcHBlbmQgbW91bnQtcG9pbnQgIyRncnViLWNmZykpCisgICAgICAg ICAgICAgICAgIChncnViLWNmZy1saW5rIChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXItdGFyZ2V0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMkc3ViZGly ICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFz ZW5hbWUgZ3J1Yi1jZmcpKSkpCisgICAgICAgICAgICA7OyBDb3B5IHRoZSBib290bG9hZGVyIGlu dG8gdGhlIGJvb3Rsb2FkZXItdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDs7IFNob3Vs ZCB3ZSBiZWZvcmVoYW5kIHJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbnkgZXhpc3RpbmcgZmlsZT8KKyAg ICAgICAgICAgIChjb3B5LXJlY3Vyc2l2ZWx5IGJvb3Rsb2FkZXIgYm9vdGxvYWRlci10YXJnZXQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6Zm9sbG93LXN5bWxpbmtzPyAjdAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpsb2cgKCVtYWtlLXZvaWQtcG9ydCAidyIpKQor ICAgICAgICAgICAgOzsgRm9yIFRGVFAgd2UgbmVlZCB0byBpbnN0YWxsIGFkZGl0aW9uYWwgcmVs YXRpdmUgc3ltbGlua3MuCisgICAgICAgICAgICA7OyBJZiB3ZSBpbnN0YWxsIG9uIGFuIEVGSSBT eXN0ZW0gUGFydGl0aW9uIChFU1ApIG9yIHNvbWUgb3RoZXIgRkFUCisgICAgICAgICAgICA7OyBm aWxlLXN5c3RlbSwgdGhlbiBzeW1saW5rcyBjYW5ub3QgYmUgY3JlYXRlZCBhbmQgYXJlIG5vdCBu ZWVkZWQuCisgICAgICAgICAgICA7OyBUaGVyZWZvcmUgd2UgaWdub3JlIGV4Y2VwdGlvbnMgd2hl biB0cnlpbmcuCisgICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBncnVi LmNmZy4KKyAgICAgICAgICAgIChta2Rpci1wIChkaXJuYW1lIGdydWItY2ZnLWxpbmspKQorICAg ICAgICAgICAgKGZhbHNlLWlmLWV4Y2VwdGlvbiAoZGVsZXRlLWZpbGUgZ3J1Yi1jZmctbGluaykp CisgICAgICAgICAgICAoaWYgKHVuc3BlY2lmaWVkPworICAgICAgICAgICAgICAgIChmYWxzZS1p Zi1leGNlcHRpb24gKHN5bWxpbmstcmVsYXRpdmUgZ3J1Yi1jZmcgZ3J1Yi1jZmctbGluaykpKQor ICAgICAgICAgICAgICA7OyBTeW1saW5rcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAo YmVnaW4KKyAgICAgICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBzdG9y ZS4KKyAgICAgICAgICAgICAgICAobWtkaXItcCAoZGlybmFtZSBzdG9yZS1saW5rKSkKKyAgICAg ICAgICAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSBzdG9yZS1saW5rKSkK KyAgICAgICAgICAgICAgICAoc3ltbGluay1yZWxhdGl2ZSBzdG9yZSBzdG9yZS1saW5rKSkKKyAg ICAgICAgICAgICAgOzsgQ3JlYXRpbmcgc3ltbGlua3MgZG9lcyBub3Qgc2VlbSB0byBiZSBzdXBw b3J0ZWQuCisgICAgICAgICAgICAgIDs7IFByb2JhYmx5IGFuIEVTUCBpcyB1c2VkLgorICAgICAg ICAgICAgICA7OyBJbnN0ZWFkIHdlIGNhbiBzY3JpcHQgdG8gc2VhcmNoIGFuZCBsb2FkIHRoZSBh Y3R1YWwgZ3J1Yi5jZmcuCisgICAgICAgICAgICAgIChsZXQqICgocHJvYmUgIyQoZmlsZS1hcHBl bmQgZ3J1Yi1lZmkgIi9zYmluL2dydWItcHJvYmUiKSkKKyAgICAgICAgICAgICAgICAgICAgIChw b3J0CisgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLXBpcGUqIE9QRU5fUkVBRCBwcm9iZSAi LS10YXJnZXQ9ZnNfdXVpZCIgZ3J1Yi1jZmcpKQorICAgICAgICAgICAgICAgICAgICAgKHNlYXJj aC1yb290CisgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCAocmVhZC1saW5lIHBvcnQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgKCg/IGVvZi1vYmplY3Q/KQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgVGhlcmUgaXMgbm8gVVVJRCBhdmFpbGFibGUuIEFzIGEgZmFsbGJhY2sg c2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBldmVyeXdoZXJlIGZvciB0aGUg Z3J1Yi5jZmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAic2Vh cmNoIC0tZmlsZSAtLXNldCAiICMkZ3J1Yi1jZmcpKQorICAgICAgICAgICAgICAgICAgICAgICAg IChmcy11dWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBUaGUgVVVJRCB0byBsb2Fk IHRoZSBncnViLmNmZyBmcm9tIGlzIGtub3duLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgInNlYXJjaCAtLWZzLXV1aWQgLS1zZXQgIiBmcy11dWlkKSkpKQorICAg ICAgICAgICAgICAgICAgICAgKGxvYWQtZ3J1Yi1jZmcgKHN0cmluZy1hcHBlbmQgImNvbmZpZ2Zp bGUgIiAjJGdydWItY2ZnKSkpCisgICAgICAgICAgICAgICAgKGNsb3NlLXBpcGUgcG9ydCkKKyAg ICAgICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tZmlsZSBncnViLWNmZy1saW5rCisgICAgICAg ICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5IChzdHJp bmctam9pbiAobGlzdCBzZWFyY2gtcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9hZC1ncnViLWNmZykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJcbiIpKSkpKSkpKSkpKQogCiAMCiAKQEAgLTcxOCw3ICs3NTks NyBAQCAoZGVmaW5lIGdydWItYm9vdGxvYWRlcgogICAgKHBhY2thZ2UgZ3J1YikKICAgIChpbnN0 YWxsZXIgaW5zdGFsbC1ncnViKQogICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyIGluc3RhbGwtZ3J1 Yi1kaXNrLWltYWdlKQotICAgKGNvbmZpZ3VyYXRpb24tZmlsZSAiL2Jvb3QvZ3J1Yi9ncnViLmNm ZyIpCisgICAoY29uZmlndXJhdGlvbi1maWxlIGdydWItY2ZnKQogICAgKGNvbmZpZ3VyYXRpb24t ZmlsZS1nZW5lcmF0b3IgZ3J1Yi1jb25maWd1cmF0aW9uLWZpbGUpKSkKIAogKGRlZmluZSBncnVi LW1pbmltYWwtYm9vdGxvYWRlcgpAQCAtNzI4LDE3ICs3NjksMjkgQEAgKGRlZmluZSBncnViLW1p bmltYWwtYm9vdGxvYWRlcgogCiAoZGVmaW5lIGdydWItZWZpLWJvb3Rsb2FkZXIKICAgKGJvb3Rs b2FkZXIKLSAgIChpbmhlcml0IGdydWItYm9vdGxvYWRlcikKKyAgIChuYW1lICdncnViLWVmaSkK KyAgIChwYWNrYWdlIGdydWItZWZpKQogICAgKGluc3RhbGxlciBpbnN0YWxsLWdydWItZWZpKQog ICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyICNmKQotICAgKG5hbWUgJ2dydWItZWZpKQotICAgKHBh Y2thZ2UgZ3J1Yi1lZmkpKSkKKyAgIChjb25maWd1cmF0aW9uLWZpbGUgZ3J1Yi1jZmcpCisgICAo Y29uZmlndXJhdGlvbi1maWxlLWdlbmVyYXRvciBncnViLWNvbmZpZ3VyYXRpb24tZmlsZSkpKQog Ci0oZGVmaW5lIGdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcgorKGRlZmluZSAobWFrZS1ncnVi LWVmaS1uZXRib290LWJvb3Rsb2FkZXIgbmFtZSBzdWJkaXIpCiAgIChib290bG9hZGVyCi0gICAo aW5oZXJpdCBncnViLWVmaS1ib290bG9hZGVyKQotICAgKG5hbWUgJ2dydWItZWZpLW5ldGJvb3Qt Ym9vdGxvYWRlcikKLSAgIChpbnN0YWxsZXIgKGluc3RhbGwtZ3J1Yi1lZmktbmV0Ym9vdCAiZWZp L0d1aXgiKSkpKQorICAgKG5hbWUgbmFtZSkKKyAgIChwYWNrYWdlIChtYWtlLWdydWItZWZpLW5l dGJvb3QgKHN5bWJvbC0+c3RyaW5nIG5hbWUpIHN1YmRpcikpCisgICAoaW5zdGFsbGVyIChtYWtl LWdydWItZWZpLW5ldGJvb3QtaW5zdGFsbGVyIGdydWItZWZpIGdydWItY2ZnIHN1YmRpcikpCisg ICAoZGlzay1pbWFnZS1pbnN0YWxsZXIgI2YpCisgICAoY29uZmlndXJhdGlvbi1maWxlIGdydWIt Y2ZnKQorICAgKGNvbmZpZ3VyYXRpb24tZmlsZS1nZW5lcmF0b3IgZ3J1Yi1lZmktY29uZmlndXJh dGlvbi1maWxlKSkpCisKKyhkZWZpbmUgZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVyCisgICht YWtlLWdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlciAnZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9h ZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWZpL0d1aXgiKSkKKwor KGRlZmluZSBncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyCisgIChtYWtlLWdy dWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlciAnZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9v dGxvYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVmaS9ib290Iikp CiAKIChkZWZpbmUgZ3J1Yi1ta3Jlc2N1ZS1ib290bG9hZGVyCiAgIChib290bG9hZGVyCmRpZmYg LS1naXQgYS9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtIGIvZ251L3BhY2thZ2VzL2Jvb3Rs b2FkZXJzLnNjbQppbmRleCA3ZWE2ZjVhNjQ3Li42ODc2YWIxN2I5IDEwMDY0NAotLS0gYS9nbnUv cGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5z Y20KQEAgLTE1LDYgKzE1LDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAyMCwgMjAyMSBQaWVycmUg TGFuZ2xvaXMgPHBpZXJyZS5sYW5nbG9pc0BnbXguY29tPgogOzs7IENvcHlyaWdodCDCqSAyMDIx IFZpbmNlbnQgTGVnb2xsIDx2aW5jZW50LmxlZ29sbEBnbWFpbC5jb20+CiA7OzsgQ29weXJpZ2h0 IMKpIDIwMjEgQnJpY2UgV2FlZ2VuZWlyZSA8YnJpY2VAd2FlZ2VuZWkucmU+Cis7OzsgQ29weXJp Z2h0IMKpIDIwMjEgU3RlZmFuIDxzdGVmYW4tZ3VpeEB2b2RhZm9uZW1haWwuZGU+CiA7OzsKIDs7 OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtNjYsMTMgKzY3LDE3IEBA IChkZWZpbmUtbW9kdWxlIChnbnUgcGFja2FnZXMgYm9vdGxvYWRlcnMpCiAgICM6dXNlLW1vZHVs ZSAoZ251IHBhY2thZ2VzIHZpcnR1YWxpemF0aW9uKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNr YWdlcyB4b3JnKQogICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdudSkKKyAgIzp1 c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSB0cml2aWFsKQogICAjOnVzZS1tb2R1bGUgKGd1 aXggZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhwKQogICAjOnVzZS1tb2R1bGUg KGd1aXggZ2l0LWRvd25sb2FkKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGxpY2Vuc2VzKSAjOnBy ZWZpeCBsaWNlbnNlOikKICAgIzp1c2UtbW9kdWxlIChndWl4IHBhY2thZ2VzKQogICAjOnVzZS1t b2R1bGUgKGd1aXggdXRpbHMpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTEpCiAgICM6dXNl LW1vZHVsZSAoc3JmaSBzcmZpLTI2KQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAj OnVzZS1tb2R1bGUgKGljZS05IG9wdGFyZ3MpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVnZXgp KQogCiAoZGVmaW5lIHVuaWZvbnQKQEAgLTM2Niw2ICszNzEsOTEgQEAgKGRlZmluZS1wdWJsaWMg Z3J1Yi1oeWJyaWQKICAgICAgICAgICAgICAgICAgIChzY2FuZGlyIGlucHV0LWRpcikpCiAgICAg ICAgICAgICAgICAgICN0KSkpKSkpKSkpCiAKKyhkZWZpbmUtcHVibGljIChtYWtlLWdydWItZWZp LW5ldGJvb3QgbmFtZSBzdWJkaXIpCisgICJNYWtlIGEgZ3J1Yi1lZmktbmV0Ym9vdCBwYWNrYWdl IG5hbWVkIE5BTUUsIHdoaWNoIHdpbGwgYmUgYWJsZSB0byBib290IG92ZXIKK25ldHdvcmsgdmlh IFRGVFAgYnkgYWNjZXNzaW5nIGl0cyBmaWxlcyBpbiB0aGUgU1VCRElSIG9mIGEgVEZUUCByb290 IGRpcmVjdG9yeS4KK1RoaXMgcGFja2FnZSBpcyBhbHNvIGFibGUgdG8gYm9vdCBmcm9tIGxvY2Fs IHN0b3JhZ2UgZGV2aWNlcy4KKworQSBib290bG9hZGVyLWluc3RhbGxlciBiYXNpY2FsbHkgbmVl ZHMgdG8gY29weSB0aGUgcGFja2FnZSBjb250ZW50IGludG8gdGhlCitib290bG9hZGVyLXRhcmdl dCBkaXJlY3RvcnksIHdoaWNoIHdpbGwgdXN1YWxseSBiZSB0aGUgVEZUUCByb290LCBhcworJ2dy dWItbWtuZXRkaXInIHdpbGwgYmUgaW52b2tlZCBhbHJlYWR5IGR1cmluZyB0aGUgcGFja2FnZSBj cmVhdGlvbi4KKworQWx0ZXJuYXRpdmVseSB0aGUgYm9vdGxvYWRlci10YXJnZXQgZGlyZWN0b3J5 IGNhbiBiZSBhIG1vdW50ZWQgRUZJIFN5c3RlbQorUGFydGl0aW9uIChFU1ApLCBvciBhIHNpbWls YXIgcGFydGl0aW9uIHdpdGggYSBGQVQgZmlsZSBzeXN0ZW0sIGZvciBib290aW5nCitmcm9tIGxv Y2FsIHN0b3JhZ2UgZGV2aWNlcy4KKworVGhlIG5hbWUgb2YgdGhlIEdSVUIgRUZJIGJpbmFyeSB3 aWxsIGNvbmZvcm0gdG8gdGhlIFVFRkkgc3BlY2lmaWNhdGlvbiBmb3IKK3JlbW92YWJsZSBtZWRp YS4gIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIGl0IHdpbGwgYmUgZS5nLiBib290eDY0LmVmaSBv cgorYm9vdGFhNjQuZWZpIGJlbG93IFNVQkRJUi4KKworVGhlIFNVQkRJUiBhcmd1bWVudCBuZWVk cyB0byBiZSBzZXQgdG8gXCJlZmkvYm9vdFwiIHRvIGNyZWF0ZSBhIHBhY2thZ2Ugd2hpY2gKK2Nv bmZvcm1zIHRvIHRoZSBVRUZJIHNwZWNpZmljYXRpb24gZm9yIHJlbW92YWJsZSBtZWRpYS4KKwor VGhlIFNVQkRJUiBhcmd1bWVudCBkZWZhdWx0cyB0byBcImVmaS9HdWl4XCIsIGFzIGl0IGlzIGFs c28gdGhlIGNhc2UgZm9yCisnZ3J1Yi1lZmktYm9vdGxvYWRlcicuIgorICAocGFja2FnZQorICAg IChuYW1lIG5hbWUpCisgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVyc2lvbiBncnViLWVmaSkpCisg ICAgOzsgU291cmNlIGlzIG5vdCBuZWVkZWQsIGJ1dCBpdCBjYW5ub3QgYmUgb21pdHRlZC4KKyAg ICAoc291cmNlICNmKQorICAgIChidWlsZC1zeXN0ZW0gdHJpdmlhbC1idWlsZC1zeXN0ZW0pCisg ICAgKGFyZ3VtZW50cworICAgICAobGV0KiAoKHN5c3RlbSAoc3RyaW5nLXNwbGl0IChuaXgtc3lz dGVtLT5nbnUtdHJpcGxldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAo JWN1cnJlbnQtdGFyZ2V0LXN5c3RlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCVjdXJyZW50LXN5c3RlbSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNcLSkpCisgICAgICAgICAgICAoYXJjaCAoZmlyc3Qgc3lzdGVtKSkKKyAgICAgICAgICAg IChib290LWVmaQorICAgICAgICAgICAgIChtYXRjaCBzeXN0ZW0KKyAgICAgICAgICAgICAgIDs7 IFRoZXNlIGFyZSB0aGUgc3VwcG9ydGVuZCBzeXN0ZW1zIGFuZCB0aGUgbmFtZXMgZGVmaW5lZCBi eQorICAgICAgICAgICAgICAgOzsgdGhlIFVFRkkgc3RhbmRhcmQgZm9yIHJlbW92YWJsZSBtZWRp YS4KKyAgICAgICAgICAgICAgICgoImk2ODYiIF8gLi4uKSAgICAgICAgIi9ib290aWEzMi5lZmki KQorICAgICAgICAgICAgICAgKCgieDg2XzY0IiBfIC4uLikgICAgICAiL2Jvb3R4NjQuZWZpIikK KyAgICAgICAgICAgICAgICgoImFybSIgXyAuLi4pICAgICAgICAgIi9ib290YXJtLmVmaSIpCisg ICAgICAgICAgICAgICAoKCJhYXJjaDY0IiBfIC4uLikgICAgICIvYm9vdGFhNjQuZWZpIikKKyAg ICAgICAgICAgICAgICgoInJpc2N2IiBfIC4uLikgICAgICAgIi9ib290cmlzY3YzMi5lZmkiKQor ICAgICAgICAgICAgICAgKCgicmlzY3Y2NCIgXyAuLi4pICAgICAiL2Jvb3RyaXNjdjY0LmVmaSIp CisgICAgICAgICAgICAgICA7OyBPdGhlciBzeXN0ZW1zIGFyZSBub3Qgc3VwcG9ydGVkLCBhbHRo b3VnaCBkZWZpbmVkLgorICAgICAgICAgICAgICAgOzsgKCgicmlzY3YxMjgiIF8gLi4uKSAiL2Jv b3RyaXNjdjEyOC5lZmkiKQorICAgICAgICAgICAgICAgOzsgKCgiaWE2NCIgXyAuLi4pICAgICAi L2Jvb3RpYTY0LmVmaSIpCisgICAgICAgICAgICAgICAoKF8gLi4uKSAgICAgICAgICAgICAgICNm KSkpCisgICAgICAgICAgICAoY29yZS1lZmkgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAgICAg ICAgICAgICAgOzsgVGhpcyBpcyB0aGUgYXJjaCBkZXBlbmRlbnQgZmlsZSBuYW1lIG9mIEdSVUIs IGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgOzsgaTM2OC1lZmkvY29yZS5lZmkgb3IgYXJt NjQtZWZpL2NvcmUuZWZpLgorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2ggYXJjaAorICAg ICAgICAgICAgICAgICAgICAgICAgICgiaTY4NiIgICAgImkzODYiKQorICAgICAgICAgICAgICAg ICAgICAgICAgICgiYWFyY2g2NCIgImFybTY0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAo InJpc2N2IiAgICJyaXNjdjMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoXyAgICAgICAg IGFyY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAiLWVmaS9jb3JlLmVmaSIpKSkKKyAgICAg ICBgKCM6bW9kdWxlcyAoKGd1aXggYnVpbGQgdXRpbHMpKQorICAgICAgICAgIzpidWlsZGVyCisg ICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgKHVzZS1tb2R1bGVzIChndWl4IGJ1aWxkIHV0aWxz KSkKKyAgICAgICAgICAgKGxldCogKChib290bG9hZGVyIChhc3NvYy1yZWYgJWJ1aWxkLWlucHV0 cyAiZ3J1Yi1lZmkiKSkKKyAgICAgICAgICAgICAgICAgIChuZXQtZGlyIChhc3NvYy1yZWYgJW91 dHB1dHMgIm91dCIpKQorICAgICAgICAgICAgICAgICAgKHN1Yi1kaXIgKHN0cmluZy1hcHBlbmQg bmV0LWRpciAiLyIgLHN1YmRpciAiLyIpKQorICAgICAgICAgICAgICAgICAgKGJvb3QtZWZpIChz dHJpbmctYXBwZW5kIHN1Yi1kaXIgLGJvb3QtZWZpKSkKKyAgICAgICAgICAgICAgICAgIChjb3Jl LWVmaSAoc3RyaW5nLWFwcGVuZCBzdWItZGlyICxjb3JlLWVmaSkpKQorICAgICAgICAgICAgIDs7 IEluc3RhbGwgR1JVQiwgd2hpY2ggcmVmZXJzIHRvIHRoZSBncnViLmNmZywgd2l0aCBzdXBwb3J0 IGZvcgorICAgICAgICAgICAgIDs7IGVuY3J5cHRlZCBwYXJ0aXRpb25zLAorICAgICAgICAgICAg IChzZXRlbnYgIkdSVUJfRU5BQkxFX0NSWVBUT0RJU0siICJ5IikKKyAgICAgICAgICAgICAoaW52 b2tlL3F1aWV0IChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXIgIi9iaW4vZ3J1Yi1ta25ldGRpciIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLS1uZXQtZGlyZWN0 b3J5PSIgbmV0LWRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k ICItLXN1YmRpcj0iICxzdWJkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBUaGVz ZSBtb2R1bGVzIG11c3QgYmUgcHJlbG9hZGVkIHRvIGFsbG93IGJvb3RpbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IGZyb20gYW4gRVNQIG9yIGEgc2ltaWxhciBwYXJ0aXRpb24gd2l0 aCBhIEZBVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgZmlsZSBzeXN0ZW0uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLS1tb2R1bGVzPXBhcnRfbXNk b3MgcGFydF9ncHQgZmF0IikpCisgICAgICAgICAgICAgOzsgTW92ZSBHUlVCJ3MgY29yZS5lZmkg dG8gdGhlIHJlbW92YWJsZSBtZWRpYSBuYW1lLgorICAgICAgICAgICAgIChmYWxzZS1pZi1leGNl cHRpb24gKGRlbGV0ZS1maWxlIGJvb3QtZWZpKSkKKyAgICAgICAgICAgICAocmVuYW1lLWZpbGUg Y29yZS1lZmkgYm9vdC1lZmkpKSkpKSkKKyAgICAoaW5wdXRzIGAoKCJncnViLWVmaSIgLGdydWIt ZWZpKSkpCisgICAgKHN5bm9wc2lzIChwYWNrYWdlLXN5bm9wc2lzIGdydWItZWZpKSkKKyAgICAo ZGVzY3JpcHRpb24gKHBhY2thZ2UtZGVzY3JpcHRpb24gZ3J1Yi1lZmkpKQorICAgIChob21lLXBh Z2UgKHBhY2thZ2UtaG9tZS1wYWdlIGdydWItZWZpKSkKKyAgICAobGljZW5zZSAocGFja2FnZS1s aWNlbnNlIGdydWItZWZpKSkpKQorCiAoZGVmaW5lLXB1YmxpYyBzeXNsaW51eAogICAobGV0ICgo Y29tbWl0ICJiYjQxZTkzNWNjODNjNjI0MmRlMjRkMjI3MWUwNjdkNzZhZjM1ODVjIikpCiAgICAg KHBhY2thZ2UKLS0gCjIuMzUuMQoK --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0003-gnu-bootloader-Add-U-Boot-packages-for-Raspberry-.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0003-gnu-bootloader-Add-U-Boot-packages-for-Raspberry-.patch RnJvbSBmNmUwMWRiMDU4MWFkN2MyOTFhMjBmNWE4YjE1YmQ1OTI1YmE3MGFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxMToyMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg My84XSBnbnU6IGJvb3Rsb2FkZXI6IEFkZCBVLUJvb3QgcGFja2FnZXMgZm9yIFJhc3BiZXJyeSBQ aQogbW9kZWxzLgoKKiBnbnUvcGFja2FnZXMvYm9vdGxvYWRlci5zY20gKG1ha2UtdS1ib290LXBh Y2thZ2UpOiBBZGQga2V5d29yZApwYXJhbWV0ZXJzICduYW1lJyBhbmQgJ2Rlc2NyaXB0aW9uJy4K KG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlKTogTmV3IGZ1bmN0aW9uIHRvIG1ha2Ug bWluaW1hbCBwYWNrYWdlcy4KKCV1LWJvb3QtcnBpLWVmaS1jb25maWdzKTogTmV3IGhlbHBlciBs aXN0IHdpdGggY29uZmlnIHN0cmluZ3MuCigldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQs ICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTY0LWJpdCwKJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0 aW9uLCAldS1ib290LXJwaS1lZmktZGVzY3JpcHRpb24tMzItYml0KTogTmV3IGhlbHBlcgpzdHJp bmdzLgoodS1ib290LXJwaS0wLXcsIHUtYm9vdC1ycGksIHUtYm9vdC1ycGktMiwgdS1ib290LXJw aS0zLCB1LWJvb3QtcnBpLTQsCnUtYm9vdC1ycGktNjQsIHUtYm9vdC1ycGktMC13LWVmaSwgdS1i b290LXJwaS1lZmksIHUtYm9vdC1ycGktMi1lZmksCnUtYm9vdC1ycGktMy1lZmksIHUtYm9vdC1y cGktNC1lZmksIHUtYm9vdC1ycGktZWZpLTY0KTogTmV3IHBhY2thZ2VzLgoKZGlmZiAtLWdpdCBh L2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20gYi9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMu c2NtCmluZGV4IDEwZjJkZDVmYWQuLjg0ZDY1Yzk0Y2QgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdl cy9ib290bG9hZGVycy5zY20KKysrIGIvZ251L3BhY2thZ2VzL2Jvb3Rsb2FkZXJzLnNjbQpAQCAt NzQ4LDE3ICs3NDgsMzAgQEAgKGRlZmluZS1wdWJsaWMgdS1ib290LXRvb2xzCiBhbHNvIGluaXRp YWxpemVzIHRoZSBib2FyZHMgKFJBTSBldGMpLiAgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGl0cwog Ym9hcmQtaW5kZXBlbmRlbnQgdG9vbHMuIikpKQogCi0oZGVmaW5lKi1wdWJsaWMgKG1ha2UtdS1i b290LXBhY2thZ2UgYm9hcmQgdHJpcGxldCAjOmtleSBkZWZjb25maWcgY29uZmlncykKKyhkZWZp bmUqLXB1YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRyaXBsZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjOmtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmNv bmZpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3MKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24pCiAgICJSZXR1cm5zIGEgdS1ib290IHBhY2th Z2UgZm9yIEJPQVJEIGNyb3NzLWNvbXBpbGVkIGZvciBUUklQTEVUIHdpdGggdGhlCi1vcHRpb25h bCBERUZDT05GSUcgZmlsZSBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZyb20g Q09ORklHUy4iCitvcHRpb25hbCBERUZDT05GSUcgZmlsZSBhbmQgb3B0aW9uYWwgY29uZmlndXJh dGlvbiBjaGFuZ2VzIGZyb20gQ09ORklHUy4KK0VpdGhlciBOQU1FLCBpZiB1c2VkLCBvciBvdGhl cndpc2UgQk9BUkQgd2lsbCBiZSBwYXJ0IG9mIHRoZSBwYWNrYWdlIG5hbWUuCitERVNDUklQVElP TiB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uLiIKICAgKGxldCAo KHNhbWUtYXJjaD8gKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyAo JWN1cnJlbnQtc3lzdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ251LXRy aXBsZXQtPm5peC1zeXN0ZW0gdHJpcGxldCkpKSkpCiAgICAgKHBhY2thZ2UKICAgICAgIChpbmhl cml0IHUtYm9vdCkKICAgICAgIChuYW1lIChzdHJpbmctYXBwZW5kICJ1LWJvb3QtIgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1yZXBsYWNlLXN1YnN0cmluZyAoc3RyaW5nLWRv d25jYXNlIGJvYXJkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXyIgIi0iKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LXJlcGxhY2Utc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1k b3duY2FzZSAob3IgbmFtZSBib2FyZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl8i ICItIikpKQorICAgICAgKGRlc2NyaXB0aW9uIChpZiBkZXNjcmlwdGlvbgorICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAocGFja2FnZS1kZXNjcmlwdGlvbiB1LWJvb3QpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgZGVzY3JpcHRpb24pCisg ICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2NyaXB0aW9uIHUtYm9vdCkpKQogICAg ICAgKG5hdGl2ZS1pbnB1dHMKICAgICAgICBgKCxAKGlmIChub3QgKHNhbWUtYXJjaD8pKQogICAg ICAgICAgICAgIGAoKCJjcm9zcy1nY2MiICwoY3Jvc3MtZ2NjIHRyaXBsZXQpKQpAQCAtMTExNyw2 ICsxMTMwLDE1NyBAQCAoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcGluZWJvb2stcHJvLXJrMzM5OQog ICAgICAgIGAoKCJmaXJtd2FyZSIgLGFybS10cnVzdGVkLWZpcm13YXJlLXJrMzM5OSkKICAgICAg ICAgICxAKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBiYXNlKSkpKSkpCiAKKyhkZWZpbmUqLXB1Ymxp YyAobWFrZS1wcmVpbnN0YWxsZWQtdS1ib290LXBhY2thZ2UgYm9hcmQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpcGxldAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmtleQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb25maWcKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlncworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1LWJvb3Qt ZmlsZSAidS1ib290LmJpbiIpKQorICAiUmV0dXJucyBhIHBhY2thZ2Ugd2l0aCBhIHNpbmdsZSBV LUJPT1QtRklMRSBmb3IgQk9BUkQgY3Jvc3MtY29tcGlsZWQgZm9yCitUUklQTEVUIHdpdGggdGhl IG9wdGlvbmFsIERFRkNPTkZJRyBmaWxlIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGNoYW5n ZXMKK2Zyb20gQ09ORklHUy4gIEVpdGhlciBOQU1FLCBpZiB1c2VkLCBvciBvdGhlcndpc2UgQk9B UkQgd2lsbCBiZSBwYXJ0IG9mIHRoZQorcGFja2FnZSBuYW1lLiAgREVTQ1JJUFRJT04gd2lsbCBi ZSBhcHBlbmRlZCB0byB0aGUgcGFja2FnZSBkZXNjcmlwdGlvbi4iCisgIChsZXQqICgobmFtZS1z dWZmaXggIi1jb21wbGV0ZSIpCisgICAgICAgICAodS1ib290LXBhY2thZ2UgKG1ha2UtdS1ib290 LXBhY2thZ2UgYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0cmlwbGV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzpkZWZjb25maWcgZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIzpjb25maWdzIGNvbmZpZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjOm5hbWUgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBuYW1lIGJvYXJk KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZS1zdWZmaXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzpkZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikpKQorICAgIChwYWNrYWdlCisgICAgICAobmFt ZSAoc3RyaW5nLWRyb3AtcmlnaHQgKHBhY2thZ2UtbmFtZSB1LWJvb3QtcGFja2FnZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWxlbmd0aCBuYW1lLXN1ZmZpeCkpKQor ICAgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVyc2lvbiB1LWJvb3QtcGFja2FnZSkpCisgICAgICAo c291cmNlICNmKQorICAgICAgKGJ1aWxkLXN5c3RlbSB0cml2aWFsLWJ1aWxkLXN5c3RlbSkKKyAg ICAgIChhcmd1bWVudHMKKyAgICAgICBgKCM6YnVpbGRlcgorICAgICAgICAgKGJlZ2luCisgICAg ICAgICAgIChsZXQgKChvdXQgKGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikpKQorICAgICAgICAg ICAgIChta2RpciBvdXQpCisgICAgICAgICAgICAgKHN5bWxpbmsgKHN0cmluZy1hcHBlbmQgKGFz c29jLXJlZiAlYnVpbGQtaW5wdXRzICJ1LWJvb3QiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiL2xpYmV4ZWMvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsdS1ib290LWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgb3V0 ICIvIiAsdS1ib290LWZpbGUpKSkpKSkKKyAgICAgIChpbnB1dHMgYCgoInUtYm9vdCIgLHUtYm9v dC1wYWNrYWdlKSkpCisgICAgICAoaG9tZS1wYWdlIChwYWNrYWdlLWhvbWUtcGFnZSB1LWJvb3Qt cGFja2FnZSkpCisgICAgICAoc3lub3BzaXMgKHBhY2thZ2Utc3lub3BzaXMgdS1ib290LXBhY2th Z2UpKQorICAgICAgKGRlc2NyaXB0aW9uIChwYWNrYWdlLWRlc2NyaXB0aW9uIHUtYm9vdC1wYWNr YWdlKSkKKyAgICAgIChsaWNlbnNlIChwYWNrYWdlLWxpY2Vuc2UgdS1ib290LXBhY2thZ2UpKSkp KQorCisoZGVmaW5lLXB1YmxpYyAldS1ib290LXJwaS1lZmktY29uZmlncworICAnKCJDT05GSUdf T0ZfRU1CRUQ9IgorICAgICJDT05GSUdfT0ZfQk9BUkQ9eSIKKyAgICAiQ09ORklHX0JPT1RERUxB WT0wIikpCisKKyhkZWZpbmUgJXUtYm9vdC1ycGktZGVzY3JpcHRpb24tMzItYml0CisgICJUaGlz IGlzIGEgMzItYml0IGJ1aWxkIG9mIFUtQm9vdC4iKQorCisoZGVmaW5lICV1LWJvb3QtcnBpLWRl c2NyaXB0aW9uLTY0LWJpdAorICAiVGhpcyBpcyBhIGNvbW1vbiA2NC1iaXQgYnVpbGQgb2YgVS1C b290IGZvciBhbGwgNjQtYml0IGNhcGFibGUgUmFzcGJlcnJ5IFBpCit2YXJpYW50cy4iKQorCiso ZGVmaW5lICV1LWJvb3QtcnBpLWVmaS1kZXNjcmlwdGlvbgorICAiSXQgYWxsb3dzIG5ldHdvcmsg Ym9vdGluZyBhbmQgdXNlcyB0aGUgZGV2aWNlLXRyZWUgZnJvbSB0aGUgZmlybXdhcmUsCithbGxv d2luZyB0aGUgdXNhZ2Ugb2Ygb3ZlcmxheXMuICBJdCBjYW4gYWN0IGFzIGFuIEVGSSBmaXJtd2Fy ZSBmb3IgdGhlCitncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyLiIpCisKKyhk ZWZpbmUgJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9uLTMyLWJpdAorICAoc3RyaW5nLWFwcGVu ZCAldS1ib290LXJwaS1lZmktZGVzY3JpcHRpb24gIiAgIgorICAgICAgICAgICAgICAgICAldS1i b290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBp LTAtdworICAobWFrZS1wcmVpbnN0YWxsZWQtdS1ib290LXBhY2thZ2UKKyAgICJycGlfMF93Igor ICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWRl c2NyaXB0aW9uLTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGkKKyAgKG1ha2Ut cHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpIgorICAgImFybS1saW51eC1nbnVl YWJpaGYiCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTMyLWJpdCkp CisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktMgorICAobWFrZS1wcmVpbnN0YWxsZWQtdS1i b290LXBhY2thZ2UKKyAgICJycGlfMiIKKyAgICJhcm0tbGludXgtZ251ZWFiaWhmIgorICAgIzpk ZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCisoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtcnBpLTMKKyAgKG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisg ICAicnBpXzNfMzJiIgorICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS0z IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCiso ZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTQKKyAgKG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1w YWNrYWdlCisgICAicnBpXzRfMzJiIgorICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOm5h bWUgInJwaS00IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1i aXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTY0CisgIChtYWtlLXByZWluc3RhbGxl ZC11LWJvb3QtcGFja2FnZQorICAgInJwaV9hcm02NCIKKyAgICJhYXJjaDY0LWxpbnV4LWdudSIK KyAgICM6bmFtZSAicnBpLTY0IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlw dGlvbi02NC1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTAtdy1lZmkKKyAgKG1h a2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzBfdyIKKyAgICJhcm0tbGlu dXgtZ251ZWFiaWhmIgorICAgIzpuYW1lICJycGktMC13LWVmaSIKKyAgICM6Y29uZmlncyAldS1i b290LXJwaS1lZmktY29uZmlncworICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1lZmktZGVz Y3JpcHRpb24tMzItYml0KSkKKworKGRlZmluZS1wdWJsaWMgdS1ib290LXJwaS1lZmkKKyAgKG1h a2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpIgorICAgImFybS1saW51eC1n bnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS1lZmkiCisgICAjOmNvbmZpZ3MgJXUtYm9vdC1ycGkt ZWZpLWNvbmZpZ3MKKyAgICM6ZGVzY3JpcHRpb24gJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9u LTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktMi1lZmkKKyAgKG1ha2UtcHJl aW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzIiCisgICAiYXJtLWxpbnV4LWdudWVh YmloZiIKKyAgICM6bmFtZSAicnBpLTItZWZpIgorICAgIzpjb25maWdzICV1LWJvb3QtcnBpLWVm aS1jb25maWdzCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWVmaS1kZXNjcmlwdGlvbi0z Mi1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTMtZWZpCisgIChtYWtlLXByZWlu c3RhbGxlZC11LWJvb3QtcGFja2FnZQorICAgInJwaV8zXzMyYiIKKyAgICJhcm0tbGludXgtZ251 ZWFiaWhmIgorICAgIzpuYW1lICJycGktMy1lZmkiCisgICAjOmNvbmZpZ3MgJXUtYm9vdC1ycGkt ZWZpLWNvbmZpZ3MKKyAgICM6ZGVzY3JpcHRpb24gJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9u LTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktNC1lZmkKKyAgKG1ha2UtcHJl aW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzRfMzJiIgorICAgImFybS1saW51eC1n bnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS00LWVmaSIKKyAgICM6Y29uZmlncyAldS1ib290LXJw aS1lZmktY29uZmlncworICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1lZmktZGVzY3JpcHRp b24tMzItYml0KSkKKworKGRlZmluZS1wdWJsaWMgdS1ib290LXJwaS1lZmktNjQKKyAgKG1ha2Ut cHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpX2FybTY0IgorICAgImFhcmNoNjQt bGludXgtZ251IgorICAgIzpuYW1lICJycGktZWZpLTY0IgorICAgIzpjb25maWdzICV1LWJvb3Qt cnBpLWVmaS1jb25maWdzCisgICAjOmRlc2NyaXB0aW9uIChzdHJpbmctYXBwZW5kICV1LWJvb3Qt cnBpLWVmaS1kZXNjcmlwdGlvbiAiICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTY0LWJpdCkpKQorCiAoZGVmaW5lLXB1YmxpYyB2Ym9v dC11dGlscwogICAocGFja2FnZQogICAgIChuYW1lICJ2Ym9vdC11dGlscyIpCi0tIAoyLjM1LjEK Cg== --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0008-gnu-raspberry-pi-Add-a-bootloader-chain-for-the-R.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0008-gnu-raspberry-pi-Add-a-bootloader-chain-for-the-R.patch RnJvbSBlMDAyMDAzMmU4MDE4MWVhYWQ0YzkyZDJjNzY0MWNkMTRmMmI1MzNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg OC84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGEgYm9vdGxvYWRlci1jaGFpbiBmb3IgdGhlCiBS YXNwYmVycnkgUGkgYW5kIG9zIGV4YW1wbGVzLgoKKiBnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBp LnNjbSAoZ3J1Yi1lZmktYm9vdGxvYWRlci1jaGFpbi1yYXNwaS02NCk6IE5ldwpib290bG9hZGVy IHZhcmlhYmxlLCBjYXBhYmxlIHRvIGJvb3QgYSBSYXNwYmVycnkgUGkgb3ZlciBuZXR3b3JrIG9y IGZyb20gYQpsb2NhbCBzdG9yYWdlLgoqIGdudS9zeXN0ZW0vZXhhbXBsZXMvcmFzcGJlcnJ5LXBp LTY0LnRtcGw6IE5ldyBvcGVyYXRpbmctc3lzdGVtIGV4YW1wbGUuCiogZ251L3N5c3RlbS9leGFt cGxlcy9yYXNwYmVycnktcGktNjQtbmZzLXJvb3QudG1wbDogTmV3IG9wZXJhdGluZy1zeXN0ZW0K ZXhhbXBsZSBmb3IgYm9vdGluZyBvdmVyIG5ldHdvcmsuCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2th Z2VzL3Jhc3BiZXJyeS1waS5zY20gYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQppbmRl eCBkODA4ZjYxYWMyLi5kNTJhNGE3MmM1IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvcmFzcGJl cnJ5LXBpLnNjbQorKysgYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpAQCAtMTgsMTEg KzE4LDE0IEBACiA7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBy YXNwYmVycnktcGkpCisgICM6dXNlLW1vZHVsZSAoZ251IGJvb3Rsb2FkZXIpCisgICM6dXNlLW1v ZHVsZSAoZ251IGJvb3Rsb2FkZXIgZ3J1YikKICAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMp CiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGFkbWluKQogICAjOnVzZS1tb2R1bGUgKGdu dSBwYWNrYWdlcyBhbGdlYnJhKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBiYXNlKQog ICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBiYXNoKQorICAjOnVzZS1tb2R1bGUgKGdudSBw YWNrYWdlcyBib290bG9hZGVycykKICAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgY29tbWVu Y2VtZW50KQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBjcm9zcy1iYXNlKQogICAjOnVz ZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBkb2N1bWVudGF0aW9uKQpAQCAtMzEyLDYgKzMxNSwyMiBA QCAoZGVmaW5lLXB1YmxpYyAobWFrZS1yYXNwaS1iY20yOC1kdGJzIGxpbnV4KQogICAgICAoc2lt cGxlLWZvcm1hdCAjZiAiVGhlIGRldmljZS10cmVlIGZpbGVzIGZvciBSYXNwYmVycnkgUGkgbW9k ZWxzIGZyb20gfmEuIgogICAgICAgICAgICAgIChwYWNrYWdlLW5hbWUgbGludXgpKSkpKQogCiso ZGVmaW5lLXB1YmxpYyBncnViLWVmaS1ib290bG9hZGVyLWNoYWluLXJhc3BpLTY0CisgIDs7IEEg Ym9vdGxvYWRlciBjYXBhYmxlIHRvIGJvb3QgYSBSYXNwYmVycnkgUGkgb3ZlciBuZXR3b3JrIHZp YSBURlRQIG9yIGZyb20KKyAgOzsgYSBsb2NhbCBzdG9yYWdlIGxpa2UgYSBtaWNybyBTRCBjYXJk LgorICA7OyBJdCBuZWl0aGVyIGluc3RhbGxzIGZpcm13YXJlIG5vciBkZXZpY2UtdHJlZSBmaWxl cyBmb3IgdGhlIFJhc3BiZXJyeSBQaS4KKyAgOzsgSXQganVzdCBhc3N1bWVzIHRoZW0gdG8gYmUg ZXhpc3RpbmcgaW4gYm9vdC9lZmkgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc29tZQorICA7OyBVRUZJ IGZpcm13YXJlIHdpdGggQUNQSSBkYXRhIGlzIHVzdWFsbHkgYXNzdW1lZCB0byBiZSBleGlzdGlu ZyBvbiBQQ3MuCisgIDs7IEl0IGNyZWF0ZXMgZmlybXdhcmUgY29uZmlndXJhdGlvbiBmaWxlcyBh bmQgYSBib290bG9hZGVyLWNoYWluIHdpdGggVS1Cb290CisgIDs7IHRvIHByb3ZpZGUgYW4gRUZJ IEFQSSBmb3IgdGhlIGZpbmFsIEdSVUIgYm9vdGxvYWRlci4KKyAgOzsgSXQgYWxzbyBzZXJ2ZXMg YXMgYSBibHVlLXByaW50IHRvIGNyZWF0ZSBhbiBvd24gYm9vdGxvYWRlci1jaGFpbiB3aXRoCisg IDs7IGZpcm13cmUgYW5kIGRldmljZS10cmVlIHBhY2thZ2VzIG9yIGZpbGVzLgorICAoZWZpLWJv b3Rsb2FkZXItY2hhaW4gZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9vdGxvYWRlcgorICAg ICAgICAgICAgICAgICAgICAgICAgIzpwYWNrYWdlcyAobGlzdCB1LWJvb3QtcnBpLWVmaS02NCkK KyAgICAgICAgICAgICAgICAgICAgICAgICM6ZmlsZXMgKGxpc3QgJXJhc3BpLWNvbmZpZy10eHQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXJhc3BpLWJjbTI3LWR0Yi10 eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXJhc3BpLXUtYm9vdC1i b290bG9hZGVyLXR4dCkpKQorCiAoZGVmaW5lIChtYWtlLXJhc3BpLWRlZmNvbmZpZyBhcmNoIGRl ZmNvbmZpZyBzaGEyNTYtYXMtYmFzZTMyKQogICAiTWFrZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSBB UkNIIGEgZmlsZS1saWtlIG9iamVjdCBmcm9tIHRoZSBERUZDT05GSUcgZmlsZQogd2l0aCB0aGUg aGFzaCBTSEEyNTYtQVMtQkFTRTMyLiAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlICM6 ZGVmY29uZmlnCmRpZmYgLS1naXQgYS9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02 NC1uZnMtcm9vdC50bXBsIGIvZ251L3N5c3RlbS9leGFtcGxlcy9yYXNwYmVycnktcGktNjQtbmZz LXJvb3QudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMDA2YTI4 N2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3N5c3RlbS9leGFtcGxlcy9yYXNwYmVycnktcGkt NjQtbmZzLXJvb3QudG1wbApAQCAtMCwwICsxLDczIEBACis7OyBUaGlzIGlzIGFuIG9wZXJhdGlu Zy1zeXN0ZW0gY29uZmlndXJhdGlvbiB0ZW1wbGF0ZSBvZiBhCis7OyA2NC1iaXQgbWluaW1hbCBz eXN0ZW0gZm9yIGEgUmFzcGJlcnJ5IFBpIHdpdGggYW4gTkZTIHJvb3QgZmlsZS1zeXN0ZW0uCisK Kzs7IEl0IG5laXRoZXIgaW5zdGFsbHMgZmlybXdhcmUgbm9yIGRldmljZS10cmVlIGZpbGVzIGZv ciB0aGUgUmFzcGJlcnJ5IFBpLgorOzsgSXQganVzdCBhc3N1bWVzIHRoZW0gdG8gYmUgZXhpc3Rp bmcgaW4gYm9vdC9lZmkgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc29tZQorOzsgVUVGSSBmaXJtd2Fy ZSB3aXRoIEFDUEkgZGF0YSBpcyB1c3VhbGx5IGFzc3VtZWQgdG8gYmUgZXhpc3Rpbmcgb24gUENz LgorCis7OyBJdCBleHBlY3RzIHRoZSBib290L2VmaSBkaXJlY3RvcnkgdG8gYmUgc2VydmVkIHZp YSBURlRQIGFuZCB0aGUgcm9vdAorOzsgZmlsZS1zeXN0ZW0gdG8gYmUgc2VydmVkIHZpYSBORlMu IFNlZSB0aGUgZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVyCis7OyBkZXNjcmlwdGlvbiBpbiB0 aGUgbWFudWFsIGZvciBtb3JlIGRldGFpbHMuCisKKyh1c2UtbW9kdWxlcyAoZ251KQorICAgICAg ICAgICAgIChnbnUgYXJ0d29yaykKKyAgICAgICAgICAgICAoZ251IHN5c3RlbSBuc3MpKQorKHVz ZS1zZXJ2aWNlLW1vZHVsZXMgYWRtaW4KKyAgICAgICAgICAgICAgICAgICAgIGF2YWhpCisgICAg ICAgICAgICAgICAgICAgICBuZXR3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICBzc2gpCiso dXNlLXBhY2thZ2UtbW9kdWxlcyBjZXJ0cworICAgICAgICAgICAgICAgICAgICAgbGludXgKKyAg ICAgICAgICAgICAgICAgICAgIHJhc3BiZXJyeS1waQorICAgICAgICAgICAgICAgICAgICAgc3No KQorCisoZGVmaW5lICVteS1wdWJsaWMta2V5CisgIChsb2NhbC1maWxlIChzdHJpbmctYXBwZW5k IChnZXRlbnYgIkhPTUUiKSAiLy5zc2gvaWRfZWNkc2EucHViIikpKQorCisoZGVmaW5lLXB1Ymxp YyByYXNwYmVycnktcGktNjQtbmZzLXJvb3QKKyAgKG9wZXJhdGluZy1zeXN0ZW0KKyAgIChob3N0 LW5hbWUgInJhc3BiZXJyeXBpLWd1aXgiKQorICAgKHRpbWV6b25lICJFdXJvcGUvQmVybGluIikK KyAgIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAg ICAoYm9vdGxvYWRlciBncnViLWVmaS1ib290bG9hZGVyLWNoYWluLXJhc3BpLTY0KQorICAgICAg ICAgICAgICAgICh0YXJnZXRzICcoIi9ib290L2VmaSIpKQorICAgICAgICAgICAgICAgICh0aGVt ZSAoZ3J1Yi10aGVtZSAocmVzb2x1dGlvbiAnKDE5MjAgLiAxMDgwKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgKGltYWdlIChmaWxlLWFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICVhcnR3b3JrLXJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi L2dydWIvR3VpeFNELWZ1bGx5LWJsYWNrLTE2LTkuc3ZnIikpKSkpKQorICAgKGtlcm5lbC1hcmd1 bWVudHMgJygiaXA9ZGhjcCIpKQorICAgKGtlcm5lbCAobW9kaWZ5LWxpbnV4ICM6bGludXggbGlu dXgtbGlicmUtYXJtNjQtZ2VuZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgICM6ZXh0cmEt dmVyc2lvbiAiYXJtNjQtZ2VuZXJpYy1uZXRib290IgorICAgICAgICAgICAgICAgICAgICAgICAg ICM6Y29uZmlncyAnKCJDT05GSUdfTkZTX1NXQVA9eSIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiQ09ORklHX1VTQl9VU0JORVQ9eSIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ09ORklHX1VTQl9MQU43OFhYPXkiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkNPTkZJR19VU0JfTkVUX1NNU0M5NVhYPXkiKSkpCisgICAo aW5pdHJkLW1vZHVsZXMgJygpKQorICAgKGZpbGUtc3lzdGVtcyAoY29ucyogKGZpbGUtc3lzdGVt CisgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdW50LXBvaW50ICIvIikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAodHlwZSAibmZzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZGV2 aWNlICI6L2V4cG9ydC9yYXNwYmVycnlwaS9ndWl4IikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAob3B0aW9ucyAiYWRkcj0xMC4yMC4zMC40MCx2ZXJzPTQuMSIpKQorICAgICAgICAgICAgICAg ICAgICAgICAgJWJhc2UtZmlsZS1zeXN0ZW1zKSkKKyAgIChzd2FwLWRldmljZXMgKGxpc3QgKHN3 YXAtc3BhY2UgKHRhcmdldCAiL3J1bi9zd2FwZmlsZSIpKSkpCisgICAodXNlcnMgKGNvbnMqICh1 c2VyLWFjY291bnQKKyAgICAgICAgICAgICAgICAgIChuYW1lICJwaSIpCisgICAgICAgICAgICAg ICAgICAoZ3JvdXAgInVzZXJzIikKKyAgICAgICAgICAgICAgICAgIChzdXBwbGVtZW50YXJ5LWdy b3VwcyAnKCJ3aGVlbCIgIm5ldGRldiIgImF1ZGlvIiAidmlkZW8iKSkKKyAgICAgICAgICAgICAg ICAgIChob21lLWRpcmVjdG9yeSAiL2hvbWUvcGkiKSkKKyAgICAgICAgICAgICAgICAgJWJhc2Ut dXNlci1hY2NvdW50cykpCisgICAocGFja2FnZXMgKGNvbnMqIG5zcy1jZXJ0cworICAgICAgICAg ICAgICAgICAgICBvcGVuc3NoCisgICAgICAgICAgICAgICAgICAgICViYXNlLXBhY2thZ2VzKSkK KyAgIChzZXJ2aWNlcyAoY29ucyogKHNlcnZpY2UgYXZhaGktc2VydmljZS10eXBlKQorICAgICAg ICAgICAgICAgICAgICAoc2VydmljZSBkaGNwLWNsaWVudC1zZXJ2aWNlLXR5cGUpCisgICAgICAg ICAgICAgICAgICAgIChzZXJ2aWNlIG50cC1zZXJ2aWNlLXR5cGUpCisgICAgICAgICAgICAgICAg ICAgIChzZXJ2aWNlIG9wZW5zc2gtc2VydmljZS10eXBlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChvcGVuc3NoLWNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh4MTEtZm9yd2FyZGluZz8gI3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YXV0aG9yaXplZC1rZXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKCgicGkiICwl bXktcHVibGljLWtleSkpKSkpCisgICAgICAgICAgICAgICAgICAgICViYXNlLXNlcnZpY2VzKSkK KyAgIChuYW1lLXNlcnZpY2Utc3dpdGNoICVtZG5zLWhvc3QtbG9va3VwLW5zcykpKQorCityYXNw YmVycnktcGktNjQtbmZzLXJvb3QKZGlmZiAtLWdpdCBhL2dudS9zeXN0ZW0vZXhhbXBsZXMvcmFz cGJlcnJ5LXBpLTY0LnRtcGwgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC50 bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZiMDE3OGM4NjEKLS0t IC9kZXYvbnVsbAorKysgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC50bXBs CkBAIC0wLDAgKzEsNzcgQEAKKzs7IFRoaXMgaXMgYW4gb3BlcmF0aW5nLXN5c3RlbSBjb25maWd1 cmF0aW9uIHRlbXBsYXRlIG9mIGEKKzs7IDY0LWJpdCBtaW5pbWFsIHN5c3RlbSBmb3IgYSBSYXNw YmVycnkgUGkgd2l0aCBsb2NhbCBzdG9yYWdlLgorCis7OyBJdCBuZWl0aGVyIGluc3RhbGxzIGZp cm13YXJlIG5vciBkZXZpY2UtdHJlZSBmaWxlcyBmb3IgdGhlIFJhc3BiZXJyeSBQaS4KKzs7IEl0 IGp1c3QgYXNzdW1lcyB0aGVtIHRvIGJlIGV4aXN0aW5nIGluIGJvb3QvZWZpIGluIHRoZSBzYW1l IHdheSB0aGF0IHNvbWUKKzs7IFVFRkkgZmlybXdhcmUgd2l0aCBBQ1BJIGRhdGEgaXMgdXN1YWxs eSBhc3N1bWVkIHRvIGJlIGV4aXN0aW5nIG9uIFBDcy4KKworOzsgSXQgZXhwZWN0cyB0aGUgYm9v dC1wYXJ0aXRpb24gdG8gYmUgbW91bnRlZCBhcyBib290L2VmaSBpbiB0aGUgc2FtZSB3YXkKKzs7 IGFzIGl0IGlzIHVzdWFsbHkgZXhwZXRlZCBvbiBQQ3Mgd2l0aCBVRUZJIGZpcm13YXJlLgorCiso dXNlLW1vZHVsZXMgKGdudSkKKyAgICAgICAgICAgICAoZ251IGFydHdvcmspCisgICAgICAgICAg ICAgKGdudSBzeXN0ZW0gbnNzKSkKKyh1c2Utc2VydmljZS1tb2R1bGVzIGFkbWluCisgICAgICAg ICAgICAgICAgICAgICBhdmFoaQorICAgICAgICAgICAgICAgICAgICAgbmV0d29ya2luZworICAg ICAgICAgICAgICAgICAgICAgc3NoKQorKHVzZS1wYWNrYWdlLW1vZHVsZXMgY2VydHMKKyAgICAg ICAgICAgICAgICAgICAgIGxpbnV4CisgICAgICAgICAgICAgICAgICAgICByYXNwYmVycnktcGkK KyAgICAgICAgICAgICAgICAgICAgIHNzaCkKKworKGRlZmluZSAlbXktcHVibGljLWtleQorICAo bG9jYWwtZmlsZSAoc3RyaW5nLWFwcGVuZCAoZ2V0ZW52ICJIT01FIikgIi8uc3NoL2lkX2VjZHNh LnB1YiIpKSkKKworKGRlZmluZS1wdWJsaWMgcmFzcGJlcnJ5LXBpLTY0CisgIChvcGVyYXRpbmct c3lzdGVtCisgICAoaG9zdC1uYW1lICJyYXNwYmVycnlwaS1ndWl4IikKKyAgICh0aW1lem9uZSAi RXVyb3BlL0JlcmxpbiIpCisgICAoYm9vdGxvYWRlciAoYm9vdGxvYWRlci1jb25maWd1cmF0aW9u CisgICAgICAgICAgICAgICAgKGJvb3Rsb2FkZXIgZ3J1Yi1lZmktYm9vdGxvYWRlci1jaGFpbi1y YXNwaS02NCkKKyAgICAgICAgICAgICAgICAodGFyZ2V0cyAnKCIvYm9vdC9lZmkiKSkKKyAgICAg ICAgICAgICAgICAodGhlbWUgKGdydWItdGhlbWUgKHJlc29sdXRpb24gJygxOTIwIC4gMTA4MCkp CisgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZSAoZmlsZS1hcHBlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlYXJ0d29yay1yZXBvc2l0b3J5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIi9ncnViL0d1aXhTRC1mdWxseS1ibGFjay0xNi05LnN2ZyIpKSkpKSkK KyAgIChrZXJuZWwgKG1vZGlmeS1saW51eCAjOmxpbnV4IGxpbnV4LWxpYnJlLWFybTY0LWdlbmVy aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAjfCBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSBz cGVjaWZpYyBkZWZjb25maWcgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig ZXhhbXBsZSB0aGUgImJjbXJwaTNfZGVmY29uZmlnIiB3aXRoIHRoZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhcmlhYmxlIHNob3duIGJlbG93LiAgVW5mb3J0dW5hdGVseSB0aGUga2Vy bmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgZnJvbSB0aGUgbGludXgtbGli cmUgc291cmNlcyB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb25m aWcgZmlsZSBkb2VzIG5vdCBib290LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6ZXh0 cmEtdmVyc2lvbiAiZ251LWJjbXJwaTMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpk ZWZjb25maWcgJWJjbXJwaTMtZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICAgfCMp KQorICAgKGluaXRyZC1tb2R1bGVzICcoKSkKKyAgIChmaWxlLXN5c3RlbXMgKGNvbnMqIChmaWxl LXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VudC1wb2ludCAiLyIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgKHR5cGUgImV4dDQiKQorICAgICAgICAgICAgICAgICAgICAg ICAgIChkZXZpY2UgKGZpbGUtc3lzdGVtLWxhYmVsICJHdWl4IikpKQorICAgICAgICAgICAgICAg ICAgICAgICAgKGZpbGUtc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdW50LXBv aW50ICIvYm9vdC9lZmkiKQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlICJ2ZmF0IikK KyAgICAgICAgICAgICAgICAgICAgICAgICAoZGV2aWNlIChmaWxlLXN5c3RlbS1sYWJlbCAiRUZJ IikpKQorICAgICAgICAgICAgICAgICAgICAgICAgJWJhc2UtZmlsZS1zeXN0ZW1zKSkKKyAgIChz d2FwLWRldmljZXMgKGxpc3QgKHN3YXAtc3BhY2UgKHRhcmdldCAiL3J1bi9zd2FwZmlsZSIpKSkp CisgICAodXNlcnMgKGNvbnMqICh1c2VyLWFjY291bnQKKyAgICAgICAgICAgICAgICAgIChuYW1l ICJwaSIpCisgICAgICAgICAgICAgICAgICAoZ3JvdXAgInVzZXJzIikKKyAgICAgICAgICAgICAg ICAgIChzdXBwbGVtZW50YXJ5LWdyb3VwcyAnKCJ3aGVlbCIgIm5ldGRldiIgImF1ZGlvIiAidmlk ZW8iKSkKKyAgICAgICAgICAgICAgICAgIChob21lLWRpcmVjdG9yeSAiL2hvbWUvcGkiKSkKKyAg ICAgICAgICAgICAgICAgJWJhc2UtdXNlci1hY2NvdW50cykpCisgICAocGFja2FnZXMgKGNvbnMq IG5zcy1jZXJ0cworICAgICAgICAgICAgICAgICAgICBvcGVuc3NoCisgICAgICAgICAgICAgICAg ICAgICViYXNlLXBhY2thZ2VzKSkKKyAgIChzZXJ2aWNlcyAoY29ucyogKHNlcnZpY2UgYXZhaGkt c2VydmljZS10eXBlKQorICAgICAgICAgICAgICAgICAgICAoc2VydmljZSBkaGNwLWNsaWVudC1z ZXJ2aWNlLXR5cGUpCisgICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlIG50cC1zZXJ2aWNlLXR5 cGUpCisgICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlIG9wZW5zc2gtc2VydmljZS10eXBlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuc3NoLWNvbmZpZ3VyYXRpb24KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh4MTEtZm9yd2FyZGluZz8gI3QpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYXV0aG9yaXplZC1rZXlzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBgKCgicGkiICwlbXktcHVibGljLWtleSkpKSkpCisgICAgICAgICAgICAgICAg ICAgICViYXNlLXNlcnZpY2VzKSkKKyAgIChuYW1lLXNlcnZpY2Utc3dpdGNoICVtZG5zLWhvc3Qt bG9va3VwLW5zcykpKQorCityYXNwYmVycnktcGktNjQKLS0gCjIuMzUuMQoK --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0007-gnu-raspberry-pi-New-function-to-make-a-package-w.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0007-gnu-raspberry-pi-New-function-to-make-a-package-w.patch RnJvbSA0YmNlZGY1NTM5OThlNGM0MTNiNTcyMzk1Njc5ZDJkODgxZmI3MzE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTozNiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg Ny84XSBnbnU6IHJhc3BiZXJyeS1waTogTmV3IGZ1bmN0aW9uIHRvIG1ha2UgYSBwYWNrYWdlIHdp dGgKIGRldmljZS10cmVlIGZpbGVzLgoKKiBnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbSAo bWFrZS1yYXNwaS1iY20yOC1kdGJzKTogTmV3IGZ1bmN0aW9uIHRvIG1ha2UKYSBwYWNrYWdlIHdp dGggZGV2aWNlLXRyZWUgZmlsZXMgZm9yIFJhc3BiZXJyeSBQaSBtb2RlbHMgZnJvbSB0aGUga2Vy bmVsIGdpdmVuCmFzIGFyZ3VtZW50LgoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9yYXNwYmVy cnktcGkuc2NtIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KaW5kZXggMDcwNzUxNmY3 Mi4uZDgwOGY2MWFjMiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20K KysrIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KQEAgLTMwLDYgKzMwLDcgQEAgKGRl ZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcyByYXNwYmVycnktcGkpCiAgICM6dXNlLW1vZHVsZSAo Z251IHBhY2thZ2VzIGZpbGUpCiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGdjYykKICAg Izp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgbGludXgpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBi dWlsZC1zeXN0ZW0gY29weSkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSBnbnUp CiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGdp dC1kb3dubG9hZCkKQEAgLTI5MSw2ICsyOTIsMjYgQEAgKGRlZmluZS1wdWJsaWMgKHJhc3BpLWN1 c3RvbS10eHQgY29udGVudCkKIGNoYXJhY3Rlci4gIEFsdGVybmF0aXZlbHkgQ09OVEVOVCBjYW4g YmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxlIGNvbnRlbnQuIgogICAocmFzcGktY29uZmln LWZpbGUgImN1c3RvbS50eHQiIGNvbnRlbnQpKQogCisoZGVmaW5lLXB1YmxpYyAobWFrZS1yYXNw aS1iY20yOC1kdGJzIGxpbnV4KQorICAiTWFrZSBhIHBhY2thZ2Ugd2l0aCB0aGUgZGV2aWNlLXRy ZWUgZmlsZXMgZm9yIFJhc3BiZXJyeSBQaSBtb2RlbHMgZnJvbSB0aGUKK2tlcm5lbCBMSU5VWC4i CisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbGludXgpCisgICAgKG5hbWUgInJhc3BpLWJjbTI4 LWR0YnMiKQorICAgIChzb3VyY2UgI2YpCisgICAgKGJ1aWxkLXN5c3RlbSBjb3B5LWJ1aWxkLXN5 c3RlbSkKKyAgICAoYXJndW1lbnRzCisgICAgIGAoIzpwaGFzZXMgKG1vZGlmeS1waGFzZXMgJXN0 YW5kYXJkLXBoYXNlcyAoZGVsZXRlICd1bnBhY2spKQorICAgICAgICM6aW5zdGFsbC1wbGFuCisg ICAgICAgKGxpc3QgKGxpc3QgKHN0cmluZy1hcHBlbmQgKGFzc29jLXJlZiAlYnVpbGQtaW5wdXRz ICJsaW51eCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9saWIvZHRicy9i cm9hZGNvbS8iKQorICAgICAgICAgICAgICAgICAgICIuIiAjOmluY2x1ZGUtcmVnZXhwICcoIi9i Y20uLi4uLXJwaS4qXFwuZHRiIikpKSkpCisgICAgKGlucHV0cyBgKCgibGludXgiICxsaW51eCkp KQorICAgIChzeW5vcHNpcyAiRGV2aWNlLXRyZWUgZmlsZXMgZm9yIGEgUmFzcGJlcnJ5IFBpIikK KyAgICAoZGVzY3JpcHRpb24KKyAgICAgKHNpbXBsZS1mb3JtYXQgI2YgIlRoZSBkZXZpY2UtdHJl ZSBmaWxlcyBmb3IgUmFzcGJlcnJ5IFBpIG1vZGVscyBmcm9tIH5hLiIKKyAgICAgICAgICAgICAo cGFja2FnZS1uYW1lIGxpbnV4KSkpKSkKKwogKGRlZmluZSAobWFrZS1yYXNwaS1kZWZjb25maWcg YXJjaCBkZWZjb25maWcgc2hhMjU2LWFzLWJhc2UzMikKICAgIk1ha2UgZm9yIHRoZSBhcmNoaXRl Y3R1cmUgQVJDSCBhIGZpbGUtbGlrZSBvYmplY3QgZnJvbSB0aGUgREVGQ09ORklHIGZpbGUKIHdp dGggdGhlIGhhc2ggU0hBMjU2LUFTLUJBU0UzMi4gIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIGFz IHRoZSAjOmRlZmNvbmZpZwotLSAKMi4zNS4xCgo= --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0002-build-kconfig-Add-new-module-to-modify-a-defconfi.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0002-build-kconfig-Add-new-module-to-modify-a-defconfi.patch RnJvbSBhMjM1ZDc1NjQ3MTVjY2ExY2VjNzc0ZDlkNTE1Y2FmMWJjY2I0ODU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxMDoxOSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg Mi84XSBidWlsZDoga2NvbmZpZzogQWRkIG5ldyBtb2R1bGUgdG8gbW9kaWZ5IGEgZGVmY29uZmln CiBmaWxlLgoKRnJvbTogU3RlZmFuIDxzdGVmYW4tZ3VpeEB2b2RhZm9uZW1haWwuZGU+CgoqIGd1 aXgvYnVpbGQva2NvbmZpZy5zY20gKG1vZGlmeS1kZWZjb25maWcpOiBOZXcgZmlsZSB3aXRoIGEg bmV3IGZ1bmN0aW9uLgoqIGdudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20gKG1ha2UtdS1ib290 LXBhY2thZ2UsCm1ha2UtdS1ib290LXN1bnhpNjQtcGFja2FnZSk6IEFkZGluZyBuZXcga2V5IGFy Z3VtZW50cyB0byBwYXNzIGFuZC9vciBtb2RpZnkKYSBkZWZjb25maWcgZmlsZS4KKHUtYm9vdC1h bTMzNXgtYm9uZWJsYWNrLCB1LWJvb3QtcGluZWJvb2ssIHUtYm9vdC1ub3ZlbmEpOiBTaW1wbGlm eSBmdW5jdGlvbnMKYnkgdXNpbmcgdGhlIG5ldyBrZXkgYXJndW1lbnRzIG9mIHRoZSBmb3JtZXIg ZnVuY3Rpb25zLgoqIE1ha2VmaWxlLmFtOiBBZGRpbmcgZ3VpeC9idWlsZC9rY29uZmlnLnNjbSB0 byBNT0RVTEVTLgoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXgg ZmVjY2U3YzZmNy4uN2Y2OWFhY2JkMSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFr ZWZpbGUuYW0KQEAgLTIyMyw2ICsyMjMsNyBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9idWls ZC93YWYtYnVpbGQtc3lzdGVtLnNjbQkJXAogICBndWl4L2J1aWxkL2hhc2tlbGwtYnVpbGQtc3lz dGVtLnNjbQkJXAogICBndWl4L2J1aWxkL2p1bGlhLWJ1aWxkLXN5c3RlbS5zY20JCVwKKyAgZ3Vp eC9idWlsZC9rY29uZmlnLnNjbSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZ3VpeC9idWls ZC9saW51eC1tb2R1bGUtYnVpbGQtc3lzdGVtLnNjbQlcCiAgIGd1aXgvYnVpbGQvc3RvcmUtY29w eS5zY20JCQlcCiAgIGd1aXgvYnVpbGQvanNvbi5zY20JCQkJXApkaWZmIC0tZ2l0IGEvZ251L3Bh Y2thZ2VzL2Jvb3Rsb2FkZXJzLnNjbSBiL2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20KaW5k ZXggNjg3NmFiMTdiOS4uMTBmMmRkNWZhZCAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2Jvb3Rs b2FkZXJzLnNjbQorKysgYi9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtCkBAIC0xNiw2ICsx Niw3IEBACiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEgVmluY2VudCBMZWdvbGwgPHZpbmNlbnQubGVn b2xsQGdtYWlsLmNvbT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBCcmljZSBXYWVnZW5laXJlIDxi cmljZUB3YWVnZW5laS5yZT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTdGVmYW4gPHN0ZWZhbi1n dWl4QHZvZGFmb25lbWFpbC5kZT4KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMiBQZXRyIEhvZGluYSA8 cGhvZGluYUBwcm90b25tYWlsLmNvbT4KIDs7OwogOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdO VSBHdWl4LgogOzs7CkBAIC03NDcsOCArNzQ4LDkgQEAgKGRlZmluZS1wdWJsaWMgdS1ib290LXRv b2xzCiBhbHNvIGluaXRpYWxpemVzIHRoZSBib2FyZHMgKFJBTSBldGMpLiAgVGhpcyBwYWNrYWdl IHByb3ZpZGVzIGl0cwogYm9hcmQtaW5kZXBlbmRlbnQgdG9vbHMuIikpKQogCi0oZGVmaW5lLXB1 YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KQotICAiUmV0dXJucyBhIHUt Ym9vdCBwYWNrYWdlIGZvciBCT0FSRCBjcm9zcy1jb21waWxlZCBmb3IgVFJJUExFVC4iCisoZGVm aW5lKi1wdWJsaWMgKG1ha2UtdS1ib290LXBhY2thZ2UgYm9hcmQgdHJpcGxldCAjOmtleSBkZWZj b25maWcgY29uZmlncykKKyAgIlJldHVybnMgYSB1LWJvb3QgcGFja2FnZSBmb3IgQk9BUkQgY3Jv c3MtY29tcGlsZWQgZm9yIFRSSVBMRVQgd2l0aCB0aGUKK29wdGlvbmFsIERFRkNPTkZJRyBmaWxl IGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgZnJvbSBDT05GSUdTLiIKICAgKGxl dCAoKHNhbWUtYXJjaD8gKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9 PyAoJWN1cnJlbnQtc3lzdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ251 LXRyaXBsZXQtPm5peC1zeXN0ZW0gdHJpcGxldCkpKSkpCkBAIC03NjYsOCArNzY4LDExIEBAIChk ZWZpbmUtcHVibGljIChtYWtlLXUtYm9vdC1wYWNrYWdlIGJvYXJkIHRyaXBsZXQpCiAgICAgICAo YXJndW1lbnRzCiAgICAgICAgYCgjOm1vZHVsZXMgKChpY2UtOSBmdHcpCiAgICAgICAgICAgICAg ICAgICAgIChzcmZpIHNyZmktMSkKLSAgICAgICAgICAgICAgICAgICAgKGd1aXggYnVpbGQgdXRp bHMpCi0gICAgICAgICAgICAgICAgICAgIChndWl4IGJ1aWxkIGdudS1idWlsZC1zeXN0ZW0pKQor ICAgICAgICAgICAgICAgICAgICAoZ3VpeCBidWlsZCBnbnUtYnVpbGQtc3lzdGVtKQorICAgICAg ICAgICAgICAgICAgICAoZ3VpeCBidWlsZCBrY29uZmlnKQorICAgICAgICAgICAgICAgICAgICAo Z3VpeCBidWlsZCB1dGlscykpCisgICAgICAgICAjOmltcG9ydGVkLW1vZHVsZXMgKCxAJWdudS1i dWlsZC1zeXN0ZW0tbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeCBi dWlsZCBrY29uZmlnKSkKICAgICAgICAgICM6dGVzdC10YXJnZXQgInRlc3QiCiAgICAgICAgICAj Om1ha2UtZmxhZ3MKICAgICAgICAgIChsaXN0ICJIT1NUQ0M9Z2NjIgpAQCAtNzc4LDkgKzc4Mywx OCBAQCAoZGVmaW5lLXB1YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KQog ICAgICAgICAgKG1vZGlmeS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcwogICAgICAgICAgICAocmVw bGFjZSAnY29uZmlndXJlCiAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IG91dHB1dHMgbWFr ZS1mbGFncyAjOmFsbG93LW90aGVyLWtleXMpCi0gICAgICAgICAgICAgICAobGV0ICgoY29uZmln LW5hbWUgKHN0cmluZy1hcHBlbmQgLGJvYXJkICJfZGVmY29uZmlnIikpKQotICAgICAgICAgICAg ICAgICAoaWYgKGZpbGUtZXhpc3RzPyAoc3RyaW5nLWFwcGVuZCAiY29uZmlncy8iIGNvbmZpZy1u YW1lKSkKLSAgICAgICAgICAgICAgICAgICAgIChhcHBseSBpbnZva2UgIm1ha2UiIGAoLEBtYWtl LWZsYWdzICxjb25maWctbmFtZSkpCisgICAgICAgICAgICAgICAobGV0KiAoKGNvbmZpZy1uYW1l IChzdHJpbmctYXBwZW5kICxib2FyZCAiX2RlZmNvbmZpZyIpKQorICAgICAgICAgICAgICAgICAg ICAgIChjb25maWctZmlsZSAoc3RyaW5nLWFwcGVuZCAiY29uZmlncy8iIGNvbmZpZy1uYW1lKSkK KyAgICAgICAgICAgICAgICAgICAgICAoZGVmY29uZmlnICxkZWZjb25maWcpCisgICAgICAgICAg ICAgICAgICAgICAgKGNvbmZpZ3MgJyxjb25maWdzKSkKKyAgICAgICAgICAgICAgICAgKHdoZW4g ZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgOzsgUmVwbGFjZSB0aGUgYm9hcmQtc3BlY2lm aWMgZGVmY29uZmlnIHdpdGggdGhlIGdpdmVuIG9uZS4KKyAgICAgICAgICAgICAgICAgICAoY29w eS1maWxlIGRlZmNvbmZpZyBjb25maWctZmlsZSkpCisgICAgICAgICAgICAgICAgIChpZiAoZmls ZS1leGlzdHM/IGNvbmZpZy1maWxlKQorICAgICAgICAgICAgICAgICAgICAgKGJlZ2luCisgICAg ICAgICAgICAgICAgICAgICAgICh3aGVuIGNvbmZpZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAobW9kaWZ5LWRlZmNvbmZpZyBjb25maWctZmlsZSBjb25maWdzKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgKGFwcGx5IGludm9rZSAibWFrZSIgYCgsQG1ha2UtZmxhZ3MgLGNvbmZpZy1uYW1l KSkpCiAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAg KGRpc3BsYXkgIkludmFsaWQgYm9hcmQgbmFtZS4gVmFsaWQgYm9hcmQgbmFtZXMgYXJlOiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtZXJyb3ItcG9ydCkpCkBAIC04 MzQsNyArODQ4LDExIEBAIChkZWZpbmUtcHVibGljIHUtYm9vdC1tYWx0YQogICAobWFrZS11LWJv b3QtcGFja2FnZSAibWFsdGEiICJtaXBzNjRlbC1saW51eC1nbnVhYmk2NCIpKQogCiAoZGVmaW5l LXB1YmxpYyB1LWJvb3QtYW0zMzV4LWJvbmVibGFjawotICAobGV0ICgoYmFzZSAobWFrZS11LWJv b3QtcGFja2FnZSAiYW0zMzV4X2V2bSIgImFybS1saW51eC1nbnVlYWJpaGYiKSkpCisgIChsZXQg KChiYXNlIChtYWtlLXUtYm9vdC1wYWNrYWdlICJhbTMzNXhfZXZtIiAiYXJtLWxpbnV4LWdudWVh YmloZiIKKyAgICAgICAgICAgICAgIDs7IFBhdGNoIG91dCBvdGhlciBkZXZpY2UgdHJlZXMgdG8g YnVpbGQgaW1hZ2Ugc21hbGwgZW5vdWdoIHRvCisgICAgICAgICAgICAgICA7OyBmaXQgd2l0aGlu IHR5cGljYWwgcGFydGl0aW9uaW5nIHNjaGVtZXMgd2hlcmUgdGhlIGZpcnN0CisgICAgICAgICAg ICAgICA7OyBwYXJ0aXRpb24gYmVnaW5zIGF0IHNlY3RvciAyMDQ4LgorICAgICAgICAgICAgICAg Izpjb25maWdzICcoIkNPTkZJR19PRl9MSVNUPVwiYW0zMzV4LWV2bSBhbTMzNXgtYm9uZWJsYWNr XCIiKSkpKQogICAgIChwYWNrYWdlCiAgICAgICAoaW5oZXJpdCBiYXNlKQogICAgICAgKG5hbWUg InUtYm9vdC1hbTMzNXgtYm9uZWJsYWNrIikKQEAgLTg0MywyNSArODYxLDEzIEBAIChkZWZpbmUt cHVibGljIHUtYm9vdC1hbTMzNXgtYm9uZWJsYWNrCiAKIFRoaXMgVS1Cb290IGlzIGJ1aWx0IGZv ciB0aGUgQmVhZ2xlQm9uZSBCbGFjaywgd2hpY2ggd2FzIHJlbW92ZWQgdXBzdHJlYW0sCiBhZGp1 c3RlZCBmcm9tIHRoZSBhbTMzNXhfZXZtIGJ1aWxkIHdpdGggc2V2ZXJhbCBkZXZpY2UgdHJlZXMg cmVtb3ZlZCBzbyB0aGF0Ci1pdCBmaXRzIHdpdGhpbiBjb21tb24gcGFydGl0aW9uaW5nIHNjaGVt ZXMuIikKLSAgICAgIChhcmd1bWVudHMKLSAgICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3Vt ZW50cyAocGFja2FnZS1hcmd1bWVudHMgYmFzZSkKLSAgICAgICAgICgoIzpwaGFzZXMgcGhhc2Vz KQotICAgICAgICAgIGAobW9kaWZ5LXBoYXNlcyAscGhhc2VzCi0gICAgICAgICAgICAgKGFkZC1h ZnRlciAndW5wYWNrICdwYXRjaC1kZWZjb25maWcKLSAgICAgICAgICAgICAgIDs7IFBhdGNoIG91 dCBvdGhlciBkZXZpY2V0cmVlcyB0byBidWlsZCBpbWFnZSBzbWFsbCBlbm91Z2ggdG8KLSAgICAg ICAgICAgICAgIDs7IGZpdCB3aXRoaW4gdHlwaWNhbCBwYXJ0aXRpb25pbmcgc2NoZW1lcyB3aGVy ZSB0aGUgZmlyc3QKLSAgICAgICAgICAgICAgIDs7IHBhcnRpdGlvbiBiZWdpbnMgYXQgc2VjdG9y IDIwNDguCi0gICAgICAgICAgICAgICAobGFtYmRhIF8KLSAgICAgICAgICAgICAgICAgKHN1YnN0 aXR1dGUqICJjb25maWdzL2FtMzM1eF9ldm1fZGVmY29uZmlnIgotICAgICAgICAgICAgICAgICAg ICgoIkNPTkZJR19PRl9MSVNUPS4qJCIpICJDT05GSUdfT0ZfTElTVD1cImFtMzM1eC1ldm0gYW0z MzV4LWJvbmVibGFja1wiXG4iKSkKLSAgICAgICAgICAgICAgICAgI3QpKSkpKSkpKSkKK2l0IGZp dHMgd2l0aGluIGNvbW1vbiBwYXJ0aXRpb25pbmcgc2NoZW1lcy4iKSkpKQogCiAoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtYW0zMzV4LWV2bQogICAobWFrZS11LWJvb3QtcGFja2FnZSAiYW0zMzV4X2V2 bSIgImFybS1saW51eC1nbnVlYWJpaGYiKSkKIAotKGRlZmluZS1wdWJsaWMgKG1ha2UtdS1ib290 LXN1bnhpNjQtcGFja2FnZSBib2FyZCB0cmlwbGV0KQotICAobGV0ICgoYmFzZSAobWFrZS11LWJv b3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KSkpCisoZGVmaW5lKi1wdWJsaWMgKG1ha2UtdS1ib290 LXN1bnhpNjQtcGFja2FnZSBib2FyZCB0cmlwbGV0ICM6a2V5IGRlZmNvbmZpZyBjb25maWdzKQor ICAobGV0ICgoYmFzZSAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0ICM6ZGVmY29u ZmlnIGRlZmNvbmZpZyAjOmNvbmZpZ3MgY29uZmlncykpKQogICAgIChwYWNrYWdlCiAgICAgICAo aW5oZXJpdCBiYXNlKQogICAgICAgKGFyZ3VtZW50cwpAQCAtODkxLDIwICs4OTcsMTAgQEAgKGRl ZmluZS1wdWJsaWMgdS1ib290LXBpbmU2NC1sdHMKICAgKG1ha2UtdS1ib290LXN1bnhpNjQtcGFj a2FnZSAicGluZTY0LWx0cyIgImFhcmNoNjQtbGludXgtZ251IikpCiAKIChkZWZpbmUtcHVibGlj IHUtYm9vdC1waW5lYm9vawotICAobGV0ICgoYmFzZSAobWFrZS11LWJvb3Qtc3VueGk2NC1wYWNr YWdlICJwaW5lYm9vayIgImFhcmNoNjQtbGludXgtZ251IikpKQotICAgIChwYWNrYWdlCi0gICAg ICAoaW5oZXJpdCBiYXNlKQotICAgICAgKGFyZ3VtZW50cwotICAgICAgIChzdWJzdGl0dXRlLWtl eXdvcmQtYXJndW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBiYXNlKQotICAgICAgICAgKCgjOnBo YXNlcyBwaGFzZXMpCi0gICAgICAgICAgYChtb2RpZnktcGhhc2VzICxwaGFzZXMKLSAgICAgICAg ICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ3BhdGNoLXBpbmVib29rLWNvbmZpZwotICAgICAgICAg ICAgICAgOzsgRml4IHJlZ3Jlc3Npb24gd2l0aCBMQ0QgdmlkZW8gb3V0cHV0IGludHJvZHVjZWQg aW4gMjAyMC4wMQotICAgICAgICAgICAgICAgOzsgaHR0cHM6Ly9wYXRjaHdvcmsub3psYWJzLm9y Zy9wYXRjaC8xMjI1MTMwLwotICAgICAgICAgICAgICAgKGxhbWJkYSBfCi0gICAgICAgICAgICAg ICAgIChzdWJzdGl0dXRlKiAiY29uZmlncy9waW5lYm9va19kZWZjb25maWciCi0gICAgICAgICAg ICAgICAgICAgKCgiQ09ORklHX1ZJREVPX0JSSURHRV9BTkFMT0dJWF9BTlg2MzQ1PXkiKSAiQ09O RklHX1ZJREVPX0JSSURHRV9BTkFMT0dJWF9BTlg2MzQ1PXlcbkNPTkZJR19WSURFT19CUFAzMj15 IikpCi0gICAgICAgICAgICAgICAgICN0KSkpKSkpKSkpCisgIChtYWtlLXUtYm9vdC1zdW54aTY0 LXBhY2thZ2UgInBpbmVib29rIiAiYWFyY2g2NC1saW51eC1nbnUiCisgICA7OyBGaXggcmVncmVz c2lvbiB3aXRoIExDRCB2aWRlbyBvdXRwdXQgaW50cm9kdWNlZCBpbiAyMDIwLjAxCisgICA7OyBo dHRwczovL3BhdGNod29yay5vemxhYnMub3JnL3BhdGNoLzEyMjUxMzAvCisgICAjOmNvbmZpZ3Mg JygiQ09ORklHX1ZJREVPX0JQUDMyPXkiKSkpCiAKIChkZWZpbmUtcHVibGljIHUtYm9vdC1iYW5h bmFwaS1tMi11bHRyYQogICAobWFrZS11LWJvb3QtcGFja2FnZSAiQmFuYW5hcGlfTTJfVWx0cmEi ICJhcm0tbGludXgtZ251ZWFiaWhmIikpCkBAIC05NTUsMjUgKzk1MSwxNyBAQCAoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtbXg2Y3Vib3hpCiAgIChtYWtlLXUtYm9vdC1wYWNrYWdlICJteDZjdWJveGki ICJhcm0tbGludXgtZ251ZWFiaWhmIikpCiAKIChkZWZpbmUtcHVibGljIHUtYm9vdC1ub3ZlbmEK LSAgKGxldCAoKGJhc2UgKG1ha2UtdS1ib290LXBhY2thZ2UgIm5vdmVuYSIgImFybS1saW51eC1n bnVlYWJpaGYiKSkpCisgIChsZXQgKChiYXNlIChtYWtlLXUtYm9vdC1wYWNrYWdlICJub3ZlbmEi ICJhcm0tbGludXgtZ251ZWFiaWhmIgorICAgICAgICAgICAgICAgOzsgUGF0Y2ggY29uZmlndXJh dGlvbiB0byBkaXNhYmxlIGxvYWRpbmcgdS1ib290LmltZyBmcm9tIEZBVAorICAgICAgICAgICAg ICAgOzsgcGFydGl0aW9uLCBhbGxvd2luZyBpdCB0byBiZSBpbnN0YWxsZWQgYXQgYSBkZXZpY2Ug b2Zmc2V0LgorICAgICAgICAgICAgICAgIzpjb25maWdzICcoIkNPTkZJR19TUExfRlNfRkFUPSIp KSkpCiAgICAgKHBhY2thZ2UKICAgICAgIChpbmhlcml0IGJhc2UpCiAgICAgICAoZGVzY3JpcHRp b24gIlUtQm9vdCBpcyBhIGJvb3Rsb2FkZXIgdXNlZCBtb3N0bHkgZm9yIEFSTSBib2FyZHMuICBJ dAogYWxzbyBpbml0aWFsaXplcyB0aGUgYm9hcmRzIChSQU0gZXRjKS4KIAogVGhpcyBVLUJvb3Qg aXMgYnVpbHQgZm9yIE5vdmVuYS4gIEJlIGFkdmlzZWQgdGhhdCB0aGlzIHZlcnNpb24sIGNvbnRy YXJ5Ci10byBOb3ZlbmEgdXBzdHJlYW0sIGRvZXMgbm90IGxvYWQgdS1ib290LmltZyBmcm9tIHRo ZSBmaXJzdCBwYXJ0aXRpb24uIikKLSAgICAgIChhcmd1bWVudHMKLSAgICAgICAoc3Vic3RpdHV0 ZS1rZXl3b3JkLWFyZ3VtZW50cyAocGFja2FnZS1hcmd1bWVudHMgYmFzZSkKLSAgICAgICAgICgo IzpwaGFzZXMgcGhhc2VzKQotICAgICAgICAgIGAobW9kaWZ5LXBoYXNlcyAscGhhc2VzCi0gICAg ICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdwYXRjaC1ub3ZlbmEtZGVmY29uZmlnCi0gICAg ICAgICAgICAgICA7OyBQYXRjaCBjb25maWd1cmF0aW9uIHRvIGRpc2FibGUgbG9hZGluZyB1LWJv b3QuaW1nIGZyb20gRkFUIHBhcnRpdGlvbiwKLSAgICAgICAgICAgICAgIDs7IGFsbG93aW5nIGl0 IHRvIGJlIGluc3RhbGxlZCBhdCBhIGRldmljZSBvZmZzZXQuCi0gICAgICAgICAgICAgICAobGFt YmRhIF8KLSAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJjb25maWdzL25vdmVuYV9kZWZj b25maWciCi0gICAgICAgICAgICAgICAgICAgKCgiQ09ORklHX1NQTF9GU19GQVQ9eSIpICIjIENP TkZJR19TUExfRlNfRkFUIGlzIG5vdCBzZXQiKSkKLSAgICAgICAgICAgICAgICAgI3QpKSkpKSkp KSkKK3RvIE5vdmVuYSB1cHN0cmVhbSwgZG9lcyBub3QgbG9hZCB1LWJvb3QuaW1nIGZyb20gdGhl IGZpcnN0IHBhcnRpdGlvbi4iKSkpKQogCiAoZGVmaW5lLXB1YmxpYyB1LWJvb3QtY3ViaWVib2Fy ZAogICAobWFrZS11LWJvb3QtcGFja2FnZSAiQ3ViaWVib2FyZCIgImFybS1saW51eC1nbnVlYWJp aGYiKSkKZGlmZiAtLWdpdCBhL2d1aXgvYnVpbGQva2NvbmZpZy5zY20gYi9ndWl4L2J1aWxkL2tj b25maWcuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA5ZGRmNTlk ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2J1aWxkL2tjb25maWcuc2NtCkBAIC0wLDAgKzEs MTQ4IEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50IGZv ciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAyMCBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25l bWFpbC5kZT4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7 OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7 Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBidWls ZCBrY29uZmlnKQorICAjOnVzZS1tb2R1bGUgIChpY2UtOSByZGVsaW0pCisgICM6dXNlLW1vZHVs ZSAgKGljZS05IHJlZ2V4KQorICAjOnVzZS1tb2R1bGUgIChzcmZpIHNyZmktMSkKKyAgIzp1c2Ut bW9kdWxlICAoc3JmaSBzcmZpLTI2KQorICAjOmV4cG9ydCAobW9kaWZ5LWRlZmNvbmZpZykpCisK Kzs7IENvbW1lbnRhcnk6Cis7OworOzsgQnVpbGRlci1zaWRlIGNvZGUgdG8gbW9kaWZ5IGNvbmZp Z3VyYXRpb25zIGZvciB0aGUgS2NvbmZpZyBidWlsZCBzeXN0ZW0gYXMKKzs7IHVzZWQgYnkgTGlu dXggYW5kIFUtQm9vdC4KKzs7Cis7OyBDb2RlOgorCisoZGVmaW5lIChtb2RpZnktZGVmY29uZmln IGRlZmNvbmZpZyBjb25maWdzKQorICAiVGhpcyBmdW5jdGlvbiBjYW4gbW9kaWZ5IGEgZ2l2ZW4g REVGQ09ORklHIGZpbGUgYnkgYWRkaW5nLCBjaGFuZ2luZyBvcgorcmVtb3ZpbmcgdGhlIGxpc3Qg b2Ygc3RyaW5ncyBpbiBDT05GSUdTLiAgVGhpcyBhbGxvd3MgYW4gZWFzeSBjdXN0b21pemF0aW9u IG9mCitLY29uZmlnIGJhc2VkIHByb2plY3RzIGxpa2UgdGhlIGtlcm5lbCBMaW51eCBvciB0aGUg Ym9vdGxvYWRlciAnRGFzIFUtQm9vdCcuCisKK1RoZXNlIGFyZSBleGFtcGxlcyBmb3IgQ09ORklH UyB0byBhZGQgb3IgY2hhbmdlIG9yIHJlbW92ZQorY29uZmlndXJhdGlvbnMgdG8vZnJvbSBERUZD T05GSUc6CisKKycoXCJDT05GSUdfQT1cXFwiYVxcXCJcIgorICBcIkNPTkZJR19CPTBcIgorICBc IkNPTkZJR19DPXlcIgorICBcIkNPTkZJR19EPW1cIgorICBcIkNPTkZJR19FPVwiCisgIFwiQ09O RklHX0ZcIgorICBcIiMgQ09ORklHX0cgaXMgbm90IHNldFwiKQorCitJbnN0ZWFkIG9mIGEgbGlz dCwgQ09ORkdJUyBjYW4gYmUgYSBzdHJpbmcgd2l0aCBvbmUgY29uZmlndXJhdGlvbiBwZXIgbGlu ZS4iCisgIChkZWZpbmUgY29uZmlnLXJ4CisgICAgKG1ha2UtcmVnZXhwCisgICAgIDs7IChtYXRj aDpzdWJzdHJpbmcgKHN0cmluZy1tYXRjaCAiPSguKikiICI9IikgMSkgcmV0dXJucyAiIiwgYnV0 IHRoZQorICAgICA7OyBwYXR0ZXJuICI9KC4rKT8iIG1ha2VzIGl0IHJldHVybiAjZiBpbnN0ZWFk LiAgRm9yIGEgIkNPTkZJR19BPSIgd2UgbGlrZQorICAgICA7OyB0byBnZXQgI2YsIHdoaWNoIGFz IGEgdmFsdWUgZW1pdHMgIiMg4oCmIGlzIG5vdCBzZXQiLgorICAgICAiXigjW1xcdCBdKik/KENP TkZJR19bQS1aMC05X10rKShbXFx0IF0qPVtcXHQgXSooLispP3woW1xcdCBdK2lzW1xcdCBdK25v dFtcXHQgXStzZXQpKT8kIikpCisKKyAgKGRlZmluZSAoY29uZmlnLXN0cmluZy0+cGFpciBjb25m aWctc3RyaW5nKQorICAgICJQYXJzZSBhIGNvbmZpZy1zdHJpbmcgbGlrZSBcIkNPTkZJR19FWEFN UExFPXlcIiBpbnRvIGEga2V5LXZhbHVlIHBhaXIuCitTcGFjZXMgZ2V0IHRyaW1tZWQuCitcIkNP TkZJR19BPXlcIiAgICAgICAgICAgIC0+ICcoXCJDT05GSUdfQVwiIC4gXCJ5XCIpCitcIkNPTkZJ R19CPVxcXCJcXFwiXCIgICAgICAgICAtPiAnKFwiQ09ORklHX0JcIiAuIFwiXFxcIlxcXCJcIikK K1wiQ09ORklHX0M9XCIgICAgICAgICAgICAgLT4gJyhcIkNPTkZJR19DXCIgLiAjZikKK1wiQ09O RklHX0RcIiAgICAgICAgICAgICAgLT4gJyhcIkNPTkZJR19EXCIgLiAjZikKK1wiIyBDT05GSUdf RSBpcyBub3Qgc2V0XCIgLT4gJyhcIkNPTkZJR19FXCIgLiAjZikKK1wiIyBBbnl0aGluZyBlbHNl XCIgICAgICAgLT4gJyhcIiMgQW55dGhpbmcgZWxzZVwiIC4gXCJcIikiCisgICAgKGxldCAoKG1h dGNoIChyZWdleHAtZXhlYyBjb25maWctcnggKHN0cmluZy10cmltLWJvdGggY29uZmlnLXN0cmlu ZykpKSkKKyAgICAgIChpZiAobm90IG1hdGNoKQorICAgICAgICAgIDs7IFRoaXMgaXMgc29tZSB1 bnBhcnNhYmxlIGNvbmZpZy1zdHJpbmcuCisgICAgICAgICAgOzsgV2Uga2VlcCBpdCBhcyBpdCBp cy4KKyAgICAgICAgICAoY29ucyBjb25maWctc3RyaW5nICIiKQorICAgICAgICAgIChsZXQqICgo Y29tbWVudCAobWF0Y2g6c3Vic3RyaW5nIG1hdGNoIDEpKQorICAgICAgICAgICAgICAgICAoa2V5 IChtYXRjaDpzdWJzdHJpbmcgbWF0Y2ggMikpCisgICAgICAgICAgICAgICAgICh1bnNldCAobWF0 Y2g6c3Vic3RyaW5nIG1hdGNoIDUpKQorICAgICAgICAgICAgICAgICAodmFsdWUgKGFuZCAobm90 IGNvbW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgdW5zZXQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcgbWF0Y2ggNCkpKSkKKyAg ICAgICAgICAgIChpZiAob3IgKGFuZCBjb21tZW50IChub3QgdW5zZXQpKQorICAgICAgICAgICAg ICAgICAgICAoYW5kIChub3QgY29tbWVudCkgdW5zZXQpKQorICAgICAgICAgICAgICAgIDs7IFRo aXMgaXMganVzdCBzb21lIGNvbW1lbnQgb3Igc3RyYW5nZSBsaW5lLCB3aGljaCB3ZSBrZWVwIGFz IGlzLgorICAgICAgICAgICAgICAgIChjb25zIGNvbmZpZy1zdHJpbmcgIiIpCisgICAgICAgICAg ICAgICAgKGNvbnMga2V5IHZhbHVlKSkpKSkpCisKKyAgKGRlZmluZSAocGFpci0+Y29uZmlnLXN0 cmluZyBwYWlyKQorICAgICJDb252ZXJ0IGEgUEFJUiBiYWNrIHRvIGEgY29uZmlnLXN0cmluZy4i CisgICAgKGxldCogKChrZXkgKGNhciBwYWlyKSkKKyAgICAgICAgICAgKHZhbHVlIChjZHIgcGFp cikpKQorICAgICAgKGlmIChzdHJpbmc/IHZhbHVlKQorICAgICAgICAgIChpZiAoc3RyaW5nLW51 bGw/IHZhbHVlKQorICAgICAgICAgICAgICBrZXkKKyAgICAgICAgICAgICAgKHN0cmluZy1hcHBl bmQga2V5ICI9IiB2YWx1ZSkpCisgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIiMgIiBrZXkgIiBp cyBub3Qgc2V0IikpKSkKKworICAoZGVmaW5lIChyZW1vdmUtcGFpciBwYWlyIGJsYWNrbGlzdCkK KyAgICAiVHVybiBhIGtleS12YWx1ZSBQQUlSIGludG8gJygiIiAuICIiKSwgaWYgaXRzIGtleSBp cyBsaXN0ZWQgaW4gQkxBQ0tMSVNULiIKKyAgICAobGV0KiAoKGtleSAoZmlyc3QgcGFpcikpKQor ICAgICAgKGlmIChtZW1iZXIga2V5IGJsYWNrbGlzdCkKKyAgICAgICAgICAnKCIiIC4gIiIpCisg ICAgICAgICAgcGFpcikpKQorCisgIChkZWZpbmUgKHJlbW92ZS1jb25maWctc3RyaW5nIGNvbmZp Zy1zdHJpbmcgYmxhY2tsaXN0KQorICAgICJSZW1vdmUgdGhlIENPTkZJRy1TVFJJTkcsIGlmIGl0 cyBrZXkgaXMgbGlzdGVkIGluIEJMQUNLTElTVC4iCisgICAgKHBhaXItPmNvbmZpZy1zdHJpbmcg KHJlbW92ZS1wYWlyIChjb25maWctc3RyaW5nLT5wYWlyIGNvbmZpZy1zdHJpbmcpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja2xpc3QpKSkKKworICAoZGVmaW5l KiAod3JpdGUtbGluZXMgaW5wdXQgIzprZXkgKGxpbmUtbW9kaWZpZXIgaWRlbnRpdHkpKQorICAg ICJXcml0ZSBhbGwgbGluZXMgZnJvbSB0aGUgSU5QVVQgYWZ0ZXIgYXBwbHlpbmcgdGhlIExJTkUt TU9ESUZJRVIgdG8gdGhlCisgY3VycmVudC1vdXRwdXQtcG9ydC4iCisgICAgKGxldCBsb29wICgo bGluZSAocmVhZC1saW5lIGlucHV0KSkpCisgICAgICAod2hlbiAobm90IChlb2Ytb2JqZWN0PyBs aW5lKSkKKyAgICAgICAgKGRpc3BsYXkgKGxpbmUtbW9kaWZpZXIgbGluZSkpCisgICAgICAgIChu ZXdsaW5lKQorICAgICAgICAobG9vcCAocmVhZC1saW5lIGlucHV0KSkpKSkKKworICAobGV0KiAo KG1vZGlmaWVkLWRlZmNvbmZpZyAoc3RyaW5nLWFwcGVuZCBkZWZjb25maWcgIi5tb2QiKSkKKyAg ICAgICAgIDs7IFNwbGl0IHRoZSBjb25maWdzIGludG8gYSBsaXN0IG9mIHNpbmdsZSBjb25maWd1 YXRpb25zLgorICAgICAgICAgOzsgVG8gbWluaW1pemUgbWlzdGFrZXMsIHdlIHN1cHBvcnQgYSBz dHJpbmcgYW5kIGEgbGlzdCBvZiBzdHJpbmdzLAorICAgICAgICAgOzsgZWFjaCB3aXRoIG5ld2xp bmVzIHRvIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgKGNvbmZpZy1saXN0IChm b2xkLXJpZ2h0IGFwcGVuZCAnKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bWFwIChsYW1iZGEgKHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdHJpbmctc3BsaXQgcyAjXG5ld2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGlmIChzdHJpbmc/IGNvbmZpZ3MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgY29uZmlncykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzKSkpKQorICAgICAgICAgOzsgR2VuZXJhdGUg a2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIGNvbmZpZy1saXN0LgorICAgICAgICAgKHBhaXJzICht YXAgKGxhbWJkYSAoY29uZmlnLXN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZp Zy1zdHJpbmctPnBhaXIgY29uZmlnLXN0cmluZykpCisgICAgICAgICAgICAgICAgICAgICBjb25m aWctbGlzdCkpCisgICAgICAgICA7OyBHZW5lcmF0ZSBhIGJsYWNrbGlzdCBvZiBjb25maWcga2V5 cyBmcm9tIHBhaXJzLgorICAgICAgICAgKGJsYWNrbGlzdCAobWFwIChsYW1iZGEgKGNvbmZpZy1w YWlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpcnN0IGNvbmZpZy1wYWlyKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICBwYWlycykpCisgICAgICAgICAocmVtb3ZlLWNvbmZpZy1z dHJpbmcgKGN1dCByZW1vdmUtY29uZmlnLXN0cmluZyA8PiBibGFja2xpc3QpKSkKKyAgICA7OyBX cml0ZSB0byB0aGUgbW9kaWZpZWQtZGVmY29uZmlnIGZpbGUgZmlyc3QgdGhlIGNvbnRlbnQgb2Yg dGhlIGRlZmNvbmZpZworICAgIDs7IGZpbGUgd2l0aCByZW1vdmVkIGxpbmVzLCBhbmQgYWZ0ZXJ3 YXJkcyB0aGUgY29uZmlncy4KKyAgICAoY2FsbC13aXRoLW91dHB1dC1maWxlIG1vZGlmaWVkLWRl ZmNvbmZpZworICAgICAgKGxhbWJkYSAob3V0cHV0KQorICAgICAgICAod2l0aC1vdXRwdXQtdG8t cG9ydCBvdXRwdXQKKyAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAoY2FsbC13aXRo LWlucHV0LWZpbGUgZGVmY29uZmlnCisgICAgICAgICAgICAgIChsYW1iZGEgKGlucHV0KQorICAg ICAgICAgICAgICAgICh3cml0ZS1saW5lcyBpbnB1dCAjOiBsaW5lLW1vZGlmaWVyIHJlbW92ZS1j b25maWctc3RyaW5nKSkpCisgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LXN0cmluZworICAg ICAgICAgICAgICAoc3RyaW5nLWpvaW4gKG1hcCBwYWlyLT5jb25maWctc3RyaW5nIHBhaXJzKSAi XG4iKQorICAgICAgICAgICAgICAobGFtYmRhIChpbnB1dCkKKyAgICAgICAgICAgICAgICAod3Jp dGUtbGluZXMgaW5wdXQpKSkpKSkpCisgICAgOzsgRW5zdXJlIHRoZSBtb2RpZmllZC1kZWZjb25m aWcgZmlsZSBpcyB1c2VkLgorICAgIChkZWxldGUtZmlsZSBkZWZjb25maWcpCisgICAgKHJlbmFt ZS1maWxlIG1vZGlmaWVkLWRlZmNvbmZpZyBkZWZjb25maWcpKSkKLS0gCjIuMzUuMQoK --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0005-gnu-raspberry-pi-Add-defconfig-objects-to-build-c.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0005-gnu-raspberry-pi-Add-defconfig-objects-to-build-c.patch RnJvbSA3NTNmMDhiODc4Nzg1MDhkYTc2ODg5MWZhNzM3MTA5NDQwMWJlYTg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOToyNSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg NS84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGRlZmNvbmZpZyBvYmplY3RzIHRvIGJ1aWxkCiBj dXN0b21pemVkIExpbnV4IGtlcm5lbHMuCgpnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbSAo bWFrZS1yYXNwaS1kZWZjb25pZyk6IE5ldyBmdW5jdGlvbiB0byBtYWtlCmRvd25sb2FkZWQgZGVm Y29uZmlnIG9iamVjdHMgZnJvbSB0aGUgTGludXggcmVwb3NpdG9yeSBvZiB0aGUgUmFzcGJlcnJ5 IFBpCkZvdW5kYXRpb24uCiglYmNtMjcwOS1kZWZjb25maWcsICViY20yNzEwLWRlZmNvbmZpZywg JWJjbTI3MTEtZGVmY29uZmlnLAolYmNtMjgzNS1kZWZjb25maWcsICViY21ycGktZGVmY29uZmln LCAlYmNtMjcxMS1kZWZjb25maWctNjQsCiViY21ycGkzLWRlZmNvbmZpZyk6IE5ldyB2YXJpYWJs ZXMgY29udGFpbmluZyBkZWZjb25maWcgb2JqZWN0cyB0byBidWlsZApMaW51eCBrZXJuZWxzIGN1 c3RvbWl6ZWQgZm9yIFJhc3BiZXJyeSBQaSBzaW5nbGUgYm9hcmQgY29tcHV0ZXJzLgoKZGlmZiAt LWdpdCBhL2dudS9wYWNrYWdlcy9yYXNwYmVycnktcGkuc2NtIGIvZ251L3BhY2thZ2VzL3Jhc3Bi ZXJyeS1waS5zY20KaW5kZXggYmIzOGI4YjIxOC4uYTJhYjMwMDUzMSAxMDA2NDQKLS0tIGEvZ251 L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KKysrIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1w aS5zY20KQEAgLTEsNSArMSw2IEBACiA7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2Fn ZSBtYW5hZ2VtZW50IGZvciBHTlUKIDs7OyBDb3B5cmlnaHQgwqkgMjAyMCBEYW5ueSBNaWxvc2F2 bGpldmljIDxkYW5ueW1Ac2NyYXRjaHBvc3Qub3JnPgorOzs7IENvcHlyaWdodCDCqSAyMDIxIFN0 ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR05VIEd1aXguCiA7OzsKQEAgLTI1LDkgKzI2LDEwIEBAIChkZWZpbmUtbW9kdWxl IChnbnUgcGFja2FnZXMgcmFzcGJlcnJ5LXBpKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cyBjb21tZW5jZW1lbnQpCiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGNyb3NzLWJhc2Up CiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGRvY3VtZW50YXRpb24pCisgICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzIGVtYmVkZGVkKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cyBmaWxlKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBnY2MpCi0gICM6dXNlLW1vZHVs ZSAoZ251IHBhY2thZ2VzIGVtYmVkZGVkKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBs aW51eCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSBnbnUpCiAgICM6dXNlLW1v ZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGdpdC1kb3dubG9hZCkK QEAgLTIzNSwzICsyMzcsNDMgQEAgKGRlZmluZS1wdWJsaWMgcmFzcGktYXJtNjQtY2hhaW5sb2Fk ZXIKICAgICAgICAgICAgICAgIChpbnN0YWxsLWZpbGUgImFybTY0LmJpbiIgbGliZXhlYykKICAg ICAgICAgICAgICAgICN0KSkpKSkpKSkKICAgICAoc3VwcG9ydGVkLXN5c3RlbXMgJygiYWFyY2g2 NC1saW51eCIpKSkpCisKKyhkZWZpbmUgKG1ha2UtcmFzcGktZGVmY29uZmlnIGFyY2ggZGVmY29u ZmlnIHNoYTI1Ni1hcy1iYXNlMzIpCisgICJNYWtlIGZvciB0aGUgYXJjaGl0ZWN0dXJlIEFSQ0gg YSBmaWxlLWxpa2Ugb2JqZWN0IGZyb20gdGhlIERFRkNPTkZJRyBmaWxlCit3aXRoIHRoZSBoYXNo IFNIQTI1Ni1BUy1CQVNFMzIuICBUaGlzIG9iamVjdCBjYW4gYmUgdXNlZCBhcyB0aGUgIzpkZWZj b25maWcKK2FyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiAobW9kaWZ5LWxpbnV4KS4iCisgIChtYWtl LWRlZmNvbmZpZworICAgKHN0cmluZy1hcHBlbmQKKyAgICAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNl cmNvbnRlbnQuY29tL3Jhc3BiZXJyeXBpL2xpbnV4L3Jhc3BiZXJyeXBpLWtlcm5lbF8xLjIwMjEw NDMwLTEvYXJjaC8iCisgICAgYXJjaCAiL2NvbmZpZ3MvIiBkZWZjb25maWcpCisgICBzaGEyNTYt YXMtYmFzZTMyKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbTI3MDktZGVmY29uZmlnCisgIChtYWtl LXJhc3BpLWRlZmNvbmZpZworICAgImFybSIgImJjbTI3MDlfZGVmY29uZmlnIgorICAgIjB5dnJt aWQyamFrbDkyOWQxbXYwMGdpZG5xYmY5MWZmaGo2MWM5Z2w3NWY3a200ODgxMWMiKSkKKworKGRl ZmluZS1wdWJsaWMgJWJjbTI3MTEtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZwor ICAgImFybSIgImJjbTI3MTFfZGVmY29uZmlnIgorICAgIjE5aGI2bnduYTdzazNiNHJuNXlqZmhs ZHJzM2MxbHYyNHEwOHc0Z3BhNHh6aDFieXY3amoiKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbTI4 MzUtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZworICAgImFybSIgImJjbTI4MzVf ZGVmY29uZmlnIgorICAgIjE3ZG12YWJxdnh3cW42bGd2MXg4cmZoMndxZjFyMnhtbTEwbmtkbnJn d2ttZ3Y4YmgyZDUiKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbXJwaS1kZWZjb25maWcKKyAgKG1h a2UtcmFzcGktZGVmY29uZmlnCisgICAiYXJtIiAiYmNtcnBpX2RlZmNvbmZpZyIKKyAgICIwbGNt cjZueGRkNTNtM2s4aHFiNWs2YzViN3ZiZGdtZnZjbGlxeWw5NXNucDQ1cnhqamt3IikpCisKKyhk ZWZpbmUtcHVibGljICViY20yNzExLWRlZmNvbmZpZy02NAorICAobWFrZS1yYXNwaS1kZWZjb25m aWcKKyAgICJhcm02NCIgImJjbTI3MTFfZGVmY29uZmlnIgorICAgIjB4ZjM4bmN6d2lucjBqOHZo c244bmQ4aDR5c2puNzd4cGhnN3huc3N6MDRnY2xiN2ZuZHIiKSkKKworKGRlZmluZS1wdWJsaWMg JWJjbXJwaTMtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZworICAgImFybTY0IiAi YmNtcnBpM19kZWZjb25maWciCisgICAiMDFrMDk4c25kN2tibWh6NjhqOTNtajJmd3AzOWM1Nmc5 cjhyZ2F3MTdqczVyMHcwemJoeSIpKQotLSAKMi4zNS4xCgo= --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: text/x-patch; name=v3-0004-gnu-linux-New-function-to-modify-the-configuratio.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0004-gnu-linux-New-function-to-modify-the-configuratio.patch RnJvbSAxYjA1Mzk4ZWQ5ZTdhZGIxZmE4ODIyYzVkMjJlYmZmNjZiZjRmOGQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxODozNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjMg NC84XSBnbnU6IGxpbnV4OiBOZXcgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBjb25maWd1cmF0aW9u CiBvZiBhIExpbnV4IGtlcm5lbC4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkZy b206IFN0ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgoKKiBnbnUvcGFja2FnZXMv bGludXguc2NtIChzeXN0ZW0tPmxpbnV4LXNyY2FyY2gpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJu IHRoZQpyZWxldmVudCBmb2xkZXIgbmFtZSBiZWxvdyBhcmNoLyBpbiB0aGUgTGludXggc291cmNl IGNvZGUuCihtYWtlLWxpbnV4LWxpYnJlKikgWydzZXQtZW52aXJvbm1lbnRdOiBTcGxpdHRlZCB0 aGlzIG5ldyBwaGFzZSBvdXQgb2YgYW5kCmFkZGluZyBpdCBiZWZvcmUg4oCmClsnY29uZmlndXJl XTog4oCmIHRvIGFsbG93IGEgcmVwbGFjZW1lbnQgYW5kIHJldXNlIGZyb20gKG1vZGlmeS1saW51 eCkuCihtb2RpZnktbGludXgpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBhIGN1c3RvbWl6ZWQgTGlu dXggcGFja2FnZSBpbmhlcml0ZWQKZnJvbSBhbm90aGVyIExpbnV4IHBhY2thZ2UsIHdoaWNoIHdp bGwgYmUgYnVpbGQgd2l0aCBhbiBvd24gZGVmY29uZmlnIG9yCmNvbmZpZ3VyYXRpb24gY2hhbmdl cy4KKG1ha2UtZGVmY29uZmlnKTogRnVuY3Rpb24gdG8gZ2V0IGEgZGVmY29uZmlnIGZyb20gYW4g dXJpLgoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9saW51eC5zY20gYi9nbnUvcGFja2FnZXMv bGludXguc2NtCmluZGV4IGE0MDU4MzdiYjEuLjQ4Yzc3OTcwOTUgMTAwNjQ0Ci0tLSBhL2dudS9w YWNrYWdlcy9saW51eC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2xpbnV4LnNjbQpAQCAtNTksNyAr NTksOCBAQAogOzs7IENvcHlyaWdodCDCqSAyMDIxIEpvc3NlbGluIFBvaXJldCA8am9zc2VsaW4u cG9pcmV0QHByb3Rvbm1haWwuY2g+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEgT2xpdmllciBEaW9u IDxvbGl2aWVyLmRpb25AcG9seW10bC5jYT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTb2xlbmUg UmFwZW5uZSA8c29sZW5lQHBlcnNvLnB3PgotOzs7IENvcHlyaWdodCDCqSAyMDIxIFBldHIgSG9k aW5hIDxwaG9kaW5hQHByb3Rvbm1haWwuY29tPgorOzs7IENvcHlyaWdodCDCqSAyMDIxLCAyMDIy IFBldHIgSG9kaW5hIDxwaG9kaW5hQHByb3Rvbm1haWwuY29tPgorOzs7IENvcHlyaWdodCDCqSAy MDIxIFN0ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgogOzs7IENvcHlyaWdodCDC qSAyMDIyIEFydHlvbSBWLiBQb3B0c292IDxwb3B0c292LmFydHlvbUBnbWFpbC5jb20+CiAKIDs7 OwpAQCAtMTc5LDYgKzE4MCw3IEBAIChkZWZpbmUtbW9kdWxlIChnbnUgcGFja2FnZXMgbGludXgp CiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTIpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZp LTI2KQogICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKGljZS05 IG9wdGFyZ3MpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVnZXgpKQogCiAoZGVmaW5lLXB1Ymxp YyAoc3lzdGVtLT5saW51eC1hcmNoaXRlY3R1cmUgYXJjaCkKQEAgLTE5NSw2ICsxOTcsMjEgQEAg KGRlZmluZS1wdWJsaWMgKHN5c3RlbS0+bGludXgtYXJjaGl0ZWN0dXJlIGFyY2gpCiAgICAgICAg ICAgKChzdHJpbmctcHJlZml4PyAicmlzY3YiIGFyY2gpICJyaXNjdiIpCiAgICAgICAgICAgKGVs c2UgYXJjaCkpKSkKIAorKGRlZmluZS1wdWJsaWMgKHN5c3RlbS0+bGludXgtc3JjYXJjaCBhcmNo KQorICAiUmV0dXJuIGZvciBhIEd1aXggc3lzdGVtIEFSQ0ggbmFtZSB0aGUgU1JDQVJDSCBuYW1l LCB3aGljaCBpcyBzZXQgaW4gdGhlCit0b3BsZXZlbCBNYWtlZmlsZSBvZiBMaW51eCBhbmQgZGVu b3RlcyB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRpcmVjdG9yeSBuYW1lCitiZWxvdyBhcmNo LyBpbiBpdHMgc291cmNlIGNvZGUuICBTb21lIGZldyBhcmNoaXRlY3R1cmVzIHNoYXJlIGEgY29t bW9uIGZvbGRlci4KK0l0IHJlc2VtYmxlcyB0aGUgZGVmaW5pdGlvbiBvZiBTUkNBUkNIIGJhc2Vk IG9uIEFSQ0ggaW4gdGhlIE1ha2VmaWxlIGFuZCBtYXkKK2JlIHVzZWQgdG8gcGxhY2UgYSBkZWZj b25maWcgZmlsZSBpbiB0aGUgcHJvcGVyIHBhdGguIgorICAobGV0ICgobGludXgtYXJjaCAoc3lz dGVtLT5saW51eC1hcmNoaXRlY3R1cmUgYXJjaCkpKQorICAgIChtYXRjaCBsaW51eC1hcmNoCisg ICAgICAoImkzODYiICAgICJ4ODYiKQorICAgICAgKCJ4ODZfNjQiICAieDg2IikKKyAgICAgICgi c3BhcmMzMiIgInNwYXJjIikKKyAgICAgICgic3BhcmM2NCIgInNwYXJjIikKKyAgICAgICgic2g2 NCIgICAgInNoIikKKyAgICAgIChfICAgICAgICAgbGludXgtYXJjaCkpKSkKKwogKGRlZmluZS1w dWJsaWMgKHN5c3RlbS0+ZGVmY29uZmlnIHN5c3RlbSkKICAgIlNvbWUgc3lzdGVtcyAobm90YWJs eSBwb3dlcnBjLWxpbnV4KSByZXF1aXJlIGEgc3BlY2lhbCB0YXJnZXQgZm9yIGtlcm5lbAogZGVm Y29uZmlnLiAgUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBtYWtlIHRhcmdldCBpZiBhcHBsaWNhYmxl LCBvdGhlcndpc2UgcmV0dXJuCkBAIC04NTIsNyArODY5LDcgQEAgKGRlZmluZSogKG1ha2UtbGlu dXgtbGlicmUqIHZlcnNpb24gZ251LXJldmlzaW9uIHNvdXJjZSBzdXBwb3J0ZWQtc3lzdGVtcwog ICAgICAgICAgICAgICAgICAobGFtYmRhIF8KICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0 ZSogKGZpbmQtZmlsZXMgIi4iICJeTWFrZWZpbGUoXFwuaW5jbHVkZSk/JCIpCiAgICAgICAgICAg ICAgICAgICAgICAoKCIvYmluL3B3ZCIpICJwd2QiKSkpKQotICAgICAgICAgICAgICAgKHJlcGxh Y2UgJ2NvbmZpZ3VyZQorICAgICAgICAgICAgICAgKGFkZC1iZWZvcmUgJ2NvbmZpZ3VyZSAnc2V0 LWVudmlyb25tZW50CiAgICAgICAgICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMgdGFy Z2V0ICM6YWxsb3ctb3RoZXIta2V5cykKICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCBpbnRy b2R1Y2luZyB0aW1lc3RhbXBzLgogICAgICAgICAgICAgICAgICAgIChzZXRlbnYgIktDT05GSUdf Tk9USU1FU1RBTVAiICIxIikKQEAgLTg3Nyw4ICs4OTQsMTAgQEAgKGRlZmluZSogKG1ha2UtbGlu dXgtbGlicmUqIHZlcnNpb24gZ251LXJldmlzaW9uIHNvdXJjZSBzdXBwb3J0ZWQtc3lzdGVtcwog CiAgICAgICAgICAgICAgICAgICAgKHNldGVudiAiRVhUUkFWRVJTSU9OIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyQoYW5kIGV4dHJhLXZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLSIgZXh0cmEtdmVyc2lvbikpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICItIiBleHRyYS12ZXJz aW9uKSkpKSkKIAorICAgICAgICAgICAgICAgKHJlcGxhY2UgJ2NvbmZpZ3VyZQorICAgICAgICAg ICAgICAgICAobGFtYmRhKiAoIzprZXkgaW5wdXRzIG5hdGl2ZS1pbnB1dHMgIzphbGxvdy1vdGhl ci1rZXlzKQogICAgICAgICAgICAgICAgICAgIChsZXQgKChidWlsZCAgKGFzc29jLXJlZiAlc3Rh bmRhcmQtcGhhc2VzICdidWlsZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZyAo YXNzb2MtcmVmIGlucHV0cyAia2NvbmZpZyIpKSkKIApAQCAtMTIxMCw2ICsxMjI5LDExMSBAQCAo ZGVmaW5lLXB1YmxpYyBsaW51eC1saWJyZS13aXRoLWJwZgogICAgICAgKGlucHV0cyAobW9kaWZ5 LWlucHV0cyAocGFja2FnZS1pbnB1dHMgYmFzZS1saW51eC1saWJyZSkKICAgICAgICAgICAgICAg ICAocHJlcGVuZCBjcGlvKSkpKSkpCiAKKwwKKzs7OworOzs7IExpbnV4IGtlcm5lbCBjdXN0b21p emF0aW9uIGZ1bmN0aW9ucy4KKzs7OworCisoZGVmaW5lKi1wdWJsaWMgKG1vZGlmeS1saW51eCAj OmtleSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGludXggbGlu dXgtbGlicmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmNvbmZpZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ3MgIiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBleHRyYS12ZXJzaW9uKQorICAiTWFrZSBhIExpbnV4IHBhY2thZ2Ug TkFNRSBhcyBhIG1vZGlmaWNhdGlvbiBvZiBhbm90aGVyIExJTlVYIHBhY2thZ2UuCisKK0lmIE5B TUUgaXMgbm90IGdpdmVuLCB0aGVuIGl0IGRlZmF1bHRzIHRvIHRoZSBzYW1lIG5hbWUgYXMgdGhl IExJTlVYIHBhY2thZ2UuCisKK1VubGVzcyBTT1VSQ0UgaXMgZ2l2ZW4gdGhlIHNvdXJjZSBvZiBM SU5VWCBpcyB1c2VkLgorCitBIERFRkNPTkZJRyBmaWxlIHRvIGJlIHVzZWQgY2FuIGJlIGdpdmVu IGFzIGEgcGFja2FnZSwgYXMgYSBmaWxlIGxpa2Ugb2JqZWN0CisoZmlsZS1hcHBlbmQsIGxvY2Fs LWZpbGUgZXRjLiksIG9yIGFzIGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgYSBkZWZjb25maWcg ZmlsZQorYXZhaWxhYmxlIGluIHRoZSBMaW51eCBzb3VyY2VzLiAgSWYgREVGQ09ORklHIGlzIG5v dCBnaXZlbiwgdGhlbiBhIGRlZmNvbmZpZworZmlsZSB3aWxsIGJlIHNhdmVkIGZyb20gdGhlIExJ TlVYIHBhY2thZ2UgY29uZmlndXJhdGlvbi4KKworQWRkaXRpb25hbCBDT05GSUdTIHdpbGwgYmUg dXNlZCB0byBtb2RpZnkgdGhlIGdpdmVuIG9yIHNhdmVkIGRlZmNvbmZpZywgd2hpY2gKK3dpbGwg ZmluYWxseSBiZSB1c2VkIHRvIGJ1aWxkIExpbnV4LgorCitDT05GSUdTIGNhbiBiZSBhIGxpc3Qg b2Ygc3RyaW5ncywgd2l0aCBvbmUgY29uZmlndXJhdGlvbiBwZXIgbGluZS4gIFRoZSB1c3VhbAor ZGVmY29uZmlnIHN5bnRheCBoYXMgdG8gYmUgdXNlZCwgYnV0IHRoZXJlIGlzIGEgc3BlY2lhbCBl eHRlbnNpb24gdG8gZWFzZSB0aGUKK3JlbW92YWwgb2YgY29uZmlndXJhdGlvbnMuICBDb21tZW50 IGxpbmVzIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4KKworSGVyZSBpcyBhbiBleHBsYWluaW5nIHVz YWdlIGV4YW1wbGU6CisKKyAgJyg7OyBUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSB2ZXJzaW9uIHRh aWwgaW4gJ3VuYW1lIC1yJy4KKyAgICBcIkNPTkZJR19MT0NBTFZFUlNJT049XFxcIi1oYW5kY3Jh ZnRlZFxcXCIKKyAgICA7OyBUaGlzICcjIENPTkZJR1/igKYgaXMgbm90IHNldCcgc3ludGF4IGhh cyB0byBtYXRjaCBleGFjdGx5IQorICAgIFwiIyBDT05GSUdfQk9PVF9DT05GSUcgaXMgbm90IHNl dFwiCisgICAgXCJDT05GSUdfTkZTX1NXQVA9eVwiCisgICAgOzsgVGhpcyBpcyBhIG11bHRpbGlu ZSBjb25maWd1cmF0aW9uOgorICAgIFwiQ09ORklHX0UxMDAwPXkKKyMgVGhpcyBpcyBhIGNvbW1l bnQsIGJlbG93IGZvbGxvdyB0d28gc3BlY2lhbCByZW1vdmFsIGV4dGVuc2lvbnM6CitDT05GSUdf Q01ETElORV9FWFRFTkQKK0NPTkZJR19DTURMSU5FX0ZPUkNFPVwiKQorCitBIHN0cmluZyBvZiBj b25maWd1cmF0aW9ucyBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIHN0cmluZ3Mg aXMgYWxzbworcG9zc2libGUuCisKK0VYVFJBLVZFUlNJT04gY2FuIGJlIGEgc3RyaW5nIG92ZXJ3 cml0aW5nIHRoZSBFWFRSQVZFUlNJT04gc2V0dGluZyBvZiB0aGUgTElOVVgKK3BhY2thZ2UsIGFm dGVyIGJlaW5nIHByZXBlbmRlZCBieSBhIGh5cGhlbi4gIEl0IHdpbGwgYmUgdmlzaWJsZSBpbiB0 aGUgb3V0cHV0CitvZiAndW5hbWUgLXInIGJlaGluZCB0aGUgTGludXggdmVyc2lvbiBudW1iZXJz LiIKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBsaW51eCkKKyAgICAobmFtZSAob3IgbmFtZSAo cGFja2FnZS1uYW1lIGxpbnV4KSkpCisgICAgKHNvdXJjZSAob3Igc291cmNlIChwYWNrYWdlLXNv dXJjZSBsaW51eCkpKQorICAgIChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUta2V5d29yZC1h cmd1bWVudHMKKyAgICAgICAgIChwYWNrYWdlLWFyZ3VtZW50cyBsaW51eCkKKyAgICAgICAoKCM6 aW1wb3J0ZWQtbW9kdWxlcyBpbXBvcnRlZC1tb2R1bGVzICVnbnUtYnVpbGQtc3lzdGVtLW1vZHVs ZXMpCisgICAgICAgIGAoKGd1aXggYnVpbGQga2NvbmZpZykgLEBpbXBvcnRlZC1tb2R1bGVzKSkK KyAgICAgICAoKCM6bW9kdWxlcyBtb2R1bGVzKQorICAgICAgICBgKChndWl4IGJ1aWxkIGtjb25m aWcpICxAbW9kdWxlcykpCisgICAgICAgKCgjOnBoYXNlcyBwaGFzZXMpCisgICAgICAgIGAobW9k aWZ5LXBoYXNlcyAscGhhc2VzCisgICAgICAgICAgIChyZXBsYWNlICdjb25maWd1cmUKKyAgICAg ICAgICAgICAobGFtYmRhKiAoIzprZXkgaW5wdXRzICM6YWxsb3ctb3RoZXIta2V5cyAjOnJlc3Qg YXJndW1lbnRzKQorICAgICAgICAgICAgICAgKGxldCogKChzcmNhcmNoCisgICAgICAgICAgICAg ICAgICAgICAgICwoc3lzdGVtLT5saW51eC1zcmNhcmNoIChvciAoJWN1cnJlbnQtdGFyZ2V0LXN5 c3RlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ3MgKHN0 cmluZy1hcHBlbmQgImFyY2gvIiBzcmNhcmNoICIvY29uZmlncy8iKSkKKyAgICAgICAgICAgICAg ICAgICAgICAoZ3VpeF9kZWZjb25maWcgKHN0cmluZy1hcHBlbmQgY29uZmlncyAiZ3VpeF9kZWZj b25maWciKSkpCisgICAgICAgICAgICAgICAgICwoY29uZAorICAgICAgICAgICAgICAgICAgICgo bm90IGRlZmNvbmZpZykKKyAgICAgICAgICAgICAgICAgICAgYChiZWdpbgorICAgICAgICAgICAg ICAgICAgICAgICA7OyBDYWxsIHRoZSBvcmlnaW5hbCAnY29uZmlndXJlIHBoYXNlLgorICAgICAg ICAgICAgICAgICAgICAgICAoYXBwbHkgKGFzc29jLXJlZiAscGhhc2VzICdjb25maWd1cmUpIGFy Z3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgOzsgU2F2ZSBhIGRlZmNvbmZpZyBmaWxl LgorICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlICJtYWtlIiAic2F2ZWRlZmNvbmZpZyIp CisgICAgICAgICAgICAgICAgICAgICAgIDs7IE1vdmUgdGhlIHNhdmVkIGRlZmNvbmZpZyB0byB0 aGUgcHJvcGVyIGxvY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAocmVuYW1lLWZpbGUg ImRlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aXhfZGVm Y29uZmlnKSkpCisgICAgICAgICAgICAgICAgICAgKChzdHJpbmc/IGRlZmNvbmZpZykKKyAgICAg ICAgICAgICAgICAgICAgOzsgVXNlIGFub3RoZXIgZXhpc3RpbmcgZGVmY29uZmlnIGZyb20gdGhl IExpbnV4IHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIGAocmVuYW1lLWZpbGUgKHN0cmlu Zy1hcHBlbmQgY29uZmlncyAsZGVmY29uZmlnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGd1aXhfZGVmY29uZmlnKSkKKyAgICAgICAgICAgICAgICAgICAoZWxzZQorICAgICAg ICAgICAgICAgICAgICA7OyBDb3B5IHRoZSBkZWZjb25maWcgaW5wdXQgdG8gdGhlIHByb3BlciBs b2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgJyhjb3B5LWZpbGUgKGFzc29jLXJlZiBpbnB1 dHMgImd1aXhfZGVmY29uZmlnIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vp eF9kZWZjb25maWcpKSkKKyAgICAgICAgICAgICAgICAgKG1vZGlmeS1kZWZjb25maWcgZ3VpeF9k ZWZjb25maWcgJyxjb25maWdzKQorICAgICAgICAgICAgICAgICAsQChpZiBleHRyYS12ZXJzaW9u CisgICAgICAgICAgICAgICAgICAgICAgIGAoKHNldGVudiAiRVhUUkFWRVJTSU9OIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLChzdHJpbmctYXBwZW5kICItIiBleHRyYS12ZXJz aW9uKSkpCisgICAgICAgICAgICAgICAgICAgICAgICcoKSkKKyAgICAgICAgICAgICAgICAgKGlu dm9rZSAibWFrZSIgImd1aXhfZGVmY29uZmlnIikpCisgICAgICAgICAgICAgICAjdCkpKSkpKQor ICAgIChuYXRpdmUtaW5wdXRzCisgICAgIChhcHBlbmQgKGlmIChvciAobm90IGRlZmNvbmZpZykK KyAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc/IGRlZmNvbmZpZykpCisgICAgICAgICAgICAg ICAgICcoKQorICAgICAgICAgICAgICAgICA7OyBUaGUgZGVmY29uZmlnIHNob3VsZCBiZSBhIHBh Y2thZ2Ugb3IgZmlsZS1saWtlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgYCgoImd1aXhfZGVm Y29uZmlnIiAsZGVmY29uZmlnKSkpCisgICAgICAgICAgICAgKHBhY2thZ2UtbmF0aXZlLWlucHV0 cyBsaW51eCkpKSkpCisKKyhkZWZpbmUtcHVibGljIChtYWtlLWRlZmNvbmZpZyB1cmkgc2hhMjU2 LWFzLWJhc2UzMikKKyAgKG9yaWdpbiAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAodXJp IHVyaSkKKyAgICAgICAgICAoc2hhMjU2IChiYXNlMzIgc2hhMjU2LWFzLWJhc2UzMikpKSkKIAog DAogOzs7Ci0tIAoyLjM1LjEKCg== --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU Content-Type: application/gzip; name=chz6x0835ix8fzhsg6zspx8rslfwcr-guile-fibers-1.1.0.drv.gz Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=chz6x0835ix8fzhsg6zspx8rslfwcr-guile-fibers-1.1.0.drv.gz H4sIAAAAAAACA+1d6XIbyZH+z6eogNYmNZ4G+sLR8Gg8FMXRcM0RFaK0Y4ft4BT6BvpCV+Pc2Y19 mn2wfZLNqj7QJ0mQEEXZLYVEoo6srKyszK+yDpAIh5HtmSiwMNHRr0SPuOurTx/Ozrk3px/PufP3 V2c/HR/dmovIQlV1XdM1hI1IDxHf5RHRVd/TyBGpaSDAkUWOj3RvaYe+5+pehJY4tPHEgQLvTz9S knqEIh/92jO9RY9Efqj3RNETCb80lnNTWfKYKNbQCDRPsBXNDTdLm4v0te0ZPjfoDnsT2xvn6g7W dqiaw5GwXBry1MTChoRaiLUJCdzN0plywczkgGHDNjmMQ9UayJxje4s1BzQ4visqXbFMc+Yqzkgh mrxylWkg9UcykBe3gzlWV45oKRxeRD6lyYndgVKurY0cCeP5cEnE2Xa2MnlsTAVnKVgTkfSNtctq u3imc0JXGHSlcv2R4PVHa1lUpO3KWm607XLpbQJ1O9z0lencXQP7k8j3HWhc7g7KtVXPIEtls8JY 3WBjNtfmZCmGm5HBC5twiBXOXNiOzkldvipLURDmznLjSSRQFSkUt87Wsfj5zA378tziLc7UIxiK iHNtz3axQ8UnVIQX9udTPPI21ipwtqvpertRlnJgW9IKB8OVw5mqyqmhT0jNeAh8FzirSHQ2GQy1 YB4ObdVwyVqQ8VwiphaKI23khSoH5ReR7ZBGumJXqvTWFPF044zWMwXKr0NzOvFM0ZpNpbkrLvmt yIF+wxBJcrmiba9X6lKaycqMCKEhycHUNLbudmNZ5sozJc7c2gEd3EpHiGQ5gggiUTYTMvTIZjib DzeT7XY497YuMbkJ1BShKt8dVQZ2ZJOpPJ0PZt6SBzmYoSxp9mAueUttO1sPufWW63fFbr9cUbbV gSjLtqRieSKHa1VceaHpOMTWNjaxlpxBFaLflSqajC3XXa5EIRAEezbiHVMwlL60GRraaDKfTV1O sw0jFrxUZXgrKZYXrjQiaKY6CQxzOtK8pah6IGlxPXGosVAtGJphVYslJSRryXNkVRKUvjjdTCbT yUgb2FrYt9bDEHj2tLhluTuqasxA4edbyTAlSdaClScF3mDWVzx5pSqyFIgTzsSrGfRZqFZdrc3l wB6ZfCDK876pbrYavwn5IRnNPGUw4jmia7TRcr31dBWIFtEUsT+w1SmwbITu1guCqa1uVsaAM0M9 ADlV+qqJfdAiU1U8V1SdrWFsLdO2Aw3s4Xa2XNlgvUI97uuoK1WMVb8PwiW2MHKxZQqS4Ln2Bg9m bn8iu0Q1MMdMjVy1M/KmD3ZuMppJ89lE2CguL5KVslLwwMKqJgy4CSZWNtWprCp9JmJg9mfKyHBE UyRbU9E2s/VGU7aOtLatpcI5GrcKcRDoIVcRdKhSqy3PeC208NxT+LWxWgUkmNn9NT9ZGrtZXTd7 +YGC5+JSUaRZoMrCBk+C/mSwdOXVRJnOLJOZmXpz0rfElTy3FWsmzLdb0xZWI0kU+Y1GwGCEMuFM sLAqbVV6TFVStjer0LaVreEKS2fIq2tpKwxsnvRXk6VnKsqQc2WY+XJXYGJudKJ/fntzdvXux4u3 N43+tM879lQxh8F0qg4sV56Hc8z3tbm80kJ1ug4LPgAY7oGPjF1kwcyJSoBlUZTsIT8bhCI/9Gar gCeSOTQsxxtSP2SqoJN8V26mQsDUDObCZi3xRFlvwL0M+0tjipch70riwKFUMPhDW+X8gHBgC6jd LJBrEsXZh6vr65vLi9cfTj/89XDSeIwM8nWnW5Pvr3hxqAwmS9kYBKInmRtV0JTZdD3csp4vPJtE IYAocKVK0vGDSK9gTDXJlIbhVsFbw97yQ3W00YbiIAQfZxnD/jBR2lt8p1Qmqa5kdW3NsbW2V8JS CtzhdDifKaYy226l4XR6D5Ic4MfIVinl2wf47Obi3dnlpzfnBxpi21OdhaY/eJhr6j9oqGvoPGy4 awgdAoTVkD2EJtWQdSQArENjJalLR+StKZjxfrhUycab8u5QcRISQDvUOUvHmh42Qz1wVMB/P23n Dt16f/nputWvL6lfPfUPf2hVd3/VvXr9761lbC3j51Sv1ji2KvZZVOzi3Y9Xh4kGEgtTFYKPjwjg 1RPZO45XT2bPcF49kb2ievUkHhbca5DvATS8QeiHCfXVE79/xK++/h6Bv3oCewbU6onsHRurJ7NP iKyewr0jZfXV7x8wa1CVPeNm9VTuHz6rr/+QKFo9pT3jYfVE9gmLNQhknxBX/TS7f6CrnoA1syZz cS6YBlGGvEnAo1vEVecTeekuRUAUdR59R6rJ65yeXV6dnV42I5mD7CXFfGDV8VXsHMCf1FB6kEup ofMAr1JD5TGOJSHXNGJvP11cnt9cXp2+SQZt4cGw3V347Orn9/DhPrVen17/xCqdvr48v75HhXss uvaSaw0ke5hEnw6JHshJ12HwfTbIaurff5OspvIeG2U1tffxpzXV7++Hairv6TpqKOzjN+q438Np 1Cm8o8LoTLTJ1pLN2XBlKcJkG87D2dDqm4Lm3LUEfJDDqBtDd7payfZWXmvYG8paH6CVYQ1tZxR6 pjGb1a6F7rusvt9q+p/RdjxRiK81S61Zqipba9k+t2W7cwd2r4hOeadxH3tYqvswW1giciCrUt7Y 3ceilEVyb2tSqriHJSnV3MeKlKruaQRKtfeZfuXeTjXTctVBfz60h/ZkpGzd5XwwcHjTMoZTVc5V ze1F5ykYXihsB2uCPV6WhiG/MeWRxm9grS/O5uvJJqGwiIwRx9YxOqnlZC8jUKr7IANwy546rJL+ Auuds8bJ+phO9+KEwqnS+EjoXidJbQ9SHIdLqS0IzTzWvZtP113a8DGKs5Dhh0jFkW764QZ1Ls9u Ti8vO0f1ZPZiYeEFWJ0dHxn2hFpCgWl28dPpp48/XX24LiaeXb3/68W7t7WJXVhgXp9/KOVZ2DP1 S98sJv90evbnCp2Ld9cfoYPFxJ/BAdN528VuQ4btFTPenf9S4vrD+embn8/r0rquVkz+ePXmqpKI 1cRFdF25nMOkX0mfgNXWOLxY95rSMVPtplzVdwPoW3M2DdJ0zYVOyB1lQqqgd5Qhi0ZGND2gvDRl M+9UGZpdfqqjpJEFJ3Kx7XWbC7g2ofOjKTvxrV34WSyS9M2q6EecsQj1huQuVos5YGkqRPTAd5xu ueAauwEYjF5DMjShLsIQLBa30ieAQxzH7xLVbSju6q6KVUvXONWxodK9ihI9XOrhLUUDakjvJMhK 3Unrll7EH3q1iSoYBU93SGMtarTsyPa9W4sw1b0zuzJ0WYmFF9X1LsnX9PlCb8yNx78p16aUw0UQ NfNv+9wKLNgiaCzhYVcHD9OY7wd6iG8XUuATe81RGzW7pRCZN+aFetDcS0IVbuHcIkOY/OqsMTey XfjRmA3K1WvMaFLN+EOXmoTajKYK1IwUM1y5V0lIAs8Vc0+zIj+IB6M2kyxMHNZnQT8IVKzP/G9/ QnxHj6quJ9JJVJ5fcdoEE1ut9jTObJ57Sf4tUy8uAaBEt02vKfsWxY4LBDgEzY5qRyMpEeq6y6TZ VIIEgHTqmqgqzU5bmjNyylEESHuBqlA3dY/OSZ3tdVBNIRlWrM3ci/zE9yPAwTg4PqIUQlrMGKNz amtoMc2GpIgixV+7xSJ51zZGnh+hGHK+jdeHhbLhwvMgb4wSaIM4DgZc1RF3gUAFm8kCZyr107XE koljb4EOp/rBJiV7tMsZo2ARsQ6DX7cdG0NPKMAjyPbQ6Vl6LPz0019u3lx8+BYdZyDguFsgQ+lT MrRyrtQOahzXtupiusItNvbz6dmHK9rcNbTnyrc2VLAPx3cUzFmLO4umtuPOgjtLcmfRvF05rh+z R90Y66Up2UB/pjbiYM7traQ7j1AKaxqXIMqSJqbJRwW1lsQxSkAsW6RVIPpxsbw4aCqfkD8+yq1o msomqLs4MJc6XlbnecU4VGyK3B012pT4jtKChDRMweIjQJGl9SCRCZkmjlF3h49Bn+iijlL5tVDq uLzW3u9qVq9tvm2+bb5tvm3+X675Rm+0F0KO6xN/Qd05sfQJsEzSziWfabfKUbhC7yhXABEr/XrY dVJK6jYGEhTxRTnYxRK/PBtk8SVHI8FdX5CDXcD0CzKRLZS+IA8JXH5yDupN3lO0HIeZP3uzt5nK vaxtJqnjo5jObmUyRp1e5AZ0e2DNxWMa72PnAzBdLVxyaQAuTuqgk1B3cGQvdWSEvotYXaDW7bw8 Yr8foI3dgg0ZDjbB6J10zs5ufrz6cPP608Xlm1emqnZQJ4kAXP90fnn56gDCp8lA9tD0OC4IYTm5 zpNcTQQ8ty11u/Wmnjo0nelWCRR3y0vDUJNGQo2gGCXdo5uonIFJxCWGiKUz6b5ajwY3A5lbeDPP X3m7AwCsiOWT6FXlbACMmmrp6owFH/wQYfT6+g1HTSyMMd2vTVrpdrvocU9GpIYTcequyZWlRxZo caw5+Q1jmyCCPZ22u9FJicnKCQe6+xzQsg1Z5U5GVqhjjSPY0JE7A41FXHCALqakis3RowmUOP1Z 7ToLexA9IujfTn4+/fP5S1rU85sKLoLAD6Gwp5MIjEC6r04qgqqvBkko2SpNJirM5KQuOnn77hMi 0cbRX94lcJiB9eKGjCoPtNUzlCCpEK38cEZqRzZXSNMNvHAi5C+iYBHFkTG64cKa7UJqsSZZGDDH kG8gfa2riygTSpWblY4wmBZ2WiZpD7Jr+dlR9SdTEFYc7qRF/Ua6ceSWdpmKc9ejxhGqFSLCYOcD GDHOvOccoJXimCX1RnF1dHF9hc5GSqxTHkiQ+Y778rDw6DGsCINzgWmL4CfifKBuskoVvgCc6VDD UzexFlG5NaoO/JCKXaJnv2hIGax/BOiGJsPk1cPQDzP+Q32+ALXV7qmfJ/Ge68v7Kuo9hjAj+eCx rKfwsEHNaH2W0a3ndK9hzkgUx9vyV7RD4cJLjAP4yCD0VVjixKNdzzJ3XjKtUAsI4AgBJNPoToTj QxZUgl9Zh/SSWd/rlaQe/VBsUadJj6ZZ6cjpu+sLkEISK8+sTEHusZMkGzD8Loo2Aetak8/Pi5pE 5VqpdG+txkYoCG3wxvHpLsYSSzDKDpWAL2LjoPkgebqBFcHY0pNRiQEviWyfR656pDzfjQMNwo8l A6TBzIeOTDbN+nzgU+Rg86i/6kHRXqVQz8n12zbYTIHMGWjIyRPz8ZICMmoMHa3WHVHUiODnz9d5 8Ej9NXBM6ELlxHNfliHWwZ7Vq/LMeS7iXu+YpLIrsPOkfID46CawgVU2/UBayHOrdtrxEEca4BHt gIvXtrtwkaN7ZmRRuwvCdqmdoxYPXJe5oOCZVRb6Q3E0kCsTGrzrUg+jRsOxQ1qEuZwmS0GH3cVs Xhsw028Suje0+o3n+8FjW6abo7DStr09WqKq+MQzI+eeYWXsY60CFbnwLi8PNbSF27CASTKrvhNW /aZHN+xThxwlEMqO2w0wITew4rqrdc1x2J54ad1BCzdkJRwAfV+1qY0HW0/PCqFEFWclRpjLQL8j f/fu4gU3OH9cliEUgJVLiH748eLyPF3f0Lo/3HuteAs4rFs0VgqF2INu1vMb5+0opPOUelQcEv1p zWC2iKIRmwaQyZSWrWxmpTXQhoS+H9WpB2a2imFC7QDLZ02rqFiGIiCfrg0CO4h16tFNoQl5JfPK ALFjhq+Eu0bbrZVANRX89Jg6SwzW2rMNWKajptkFku1RREa6Vv3qc8MO6EVN2ZFG9a8pkyK2hkxX d/1wc2vNJp5gJt/KcqRBiYZMdk1Aa8jUHEP1GvKoCbSZZehCj0lB2PXqnAU8OMPzuTCK7Pg3fU1X UOxcT50+37H+ghWKtlB19P7ijBl2A35B3Bv4/x4s0bI0nJmv1uDrm7vFrokkZJIP+5LIJKPS5R47 5+IfoPrt62KKXuoJfjFAm/WEvQSgFV1WbSc4B/pv+Qtw+hMd6evAsVU7cjZxHzSYG2Wl0jYAZ+ys kwBnQqzS04AERo41BJi6d0n5osiaVH0s1NBUX9Oz6Ai7zkKnIVNHM8Quo2O7rq5RX1xlmzkzelx8 10VqoAKQH0XpdWOfnE17gIyArWSdun+NWJ8LNfLCpOYwPtVtwToNT2zHjjYVsvlSQagT3VP1Ruua FKzNZ3k3aqiDUO8sINwzSLd7wKPkxA71jHzvtjZ33O3SmK8C5Khj8FTJ+UREr3HxWZfyG2754Avd o0Aw2fIlDPCmWj6ruMBul9CNS+jChNmw0Bid67Cqts3Ysmi+l5vekgjAMIrDO2fo9PVFnUc7v/wx hU67VVSlaSoVilBh5OOIN1gIWFymO3l2fMI3ll3MHdFpDxmDlCIkf5v8O6rqCLscW9duIbfMOsu8 LQ8qNldryikp4L7fVhDfpyrSfcuUPZ06379CCdOsUpUF7RAsaHXyqDUsD+thxWCw4F56QF5Ljn3T WLmnr5h/x17uuHmmrDnTQe0kpdTNTpKAvV+k5iX5lCune8vGvPSEbmOB9G5ZuUC8OZREseNOJEsz 0lw09YZZycr+emVbXuwO7jgElckyPm+VOwx1n1L73UugCnN8lO5Oonhb+YiGOjkddchvP+jrCDoJ 2X//4bfHbVOzW7gsuSexi2iR7tF5QX7roL8fIfjTrb0Bhr5H1XtjbO8S0dM2OP7wN+Eftfcpjh90 0OD46EC7/NCnVEcQx0XYfHV2huivLiC3V8nuUdOWxpufTv/jPL3O8BPiLrpUSvQH9wvbL/+FbYFB UhBvW0PeI18/3Q1QkdZDXkJFHCxFrkTE/fwxQUQO5mJc5fiQ+gb+vYd/P6IuTLkEcu3KfAz8ZClR rfwrvUoEyyV0nFzmPEa//YZ01fLRcbd3/Gt6xTOR/RhlZ/X2kHVV0P/Mck5EhgqLUBA+W1eX6/hH 7pKKv5FgbcZ7x3+aecUCjQ0D/dXNHlhNwkKLSxeMtIcLsBnZxOg6GHHsqjj6TAa6TqsuH/E1FsXa +36RBSy2M3rwe/zu8Y0fEJoB+rub9FQNxk16kIDqgro3KDtVrF+cbxMh018f1flGUrIpbI3pyNRm oqTYm5CI2LMGq61lTsTJcqhRSQAGB1rSHZQe+gUft5Dcf5hake0tsi84qx7zJT2UVpZEStZh7yG6 PMSoPJyBXvyR9uMAjPTy6Uw2jhpuAgAvjosO8mVEWQa1gV2MHvM9SexzzGXmFB3NyfvI2CvlU6j+ E59todPfk+cVfGqdC/CBpdG/ZQt9omqowwp20O9/j0KXQovOrg5LjXfAO0VKnUKxl/sRvhfZGqLo FqoOzlPtdnu75FyJl0fsyPjj1/oprgXBL7wJDbBx2XtKgHJCO9rQu7EuXTFCQhzoocPSSa7NmyCF zu4Kfee5MLZ76yDHYeEBhGfE6u7ZhQKzhdcYnhW77NJQkdVkYf2c2IzfeCnymb378nwYjR+bybOZ PT/zfJiMbU+eyewVnOfDZO7pnTynxRd5nhG72WspBW7zb6g8H2bTF4nyrOZeKXo+jOaeRsrzWnwx 6fmwW3imKc9w+f2mZ8QymRc5jR+Rej4M7h6nyrNZeLLqGTHL3skqMJq+nPV8mGRvgeV5TB8H6xz9 8Y9/pKey9fipFS5uic00uisZXyvTvmXPccZfY3D66eNV+jUGr3hWP/7jh+xgIdsN5DjP53IEd0dQ 6a6+ZhNKtssqZ/dsDrD1Ren9cvrh3cW7t2nMN+6KbxxgFAwMqdqYtRL/zg6vsm3+eEeWbe3neh1v h6HOo9vuHK1CGCT0axnEHT8bHUuehMtr2e6VuFbPvhY9ew3Gi74Hpo+PLmBoVJ1TevoSM2sxptt0 oiKNJRkJCjq5QS++S8LRJy/+E5kCz//Xi5doaBiGro/6qjjiv3+5I0MfOuKUjJAk88oYCI3QiaYb tqcnoe1vENAd0w6xmAL9ENAbv/SXdC8dfod///c///sSKIl9RR6LQGlIz5o5DreyI4sDmgAbdY3z J/FTcQS4ZTeJNEqNMWlMDKmPeUroe0pJkkWRURpA516y3tIEBQl9dOLiQEAnJyckNGxE/+OUly8h IVZ2xMx+PuEFfHjBeCxQkneUmmoybF4mVSAEXRWkCqFKPXDt7COTP6Ny8mJHSZLEAaMk0rvbxHeW OpfdRkBFoiB7ojv09DodBsvW2HjEI5ANcBwRItkII0nhxyMkCFRVbho1QRL70CMJCTyT+l3kkHIH ub40GIs8QqNsEEdSHzQNgX4QvEz1jB75XMTqVFEMTcSSavD0/BNtItOPfh9IDxAapJwmdxXY/IuZ TP6AwgSh7dr0Gi1HT/+z56aLy69OXcNxW/VzT1AGY1lCSGZzz7idA9CPZNOIYxti975zDxx0GOn4 blj6aiSXHPHJccOPxT6IF52wDpbKMU3J7SLFc5bqEd2RicWR6k9jJ0B1NAfAv7fnkwG0DyXtLGqJ MBj1xzDPEShdiG2i704AMy7pXVPbW1D/8SeqbEcVIgmFMYIWdqNYosWs6C437ss4NdcPOZvQK4ZU O98iWMURbB6IHvgz7NFrekzoyS5Z7uLKGL3z6RkTK+4DPZ+dHrZonfzXCibTUNvx7izNN998g/6W nqYaC7LIj1HN+uwf6JztogvFmr9gO9od7gfnbhOog6bgi7vwp1WUrxINUtDTY8hH2DnlgSSPFQYH gQ9Ox2AZqjhLHU742J0SNbQD9lgx47VL3V1mqMuZGeYcKtTtUqiYev7EN00w0XsRDHMcx0p8x6A/ HjA4yJBgnI3qapYbgiaGtCr49ySLi2VZiZqCi4jvTsUFGGSll6gSTEoRgETRbT+PSXM1evGmHeXq FiwjDCk04hlqZBQyx8LF99pDRuDFeOGtbE/7U+xk7+7mQBkDKqMQMkZI1JXTBDEG9arjE9C5WI9i XGLoktDnGQoC4CiMJYXhOvZaCnCSzbgX39ke9DEzFpnEQBTfp0LKoDsSB8JYHMbQ71ZJZCBOuT+I M3QVy0zrHOyZGbCiHxbgMJkhczPpcFGoAwB2cnhTGMP4JTgy4ysgGy/C62yIRIkfSwOGLvV1QGUR +QFH6CaAR3H0i+/iCuNMFGNZGPNpBmMrlYfAwL3CAGZ8HfAG4HsncGAKWr6j6WEH5T4wcA+tATw/ eZEuNnay7StUdxgUfRStFoy2YPTrA6P3gTLpvtgOxrTI5OuNU5Usc2oAKTa5rwGE/26Q+nsw29TW 3Wr/0kDYqC4QJu4CYXx/NJHvEwgbPjYQ1oav2vBVEkWaYNxvw1ctYmgRQxu+an3/k/p+Qcj7/oEk tr6/9f1P6vt1PPoSvl9qfX/r+1vf3/r+f+F1f8H3ywbf+v7W9z+p75fbdX/r+1vff/CdgsItr4ZT Dw1V8xdF9qtZuAzR7lG0WOXz7VFo6qjFKi1WeUqsokotVmmxSotVDo1VWqzQYoUDYwUxH9fAg34b 12ixwlNiBV4XVf5LYAW+xQotVvhnjmskV8NbwNAChs93CGLUHoJoAcMTAwZBUVvA0AKGFjAceiNk 9zJfCxq+7ou/6dtFx+34fZXjV3gwrx3EFrkf/giT2B5hapH7Ex9hGrTbgi1yb5H7wZF79kJfi9u/ btxXenS2RX5f5zCmL4e34/d1jt/uTe12BL9SQ8qews69enap4+VhvkCQkix7474wHNMvLUz9r3jE voJsTL9DNf5GxuP4GxnHiH65/cK0IpTDM7/b4aQX3/3e9pb+DPAOo5R84fMYdWi7nUxNyBiddLhp B3WEQeclELMjLv0aSxHBgsPlCABH7IwB1MJyiD5clH3+Hh0VvicyHa34eyWhn9n3Sibff5m2nrWY 1qBPV6G4Xej0/wMGhnohANgAAA== --b1_oHy08PWmPsOPRRPhK59EbeSBynAeRsUjblVRNhusU-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 04:18:11 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 08:18:11 +0000 Received: from localhost ([127.0.0.1]:55036 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neug7-0006vT-5L for submit@debbugs.gnu.org; Thu, 14 Apr 2022 04:18:11 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:63040) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neug5-0006vE-RW for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 04:18:10 -0400 Date: Thu, 14 Apr 2022 08:17:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649924283; bh=KIM7DLCYRKU47MsuwTOO6CSKHUMmG/gW1Qm/jBxoWxk=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=VxXj9dNBHGZ6omy3ZyjNg7dTdOlnnrr6fyvxhVrXAeXICbBXIGjLM9Iguh8tiYI3c ZBgCKy9vkDzenYszOJfnxmRBJe8r7loQksOrMEkvsdh6JNlVuAS+iDorTpVOyZXiSd mDxSbPmsVwuMLgvH4k9Q09v65Qo5JqzylkPg4pArhANSaV0dpx/IfRiaq2y04ynh9U lZRjgd+wCg8fhWJ9R08F24jmbG1LO2f7XUj0+AqP68vBcKzwNOA+AClOah7zP4eBvp 4PRVM6YKZM9hU0SHB3BDnIRzJIigBKnC7cp7jdBZ4m/p/wgKGHmr9n36sae94HvrU5 xeKKr9Y8LV9TA== To: "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> From: phodina Subject: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> References: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_izIs3i3M8PcznMFgCSXgtAAjfRITiNIh36d03m1X8A" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Mathieu Othacehe X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_izIs3i3M8PcznMFgCSXgtAAjfRITiNIh36d03m1X8A Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 VGhlIGlzc3VlIGFib3V0IGd1aWxlLWZpYmVycyBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkIGJ5 IE1hdGhpZXUgaW4gaHR0cHM6Ly9pc3N1ZXMuZ3VpeC5nbnUub3JnLzU0NzkzLg== --b1_izIs3i3M8PcznMFgCSXgtAAjfRITiNIh36d03m1X8A Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiBy Z2IoMzQsIDM0LCAzNCk7Ij5UaGUgaXNzdWUgYWJvdXQgZ3VpbGUtZmliZXJzIGhhcyBhbHJlYWR5 IGJlZW4gcmVwb3J0ZWQgYnkgPHNwYW4+TWF0aGlldTwvc3Bhbj4gaW4gPHNwYW4+PGEgdGFyZ2V0 PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciBub2ZvbGxvdyBub29wZW5lciIgaHJlZj0iaHR0cHM6 Ly9pc3N1ZXMuZ3VpeC5nbnUub3JnLzU0NzkzIj5odHRwczovL2lzc3Vlcy5ndWl4LmdudS5vcmcv NTQ3OTM8L2E+PC9zcGFuPi48YnI+PC9kaXY+ --b1_izIs3i3M8PcznMFgCSXgtAAjfRITiNIh36d03m1X8A-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 04:32:10 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 08:32:10 +0000 Received: from localhost ([127.0.0.1]:55089 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neute-0000oI-Bo for submit@debbugs.gnu.org; Thu, 14 Apr 2022 04:32:10 -0400 Received: from michel.telenet-ops.be ([195.130.137.88]:47178) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neutc-0000mE-L4 for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 04:32:09 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by michel.telenet-ops.be with bizsmtp id JYY62700L4UW6Th06YY7Ya; Thu, 14 Apr 2022 10:32:07 +0200 Message-ID: Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi From: Maxime Devos To: phodina , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> Date: Thu, 14 Apr 2022 10:32:06 +0200 In-Reply-To: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-bzhzAXOUBbHLtdGdziL0" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649925127; bh=rYYEo0vJpfJELGe2On8MCGcqiWJ4dre/MnvItKIkPxw=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=Q8AzdTRXXzneN37LN+IWoOKJtCIPSfSMDhaGMzQjvwCzuRWu8HLe2ia7SZGzsjywU hv9IOBREuRWhi01HI/k/RYUUeCvIy+JGtO5dIRRSKrPmkbIJzldgJQn3rzbymJqhlr PErdI2UKInC5sbvGNkThW/MXPMbJomTJPzRDmCho2oU2QtCHe9RYWuwwP4rIMAMBI2 1HUWCmetOoOlmM3tYQwS/PuTOSv4m+pkN6u/fzPKHOAFgJW0UXCcZ9n0Z6DXpk2L56 8SBpUdBaIQy7yulhrQVFr0nH+rBqVUxbtDzXIf6fprc7+tMcWZ1sPefRrjZdv/aiFR hoFTQ0drwY+1w== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , Ludovic =?ISO-8859-1?Q?Court=E8s?= , "dannym@scratchpost.org" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-bzhzAXOUBbHLtdGdziL0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable phodina via Guix-patches via schreef op do 14-04-2022 om 07:38 [+0000]: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 `(modify-phases ,phases > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (replace 'c= onfigure To get rid of the #< error, replace this by #~(modify-phases #$phases [...]) (and replace the , by #$ etc). Greetings, Maxime. --=-bzhzAXOUBbHLtdGdziL0 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlfcBhccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7i0LAQDHNIkMs5ghMgBdkexsD667Vw2d EAfoulacRDM/f9sdlAD9EPPBL/frt5P44zoPs+9vNLyVvWbhrxupPbxRwvUldwM= =h5dT -----END PGP SIGNATURE----- --=-bzhzAXOUBbHLtdGdziL0-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 05:25:37 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 09:25:37 +0000 Received: from localhost ([127.0.0.1]:55173 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nevjN-0002aS-3t for submit@debbugs.gnu.org; Thu, 14 Apr 2022 05:25:37 -0400 Received: from mail-4322.protonmail.ch ([185.70.43.22]:39177) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nevjK-0002a9-Qv for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 05:25:35 -0400 Date: Thu, 14 Apr 2022 09:25:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649928328; bh=XGG08LxcFhPp9upfIIYv8IEGtObblByo88gQBq6d7uA=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=s787afL/IG6oXsKZosNhMlp+CbKzpl44OeApiIZZ1Qf5R0Dvsl1ZFrBkGXbcql4zK xYXCBADVZjzHOWIIbr+ZYBxmo1/AhksXXEW9wDhZaSxvaokyOZOvJO16vOvPrNR91S 6PMgBzCbmP4GEiOQeK80FtYnLRs2fTFDjbHY0xg7TPF/s/NetQ8KVYXEFylynNwPLq 5sDZ8OzRjZat3UnemjpvD3s0EEsLYd2dy8bYGNn9Agj/1VCKFakPVS1qbn3DpYmC+D DHvxl1BueIv1EBG06hEhwkF2w8mxxb5FDxzqmokISY1ZZYEyvVBh9FK9t+9Nk0IZsa CZIiugmW39zPw== To: "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> From: phodina Subject: [PATCH v4] Install guix system on Raspberry Pi Message-ID: In-Reply-To: References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_lqwD3h2NYjWqSWydj4GOAJxfgcU5R8P59rUfL3LGLQ" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Maxime Devos X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_lqwD3h2NYjWqSWydj4GOAJxfgcU5R8P59rUfL3LGLQ Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 `(modify-phases ,phases > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (replace = 'configure > > > To get rid of the #< error, replace this by > > #~(modify-phases #$phases [...]) > > (and replace the , by #$ etc). > > Greetings, > Maxime. Thanks for the suggestion Maxime. Here's patch with fixes where I attempt t= o rewrite the section of the code using Gexps. Still it ends in error as there is some mistake in the Gexps I made. $ ./pre-inst-env guix system build gnu/system/examples/raspberry-pi-64.tmpl ;;; note: source file /home/cpethod/guix/gnu/packages/linux.scm ;;; newer than compiled /home/pethod/guix/gnu/packages/linux.go substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0% substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 10= 0.0% The following derivation will be built: /gnu/store/zvy703ldgicckqgnggsnz0a21394hb9f-linux-libre-arm64-generic-5.1= 6.19.drv building /gnu/store/zvy703ldgicckqgnggsnz0a21394hb9f-linux-libre-arm64-gene= ric-5.16.19.drv... ice-9/psyntax.scm:2794:12: In procedure syntax-violation: Syntax error: /gnu/store/2xjp40qfmrdjg28zqsd919cjg00n9wrv-linux-libre-arm64-generic-5.16.= 19-builder:1:3387: source expression failed to match any pattern in form (l= et* ((srcarch #{$#}# (system->linux-srcarch (or (%current-target-system) (%= current-system)))) (configs (string-append "arch/" srcarch "/configs/")) (g= uix_defconfig (string-append configs "guix_defconfig"))) #{$#}# (cond ((not= defconfig) $~ (begin (apply (assoc-ref #{$#phases}# (quote configure)) arg= uments) (invoke "make" "savedefconfig") (rename-file "defconfig" guix_defco= nfig))) ((string? defconfig) $~ (rename-file (string-append configs #{$#def= config}#) guix_defconfig)) (else (quote (copy-file (assoc-ref inputs "guix_= defconfig") guix_defconfig)))) (modify-defconfig guix_defconfig (quote #{$#= configs}#)) #{$#@}# (if extra-version $~ ((setenv "EXTRAVERSION" #{$#}# (st= ring-append "-" extra-version))) (quote ())) (invoke "make" "guix_defconfig= ")) builder for `/gnu/store/zvy703ldgicckqgnggsnz0a21394hb9f-linux-libre-arm64-= generic-5.16.19.drv' failed with exit code 1 build of /gnu/store/zvy703ldgicckqgnggsnz0a21394hb9f-linux-libre-arm64-gene= ric-5.16.19.drv failed View build log at '/var/log/guix/drvs/zv/y703ldgicckqgnggsnz0a21394hb9f-lin= ux-libre-arm64-generic-5.16.19.drv.gz'. guix system: error: build of `/gnu/store/zvy703ldgicckqgnggsnz0a21394hb9f-l= inux-libre-arm64-generic-5.16.19.drv' failed ---- Petr --b1_lqwD3h2NYjWqSWydj4GOAJxfgcU5R8P59rUfL3LGLQ Content-Type: text/x-patch; name=v4-0001-Attempt-to-fix-modify-linux-procedure-using-Gexp.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0001-Attempt-to-fix-modify-linux-procedure-using-Gexp.patch RnJvbSA1NzY0MzAwMzQxOGYxM2Q0OWU0NTU4MmVmMmE2ZDI1ZGU2YjM2NTk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogVGh1LCAxNCBBcHIgMjAyMiAxMToxODoyNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjRd IEF0dGVtcHQgdG8gZml4IG1vZGlmeS1saW51eCBwcm9jZWR1cmUgdXNpbmcgR2V4cC4KCgpkaWZm IC0tZ2l0IGEvZ251L3BhY2thZ2VzL2xpbnV4LnNjbSBiL2dudS9wYWNrYWdlcy9saW51eC5zY20K aW5kZXggNjFkYWM5MDVmOC4uZTFhZDYwNjlmOCAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2xp bnV4LnNjbQorKysgYi9nbnUvcGFja2FnZXMvbGludXguc2NtCkBAIC0xMjkzLDE1ICsxMjkzLDE1 IEBAIChkZWZpbmUqLXB1YmxpYyAobW9kaWZ5LWxpbnV4ICM6a2V5IG5hbWUKICAgICAgICAgICAg KHJlcGxhY2UgJ2NvbmZpZ3VyZQogICAgICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMg IzphbGxvdy1vdGhlci1rZXlzICM6cmVzdCBhcmd1bWVudHMpCiAgICAgICAgICAgICAgICAobGV0 KiAoKHNyY2FyY2gKLSAgICAgICAgICAgICAgICAgICAgICAgLChzeXN0ZW0tPmxpbnV4LXNyY2Fy Y2ggKG9yICglY3VycmVudC10YXJnZXQtc3lzdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAk IyhzeXN0ZW0tPmxpbnV4LXNyY2FyY2ggKG9yICglY3VycmVudC10YXJnZXQtc3lzdGVtKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCVjdXJyZW50 LXN5c3RlbSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlncyAoc3RyaW5nLWFwcGVu ZCAiYXJjaC8iIHNyY2FyY2ggIi9jb25maWdzLyIpKQogICAgICAgICAgICAgICAgICAgICAgIChn dWl4X2RlZmNvbmZpZyAoc3RyaW5nLWFwcGVuZCBjb25maWdzICJndWl4X2RlZmNvbmZpZyIpKSkK LSAgICAgICAgICAgICAgICAgLChjb25kCisgICAgICAgICAgICAgICAgICQjKGNvbmQKICAgICAg ICAgICAgICAgICAgICAoKG5vdCBkZWZjb25maWcpCi0gICAgICAgICAgICAgICAgICAgIGAoYmVn aW4KKyAgICAgICAgICAgICAgICAgICAgJH4oYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAg OzsgQ2FsbCB0aGUgb3JpZ2luYWwgJ2NvbmZpZ3VyZSBwaGFzZS4KLSAgICAgICAgICAgICAgICAg ICAgICAgKGFwcGx5IChhc3NvYy1yZWYgLHBoYXNlcyAnY29uZmlndXJlKSBhcmd1bWVudHMpCisg ICAgICAgICAgICAgICAgICAgICAgIChhcHBseSAoYXNzb2MtcmVmICQjcGhhc2VzICdjb25maWd1 cmUpIGFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgOzsgU2F2ZSBhIGRlZmNvbmZp ZyBmaWxlLgogICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlICJtYWtlIiAic2F2ZWRlZmNv bmZpZyIpCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IE1vdmUgdGhlIHNhdmVkIGRlZmNvbmZp ZyB0byB0aGUgcHJvcGVyIGxvY2F0aW9uLgpAQCAtMTMwOSwxOSArMTMwOSwxOCBAQCAoZGVmaW5l Ki1wdWJsaWMgKG1vZGlmeS1saW51eCAjOmtleSBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBndWl4X2RlZmNvbmZpZykpKQogICAgICAgICAgICAgICAgICAgICgoc3Ry aW5nPyBkZWZjb25maWcpCiAgICAgICAgICAgICAgICAgICAgIDs7IFVzZSBhbm90aGVyIGV4aXN0 aW5nIGRlZmNvbmZpZyBmcm9tIHRoZSBMaW51eCBzb3VyY2VzLgotICAgICAgICAgICAgICAgICAg ICBgKHJlbmFtZS1maWxlIChzdHJpbmctYXBwZW5kIGNvbmZpZ3MgLGRlZmNvbmZpZykKKyAgICAg ICAgICAgICAgICAgICAgJH4ocmVuYW1lLWZpbGUgKHN0cmluZy1hcHBlbmQgY29uZmlncyAkI2Rl ZmNvbmZpZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWl4X2RlZmNvbmZp ZykpCiAgICAgICAgICAgICAgICAgICAgKGVsc2UKICAgICAgICAgICAgICAgICAgICAgOzsgQ29w eSB0aGUgZGVmY29uZmlnIGlucHV0IHRvIHRoZSBwcm9wZXIgbG9jYXRpb24uCiAgICAgICAgICAg ICAgICAgICAgICcoY29weS1maWxlIChhc3NvYy1yZWYgaW5wdXRzICJndWl4X2RlZmNvbmZpZyIp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aXhfZGVmY29uZmlnKSkpCi0gICAg ICAgICAgICAgICAgIChtb2RpZnktZGVmY29uZmlnIGd1aXhfZGVmY29uZmlnICcsY29uZmlncykK LSAgICAgICAgICAgICAgICAgLEAoaWYgZXh0cmEtdmVyc2lvbgotICAgICAgICAgICAgICAgICAg ICAgICBgKChzZXRlbnYgIkVYVFJBVkVSU0lPTiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICwoc3RyaW5nLWFwcGVuZCAiLSIgZXh0cmEtdmVyc2lvbikpKQorICAgICAgICAgICAg ICAgICAobW9kaWZ5LWRlZmNvbmZpZyBndWl4X2RlZmNvbmZpZyAnJCNjb25maWdzKQorICAgICAg ICAgICAgICAgICAkI0AoaWYgZXh0cmEtdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAk figoc2V0ZW52ICJFWFRSQVZFUlNJT04iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkIyhzdHJpbmctYXBwZW5kICItIiBleHRyYS12ZXJzaW9uKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICcoKSkKLSAgICAgICAgICAgICAgICAgKGludm9rZSAibWFrZSIgImd1aXhfZGVmY29u ZmlnIikpCi0gICAgICAgICAgICAgICAjdCkpKSkpKQorICAgICAgICAgICAgICAgICAoaW52b2tl ICJtYWtlIiAiZ3VpeF9kZWZjb25maWciKSkpKSkpKSkKICAgICAobmF0aXZlLWlucHV0cwogICAg ICAoYXBwZW5kIChpZiAob3IgKG5vdCBkZWZjb25maWcpCiAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nPyBkZWZjb25maWcpKQotLSAKMi4zNC4wCgo= --b1_lqwD3h2NYjWqSWydj4GOAJxfgcU5R8P59rUfL3LGLQ-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 07:00:34 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 11:00:34 +0000 Received: from localhost ([127.0.0.1]:55379 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nexDG-0005RM-7e for submit@debbugs.gnu.org; Thu, 14 Apr 2022 07:00:34 -0400 Received: from andre.telenet-ops.be ([195.130.132.53]:60208) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nexDD-0005RD-Vi for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 07:00:32 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by andre.telenet-ops.be with bizsmtp id Jb0V2700o4UW6Th01b0Wjf; Thu, 14 Apr 2022 13:00:30 +0200 Message-ID: <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> Subject: Re: [PATCH v4] Install guix system on Raspberry Pi From: Maxime Devos To: phodina , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> Date: Thu, 14 Apr 2022 13:00:25 +0200 In-Reply-To: References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-TJeN7XZyL5Pzp8x0jbLM" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649934030; bh=qWa2RCUqKmlM6r9yaJ+HmGIz2pHt+pmJLl106GEIQK8=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=YgvWFNRe07Cxjv1NFu0C5Q4ZmAveWe+6ijid1AsmZim3Pw5r+ysu+Rvnm5YZT1WIV llWMjFpyJNi9n10WniDa/st2Be35yYPencJgqXkct8g2XHCEFkUaP8URXwzWdr923M 0ot9X0D1LjBbYE3pUGjYypcBpRG3yOr+ExlTVFBzJTfISi8dyBssxY9J9Y0hh8SQ9e f2SdgiICbStashMamlU5O3o20Yg+VJnRbfDiyqrobuY/zcSXolMvZ0WpGoq3gI4BuP 0oNSrM4pbTfFzLmmQMFMVDR4RzrY1DmLFalpbZNv6R+k7Ozeu9E6Xnsg6UahzrDfk1 kf2FVIRGchVmQ== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-TJeN7XZyL5Pzp8x0jbLM Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 cGhvZGluYSBzY2hyZWVmIG9wIGRvIDE0LTA0LTIwMjIgb20gMDk6MjUgWyswMDAwXToKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGxldCogKChzcmNhcmNoCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICwoc3lzdGVtLT5saW51eC1zcmNhcmNo IChvciAoJWN1cnJlbnQtdGFyZ2V0LQo+IHN5c3RlbSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJCMoc3lzdGVtLT5saW51eC1zcmNhcmNoIChvciAoJWN1 cnJlbnQtCgppdCdzICMkLCBub3QgJCMKCj4gdGFyZ2V0LXN5c3RlbSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCVjdXJyZW50LQo+IHN5c3RlbSkpKSkK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoY29uZmlncyAo c3RyaW5nLWFwcGVuZCAiYXJjaC8iIHNyY2FyY2gKPiAiL2NvbmZpZ3MvIikpCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGd1aXhfZGVmY29uZmlnIChzdHJp bmctYXBwZW5kIGNvbmZpZ3MKPiAiZ3VpeF9kZWZjb25maWciKSkpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICwoY29uZAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAkIyhjb25kCgpsaWtld2lzZQoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoKG5vdCBkZWZjb25maWcpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGAoYmVnaW4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJH4oYmVnaW4KCmluIHRoaXMgY2FzZSAjfgoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDs7IENhbGwgdGhlIG9yaWdpbmFsICdjb25maWd1cmUgcGhh c2UuCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChhcHBs eSAoYXNzb2MtcmVmICxwaGFzZXMgJ2NvbmZpZ3VyZSkKPiBhcmd1bWVudHMpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChhcHBseSAoYXNzb2MtcmVmICQj cGhhc2VzICdjb25maWd1cmUpCj4gYXJndW1lbnRzKQoKIyQKCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBTYXZlIGEgZGVmY29uZmlnIGZpbGUuCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoaW52b2tlICJt YWtlIiAic2F2ZWRlZmNvbmZpZyIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA7OyBNb3ZlIHRoZSBzYXZlZCBkZWZjb25maWcgdG8gdGhlIHByb3Blcgo+ IGxvY2F0aW9uLgo+IEBAIC0xMzA5LDE5ICsxMzA5LDE4IEBAIChkZWZpbmUqLXB1YmxpYyAobW9k aWZ5LWxpbnV4ICM6a2V5IG5hbWUKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VpeF9kZWZjb25maWcpKSkK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHN0cmluZz8gZGVmY29u ZmlnKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsgVXNlIGFu b3RoZXIgZXhpc3RpbmcgZGVmY29uZmlnIGZyb20gdGhlIExpbnV4Cj4gc291cmNlcy4KPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYChyZW5hbWUtZmlsZSAoc3RyaW5n LWFwcGVuZCBjb25maWdzICxkZWZjb25maWcpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICR+KHJlbmFtZS1maWxlIChzdHJpbmctYXBwZW5kIGNvbmZpZ3MKPiAkI2Rl ZmNvbmZpZykKI34gYW5kICMkCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VpeF9kZWZjb25maWcpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChlbHNlCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBDb3B5IHRoZSBkZWZjb25maWcgaW5wdXQgdG8g dGhlIHByb3Blcgo+IGxvY2F0aW9uLgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJyhjb3B5LWZpbGUgKGFzc29jLXJlZiBpbnB1dHMgImd1aXhfZGVmY29uZmlnIikK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGd1aXhfZGVmY29uZmlnKSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChtb2RpZnktZGVmY29uZmlnIGd1aXhfZGVmY29uZmlnICcsY29uZmlncykKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLEAoaWYgZXh0cmEtdmVyc2lvbgo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBgKChzZXRlbnYgIkVYVFJB VkVSU0lPTiIKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAsKHN0cmluZy1hcHBlbmQgIi0iIGV4dHJhLQo+IHZlcnNpb24p KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKG1vZGlmeS1kZWZjb25maWcg Z3VpeF9kZWZjb25maWcgJyQjY29uZmlncykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJCNAKGlmIGV4dHJhLXZlcnNpb24KCiMkQAoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJH4oKHNldGVudiAiRVhUUkFWRVJTSU9OIgojfgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICQjKHN0cmluZy1hcHBlbmQgIi0iIGV4dHJhLQo+IHZlcnNpb24pKSkKIyQKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICcoKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGludm9rZSAibWFrZSIgImd1aXhfZGVmY29uZmln IikpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgI3QpKSkpKSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGludm9rZSAibWFrZSIgImd1aXhfZGVmY29uZmlnIikp KSkpKSkpCgpHcmVldGluZ3MsCk1heGltZS4K --=-TJeN7XZyL5Pzp8x0jbLM Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iIwEABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlf+yRccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7vjOAPiLQIbSbZWQ4u8TsroNzUGmygNb 38PfdrlyJInZzsouAP448hA1mAdb1vFTcIu/QZClOHmYmxdnJ5ZhTiNk+jwKBA== =oobI -----END PGP SIGNATURE----- --=-TJeN7XZyL5Pzp8x0jbLM-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 08:23:40 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 12:23:40 +0000 Received: from localhost ([127.0.0.1]:55543 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neyVg-0001Q2-07 for submit@debbugs.gnu.org; Thu, 14 Apr 2022 08:23:40 -0400 Received: from mail-4316.protonmail.ch ([185.70.43.16]:57323) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1neyVe-0001Pm-3f for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 08:23:38 -0400 Date: Thu, 14 Apr 2022 12:23:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649939008; bh=+33li8ehsll2Sw8BK8dFVO96EZ8wa2eZyoa84t9OD0c=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=08IIAKUMYS9DkEBpubkJE0kn363mq7aIqyKuzVvgtwwWUz6ivY1ew8Nm1yoW6PQMb 6ai4Z/BrzppWxFO00UvfG3smbaICpIcHShUMmv84oVz/4ZwrbYOQD0eHoKtwHI8TZj FAhACK7bogsPdWX14OD/Y7ji15BCu92Ff3U1FaWvweJnxYF/yeefYS974B+7h56Lji b+XEuShJB/MhYCySBmHCy3e+kX/c5wPoiyhMOCu8qevDH1PE2mIL7/Sk5KoJLW7Tsi 9ID/DuMMV2k86HBVTgd15YCV3UyIOZ4mRCxXU7drHJ0laE/WwnELRkRx9uL8PnKl/C BbROhMf6BMJAg== To: Maxime Devos From: phodina Subject: [PATCH v5] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0" X-Debbugs-Envelope-To: 48314 Cc: Stefan , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Thanks Maxime, sorry for silly mistake. Here are the updated patches. The last changes are part of the 4th patch in= the patch set. After build I installed it to the SD card using following command: sudo -E ./pre-inst-env guix system init gnu/system/examples/raspberry-pi-64= .tmpl /mnt However, I experience an issue when login into the system. I can get there = using my SSH key, but it seems the passwd set-uid binary is missing from th= e profile: $ ssh pi@192.168.1.181 You are required to change your password immediately (administrator enforce= d). WARNING: Your password has expired. passwd: no such file or directory I understand that the password is not set and the account is accessed throu= gh SSH so it asks after login to change it. How come it's possible to chang= e it? I tried to add shadow into the packages, but the error said, it's alr= eady part of the system, so my guess is that it's just missing in the PATH = variable. Could it be due to the fact it's present in /run/setuid-programs? ---- Petr --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0001-gnu-bootloader-Rework-chaining-add-grub-efi-netbo.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-gnu-bootloader-Rework-chaining-add-grub-efi-netbo.patch RnJvbSA3YjlhYTRhNTc0MDRkMzlmMmFlZDk0MGFlZjIwMjY2NjdiZmNhMzRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMTowMjowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg MS84XSBnbnU6IGJvb3Rsb2FkZXI6IFJld29yayBjaGFpbmluZywgYWRkCiBncnViLWVmaS1uZXRi b290LXJlbW92YWJsZS1ib290bG9hZGVyLgpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKKiBkb2MvZ3VpeC50ZXhpIChCb290bG9hZGVyIENvbmZpZ3VyYXRpb24pOiBEZXNjcmliZSB0 aGUgbmV3CuKAmGdydWItZWZpLW5ldGJvb3QtcmVtb3ZhYmxlLWJvb3Rsb2FkZXLigJkuICBNZW50 aW9uIHVzZWQgc3ViLWRpcmVjdG9yaWVzIGFuZAp0aGF0IHRoZSBVRUZJIEJvb3QgTWFuYWdlciBp cyBub3QgbW9kaWZpZWQuICBBZHZpY2UgdG8gZGlzYWJsZSB3cml0ZS1hY2Nlc3MKb3ZlciBURlRQ LgoqIGdudS9ib290bG9hZGVyLnNjbSAoZWZpLWJvb3Rsb2FkZXItcHJvZmlsZSk6IEFsbG93IGEg bGlzdCBvZiBwYWNrYWdlcyBhbmQKY29sbGVjdCBldmVyeXRoaW5nIGRpcmVjdGx5IGluIHRoZSBw cm9maWxlLCBhdm9pZGluZyBhIHNlcGFyYXRlIGNvbGxlY3Rpb24KZGlyZWN0b3J5LiAgUmVuYW1l ZCB0aGUgcHJvZmlsZSBmcm9tICJib290bG9hZGVyLXByb2ZpbGUiIHRvCiJlZmktYm9vdGxvYWRl ci1wcm9maWxlIi4KW2Jvb3Rsb2FkZXItY29sbGVjdGlvbl06IFJlbmFtZWQgdG8g4oCmCltlZmkt Ym9vdGxvYWRlci1wcm9maWxlLWhvb2tdOiDigKYgdGhpcyBhbmQgcmVtb3ZlZCB1bnVzZWQgbW9k dWxlcyBhbmQgdGhlCmNyZWF0aW9uIG9mIHRoZSBub3cgdW5uZWVkZWQgY29sbGVjdGlvbiBkaXJl Y3RvcnkuCihlZmktYm9vdGxvYWRlci1jaGFpbik6IEFkZGVkIHBhY2thZ2VzIGFuZCBkaXNrLWlt YWdlLWluc3RhbGxlciBhcmd1bWVudHMuClJlbW92ZWQgaGFuZGxpbmcgb2YgdGhlIGNvbGxlY3Rp b24gZGlyZWN0b3J5LCBub3cgb25seSBjYWxsaW5nIHRoZSBnaXZlbgppbnN0YWxsZXIgcHJvY2Vk dXJlLgoqIGdudS9ib290bG9hZGVyL2dydWIuc2NtIChtYWtlLWdydWItZWZpLW5ldGJvb3QtaW5z dGFsbGVyKTogTmV3IGhlbHBlci4KKG1ha2UtZ3J1Yi1jb25maWd1cmF0aW9uKTogTmV3IGhlbHBl ciBiYXNlZCBvbiAoZ3J1Yi1jb25maWd1cmF0aW9uLWZpbGUpLgpBZGRpbmcgZ3J1YiBhcmd1bWVu dCwgZml4ZWQgaW5kZW50YXRpb24sIHJlbW92ZW5kIGNvZGUgdG8gZ2V0IGdydWIuCihncnViLWNv bmZpZ3VyYXRpb24tZmlsZSk6IE5vdyB1c2luZyAobWFrZS1ncnViLWNvbmZpZ3VyYXRpb24pLgoo Z3J1Yi1lZmktY29uZmlndXJhdGlvbi1maWxlKTogTmV3IGZ1bmN0aW9uIHVzaW5nIChtYWtlLWdy dWItY29uZmlndXJhdGlvbikuCkluc3RlYWQgb2YgZ2V0dGluZyB0aGUgZ3J1Yi1lZmkgcGFja2Fn ZSBmcm9tIHRoZSBib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KdGhpcyBmdW5jdGlvbiByZWZlcnMg dG8gdGhlIGdydWItZWZpIHBhY2thZ2UgZGlyZWN0bHkuCihncnViLWNmZyk6IE5ldyB2YXJpYWJs ZSB0byByZXBsYWNlICIvYm9vdC9ncnViL2dydWIuY2ZnIi4KKGluc3RhbGwtZ3J1Yi1lZmktbmV0 Ym9vdCk6IFJlbW92ZWQsIHRoZSBmdW5jdGlvbmFsaXR5IGdvdCBtb3ZlZC4KKG1ha2UtZ3J1Yi1l ZmktbmV0Ym9vdC1pbnN0YWxsZXIpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGN1 c3RvbWl6ZWQKaW5zdGFsbGVyIGZvciBhIGNlcnRhaW4gZWZpLXN1Yi1kaXJlY3RvcnkuICBUaGUg aW5zdGFsbGVyIGJhc2ljYWxseSBjb3BpZXMKYSBwcmUtaW5zdGFsbGVkIGVmaS1ib290bG9hZGVy LXByb2ZpbGUsIGFuZCBhZGRzIG5lZWRlZCBzeW1saW5rcyBmb3IgYm9vdGluZwpvdmVyIG5ldHdv cmssIG9yIOKAkyBvbiBhbiBFU1Ag4oCTIGFuIGludGVybWVkaWF0ZSBncnViLWNmZyB0byBsb2Fk IHRoZSBmaW5hbApncnViLWNmZyBmaWxlLgooZ3J1Yi1ib290bG9hZGVyKTogTm93IHVzaW5nIHRo ZSBncnViLWNmZyB2YXJpYWJsZS4KKGdydWItZWZpLWJvb3Rsb2FkZXIpOiBOb3cgdXNpbmcgdGhl IGdydWItY2ZnIHZhcmlhYmxlLiAgUmVtb3ZlZCBpbmhlcml0YW5jZSwKZ2l2aW5nIGNvbXBsZXRl IHNldCBvZiBmaWVsZHMuCihtYWtlLWdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcik6IE5ldyBo ZWxwZXIgZnVuY3Rpb24uCihncnViLWVmaS1uZXRib290LWJvb3Rsb2FkZXIpOiBOb3cgdXNpbmcg dGhlIGhlbHBlci4KKGdydWItZWZpLW5ldGJvb3QtcmVtb3ZhYmxlLWJvb3Rsb2FkZXIpOiBOZXcg Ym9vdGxvYWRlciB1c2luZyB0aGUgaGVscGVyLgpJdCB1c2VzIHRoZSBlZmktc3ViLWRpcmVjdG9y eSAiZWZpL2Jvb3QiIGZvciByZW1vdmFibGUgbWVkaWEuCiogZ251L3BhY2thZ2VzL2Jvb3Rsb2Fk ZXJzLnNjbSAobWFrZS1ncnViLWVmaS1uZXRib290KTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybgph IGdydWItZWZpIHBhY2thZ2UgcHJlLWluc3RhbGxlZCB2aWEgZ3J1Yi1ta25ldGRpciwgY3VzdG9t aXplZCBmb3IgYW4KZWZpLXN1Yi1kaXJlY3RvcnkgYW5kIGFibGUgdG8gYm9vdCB2aWEgbmV0d29y ayBhbmQgbG9jYWwgc3RvcmFnZS4KClRoZSByZXdvcmsgYWxsb3dzIHRvIHVzZSBhbiAoZWZpLWJv b3Rsb2FkZXItY2hhaW4pIGxpa2UgdGhpcywgd2hpY2ggaXMgYWJsZQp0byBib290IG92ZXIgbmV0 d29yayBvciBsb2NhbCBzdG9yYWdlLCBkZXBlbmRpbmcgb24gdGhlIHN5bWxpbmstc3VwcG9ydCBh dAp0aGUgYm9vdGxvYWRlci10YXJnZXQ6Cgoob3BlcmF0aW5nLXN5c3RlbQogKGJvb3Rsb2FkZXIK ICAgKGJvb3Rsb2FkZXItY29uZmlndXJhdGlvbgogICAgIChib290bG9hZGVyCiAgICAgICAoZWZp LWJvb3Rsb2FkZXItY2hhaW4KICAgICAgICAgZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9v dGxvYWRlcgogICAgICAgICAjOnBhY2thZ2VzIChsaXN0IG15LWZpcm13YXJlLXBhY2thZ2UKICAg ICAgICAgICAgICAgICAgICAgICAgICBteS11LWJvb3QtcGFja2FnZSkKICAgICAgICAgIzpmaWxl cyAobGlzdCAocGxhaW4tZmlsZSAiY29uZmlnLnR4dCIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAia2VybmVsPXUtYm9vdC5iaW4iKSkKICAgICAgICAgIzpob29rcyBteS1zcGVj aWFsLWJvb3Rsb2FkZXItcHJvZmlsZS1tYW5pcHVsYXRvcikpCiAgICAgKHRhcmdldCAiL2Jvb3Rp L2VmaSIpCiAgICAg4oCmKSkKIOKApikKKQoKZGlmZiAtLWdpdCBhL2RvYy9ndWl4LnRleGkgYi9k b2MvZ3VpeC50ZXhpCmluZGV4IGE4NjViMmUyZTQuLjRiMzUxNDJlOTUgMTAwNjQ0Ci0tLSBhL2Rv Yy9ndWl4LnRleGkKKysrIGIvZG9jL2d1aXgudGV4aQpAQCAtMzU3MTAsOCArMzU3MTAsOSBAQCBU aGUgdHlwZSBvZiBhIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbi4KIEBjaW5k ZXggQklPUywgYm9vdGxvYWRlcgogVGhlIGJvb3Rsb2FkZXIgdG8gdXNlLCBhcyBhIEBjb2Rle2Jv b3Rsb2FkZXJ9IG9iamVjdC4gIEZvciBub3cKIEBjb2Rle2dydWItYm9vdGxvYWRlcn0sIEBjb2Rl e2dydWItZWZpLWJvb3Rsb2FkZXJ9LAotQGNvZGV7Z3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVy fSwgQGNvZGV7ZXh0bGludXgtYm9vdGxvYWRlcn0gYW5kCi1AY29kZXt1LWJvb3QtYm9vdGxvYWRl cn0gYXJlIHN1cHBvcnRlZC4KK0Bjb2Rle2dydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcn0sCitA Y29kZXtncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyfSwKK0Bjb2Rle2V4dGxp bnV4LWJvb3Rsb2FkZXJ9IGFuZCBAY29kZXt1LWJvb3QtYm9vdGxvYWRlcn0gYXJlIHN1cHBvcnRl ZC4KIAogQGNpbmRleCBBUk0sIGJvb3Rsb2FkZXJzCiBAY2luZGV4IEFBcmNoNjQsIGJvb3Rsb2Fk ZXJzCkBAIC0zNTczNyw5ICszNTczOCwxMCBAQCBidWlsZCBhIGRpc2tsZXNzIEd1aXggc3lzdGVt LgogCiBUaGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBAY29kZXtncnViLWVmaS1uZXRib290LWJvb3Rs b2FkZXJ9IGdlbmVyYXRlcyB0aGUKIGNvbnRlbnQgb2YgdGhlIFRGVFAgcm9vdCBkaXJlY3Rvcnkg YXQgQGNvZGV7dGFyZ2V0c30gKEBweHJlZntCb290bG9hZGVyCi1Db25maWd1cmF0aW9uLCBAY29k ZXt0YXJnZXRzfX0pLCB0byBiZSBzZXJ2ZWQgYnkgYSBURlRQIHNlcnZlci4gIFlvdSBtYXkKLXdh bnQgdG8gbW91bnQgeW91ciBURlRQIHNlcnZlciBkaXJlY3RvcmllcyBvbnRvIHRoZSBAY29kZXt0 YXJnZXRzfSB0bwotbW92ZSB0aGUgcmVxdWlyZWQgZmlsZXMgdG8gdGhlIFRGVFAgc2VydmVyIGF1 dG9tYXRpY2FsbHkuCitDb25maWd1cmF0aW9uLCBAY29kZXt0YXJnZXRzfX0pIGJlbG93IHRoZSBz dWItZGlyZWN0b3J5IEBmaWxle2VmaS9HdWl4fSwgdG8gYmUKK3NlcnZlZCBieSBhIFRGVFAgc2Vy dmVyLiAgWW91IG1heSB3YW50IHRvIG1vdW50IHlvdXIgVEZUUCBzZXJ2ZXIgZGlyZWN0b3JpZXMK K29udG8gdGhlIEBjb2Rle3RhcmdldHN9IHRvIG1vdmUgdGhlIHJlcXVpcmVkIGZpbGVzIHRvIHRo ZSBURlRQIHNlcnZlcgorYXV0b21hdGljYWxseSBkdXJpbmcgaW5zdGFsbGF0aW9uLgogCiBJZiB5 b3UgcGxhbiB0byB1c2UgYW4gTkZTIHJvb3QgZmlsZSBzeXN0ZW0gYXMgd2VsbCAoYWN0dWFsbHkg aWYgeW91IG1vdW50IHRoZQogc3RvcmUgZnJvbSBhbiBORlMgc2hhcmUpLCB0aGVuIHRoZSBURlRQ IHNlcnZlciBuZWVkcyB0byBzZXJ2ZSB0aGUgZmlsZQpAQCAtMzU3NzMsMTMgKzM1Nzc1LDIzIEBA IGRpcmVjdG9yeSB0byB5b3VyIEBjb2Rle3RhcmdldHN9LgogSXQgaXMgaW1wb3J0YW50IHRvIG5v dGUgdGhhdCBzeW1saW5rcyBwb2ludGluZyBvdXRzaWRlIHRoZSBURlRQIHJvb3QgZGlyZWN0b3J5 CiBtYXkgbmVlZCB0byBiZSBhbGxvd2VkIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHlvdXIgVEZU UCBzZXJ2ZXIuICBGdXJ0aGVyIHRoZQogc3RvcmUgbGluayBleHBvc2VzIHRoZSB3aG9sZSBzdG9y ZSB0aHJvdWdoIFRGVFBALiAgQm90aCBwb2ludHMgbmVlZCB0byBiZQotY29uc2lkZXJlZCBjYXJl ZnVsbHkgZm9yIHNlY3VyaXR5IGFzcGVjdHMuCitjb25zaWRlcmVkIGNhcmVmdWxseSBmb3Igc2Vj dXJpdHkgYXNwZWN0cy4gIEl0IGlzIGFkdmlzZWQgdG8gZGlzYWJsZSBhbnkgVEZUUAord3JpdGUg YWNjZXNzIQorCitQbGVhc2Ugbm90ZSwgdGhhdCB0aGlzIGJvb3Rsb2FkZXIgd2lsbCBub3QgbW9k aWZ5IHRoZSDigJhVRUZJIEJvb3QgTWFuYWdlcuKAmSBvZgordGhlIHN5c3RlbS4KIAogQmVzaWRl IHRoZSBAY29kZXtncnViLWVmaS1uZXRib290LWJvb3Rsb2FkZXJ9LCB0aGUgYWxyZWFkeSBtZW50 aW9uZWQgVEZUUCBhbmQKIE5GUyBzZXJ2ZXJzLCB5b3UgYWxzbyBuZWVkIGEgcHJvcGVybHkgY29u ZmlndXJlZCBESENQIHNlcnZlciB0byBtYWtlIHRoZSBib290aW5nCiBvdmVyIG5ldGJvb3QgcG9z c2libGUuICBGb3IgYWxsIHRoaXMgd2UgY2FuIGN1cnJlbnRseSBvbmx5IHJlY29tbWVuZCB5b3Ug dG8gbG9vawogZm9yIGluc3RydWN0aW9ucyBhYm91dCBAYWNyb255bXtQWEUsIFByZWJvb3QgZVhl Y3V0aW9uIEVudmlyb25tZW50fS4KIAorQHZpbmRleCBncnViLWVmaS1uZXRib290LXJlbW92YWJs ZS1ib290bG9hZGVyCitAY29kZXtncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVy fSBpcyBpZGVudGljYWwgdG8KK0Bjb2Rle2dydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcn0gd2l0 aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIHN1Yi1kaXJlY3RvcnkKK0BmaWxle2VmaS9ib290fSB3 aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBAZmlsZXtlZmkvR3VpeH0gdG8gY29tcGx5IHRvIHRoZSBV RUZJCitzcGVjaWZpY2F0aW9uIGZvciByZW1vdmFibGUgbWVkaWEuCisKIEBpdGVtIEBjb2Rle3Rh cmdldHN9CiBUaGlzIGlzIGEgbGlzdCBvZiBzdHJpbmdzIGRlbm90aW5nIHRoZSB0YXJnZXRzIG9u dG8gd2hpY2ggdG8gaW5zdGFsbCB0aGUKIGJvb3Rsb2FkZXIuCmRpZmYgLS1naXQgYS9nbnUvYm9v dGxvYWRlci5zY20gYi9nbnUvYm9vdGxvYWRlci5zY20KaW5kZXggOWNmNTQ1Nzg3My4uNzk3OTA4 ZTI0YSAxMDA2NDQKLS0tIGEvZ251L2Jvb3Rsb2FkZXIuc2NtCisrKyBiL2dudS9ib290bG9hZGVy LnNjbQpAQCAtMjU5LDI2ICsyNTksMjIgQEAgKGRlZmluZSAobG9va3VwLWJvb3Rsb2FkZXItYnkt bmFtZSBuYW1lKQogICAgICAgICAgICAgKGZvcmNlICVib290bG9hZGVycykpCiAgICAgICAobGVh dmUgKEdfICJ+YTogbm8gc3VjaCBib290bG9hZGVyfiUiKSBuYW1lKSkpCiAKLShkZWZpbmUgKGVm aS1ib290bG9hZGVyLXByb2ZpbGUgZmlsZXMgYm9vdGxvYWRlci1wYWNrYWdlIGhvb2tzKQotICAi Q3JlYXRlcyBhIHByb2ZpbGUgd2l0aCBCT09UTE9BREVSLVBBQ0tBR0UgYW5kIGEgZGlyZWN0b3J5 IGNvbGxlY3Rpb24vIHdpdGgKLWxpbmtzIHRvIGFkZGl0aW9uYWwgRklMRVMgZnJvbSB0aGUgc3Rv cmUuICBUaGlzIGNvbGxlY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZAotYnkgdGhlIGJvb3Rsb2Fk ZXIgaW5zdGFsbGVyLgorKGRlZmluZSAoZWZpLWJvb3Rsb2FkZXItcHJvZmlsZSBwYWNrYWdlcyBm aWxlcyBob29rcykKKyAgIkNyZWF0ZXMgYSBwcm9maWxlIGZyb20gdGhlIGxpc3RzIG9mIFBBQ0tB R0VTIGFuZCBGSUxFUyBmcm9tIHRoZSBzdG9yZS4KK1RoaXMgcHJvZmlsZSBpcyBtZWFudCB0byBi ZSB1c2VkIGJ5IHRoZSBib290bG9hZGVyLWluc3RhbGxlci4KIAogRklMRVMgaXMgYSBsaXN0IG9m IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIGZyb20gdGhlIHN0b3JlLCB3aGljaCB3aWxsIGJlCi1z eW1saW5rZWQgaW50byB0aGUgY29sbGVjdGlvbi8gZGlyZWN0b3J5LiAgSWYgYSBkaXJlY3Rvcnkg bmFtZSBlbmRzIHdpdGggJy8nLAotdGhlbiB0aGUgZGlyZWN0b3J5IGNvbnRlbnQgaW5zdGVhZCBv ZiB0aGUgZGlyZWN0b3J5IGl0c2VsZiB3aWxsIGJlIHN5bWxpbmtlZAotaW50byB0aGUgY29sbGVj dGlvbi8gZGlyZWN0b3J5Lgorc3ltbGlua2VkIGludG8gdGhlIHByb2ZpbGUuICBJZiBhIGRpcmVj dG9yeSBuYW1lIGVuZHMgd2l0aCAnLycsIHRoZW4gdGhlCitkaXJlY3RvcnkgY29udGVudCBpbnN0 ZWFkIG9mIHRoZSBkaXJlY3RvcnkgaXRzZWxmIHdpbGwgYmUgc3ltbGlua2VkIGludG8gdGhlCitw cm9maWxlLgogCi1GSUxFUyBtYXkgY29udGFpbiBmaWxlIGxpa2Ugb2JqZWN0cyBwcm9kdWNlZCBi eSBmdW5jdGlvbnMgbGlrZSBwbGFpbi1maWxlLAorRklMRVMgbWF5IGNvbnRhaW4gZmlsZSBsaWtl IG9iamVjdHMgcHJvZHVjZWQgYnkgcHJvY2VkdXJlcyBsaWtlIHBsYWluLWZpbGUsCiBsb2NhbC1m aWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRlbnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQu CiAKIEhPT0tTIGxpc3RzIGFkZGl0aW9uYWwgaG9vayBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZSBw cm9maWxlLiIKLSAgKGRlZmluZSAoYm9vdGxvYWRlci1jb2xsZWN0aW9uIG1hbmlmZXN0KQorICAo ZGVmaW5lIChlZmktYm9vdGxvYWRlci1wcm9maWxlLWhvb2sgbWFuaWZlc3QpCiAgICAgKGRlZmlu ZSBidWlsZAotICAgICAgICAod2l0aC1pbXBvcnRlZC1tb2R1bGVzICcoKGd1aXggYnVpbGQgdXRp bHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgZnR3KQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyZmkgc3JmaS0xKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNyZmkgc3JmaS0yNikpCisgICAgICAgICh3aXRoLWltcG9ydGVk LW1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykpCiAgICAgICAgICAgI34oYmVnaW4KICAgICAg ICAgICAgICh1c2UtbW9kdWxlcyAoKGd1aXggYnVpbGQgdXRpbHMpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICM6c2VsZWN0IChta2Rpci1wIHN0cmlwLXN0b3JlLWZpbGUtbmFtZSkpCkBAIC0z MDIsNyArMjk4LDcgQEAgKGRlZmluZSBuYW1lLWVuZHMtd2l0aC0vPyAoY3V0IHN0cmluZy1zdWZm aXg/ICIvIiA8PikpCiAgICAgICAgICAgICAoZGVmaW5lIChuYW1lLWlzLXN0b3JlLWVudHJ5PyBu YW1lKQogICAgICAgICAgICAgICAiUmV0dXJuICN0IGlmIE5BTUUgaXMgYSBkaXJlY3Qgc3RvcmUg ZW50cnkgYW5kIG5vdGhpbmcgaW5zaWRlLiIKICAgICAgICAgICAgICAgKG5vdCAoc3RyaW5nLWlu ZGV4IChzdHJpcC1zdG9yZS1maWxlLW5hbWUgbmFtZSkgI1wvKSkpCi0gICAgICAgICAgICAobGV0 KiAoKGNvbGxlY3Rpb24gKHN0cmluZy1hcHBlbmQgIyRvdXRwdXQgIi9jb2xsZWN0aW9uIikpCisg ICAgICAgICAgICAobGV0KiAoKG91dHB1dCAjJG91dHB1dCkKICAgICAgICAgICAgICAgICAgICAo ZmlsZXMgJyMkZmlsZXMpCiAgICAgICAgICAgICAgICAgICAgKGRpcmVjdG9yaWVzIChmaWx0ZXIg bmFtZS1lbmRzLXdpdGgtLz8gZmlsZXMpKQogICAgICAgICAgICAgICAgICAgIChuYW1lcy1mcm9t LWRpcmVjdG9yaWVzCkBAIC0zMTEsMTEgKzMwNywxMSBAQCAoZGVmaW5lIChuYW1lLWlzLXN0b3Jl LWVudHJ5PyBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmll cykpCiAgICAgICAgICAgICAgICAgICAgKG5hbWVzIChhcHBlbmQgbmFtZXMtZnJvbS1kaXJlY3Rv cmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUgbmFtZS1lbmRz LXdpdGgtLz8gZmlsZXMpKSkpCi0gICAgICAgICAgICAgIChta2Rpci1wIGNvbGxlY3Rpb24pCisg ICAgICAgICAgICAgIChta2Rpci1wIG91dHB1dCkKICAgICAgICAgICAgICAgKGlmIChldmVyeSBm aWxlLWV4aXN0cz8gbmFtZXMpCiAgICAgICAgICAgICAgICAgICAoYmVnaW4KICAgICAgICAgICAg ICAgICAgICAgKGZvci1lYWNoIChsYW1iZGEgKG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN5bWxpbmstdG8gbmFtZSBjb2xsZWN0aW9uCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHN5bWxpbmstdG8gbmFtZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChuYW1lLWlzLXN0b3JlLWVudHJ5PyBuYW1lKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAtc3Rv cmUtZmlsZS1uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiYXNlbmFtZSkpKQpAQCAtMzIzLDU3ICszMTksNjMgQEAgKGRlZmluZSAobmFtZS1pcy1z dG9yZS1lbnRyeT8gbmFtZSkKICAgICAgICAgICAgICAgICAgICAgI3QpCiAgICAgICAgICAgICAg ICAgICAjZikpKSkpCiAKLSAgICAoZ2V4cC0+ZGVyaXZhdGlvbiAiYm9vdGxvYWRlci1jb2xsZWN0 aW9uIgorICAgIChnZXhwLT5kZXJpdmF0aW9uICJlZmktYm9vdGxvYWRlci1wcm9maWxlIgogICAg ICAgICAgICAgICAgICAgICAgIGJ1aWxkCiAgICAgICAgICAgICAgICAgICAgICAgIzpsb2NhbC1i dWlsZD8gI3QKICAgICAgICAgICAgICAgICAgICAgICAjOnN1YnN0aXR1dGFibGU/ICNmCiAgICAg ICAgICAgICAgICAgICAgICAgIzpwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgYCgo dHlwZSAuIHByb2ZpbGUtaG9vaykKLSAgICAgICAgICAgICAgICAgICAgICAgIChob29rIC4gYm9v dGxvYWRlci1jb2xsZWN0aW9uKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGhvb2sgLiBl ZmktYm9vdGxvYWRlci1wcm9maWxlLWhvb2spKSkpCiAKLSAgKHByb2ZpbGUgKGNvbnRlbnQgKHBh Y2thZ2VzLT5tYW5pZmVzdCAobGlzdCBib290bG9hZGVyLXBhY2thZ2UpKSkKLSAgICAgICAgICAg KG5hbWUgImJvb3Rsb2FkZXItcHJvZmlsZSIpCi0gICAgICAgICAgIChob29rcyAoYXBwZW5kIChs aXN0IGJvb3Rsb2FkZXItY29sbGVjdGlvbikgaG9va3MpKQorICAocHJvZmlsZSAoY29udGVudCAo cGFja2FnZXMtPm1hbmlmZXN0IHBhY2thZ2VzKSkKKyAgICAgICAgICAgKG5hbWUgImVmaS1ib290 bG9hZGVyLXByb2ZpbGUiKQorICAgICAgICAgICAoaG9va3MgKGNvbnMgZWZpLWJvb3Rsb2FkZXIt cHJvZmlsZS1ob29rIGhvb2tzKSkKICAgICAgICAgICAgKGxvY2FsZXM/ICNmKQogICAgICAgICAg ICAoYWxsb3ctY29sbGlzaW9ucz8gI2YpCiAgICAgICAgICAgIChyZWxhdGl2ZS1zeW1saW5rcz8g I2YpKSkKIAotKGRlZmluZSogKGVmaS1ib290bG9hZGVyLWNoYWluIGZpbGVzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmluYWwtYm9vdGxvYWRlcgorKGRlZmluZSogKGVmaS1ib290 bG9hZGVyLWNoYWluIGZpbmFsLWJvb3Rsb2FkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjOmtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlcyAnKCkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVzICcoKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaG9va3MgJygpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluc3RhbGxlcikKLSAgIkRlZmluZSBhIGJvb3Rsb2FkZXIgY2hhaW4gd2l0aCBGSU5B TC1CT09UTE9BREVSIGFzIHRoZSBmaW5hbCBib290bG9hZGVyIGFuZAotY2VydGFpbiBkaXJlY3Rv cmllcyBhbmQgZmlsZXMgZnJvbSB0aGUgc3RvcmUgZ2l2ZW4gaW4gdGhlIGxpc3Qgb2YgRklMRVMu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlzay1pbWFnZS1pbnN0YWxsZXIpCisgICJEZWZpbmUgYSBjaGFp biBvZiBib290bG9hZGVycyB3aXRoIHRoZSBGSU5BTC1CT09UTE9BREVSLCBvcHRpb25hbCBQQUNL QUdFUywKK2FuZCBvcHRpb25hbCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZnJvbSB0aGUgc3RvcmUg Z2l2ZW4gaW4gdGhlIGxpc3Qgb2YgRklMRVMuCiAKLUZJTEVTIG1heSBjb250YWluIGZpbGUgbGlr ZSBvYmplY3RzIHByb2R1Y2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIHBsYWluLWZpbGUsCi1sb2NhbC1m aWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRlbnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQu ICBUaGV5IHdpbGwgYmUKLWNvbGxlY3RlZCBpbnNpZGUgYSBkaXJlY3RvcnkgY29sbGVjdGlvbi8g aW5zaWRlIGEgZ2VuZXJhdGVkIGJvb3Rsb2FkZXIgcHJvZmlsZSwKLXdoaWNoIHdpbGwgYmUgcGFz c2VkIHRvIHRoZSBJTlNUQUxMRVIuCitUaGUgcGFja2FnZSBvZiB0aGUgRklOQUwtQk9PVExPQURF UiBhbmQgYWxsIFBBQ0tBR0VTIGFuZCBGSUxFUyB3aWxsIGJlIHBsYWNlZAoraW4gYW4gZWZpLWJv b3Rsb2FkZXItcHJvZmlsZSwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIElOU1RBTExFUi4K KworRklMRVMgbWF5IGNvbnRhaW4gZmlsZSBsaWtlIG9iamVjdHMgcHJvZHVjZWQgYnkgcHJvY2Vk dXJlcyBsaWtlIHBsYWluLWZpbGUsCitsb2NhbC1maWxlLCBldGMuLCBvciBwYWNrYWdlIGNvbnRl bnRzIHByb2R1Y2VkIHdpdGggZmlsZS1hcHBlbmQuCiAKIElmIGEgZGlyZWN0b3J5IG5hbWUgaW4g RklMRVMgZW5kcyB3aXRoICcvJywgdGhlbiB0aGUgZGlyZWN0b3J5IGNvbnRlbnQgaW5zdGVhZAot b2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYgd2lsbCBiZSBzeW1saW5rZWQgaW50byB0aGUgY29sbGVj dGlvbi8gZGlyZWN0b3J5Lgorb2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYgd2lsbCBiZSBzeW1saW5r ZWQgaW50byB0aGUgZWZpLWJvb3Rsb2FkZXItcHJvZmlsZS4KIAogVGhlIHByb2NlZHVyZXMgaW4g dGhlIEhPT0tTIGxpc3QgY2FuIGJlIHVzZWQgdG8gZnVydGhlciBtb2RpZnkgdGhlIGJvb3Rsb2Fk ZXIKIHByb2ZpbGUuICBJdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uIGlu c3RlYWQgb2YgYSBsaXN0LgogCi1JZiB0aGUgSU5TVEFMTEVSIGFyZ3VtZW50IGlzIHVzZWQsIHRo ZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBpbnN0YWxsCi10aGUgYm9vdGxvYWRl ci4gIE90aGVyd2lzZSB0aGUgaW5zdGFsbGVyIG9mIHRoZSBGSU5BTC1CT09UTE9BREVSIHdpbGwg YmUgY2FsbGVkLiIKLSAgKGxldCogKChmaW5hbC1pbnN0YWxsZXIgKG9yIGluc3RhbGxlcgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJvb3Rsb2FkZXItaW5zdGFsbGVyIGZpbmFsLWJv b3Rsb2FkZXIpKSkKLSAgICAgICAgIChwcm9maWxlIChlZmktYm9vdGxvYWRlci1wcm9maWxlIGZp bGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9vdGxvYWRl ci1wYWNrYWdlIGZpbmFsLWJvb3Rsb2FkZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWYgKGxpc3Q/IGhvb2tzKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhvb2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxpc3QgaG9va3MpKSkpKQotICAgIChib290bG9hZGVyCi0gICAg IChpbmhlcml0IGZpbmFsLWJvb3Rsb2FkZXIpCi0gICAgIChwYWNrYWdlIHByb2ZpbGUpCi0gICAg IChpbnN0YWxsZXIKLSAgICAgICN+KGxhbWJkYSAoYm9vdGxvYWRlciB0YXJnZXQgbW91bnQtcG9p bnQpCi0gICAgICAgICAgKCMkZmluYWwtaW5zdGFsbGVyIGJvb3Rsb2FkZXIgdGFyZ2V0IG1vdW50 LXBvaW50KQotICAgICAgICAgIChjb3B5LXJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgIChzdHJpbmct YXBwZW5kIGJvb3Rsb2FkZXIgIi9jb2xsZWN0aW9uIikKLSAgICAgICAgICAgKHN0cmluZy1hcHBl bmQgbW91bnQtcG9pbnQgdGFyZ2V0KQotICAgICAgICAgICAjOmZvbGxvdy1zeW1saW5rcz8gI3QK LSAgICAgICAgICAgIzpsb2cgKCVtYWtlLXZvaWQtcG9ydCAidyIpKSkpKSkpCitJZiB0aGUgSU5T VEFMTEVSIGFyZ3VtZW50IGlzIHVzZWQsIHRoZW4gdGhpcyBnZXhwIHByb2NlZHVyZSB3aWxsIGJl IGNhbGxlZCB0bworaW5zdGFsbCB0aGUgZWZpLWJvb3Rsb2FkZXItcHJvZmlsZS4gIE90aGVyd2lz ZSB0aGUgaW5zdGFsbGVyIG9mIHRoZQorRklOQUwtQk9PVExPQURFUiB3aWxsIGJlIGNhbGxlZC4K KworSWYgdGhlIERJU0stSU1BR0UtSU5TVEFMTEVSIGlzIHVzZWQsIHRoZW4gdGhpcyBnZXhwIHBy b2NlZHVyZSB3aWxsIGJlIGNhbGxlZAordG8gaW5zdGFsbCB0aGUgZWZpLWJvb3Rsb2FkZXItcHJv ZmlsZSBpbnRvIGEgZGlzay1pbWFnZS4gIE90aGVyd2lzZSB0aGUKK2Rpc2staW1hZ2UtaW5zdGFs bGVyIG9mIHRoZSBGSU5BTC1CT09UTE9BREVSIHdpbGwgYmUgY2FsbGVkLiIKKyAgKGJvb3Rsb2Fk ZXIKKyAgICAoaW5oZXJpdCBmaW5hbC1ib290bG9hZGVyKQorICAgIChuYW1lICJlZmktYm9vdGxv YWRlci1jaGFpbiIpCisgICAgKHBhY2thZ2UKKyAgICAgKGVmaS1ib290bG9hZGVyLXByb2ZpbGUg KGNvbnMgKGJvb3Rsb2FkZXItcGFja2FnZSBmaW5hbC1ib290bG9hZGVyKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChsaXN0PyBob29r cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdCBob29rcykpKSkKKyAgICAoaW5zdGFsbGVyCisgICAg IChvciBpbnN0YWxsZXIKKyAgICAgICAgIChib290bG9hZGVyLWluc3RhbGxlciBmaW5hbC1ib290 bG9hZGVyKSkpCisgICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyCisgICAgIChvciBkaXNrLWltYWdl LWluc3RhbGxlcgorICAgICAgICAgKGJvb3Rsb2FkZXItZGlzay1pbWFnZS1pbnN0YWxsZXIgZmlu YWwtYm9vdGxvYWRlcikpKSkpCmRpZmYgLS1naXQgYS9nbnUvYm9vdGxvYWRlci9ncnViLnNjbSBi L2dudS9ib290bG9hZGVyL2dydWIuc2NtCmluZGV4IDEyMGNkNTUwMTIuLjBiYTZhYTRkYWQgMTAw NjQ0Ci0tLSBhL2dudS9ib290bG9hZGVyL2dydWIuc2NtCisrKyBiL2dudS9ib290bG9hZGVyL2dy dWIuc2NtCkBAIC01MCwxMSArNTAsMTIgQEAgKGRlZmluZS1tb2R1bGUgKGdudSBib290bG9hZGVy IGdydWIpCiAgICAgICAgICAgICBncnViLXRoZW1lLWNvbG9yLWhpZ2hsaWdodAogICAgICAgICAg ICAgZ3J1Yi10aGVtZS1nZnhtb2RlCiAKLSAgICAgICAgICAgIGluc3RhbGwtZ3J1Yi1lZmktbmV0 Ym9vdAorICAgICAgICAgICAgbWFrZS1ncnViLWVmaS1uZXRib290LWluc3RhbGxlcgogCiAgICAg ICAgICAgICBncnViLWJvb3Rsb2FkZXIKICAgICAgICAgICAgIGdydWItZWZpLWJvb3Rsb2FkZXIK ICAgICAgICAgICAgIGdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcgorICAgICAgICAgICAgZ3J1 Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9vdGxvYWRlcgogICAgICAgICAgICAgZ3J1Yi1ta3Jl c2N1ZS1ib290bG9hZGVyCiAgICAgICAgICAgICBncnViLW1pbmltYWwtYm9vdGxvYWRlcgogCkBA IC0zNDgsNyArMzQ5LDcgQEAgKGRlZmluZSAoZ3J1Yi1yb290LXNlYXJjaCBkZXZpY2UgZmlsZSkK ICAgICAgICAgKChvciAjZiAoPyBzdHJpbmc/KSkKICAgICAgICAgICN+KGZvcm1hdCAjZiAic2Vh cmNoIC0tZmlsZSAtLXNldCB+YSIgIyRmaWxlKSkpKSkKIAotKGRlZmluZSogKGdydWItY29uZmln dXJhdGlvbi1maWxlIGNvbmZpZyBlbnRyaWVzCisoZGVmaW5lKiAobWFrZS1ncnViLWNvbmZpZ3Vy YXRpb24gZ3J1YiBjb25maWcgZW50cmllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICM6a2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZSAjZikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtICglY3VycmVudC1zeXN0 ZW0pKQpAQCAtMzc4LDI3ICszNzksMjcgQEAgKGRlZmluZSAobWVudS1lbnRyeS0+Z2V4cCBlbnRy eSkKICAgICAgICAgICAgICAgICAoaW5pdHJkIChub3JtYWxpemUtZmlsZSAobWVudS1lbnRyeS1p bml0cmQgZW50cnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2 aWNlLW1vdW50LXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RvcmUtZGlyZWN0b3J5LXByZWZpeCkpKQotICAgICAgICAgOzsgSGVyZSBERVZJQ0UgaXMgdGhl IHN0b3JlIGFuZCBERVZJQ0UtTU9VTlQtUE9JTlQgaXMgaXRzIG1vdW50IHBvaW50LgotICAgICAg ICAgOzsgVXNlIHRoZSByaWdodCBmaWxlIG5hbWVzIGZvciBMSU5VWCBhbmQgSU5JVFJEIGluIGNh c2UKLSAgICAgICAgIDs7IERFVklDRS1NT1VOVC1QT0lOVCBpcyBub3QgIi8iLCBtZWFuaW5nIHRo YXQgdGhlIHN0b3JlIGlzIG9uIGEKLSAgICAgICAgIDs7IHNlcGFyYXRlIHBhcnRpdGlvbi4KLQot ICAgICAgICAgOzsgV2hlbiBCVFJGUy1TVUJWT0xVTUUtRklMRS1OQU1FIGlzIGRlZmluZWQsIHBy ZXBlbmQgaXQgdGhlIGxpbnV4IGFuZAotICAgICAgICAgOzsgaW5pdHJkIHBhdGhzLCB0byBhbGxv dyBib290aW5nIGZyb20gYSBCdHJmcyBzdWJ2b2x1bWUuCi0gICAgICAgICAjfihmb3JtYXQgcG9y dCAibWVudWVudHJ5IH5zIHsKKyAgICAgICAgICAgIDs7IEhlcmUgREVWSUNFIGlzIHRoZSBzdG9y ZSBhbmQgREVWSUNFLU1PVU5ULVBPSU5UIGlzIGl0cyBtb3VudCBwb2ludC4KKyAgICAgICAgICAg IDs7IFVzZSB0aGUgcmlnaHQgZmlsZSBuYW1lcyBmb3IgTElOVVggYW5kIElOSVRSRCBpbiBjYXNl CisgICAgICAgICAgICA7OyBERVZJQ0UtTU9VTlQtUE9JTlQgaXMgbm90ICIvIiwgbWVhbmluZyB0 aGF0IHRoZSBzdG9yZSBpcyBvbiBhCisgICAgICAgICAgICA7OyBzZXBhcmF0ZSBwYXJ0aXRpb24u CisKKyAgICAgICAgICAgIDs7IFdoZW4gQlRSRlMtU1VCVk9MVU1FLUZJTEUtTkFNRSBpcyBkZWZp bmVkLCBwcmVwZW5kIGl0IHRoZSBsaW51eCBhbmQKKyAgICAgICAgICAgIDs7IGluaXRyZCBwYXRo cywgdG8gYWxsb3cgYm9vdGluZyBmcm9tIGEgQnRyZnMgc3Vidm9sdW1lLgorICAgICAgICAgICAg I34oZm9ybWF0IHBvcnQgIm1lbnVlbnRyeSB+cyB7CiAgIH5hCiAgIGxpbnV4IH5hIH5hCiAgIGlu aXRyZCB+YQogfX4lIgotICAgICAgICAgICAgICAgICAgICMkbGFiZWwKLSAgICAgICAgICAgICAg ICAgICAjJChncnViLXJvb3Qtc2VhcmNoIGRldmljZSBsaW51eCkKLSAgICAgICAgICAgICAgICAg ICAjJGxpbnV4IChzdHJpbmctam9pbiAobGlzdCAjJEBhcmd1bWVudHMpKQotICAgICAgICAgICAg ICAgICAgICMkaW5pdHJkKSkKKyAgICAgICAgICAgICAgICAgICAgICAjJGxhYmVsCisgICAgICAg ICAgICAgICAgICAgICAgIyQoZ3J1Yi1yb290LXNlYXJjaCBkZXZpY2UgbGludXgpCisgICAgICAg ICAgICAgICAgICAgICAgIyRsaW51eCAoc3RyaW5nLWpvaW4gKGxpc3QgIyRAYXJndW1lbnRzKSkK KyAgICAgICAgICAgICAgICAgICAgICAjJGluaXRyZCkpCiAgICAgICAgICAgKGxldCAoKGtlcm5l bCAobWVudS1lbnRyeS1tdWx0aWJvb3Qta2VybmVsIGVudHJ5KSkKICAgICAgICAgICAgICAgICAo YXJndW1lbnRzIChtZW51LWVudHJ5LW11bHRpYm9vdC1hcmd1bWVudHMgZW50cnkpKQogICAgICAg ICAgICAgICAgIChtb2R1bGVzIChtZW51LWVudHJ5LW11bHRpYm9vdC1tb2R1bGVzIGVudHJ5KSkK ICAgICAgICAgICAgICAgICAocm9vdC1pbmRleCAxKSkgICAgICAgICAgICA7IFhYWCBFRkkgd2ls bCBuZWVkIHJvb3QtaW5kZXggMgotICAgICAgICAjfihmb3JtYXQgcG9ydCAiCisgICAgICAgICAg ICAjfihmb3JtYXQgcG9ydCAiCiBtZW51ZW50cnkgfnMgewogICBtdWx0aWJvb3QgfmEgcm9vdD1k ZXZpY2U6aGQwc35hfmF+YQogfX4lIgpAQCAtNDM1LDkgKzQzNiw3IEBAIChkZWZpbmUgKHN1Z2Fy KQogICAoZGVmaW5lIGxvY2FsZS1jb25maWcKICAgICAobGV0KiAoKGVudHJ5IChmaXJzdCBhbGwt ZW50cmllcykpCiAgICAgICAgICAgIChkZXZpY2UgKG1lbnUtZW50cnktZGV2aWNlIGVudHJ5KSkK LSAgICAgICAgICAgKG1vdW50LXBvaW50IChtZW51LWVudHJ5LWRldmljZS1tb3VudC1wb2ludCBl bnRyeSkpCi0gICAgICAgICAgIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24t Ym9vdGxvYWRlciBjb25maWcpKQotICAgICAgICAgICAoZ3J1YiAoYm9vdGxvYWRlci1wYWNrYWdl IGJvb3Rsb2FkZXIpKSkKKyAgICAgICAgICAgKG1vdW50LXBvaW50IChtZW51LWVudHJ5LWRldmlj ZS1tb3VudC1wb2ludCBlbnRyeSkpKQogICAgICAgI34obGV0ICgobG9jYWxlICMkKGFuZCBsb2Nh bGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZS1kZWZpbml0aW9uLXNvdXJj ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsZS1uYW1lLT5kZWZpbml0aW9u IGxvY2FsZSkpKSkKQEAgLTQ2Myw4ICs0NjIsNiBAQCAoZGVmaW5lIGxvY2FsZS1jb25maWcKIAog ICAoZGVmaW5lIGtleWJvYXJkLWxheW91dC1jb25maWcKICAgICAobGV0KiAoKGxheW91dCAoYm9v dGxvYWRlci1jb25maWd1cmF0aW9uLWtleWJvYXJkLWxheW91dCBjb25maWcpKQotICAgICAgICAg ICAoZ3J1YiAgIChib290bG9hZGVyLXBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgKGJvb3Rs b2FkZXItY29uZmlndXJhdGlvbi1ib290bG9hZGVyIGNvbmZpZykpKQogICAgICAgICAgICAoa2V5 bWFwKiAoYW5kIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlib2FyZC1sYXlv dXQtZmlsZSBsYXlvdXQgIzpncnViIGdydWIpKSkKICAgICAgICAgICAgKGVudHJ5IChmaXJzdCBh bGwtZW50cmllcykpCkBAIC01MTUsNiArNTEyLDE2IEBAIChkZWZpbmUgYnVpbGRlcgogICAgICAg ICAgICAgICAgICAjOm9wdGlvbnMgJygjOmxvY2FsLWJ1aWxkPyAjdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjOnN1YnN0aXR1dGFibGU/ICNmKSkpCiAKKyhkZWZpbmUgKGdydWItY29u ZmlndXJhdGlvbi1maWxlIGNvbmZpZyAuIGFyZ3MpCisgIChsZXQqICgoYm9vdGxvYWRlciAoYm9v dGxvYWRlci1jb25maWd1cmF0aW9uLWJvb3Rsb2FkZXIgY29uZmlnKSkKKyAgICAgICAgIChncnVi IChib290bG9hZGVyLXBhY2thZ2UgYm9vdGxvYWRlcikpKQorICAgIChhcHBseSBtYWtlLWdydWIt Y29uZmlndXJhdGlvbiBncnViIGNvbmZpZyBhcmdzKSkpCisKKyhkZWZpbmUgKGdydWItZWZpLWNv bmZpZ3VyYXRpb24tZmlsZSAuIGFyZ3MpCisgIChhcHBseSBtYWtlLWdydWItY29uZmlndXJhdGlv biBncnViLWVmaSBhcmdzKSkKKworKGRlZmluZSBncnViLWNmZyAiL2Jvb3QvZ3J1Yi9ncnViLmNm ZyIpCisKIAwKIAogOzs7CkBAIC02MDgsNDIgKzYxNSwzMSBAQCAoZGVmaW5lIGluc3RhbGwtZ3J1 Yi1lZmkKICAgICAgICAgICAgICAgICAgICAgICAgICItLWJvb3Rsb2FkZXItaWQ9R3VpeCIKICAg ICAgICAgICAgICAgICAgICAgICAgICItLWVmaS1kaXJlY3RvcnkiIHRhcmdldC1lc3ApKSkpKQog Ci0oZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qgc3ViZGlyKQotICAiRGVmaW5lIGEg Z3J1Yi1lZmktbmV0Ym9vdCBib290bG9hZGVyIGluc3RhbGxlciBmb3IgaW5zdGFsbGF0aW9uIGlu IFNVQkRJUiwKLXdoaWNoIGlzIHVzdWFsbHkgZWZpL0d1aXggb3IgZWZpL2Jvb3QuIgotICAobGV0 KiAoKHN5c3RlbSAoc3RyaW5nLXNwbGl0IChuaXgtc3lzdGVtLT5nbnUtdHJpcGxldAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKCVjdXJyZW50LXRhcmdldC1zeXN0ZW0pCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJWN1cnJlbnQtc3lzdGVtKSkpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wtKSkKLSAgICAgICAgIChhcmNoIChmaXJz dCBzeXN0ZW0pKQotICAgICAgICAgKGJvb3QtZWZpLWxpbmsgKG1hdGNoIHN5c3RlbQotICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBUaGVzZSBhcmUgdGhlIHN1cHBvcnRlbmQgc3lzdGVtcyBh bmQgdGhlIG5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGRlZmluZWQgYnkgdGhl IFVFRkkgc3RhbmRhcmQgZm9yIHJlbW92YWJsZSBtZWRpYS4KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgiaTY4NiIgXyAuLi4pICAgICAgICAiL2Jvb3RpYTMyLmVmaSIpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICgoIng4Nl82NCIgXyAuLi4pICAgICAgIi9ib290eDY0LmVmaSIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICgoImFybSIgXyAuLi4pICAgICAgICAgIi9ib290YXJt LmVmaSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoImFhcmNoNjQiIF8gLi4uKSAgICAg Ii9ib290YWE2NC5lZmkiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAoKCJyaXNjdiIgXyAu Li4pICAgICAgICIvYm9vdHJpc2N2MzIuZWZpIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg KCgicmlzY3Y2NCIgXyAuLi4pICAgICAiL2Jvb3RyaXNjdjY0LmVmaSIpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIDs7IE90aGVyIHN5c3RlbXMgYXJlIG5vdCBzdXBwb3J0ZWQsIGFsdGhvdWdo IGRlZmluZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7ICgoInJpc2N2MTI4IiBfIC4u LikgIi9ib290cmlzY3YxMjguZWZpIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgKCgi aWE2NCIgXyAuLi4pICAgICAiL2Jvb3RpYTY0LmVmaSIpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICgoXyAuLi4pICAgICAgICAgICAgICAgI2YpKSkKLSAgICAgICAgIChjb3JlLWVmaSAoc3Ry aW5nLWFwcGVuZAotICAgICAgICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBhcmNoIGRlcGVu ZGVudCBmaWxlIG5hbWUgb2YgR1JVQiwgZS5nLgotICAgICAgICAgICAgICAgICAgICA7OyBpMzY4 LWVmaS9jb3JlLmVmaSBvciBhcm02NC1lZmkvY29yZS5lZmkuCi0gICAgICAgICAgICAgICAgICAg IChtYXRjaCBhcmNoCi0gICAgICAgICAgICAgICAgICAgICAgKCJpNjg2IiAgICAiaTM4NiIpCi0g ICAgICAgICAgICAgICAgICAgICAgKCJhYXJjaDY0IiAiYXJtNjQiKQotICAgICAgICAgICAgICAg ICAgICAgICgicmlzY3YiICAgInJpc2N2MzIiKQotICAgICAgICAgICAgICAgICAgICAgIChfICAg ICAgICAgYXJjaCkpCi0gICAgICAgICAgICAgICAgICAgICItZWZpL2NvcmUuZWZpIikpKQotICAg ICh3aXRoLWltcG9ydGVkLW1vZHVsZXMKLSAgICAgJygoZ3VpeCBidWlsZCB1bmlvbikpCi0gICAg ICN+KGxhbWJkYSAoYm9vdGxvYWRlciB0YXJnZXQgbW91bnQtcG9pbnQpCi0gICAgICAgICAiSW5z dGFsbCB0aGUgQk9PVExPQURFUiwgd2hpY2ggbXVzdCBiZSB0aGUgcGFja2FnZSBncnViLCBhcyBl LmcuCi1ib290eDY0LmVmaSBvciBib290YWE2NC5lZmkgaW50byBTVUJESVIsIHdoaWNoIGlzIHVz dWFsbHkgZWZpL0d1aXggb3IgZWZpL2Jvb3QsCi1iZWxvdyB0aGUgZGlyZWN0b3J5IFRBUkdFVCBm b3IgdGhlIHN5c3RlbSB3aG9zZSByb290IGlzIG1vdW50ZWQgYXQgTU9VTlQtUE9JTlQuCisoZGVm aW5lKiAobWFrZS1ncnViLWVmaS1uZXRib290LWluc3RhbGxlciBncnViLWVmaSBncnViLWNmZyBz dWJkaXIpCisgICJNYWtlIGEgYm9vdGxvYWRlci1pbnN0YWxsZXIgZm9yIGEgZ3J1Yi1lZmktbmV0 Ym9vdCBib290bG9hZGVyLCB3aGljaCBleHBlY3RzCitpdHMgZmlsZXMgaW4gU1VCRElSIGFuZCBp dHMgY29uZmlndXJhdGlvbiBmaWxlIGluIEdSVUItQ0ZHLgorCitBcyBhIGdydWItZWZpLW5ldGJv b3QgcGFja2FnZSBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBieSAnZ3J1Yi1ta25ldGRpcicsIHRo ZQoraW5zdGFsbGVyIGJhc2ljYWxseSBjb3BpZXMgYWxsIGZpbGVzIGZyb20gdGhlIGJvb3Rsb2Fk ZXItcGFja2FnZSAob3IgcHJvZmlsZSkKK2ludG8gdGhlIGJvb3Rsb2FkZXItdGFyZ2V0IGRpcmVj dG9yeS4KKworQWRkaXRpb25hbGx5IGZvciBuZXR3b3JrIGJvb3Rpbmcgb3ZlciBURlRQLCB0d28g cmVsYXRpdmUgc3ltbGlua3MgdG8gdGhlIHN0b3JlCithbmQgdG8gdGhlIEdSVUItQ0ZHIGZpbGUg YXJlIG5lY2Vzc2FyeS4gIER1ZSB0byB0aGlzIGEgVEZUUCByb290IGRpcmVjdG9yeSBtdXN0Citu b3QgYmUgbG9jYXRlZCBvbiBhIEZBVCBmaWxlLXN5c3RlbS4KKworSWYgdGhlIGJvb3Rsb2FkZXIt dGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgc3ltbGlua3MsIHRoZW4gaXQgaXMgYXNzdW1lZCB0byBi ZSBhCitraW5kIG9mIEVGSSBTeXN0ZW0gUGFydGl0aW9uIChFU1ApLiAgSW4gdGhpcyBjYXNlIGFu IGludGVybWVkaWF0ZSBjb25maWd1cmF0aW9uCitmaWxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgaGVs cCBvZiBHUlVCLUVGSSB0byBsb2FkIHRoZSBHUlVCLUNGRy4KKworVGhlIGluc3RhbGxlciBpcyB1 c2FibGUgZm9yIGFueSBlZmktYm9vdGxvYWRlci1jaGFpbiwgd2hpY2ggcHJlcGFyZXMgdGhlCiti b290bG9hZGVyLXByb2ZpbGUgaW4gYSB3YXkgcmVhZHkgZm9yIGNvcHlpbmcuCisKK1RoZSBpbnN0 YWxsZXIgZG9lcyBub3QgbWFuaXB1bGF0ZSB0aGUgc3lzdGVtJ3MgJ1VFRkkgQm9vdCBNYW5hZ2Vy Jy4iCisgICh3aXRoLWltcG9ydGVkLW1vZHVsZXMgJygoZ3VpeCBidWlsZCB1bmlvbikpCisgICAg I34obGFtYmRhIChib290bG9hZGVyIHRhcmdldCBtb3VudC1wb2ludCkKKyAgICAgICAgIkNvcHkg dGhlIEJPT1RMT0FERVIsIHdoaWNoIG11c3QgYmUgYSBwcmVpbnN0YWxsZWQgZ3J1Yi1lZmktbmV0 Ym9vdAorcGFja2FnZSB3aXRoIGEgU1VCRElSIGxpa2UgZWZpL2Jvb3Qgb3IgZWZpL0d1aXgsIGJl bG93IHRoZSBkaXJlY3RvcnkKK1RBUkdFVCBmb3IgdGhlIHN5c3RlbSB3aG9zZSByb290IGlzIG1v dW50ZWQgYXQgTU9VTlQtUE9JTlQuCiAKIE1PVU5ULVBPSU5UIGlzIHRoZSBsYXN0IGFyZ3VtZW50 IGluICdndWl4IHN5c3RlbSBpbml0IC9ldGMvY29uZmlnLnNjbSBtbnQvcG9pbnQnCiBvciAnLycg Zm9yIG90aGVyICdndWl4IHN5c3RlbScgY29tbWFuZHMuCkBAIC02NTMsMTcgKzY0OSwxOCBAQCAo ZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qgc3ViZGlyKQogCiAob3BlcmF0aW5nLXN5 c3RlbQogIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAg ICAgKHRhcmdldHMgJyhcIi9ib290XCIpKQorICAgICAgICAgICAgICAodGFyZ2V0cyAnKFwiL2Jv b3QvZWZpXCIpKQogICAgICAgICAgICAgICDigKYpKQogIOKApikKIAogVEFSR0VUIGlzIHJlcXVp cmVkIHRvIGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLCB1c3VhbGx5IG1vdW50ZWQgdmlh IE5GUywKIGFuZCBmaW5hbGx5IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IGEgVEZUUCBzZXJ2ZXIg YXMgdGhlIFRGVFAgcm9vdCBkaXJlY3RvcnkuCiAKK1VzdWFsbHkgdGhlIGluc3RhbGxlciB3aWxs IGJlIHVzZWQgdG8gcHJlcGFyZSBuZXR3b3JrIGJvb3Rpbmcgb3ZlciBURlRQLiAgVGhlbgogR1JV QiB3aWxsIGxvYWQgdGZ0cDovL3NlcnZlci9TVUJESVIvZ3J1Yi5jZmcgYW5kIHRoaXMgZmlsZSB3 aWxsIGluc3RydWN0IGl0IHRvCiBsb2FkIG1vcmUgZmlsZXMgZnJvbSB0aGUgc3RvcmUgbGlrZSB0 ZnRwOi8vc2VydmVyL2dudS9zdG9yZS/igKYtbGludXjigKYvSW1hZ2UuCiAKLVRvIG1ha2UgdGhp cyBwb3NzaWJsZSB0d28gc3ltbGlua3Mgd2lsbCBiZSBjcmVhdGVkLiBUaGUgZmlyc3Qgc3ltbGlu ayBwb2ludHMKK1RvIG1ha2UgdGhpcyBwb3NzaWJsZSB0d28gc3ltbGlua3Mgd2lsbCBiZSBjcmVh dGVkLiAgVGhlIGZpcnN0IHN5bWxpbmsgcG9pbnRzCiByZWxhdGl2ZWx5IGZvcm0gTU9VTlQtUE9J TlQvVEFSR0VUL1NVQkRJUi9ncnViLmNmZyB0bwogTU9VTlQtUE9JTlQvYm9vdC9ncnViL2dydWIu Y2ZnLCBhbmQgdGhlIHNlY29uZCBzeW1saW5rIHBvaW50cyByZWxhdGl2ZWx5IGZyb20KIE1PVU5U LVBPSU5UL1RBUkdFVC8lc3RvcmUtcHJlZml4IHRvIE1PVU5ULVBPSU5ULyVzdG9yZS1wcmVmaXgu CkBAIC02NzMsMzQgKzY3MCw3OCBAQCAoZGVmaW5lIChpbnN0YWxsLWdydWItZWZpLW5ldGJvb3Qg c3ViZGlyKQogCiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgYm90aCBzeW1saW5r cyB3aWxsIHBvaW50IG91dHNpZGUgdGhlIFRGVFAgcm9vdAogZGlyZWN0b3J5IGFuZCB0aGF0IHRo ZSBUQVJHRVQvJXN0b3JlLXByZWZpeCBzeW1saW5rIG1ha2VzIHRoZSB3aG9sZSBzdG9yZQotYWNj ZXNzaWJsZSB2aWEgVEZUUC4gUG9zc2libHkgdGhlIFRGVFAgc2VydmVyIG11c3QgYmUgY29uZmln dXJlZAotdG8gYWxsb3cgYWNjZXNzZXMgb3V0c2lkZSBpdHMgVEZUUCByb290IGRpcmVjdG9yeS4g VGhpcyBtYXkgbmVlZCB0byBiZQotY29uc2lkZXJlZCBmb3Igc2VjdXJpdHkgYXNwZWN0cy4iCi0g ICAgICAgICAodXNlLW1vZHVsZXMgKChndWl4IGJ1aWxkIHVuaW9uKSAjOnNlbGVjdCAoc3ltbGlu ay1yZWxhdGl2ZSkpKQotICAgICAgICAgKGxldCogKChuZXQtZGlyIChzdHJpbmctYXBwZW5kIG1v dW50LXBvaW50IHRhcmdldCAiLyIpKQotICAgICAgICAgICAgICAgIChzdWItZGlyIChzdHJpbmct YXBwZW5kIG5ldC1kaXIgIyRzdWJkaXIgIi8iKSkKLSAgICAgICAgICAgICAgICAoc3RvcmUgKHN0 cmluZy1hcHBlbmQgbW91bnQtcG9pbnQgKCVzdG9yZS1wcmVmaXgpKSkKLSAgICAgICAgICAgICAg ICAoc3RvcmUtbGluayAoc3RyaW5nLWFwcGVuZCBuZXQtZGlyICglc3RvcmUtcHJlZml4KSkpCi0g ICAgICAgICAgICAgICAgKGdydWItY2ZnIChzdHJpbmctYXBwZW5kIG1vdW50LXBvaW50ICIvYm9v dC9ncnViL2dydWIuY2ZnIikpCi0gICAgICAgICAgICAgICAgKGdydWItY2ZnLWxpbmsgKHN0cmlu Zy1hcHBlbmQgc3ViLWRpciAoYmFzZW5hbWUgZ3J1Yi1jZmcpKSkKLSAgICAgICAgICAgICAgICAo Ym9vdC1lZmktbGluayAoc3RyaW5nLWFwcGVuZCBzdWItZGlyICMkYm9vdC1lZmktbGluaykpKQot ICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBzdG9yZS4KLSAgICAgICAg ICAgKG1rZGlyLXAgKGRpcm5hbWUgc3RvcmUtbGluaykpCi0gICAgICAgICAgIChmYWxzZS1pZi1l eGNlcHRpb24gKGRlbGV0ZS1maWxlIHN0b3JlLWxpbmspKQotICAgICAgICAgICAoc3ltbGluay1y ZWxhdGl2ZSBzdG9yZSBzdG9yZS1saW5rKQotICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1s aW5rIHRvIHRoZSBncnViLmNmZywgd2hpY2ggcG9pbnRzIGludG8gdGhlIHN0b3JlLgotICAgICAg ICAgICAobWtkaXItcCAoZGlybmFtZSBncnViLWNmZy1saW5rKSkKLSAgICAgICAgICAgKGZhbHNl LWlmLWV4Y2VwdGlvbiAoZGVsZXRlLWZpbGUgZ3J1Yi1jZmctbGluaykpCi0gICAgICAgICAgIChz eW1saW5rLXJlbGF0aXZlIGdydWItY2ZnIGdydWItY2ZnLWxpbmspCi0gICAgICAgICAgIDs7IElu c3RhbGwgR1JVQiwgd2hpY2ggcmVmZXJzIHRvIHRoZSBncnViLmNmZywgd2l0aCBzdXBwb3J0IGZv cgotICAgICAgICAgICA7OyBlbmNyeXB0ZWQgcGFydGl0aW9ucywKLSAgICAgICAgICAgKHNldGVu diAiR1JVQl9FTkFCTEVfQ1JZUFRPRElTSyIgInkiKQotICAgICAgICAgICAoaW52b2tlL3F1aWV0 IChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXIgIi9iaW4vZ3J1Yi1ta25ldGRpciIpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0tbmV0LWRpcmVjdG9yeT0iIG5ldC1k aXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIi0tc3ViZGlyPSIg IyRzdWJkaXIpKQotICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBib290bG9hZGVyIHN5bWxpbmss IHdoaWNoIHBvaW50cyB0byBjb3JlLmVmaSBvZiBHUlVCLgotICAgICAgICAgICAoZmFsc2UtaWYt ZXhjZXB0aW9uIChkZWxldGUtZmlsZSBib290LWVmaS1saW5rKSkKLSAgICAgICAgICAgKHN5bWxp bmsgIyRjb3JlLWVmaSBib290LWVmaS1saW5rKSkpKSkpCithY2Nlc3NpYmxlIHZpYSBURlRQLiAg UG9zc2libHkgdGhlIFRGVFAgc2VydmVyIG11c3QgYmUgY29uZmlndXJlZCB0byBhbGxvdworYWNj ZXNzZXMgb3V0c2lkZSBpdHMgVEZUUCByb290IGRpcmVjdG9yeS4gIFRoaXMgYWxsIG1heSBuZWVk IHRvIGJlIGNvbnNpZGVyZWQKK2ZvciBzZWN1cml0eSBhc3BlY3RzLiAgSXQgaXMgYWR2aXNlZCB0 byBkaXNhYmxlIGFueSBURlRQIHdyaXRlIGFjY2VzcyEKKworVGhlIGluc3RhbGxlciBjYW4gYWxz byBiZSB1c2VkIHRvIHByZXBhcmUgYm9vdGluZyBmcm9tIGxvY2FsIHN0b3JhZ2VzLCBpZiB0aGUK K3VuZGVybHlpbmcgZmlsZS1zeXN0ZW0sIGxpa2UgRkFUIG9uIGFuIEVGSSBTeXN0ZW0gUGFydGl0 aW9uIChFU1ApLCBkb2VzIG5vdAorc3VwcG9ydCBzeW1saW5rcy4gIEluIHRoaXMgY2FzZSB0aGUg TU9VTlQtUE9JTlQvVEFSR0VUL1NVQkRJUi9ncnViLmNmZyB3aWxsIGJlCitjcmVhdGVkIHdpdGgg dGhlIGhlbHAgb2YgR1JVQi1FRkkgdG8gbG9hZCB0aGUgL2Jvb3QvZ3J1Yi9ncnViLmNmZyBmaWxl LiAgQQorc3ltbGluayB0byB0aGUgc3RvcmUgaXMgbm90IG5lZWRlZCBpbiB0aGlzIGNhc2UuIgor ICAgICAgICA7OyBJbiBjb250ZXh0IG9mIGEgZGlzayBpbWFnZSBjcmVhdGlvbiBUQVJHRVQgd2ls bCBiZSAjZiBhbmQgYW4KKyAgICAgICAgOzsgaW5zdGFsbGVyIGlzIGV4cGVjdGVkIHRvIGRvIG5l Y2Vzc2FyeSBpbnN0YWxsYXRpb25zIG9uIE1PVU5ULVBPSU5ULAorICAgICAgICA7OyB3aGljaCB3 aWxsIGJlY29tZSB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgOzsgSWYgVEFSR0VUIGlz ICNmLCB0aGlzIGluc3RhbGxlciBoYXMgbm90aGluZyB0byBkbywgYXMgaXQgb25seSBjYXJlcwor ICAgICAgICA7OyBhYm91dCB0aGUgRUZJIFN5c3RlbSBQYXJ0aXRpb24gKEVTUCkuCisgICAgICAg ICh3aGVuIHRhcmdldAorICAgICAgICAgICh1c2UtbW9kdWxlcyAoKGd1aXggYnVpbGQgdW5pb24p ICM6c2VsZWN0IChzeW1saW5rLXJlbGF0aXZlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGlj ZS05IHBvcGVuKQorICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgcmRlbGltKSkKKyAgICAg ICAgICAobGV0KiAoKG1vdW50LXBvaW50L3RhcmdldCAoc3RyaW5nLWFwcGVuZCBtb3VudC1wb2lu dCB0YXJnZXQgIi8iKSkKKyAgICAgICAgICAgICAgICAgOzsgV2hlbiBpbnN0YWxsaW5nIEd1aXgs IGl0IGlzIGNvbW1vbiB0byBtb3VudCBUQVJHRVQgYmVsb3cKKyAgICAgICAgICAgICAgICAgOzsg TU9VTlQtUE9JTlQgcmF0aGVyIHRoYW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAgICAg ICAgICAoYm9vdGxvYWRlci10YXJnZXQgKGlmIChmaWxlLWV4aXN0cz8gbW91bnQtcG9pbnQvdGFy Z2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50LXBvaW50 L3RhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCkp CisgICAgICAgICAgICAgICAgIChzdG9yZSAoc3RyaW5nLWFwcGVuZCBtb3VudC1wb2ludCAoJXN0 b3JlLXByZWZpeCkpKQorICAgICAgICAgICAgICAgICAoc3RvcmUtbGluayAoc3RyaW5nLWFwcGVu ZCBib290bG9hZGVyLXRhcmdldCAoJXN0b3JlLXByZWZpeCkpKQorICAgICAgICAgICAgICAgICAo Z3J1Yi1jZmcgKHN0cmluZy1hcHBlbmQgbW91bnQtcG9pbnQgIyRncnViLWNmZykpCisgICAgICAg ICAgICAgICAgIChncnViLWNmZy1saW5rIChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXItdGFyZ2V0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMkc3ViZGly ICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFz ZW5hbWUgZ3J1Yi1jZmcpKSkpCisgICAgICAgICAgICA7OyBDb3B5IHRoZSBib290bG9hZGVyIGlu dG8gdGhlIGJvb3Rsb2FkZXItdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDs7IFNob3Vs ZCB3ZSBiZWZvcmVoYW5kIHJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbnkgZXhpc3RpbmcgZmlsZT8KKyAg ICAgICAgICAgIChjb3B5LXJlY3Vyc2l2ZWx5IGJvb3Rsb2FkZXIgYm9vdGxvYWRlci10YXJnZXQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6Zm9sbG93LXN5bWxpbmtzPyAjdAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpsb2cgKCVtYWtlLXZvaWQtcG9ydCAidyIpKQor ICAgICAgICAgICAgOzsgRm9yIFRGVFAgd2UgbmVlZCB0byBpbnN0YWxsIGFkZGl0aW9uYWwgcmVs YXRpdmUgc3ltbGlua3MuCisgICAgICAgICAgICA7OyBJZiB3ZSBpbnN0YWxsIG9uIGFuIEVGSSBT eXN0ZW0gUGFydGl0aW9uIChFU1ApIG9yIHNvbWUgb3RoZXIgRkFUCisgICAgICAgICAgICA7OyBm aWxlLXN5c3RlbSwgdGhlbiBzeW1saW5rcyBjYW5ub3QgYmUgY3JlYXRlZCBhbmQgYXJlIG5vdCBu ZWVkZWQuCisgICAgICAgICAgICA7OyBUaGVyZWZvcmUgd2UgaWdub3JlIGV4Y2VwdGlvbnMgd2hl biB0cnlpbmcuCisgICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBncnVi LmNmZy4KKyAgICAgICAgICAgIChta2Rpci1wIChkaXJuYW1lIGdydWItY2ZnLWxpbmspKQorICAg ICAgICAgICAgKGZhbHNlLWlmLWV4Y2VwdGlvbiAoZGVsZXRlLWZpbGUgZ3J1Yi1jZmctbGluaykp CisgICAgICAgICAgICAoaWYgKHVuc3BlY2lmaWVkPworICAgICAgICAgICAgICAgIChmYWxzZS1p Zi1leGNlcHRpb24gKHN5bWxpbmstcmVsYXRpdmUgZ3J1Yi1jZmcgZ3J1Yi1jZmctbGluaykpKQor ICAgICAgICAgICAgICA7OyBTeW1saW5rcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAo YmVnaW4KKyAgICAgICAgICAgICAgICA7OyBQcmVwYXJlIHRoZSBzeW1saW5rIHRvIHRoZSBzdG9y ZS4KKyAgICAgICAgICAgICAgICAobWtkaXItcCAoZGlybmFtZSBzdG9yZS1saW5rKSkKKyAgICAg ICAgICAgICAgICAoZmFsc2UtaWYtZXhjZXB0aW9uIChkZWxldGUtZmlsZSBzdG9yZS1saW5rKSkK KyAgICAgICAgICAgICAgICAoc3ltbGluay1yZWxhdGl2ZSBzdG9yZSBzdG9yZS1saW5rKSkKKyAg ICAgICAgICAgICAgOzsgQ3JlYXRpbmcgc3ltbGlua3MgZG9lcyBub3Qgc2VlbSB0byBiZSBzdXBw b3J0ZWQuCisgICAgICAgICAgICAgIDs7IFByb2JhYmx5IGFuIEVTUCBpcyB1c2VkLgorICAgICAg ICAgICAgICA7OyBJbnN0ZWFkIHdlIGNhbiBzY3JpcHQgdG8gc2VhcmNoIGFuZCBsb2FkIHRoZSBh Y3R1YWwgZ3J1Yi5jZmcuCisgICAgICAgICAgICAgIChsZXQqICgocHJvYmUgIyQoZmlsZS1hcHBl bmQgZ3J1Yi1lZmkgIi9zYmluL2dydWItcHJvYmUiKSkKKyAgICAgICAgICAgICAgICAgICAgIChw b3J0CisgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLXBpcGUqIE9QRU5fUkVBRCBwcm9iZSAi LS10YXJnZXQ9ZnNfdXVpZCIgZ3J1Yi1jZmcpKQorICAgICAgICAgICAgICAgICAgICAgKHNlYXJj aC1yb290CisgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCAocmVhZC1saW5lIHBvcnQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgKCg/IGVvZi1vYmplY3Q/KQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgVGhlcmUgaXMgbm8gVVVJRCBhdmFpbGFibGUuIEFzIGEgZmFsbGJhY2sg c2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBldmVyeXdoZXJlIGZvciB0aGUg Z3J1Yi5jZmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAic2Vh cmNoIC0tZmlsZSAtLXNldCAiICMkZ3J1Yi1jZmcpKQorICAgICAgICAgICAgICAgICAgICAgICAg IChmcy11dWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBUaGUgVVVJRCB0byBsb2Fk IHRoZSBncnViLmNmZyBmcm9tIGlzIGtub3duLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgInNlYXJjaCAtLWZzLXV1aWQgLS1zZXQgIiBmcy11dWlkKSkpKQorICAg ICAgICAgICAgICAgICAgICAgKGxvYWQtZ3J1Yi1jZmcgKHN0cmluZy1hcHBlbmQgImNvbmZpZ2Zp bGUgIiAjJGdydWItY2ZnKSkpCisgICAgICAgICAgICAgICAgKGNsb3NlLXBpcGUgcG9ydCkKKyAg ICAgICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tZmlsZSBncnViLWNmZy1saW5rCisgICAgICAg ICAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5IChzdHJp bmctam9pbiAobGlzdCBzZWFyY2gtcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9hZC1ncnViLWNmZykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJcbiIpKSkpKSkpKSkpKQogCiAMCiAKQEAgLTcxOCw3ICs3NTks NyBAQCAoZGVmaW5lIGdydWItYm9vdGxvYWRlcgogICAgKHBhY2thZ2UgZ3J1YikKICAgIChpbnN0 YWxsZXIgaW5zdGFsbC1ncnViKQogICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyIGluc3RhbGwtZ3J1 Yi1kaXNrLWltYWdlKQotICAgKGNvbmZpZ3VyYXRpb24tZmlsZSAiL2Jvb3QvZ3J1Yi9ncnViLmNm ZyIpCisgICAoY29uZmlndXJhdGlvbi1maWxlIGdydWItY2ZnKQogICAgKGNvbmZpZ3VyYXRpb24t ZmlsZS1nZW5lcmF0b3IgZ3J1Yi1jb25maWd1cmF0aW9uLWZpbGUpKSkKIAogKGRlZmluZSBncnVi LW1pbmltYWwtYm9vdGxvYWRlcgpAQCAtNzI4LDE3ICs3NjksMjkgQEAgKGRlZmluZSBncnViLW1p bmltYWwtYm9vdGxvYWRlcgogCiAoZGVmaW5lIGdydWItZWZpLWJvb3Rsb2FkZXIKICAgKGJvb3Rs b2FkZXIKLSAgIChpbmhlcml0IGdydWItYm9vdGxvYWRlcikKKyAgIChuYW1lICdncnViLWVmaSkK KyAgIChwYWNrYWdlIGdydWItZWZpKQogICAgKGluc3RhbGxlciBpbnN0YWxsLWdydWItZWZpKQog ICAgKGRpc2staW1hZ2UtaW5zdGFsbGVyICNmKQotICAgKG5hbWUgJ2dydWItZWZpKQotICAgKHBh Y2thZ2UgZ3J1Yi1lZmkpKSkKKyAgIChjb25maWd1cmF0aW9uLWZpbGUgZ3J1Yi1jZmcpCisgICAo Y29uZmlndXJhdGlvbi1maWxlLWdlbmVyYXRvciBncnViLWNvbmZpZ3VyYXRpb24tZmlsZSkpKQog Ci0oZGVmaW5lIGdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlcgorKGRlZmluZSAobWFrZS1ncnVi LWVmaS1uZXRib290LWJvb3Rsb2FkZXIgbmFtZSBzdWJkaXIpCiAgIChib290bG9hZGVyCi0gICAo aW5oZXJpdCBncnViLWVmaS1ib290bG9hZGVyKQotICAgKG5hbWUgJ2dydWItZWZpLW5ldGJvb3Qt Ym9vdGxvYWRlcikKLSAgIChpbnN0YWxsZXIgKGluc3RhbGwtZ3J1Yi1lZmktbmV0Ym9vdCAiZWZp L0d1aXgiKSkpKQorICAgKG5hbWUgbmFtZSkKKyAgIChwYWNrYWdlIChtYWtlLWdydWItZWZpLW5l dGJvb3QgKHN5bWJvbC0+c3RyaW5nIG5hbWUpIHN1YmRpcikpCisgICAoaW5zdGFsbGVyIChtYWtl LWdydWItZWZpLW5ldGJvb3QtaW5zdGFsbGVyIGdydWItZWZpIGdydWItY2ZnIHN1YmRpcikpCisg ICAoZGlzay1pbWFnZS1pbnN0YWxsZXIgI2YpCisgICAoY29uZmlndXJhdGlvbi1maWxlIGdydWIt Y2ZnKQorICAgKGNvbmZpZ3VyYXRpb24tZmlsZS1nZW5lcmF0b3IgZ3J1Yi1lZmktY29uZmlndXJh dGlvbi1maWxlKSkpCisKKyhkZWZpbmUgZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVyCisgICht YWtlLWdydWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlciAnZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9h ZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWZpL0d1aXgiKSkKKwor KGRlZmluZSBncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyCisgIChtYWtlLWdy dWItZWZpLW5ldGJvb3QtYm9vdGxvYWRlciAnZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9v dGxvYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVmaS9ib290Iikp CiAKIChkZWZpbmUgZ3J1Yi1ta3Jlc2N1ZS1ib290bG9hZGVyCiAgIChib290bG9hZGVyCmRpZmYg LS1naXQgYS9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtIGIvZ251L3BhY2thZ2VzL2Jvb3Rs b2FkZXJzLnNjbQppbmRleCA3ZWE2ZjVhNjQ3Li42ODc2YWIxN2I5IDEwMDY0NAotLS0gYS9nbnUv cGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5z Y20KQEAgLTE1LDYgKzE1LDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAyMCwgMjAyMSBQaWVycmUg TGFuZ2xvaXMgPHBpZXJyZS5sYW5nbG9pc0BnbXguY29tPgogOzs7IENvcHlyaWdodCDCqSAyMDIx IFZpbmNlbnQgTGVnb2xsIDx2aW5jZW50LmxlZ29sbEBnbWFpbC5jb20+CiA7OzsgQ29weXJpZ2h0 IMKpIDIwMjEgQnJpY2UgV2FlZ2VuZWlyZSA8YnJpY2VAd2FlZ2VuZWkucmU+Cis7OzsgQ29weXJp Z2h0IMKpIDIwMjEgU3RlZmFuIDxzdGVmYW4tZ3VpeEB2b2RhZm9uZW1haWwuZGU+CiA7OzsKIDs7 OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtNjYsMTMgKzY3LDE3IEBA IChkZWZpbmUtbW9kdWxlIChnbnUgcGFja2FnZXMgYm9vdGxvYWRlcnMpCiAgICM6dXNlLW1vZHVs ZSAoZ251IHBhY2thZ2VzIHZpcnR1YWxpemF0aW9uKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNr YWdlcyB4b3JnKQogICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdudSkKKyAgIzp1 c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSB0cml2aWFsKQogICAjOnVzZS1tb2R1bGUgKGd1 aXggZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhwKQogICAjOnVzZS1tb2R1bGUg KGd1aXggZ2l0LWRvd25sb2FkKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGxpY2Vuc2VzKSAjOnBy ZWZpeCBsaWNlbnNlOikKICAgIzp1c2UtbW9kdWxlIChndWl4IHBhY2thZ2VzKQogICAjOnVzZS1t b2R1bGUgKGd1aXggdXRpbHMpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTEpCiAgICM6dXNl LW1vZHVsZSAoc3JmaSBzcmZpLTI2KQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAj OnVzZS1tb2R1bGUgKGljZS05IG9wdGFyZ3MpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVnZXgp KQogCiAoZGVmaW5lIHVuaWZvbnQKQEAgLTM2Niw2ICszNzEsOTEgQEAgKGRlZmluZS1wdWJsaWMg Z3J1Yi1oeWJyaWQKICAgICAgICAgICAgICAgICAgIChzY2FuZGlyIGlucHV0LWRpcikpCiAgICAg ICAgICAgICAgICAgICN0KSkpKSkpKSkpCiAKKyhkZWZpbmUtcHVibGljIChtYWtlLWdydWItZWZp LW5ldGJvb3QgbmFtZSBzdWJkaXIpCisgICJNYWtlIGEgZ3J1Yi1lZmktbmV0Ym9vdCBwYWNrYWdl IG5hbWVkIE5BTUUsIHdoaWNoIHdpbGwgYmUgYWJsZSB0byBib290IG92ZXIKK25ldHdvcmsgdmlh IFRGVFAgYnkgYWNjZXNzaW5nIGl0cyBmaWxlcyBpbiB0aGUgU1VCRElSIG9mIGEgVEZUUCByb290 IGRpcmVjdG9yeS4KK1RoaXMgcGFja2FnZSBpcyBhbHNvIGFibGUgdG8gYm9vdCBmcm9tIGxvY2Fs IHN0b3JhZ2UgZGV2aWNlcy4KKworQSBib290bG9hZGVyLWluc3RhbGxlciBiYXNpY2FsbHkgbmVl ZHMgdG8gY29weSB0aGUgcGFja2FnZSBjb250ZW50IGludG8gdGhlCitib290bG9hZGVyLXRhcmdl dCBkaXJlY3RvcnksIHdoaWNoIHdpbGwgdXN1YWxseSBiZSB0aGUgVEZUUCByb290LCBhcworJ2dy dWItbWtuZXRkaXInIHdpbGwgYmUgaW52b2tlZCBhbHJlYWR5IGR1cmluZyB0aGUgcGFja2FnZSBj cmVhdGlvbi4KKworQWx0ZXJuYXRpdmVseSB0aGUgYm9vdGxvYWRlci10YXJnZXQgZGlyZWN0b3J5 IGNhbiBiZSBhIG1vdW50ZWQgRUZJIFN5c3RlbQorUGFydGl0aW9uIChFU1ApLCBvciBhIHNpbWls YXIgcGFydGl0aW9uIHdpdGggYSBGQVQgZmlsZSBzeXN0ZW0sIGZvciBib290aW5nCitmcm9tIGxv Y2FsIHN0b3JhZ2UgZGV2aWNlcy4KKworVGhlIG5hbWUgb2YgdGhlIEdSVUIgRUZJIGJpbmFyeSB3 aWxsIGNvbmZvcm0gdG8gdGhlIFVFRkkgc3BlY2lmaWNhdGlvbiBmb3IKK3JlbW92YWJsZSBtZWRp YS4gIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIGl0IHdpbGwgYmUgZS5nLiBib290eDY0LmVmaSBv cgorYm9vdGFhNjQuZWZpIGJlbG93IFNVQkRJUi4KKworVGhlIFNVQkRJUiBhcmd1bWVudCBuZWVk cyB0byBiZSBzZXQgdG8gXCJlZmkvYm9vdFwiIHRvIGNyZWF0ZSBhIHBhY2thZ2Ugd2hpY2gKK2Nv bmZvcm1zIHRvIHRoZSBVRUZJIHNwZWNpZmljYXRpb24gZm9yIHJlbW92YWJsZSBtZWRpYS4KKwor VGhlIFNVQkRJUiBhcmd1bWVudCBkZWZhdWx0cyB0byBcImVmaS9HdWl4XCIsIGFzIGl0IGlzIGFs c28gdGhlIGNhc2UgZm9yCisnZ3J1Yi1lZmktYm9vdGxvYWRlcicuIgorICAocGFja2FnZQorICAg IChuYW1lIG5hbWUpCisgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVyc2lvbiBncnViLWVmaSkpCisg ICAgOzsgU291cmNlIGlzIG5vdCBuZWVkZWQsIGJ1dCBpdCBjYW5ub3QgYmUgb21pdHRlZC4KKyAg ICAoc291cmNlICNmKQorICAgIChidWlsZC1zeXN0ZW0gdHJpdmlhbC1idWlsZC1zeXN0ZW0pCisg ICAgKGFyZ3VtZW50cworICAgICAobGV0KiAoKHN5c3RlbSAoc3RyaW5nLXNwbGl0IChuaXgtc3lz dGVtLT5nbnUtdHJpcGxldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAo JWN1cnJlbnQtdGFyZ2V0LXN5c3RlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCVjdXJyZW50LXN5c3RlbSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICNcLSkpCisgICAgICAgICAgICAoYXJjaCAoZmlyc3Qgc3lzdGVtKSkKKyAgICAgICAgICAg IChib290LWVmaQorICAgICAgICAgICAgIChtYXRjaCBzeXN0ZW0KKyAgICAgICAgICAgICAgIDs7 IFRoZXNlIGFyZSB0aGUgc3VwcG9ydGVuZCBzeXN0ZW1zIGFuZCB0aGUgbmFtZXMgZGVmaW5lZCBi eQorICAgICAgICAgICAgICAgOzsgdGhlIFVFRkkgc3RhbmRhcmQgZm9yIHJlbW92YWJsZSBtZWRp YS4KKyAgICAgICAgICAgICAgICgoImk2ODYiIF8gLi4uKSAgICAgICAgIi9ib290aWEzMi5lZmki KQorICAgICAgICAgICAgICAgKCgieDg2XzY0IiBfIC4uLikgICAgICAiL2Jvb3R4NjQuZWZpIikK KyAgICAgICAgICAgICAgICgoImFybSIgXyAuLi4pICAgICAgICAgIi9ib290YXJtLmVmaSIpCisg ICAgICAgICAgICAgICAoKCJhYXJjaDY0IiBfIC4uLikgICAgICIvYm9vdGFhNjQuZWZpIikKKyAg ICAgICAgICAgICAgICgoInJpc2N2IiBfIC4uLikgICAgICAgIi9ib290cmlzY3YzMi5lZmkiKQor ICAgICAgICAgICAgICAgKCgicmlzY3Y2NCIgXyAuLi4pICAgICAiL2Jvb3RyaXNjdjY0LmVmaSIp CisgICAgICAgICAgICAgICA7OyBPdGhlciBzeXN0ZW1zIGFyZSBub3Qgc3VwcG9ydGVkLCBhbHRo b3VnaCBkZWZpbmVkLgorICAgICAgICAgICAgICAgOzsgKCgicmlzY3YxMjgiIF8gLi4uKSAiL2Jv b3RyaXNjdjEyOC5lZmkiKQorICAgICAgICAgICAgICAgOzsgKCgiaWE2NCIgXyAuLi4pICAgICAi L2Jvb3RpYTY0LmVmaSIpCisgICAgICAgICAgICAgICAoKF8gLi4uKSAgICAgICAgICAgICAgICNm KSkpCisgICAgICAgICAgICAoY29yZS1lZmkgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAgICAg ICAgICAgICAgOzsgVGhpcyBpcyB0aGUgYXJjaCBkZXBlbmRlbnQgZmlsZSBuYW1lIG9mIEdSVUIs IGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgOzsgaTM2OC1lZmkvY29yZS5lZmkgb3IgYXJt NjQtZWZpL2NvcmUuZWZpLgorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2ggYXJjaAorICAg ICAgICAgICAgICAgICAgICAgICAgICgiaTY4NiIgICAgImkzODYiKQorICAgICAgICAgICAgICAg ICAgICAgICAgICgiYWFyY2g2NCIgImFybTY0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAo InJpc2N2IiAgICJyaXNjdjMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoXyAgICAgICAg IGFyY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAiLWVmaS9jb3JlLmVmaSIpKSkKKyAgICAg ICBgKCM6bW9kdWxlcyAoKGd1aXggYnVpbGQgdXRpbHMpKQorICAgICAgICAgIzpidWlsZGVyCisg ICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgKHVzZS1tb2R1bGVzIChndWl4IGJ1aWxkIHV0aWxz KSkKKyAgICAgICAgICAgKGxldCogKChib290bG9hZGVyIChhc3NvYy1yZWYgJWJ1aWxkLWlucHV0 cyAiZ3J1Yi1lZmkiKSkKKyAgICAgICAgICAgICAgICAgIChuZXQtZGlyIChhc3NvYy1yZWYgJW91 dHB1dHMgIm91dCIpKQorICAgICAgICAgICAgICAgICAgKHN1Yi1kaXIgKHN0cmluZy1hcHBlbmQg bmV0LWRpciAiLyIgLHN1YmRpciAiLyIpKQorICAgICAgICAgICAgICAgICAgKGJvb3QtZWZpIChz dHJpbmctYXBwZW5kIHN1Yi1kaXIgLGJvb3QtZWZpKSkKKyAgICAgICAgICAgICAgICAgIChjb3Jl LWVmaSAoc3RyaW5nLWFwcGVuZCBzdWItZGlyICxjb3JlLWVmaSkpKQorICAgICAgICAgICAgIDs7 IEluc3RhbGwgR1JVQiwgd2hpY2ggcmVmZXJzIHRvIHRoZSBncnViLmNmZywgd2l0aCBzdXBwb3J0 IGZvcgorICAgICAgICAgICAgIDs7IGVuY3J5cHRlZCBwYXJ0aXRpb25zLAorICAgICAgICAgICAg IChzZXRlbnYgIkdSVUJfRU5BQkxFX0NSWVBUT0RJU0siICJ5IikKKyAgICAgICAgICAgICAoaW52 b2tlL3F1aWV0IChzdHJpbmctYXBwZW5kIGJvb3Rsb2FkZXIgIi9iaW4vZ3J1Yi1ta25ldGRpciIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLS1uZXQtZGlyZWN0 b3J5PSIgbmV0LWRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k ICItLXN1YmRpcj0iICxzdWJkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBUaGVz ZSBtb2R1bGVzIG11c3QgYmUgcHJlbG9hZGVkIHRvIGFsbG93IGJvb3RpbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IGZyb20gYW4gRVNQIG9yIGEgc2ltaWxhciBwYXJ0aXRpb24gd2l0 aCBhIEZBVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgZmlsZSBzeXN0ZW0uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLS1tb2R1bGVzPXBhcnRfbXNk b3MgcGFydF9ncHQgZmF0IikpCisgICAgICAgICAgICAgOzsgTW92ZSBHUlVCJ3MgY29yZS5lZmkg dG8gdGhlIHJlbW92YWJsZSBtZWRpYSBuYW1lLgorICAgICAgICAgICAgIChmYWxzZS1pZi1leGNl cHRpb24gKGRlbGV0ZS1maWxlIGJvb3QtZWZpKSkKKyAgICAgICAgICAgICAocmVuYW1lLWZpbGUg Y29yZS1lZmkgYm9vdC1lZmkpKSkpKSkKKyAgICAoaW5wdXRzIGAoKCJncnViLWVmaSIgLGdydWIt ZWZpKSkpCisgICAgKHN5bm9wc2lzIChwYWNrYWdlLXN5bm9wc2lzIGdydWItZWZpKSkKKyAgICAo ZGVzY3JpcHRpb24gKHBhY2thZ2UtZGVzY3JpcHRpb24gZ3J1Yi1lZmkpKQorICAgIChob21lLXBh Z2UgKHBhY2thZ2UtaG9tZS1wYWdlIGdydWItZWZpKSkKKyAgICAobGljZW5zZSAocGFja2FnZS1s aWNlbnNlIGdydWItZWZpKSkpKQorCiAoZGVmaW5lLXB1YmxpYyBzeXNsaW51eAogICAobGV0ICgo Y29tbWl0ICJiYjQxZTkzNWNjODNjNjI0MmRlMjRkMjI3MWUwNjdkNzZhZjM1ODVjIikpCiAgICAg KHBhY2thZ2UKLS0gCjIuMzQuMAoK --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0003-gnu-bootloader-Add-U-Boot-packages-for-Raspberry-.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0003-gnu-bootloader-Add-U-Boot-packages-for-Raspberry-.patch RnJvbSBmNmUwMWRiMDU4MWFkN2MyOTFhMjBmNWE4YjE1YmQ1OTI1YmE3MGFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxMToyMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg My84XSBnbnU6IGJvb3Rsb2FkZXI6IEFkZCBVLUJvb3QgcGFja2FnZXMgZm9yIFJhc3BiZXJyeSBQ aQogbW9kZWxzLgoKKiBnbnUvcGFja2FnZXMvYm9vdGxvYWRlci5zY20gKG1ha2UtdS1ib290LXBh Y2thZ2UpOiBBZGQga2V5d29yZApwYXJhbWV0ZXJzICduYW1lJyBhbmQgJ2Rlc2NyaXB0aW9uJy4K KG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlKTogTmV3IGZ1bmN0aW9uIHRvIG1ha2Ug bWluaW1hbCBwYWNrYWdlcy4KKCV1LWJvb3QtcnBpLWVmaS1jb25maWdzKTogTmV3IGhlbHBlciBs aXN0IHdpdGggY29uZmlnIHN0cmluZ3MuCigldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQs ICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTY0LWJpdCwKJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0 aW9uLCAldS1ib290LXJwaS1lZmktZGVzY3JpcHRpb24tMzItYml0KTogTmV3IGhlbHBlcgpzdHJp bmdzLgoodS1ib290LXJwaS0wLXcsIHUtYm9vdC1ycGksIHUtYm9vdC1ycGktMiwgdS1ib290LXJw aS0zLCB1LWJvb3QtcnBpLTQsCnUtYm9vdC1ycGktNjQsIHUtYm9vdC1ycGktMC13LWVmaSwgdS1i b290LXJwaS1lZmksIHUtYm9vdC1ycGktMi1lZmksCnUtYm9vdC1ycGktMy1lZmksIHUtYm9vdC1y cGktNC1lZmksIHUtYm9vdC1ycGktZWZpLTY0KTogTmV3IHBhY2thZ2VzLgoKZGlmZiAtLWdpdCBh L2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20gYi9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMu c2NtCmluZGV4IDEwZjJkZDVmYWQuLjg0ZDY1Yzk0Y2QgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdl cy9ib290bG9hZGVycy5zY20KKysrIGIvZ251L3BhY2thZ2VzL2Jvb3Rsb2FkZXJzLnNjbQpAQCAt NzQ4LDE3ICs3NDgsMzAgQEAgKGRlZmluZS1wdWJsaWMgdS1ib290LXRvb2xzCiBhbHNvIGluaXRp YWxpemVzIHRoZSBib2FyZHMgKFJBTSBldGMpLiAgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGl0cwog Ym9hcmQtaW5kZXBlbmRlbnQgdG9vbHMuIikpKQogCi0oZGVmaW5lKi1wdWJsaWMgKG1ha2UtdS1i b290LXBhY2thZ2UgYm9hcmQgdHJpcGxldCAjOmtleSBkZWZjb25maWcgY29uZmlncykKKyhkZWZp bmUqLXB1YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRyaXBsZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjOmtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmNv bmZpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3MKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24pCiAgICJSZXR1cm5zIGEgdS1ib290IHBhY2th Z2UgZm9yIEJPQVJEIGNyb3NzLWNvbXBpbGVkIGZvciBUUklQTEVUIHdpdGggdGhlCi1vcHRpb25h bCBERUZDT05GSUcgZmlsZSBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZyb20g Q09ORklHUy4iCitvcHRpb25hbCBERUZDT05GSUcgZmlsZSBhbmQgb3B0aW9uYWwgY29uZmlndXJh dGlvbiBjaGFuZ2VzIGZyb20gQ09ORklHUy4KK0VpdGhlciBOQU1FLCBpZiB1c2VkLCBvciBvdGhl cndpc2UgQk9BUkQgd2lsbCBiZSBwYXJ0IG9mIHRoZSBwYWNrYWdlIG5hbWUuCitERVNDUklQVElP TiB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uLiIKICAgKGxldCAo KHNhbWUtYXJjaD8gKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyAo JWN1cnJlbnQtc3lzdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ251LXRy aXBsZXQtPm5peC1zeXN0ZW0gdHJpcGxldCkpKSkpCiAgICAgKHBhY2thZ2UKICAgICAgIChpbmhl cml0IHUtYm9vdCkKICAgICAgIChuYW1lIChzdHJpbmctYXBwZW5kICJ1LWJvb3QtIgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1yZXBsYWNlLXN1YnN0cmluZyAoc3RyaW5nLWRv d25jYXNlIGJvYXJkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXyIgIi0iKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LXJlcGxhY2Utc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1k b3duY2FzZSAob3IgbmFtZSBib2FyZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl8i ICItIikpKQorICAgICAgKGRlc2NyaXB0aW9uIChpZiBkZXNjcmlwdGlvbgorICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAocGFja2FnZS1kZXNjcmlwdGlvbiB1LWJvb3QpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIgZGVzY3JpcHRpb24pCisg ICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2NyaXB0aW9uIHUtYm9vdCkpKQogICAg ICAgKG5hdGl2ZS1pbnB1dHMKICAgICAgICBgKCxAKGlmIChub3QgKHNhbWUtYXJjaD8pKQogICAg ICAgICAgICAgIGAoKCJjcm9zcy1nY2MiICwoY3Jvc3MtZ2NjIHRyaXBsZXQpKQpAQCAtMTExNyw2 ICsxMTMwLDE1NyBAQCAoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcGluZWJvb2stcHJvLXJrMzM5OQog ICAgICAgIGAoKCJmaXJtd2FyZSIgLGFybS10cnVzdGVkLWZpcm13YXJlLXJrMzM5OSkKICAgICAg ICAgICxAKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBiYXNlKSkpKSkpCiAKKyhkZWZpbmUqLXB1Ymxp YyAobWFrZS1wcmVpbnN0YWxsZWQtdS1ib290LXBhY2thZ2UgYm9hcmQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpcGxldAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmtleQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb25maWcKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlncworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1LWJvb3Qt ZmlsZSAidS1ib290LmJpbiIpKQorICAiUmV0dXJucyBhIHBhY2thZ2Ugd2l0aCBhIHNpbmdsZSBV LUJPT1QtRklMRSBmb3IgQk9BUkQgY3Jvc3MtY29tcGlsZWQgZm9yCitUUklQTEVUIHdpdGggdGhl IG9wdGlvbmFsIERFRkNPTkZJRyBmaWxlIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGNoYW5n ZXMKK2Zyb20gQ09ORklHUy4gIEVpdGhlciBOQU1FLCBpZiB1c2VkLCBvciBvdGhlcndpc2UgQk9B UkQgd2lsbCBiZSBwYXJ0IG9mIHRoZQorcGFja2FnZSBuYW1lLiAgREVTQ1JJUFRJT04gd2lsbCBi ZSBhcHBlbmRlZCB0byB0aGUgcGFja2FnZSBkZXNjcmlwdGlvbi4iCisgIChsZXQqICgobmFtZS1z dWZmaXggIi1jb21wbGV0ZSIpCisgICAgICAgICAodS1ib290LXBhY2thZ2UgKG1ha2UtdS1ib290 LXBhY2thZ2UgYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0cmlwbGV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzpkZWZjb25maWcgZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIzpjb25maWdzIGNvbmZpZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjOm5hbWUgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBuYW1lIGJvYXJk KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZS1zdWZmaXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzpkZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikpKQorICAgIChwYWNrYWdlCisgICAgICAobmFt ZSAoc3RyaW5nLWRyb3AtcmlnaHQgKHBhY2thZ2UtbmFtZSB1LWJvb3QtcGFja2FnZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWxlbmd0aCBuYW1lLXN1ZmZpeCkpKQor ICAgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVyc2lvbiB1LWJvb3QtcGFja2FnZSkpCisgICAgICAo c291cmNlICNmKQorICAgICAgKGJ1aWxkLXN5c3RlbSB0cml2aWFsLWJ1aWxkLXN5c3RlbSkKKyAg ICAgIChhcmd1bWVudHMKKyAgICAgICBgKCM6YnVpbGRlcgorICAgICAgICAgKGJlZ2luCisgICAg ICAgICAgIChsZXQgKChvdXQgKGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikpKQorICAgICAgICAg ICAgIChta2RpciBvdXQpCisgICAgICAgICAgICAgKHN5bWxpbmsgKHN0cmluZy1hcHBlbmQgKGFz c29jLXJlZiAlYnVpbGQtaW5wdXRzICJ1LWJvb3QiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiL2xpYmV4ZWMvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsdS1ib290LWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgb3V0 ICIvIiAsdS1ib290LWZpbGUpKSkpKSkKKyAgICAgIChpbnB1dHMgYCgoInUtYm9vdCIgLHUtYm9v dC1wYWNrYWdlKSkpCisgICAgICAoaG9tZS1wYWdlIChwYWNrYWdlLWhvbWUtcGFnZSB1LWJvb3Qt cGFja2FnZSkpCisgICAgICAoc3lub3BzaXMgKHBhY2thZ2Utc3lub3BzaXMgdS1ib290LXBhY2th Z2UpKQorICAgICAgKGRlc2NyaXB0aW9uIChwYWNrYWdlLWRlc2NyaXB0aW9uIHUtYm9vdC1wYWNr YWdlKSkKKyAgICAgIChsaWNlbnNlIChwYWNrYWdlLWxpY2Vuc2UgdS1ib290LXBhY2thZ2UpKSkp KQorCisoZGVmaW5lLXB1YmxpYyAldS1ib290LXJwaS1lZmktY29uZmlncworICAnKCJDT05GSUdf T0ZfRU1CRUQ9IgorICAgICJDT05GSUdfT0ZfQk9BUkQ9eSIKKyAgICAiQ09ORklHX0JPT1RERUxB WT0wIikpCisKKyhkZWZpbmUgJXUtYm9vdC1ycGktZGVzY3JpcHRpb24tMzItYml0CisgICJUaGlz IGlzIGEgMzItYml0IGJ1aWxkIG9mIFUtQm9vdC4iKQorCisoZGVmaW5lICV1LWJvb3QtcnBpLWRl c2NyaXB0aW9uLTY0LWJpdAorICAiVGhpcyBpcyBhIGNvbW1vbiA2NC1iaXQgYnVpbGQgb2YgVS1C b290IGZvciBhbGwgNjQtYml0IGNhcGFibGUgUmFzcGJlcnJ5IFBpCit2YXJpYW50cy4iKQorCiso ZGVmaW5lICV1LWJvb3QtcnBpLWVmaS1kZXNjcmlwdGlvbgorICAiSXQgYWxsb3dzIG5ldHdvcmsg Ym9vdGluZyBhbmQgdXNlcyB0aGUgZGV2aWNlLXRyZWUgZnJvbSB0aGUgZmlybXdhcmUsCithbGxv d2luZyB0aGUgdXNhZ2Ugb2Ygb3ZlcmxheXMuICBJdCBjYW4gYWN0IGFzIGFuIEVGSSBmaXJtd2Fy ZSBmb3IgdGhlCitncnViLWVmaS1uZXRib290LXJlbW92YWJsZS1ib290bG9hZGVyLiIpCisKKyhk ZWZpbmUgJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9uLTMyLWJpdAorICAoc3RyaW5nLWFwcGVu ZCAldS1ib290LXJwaS1lZmktZGVzY3JpcHRpb24gIiAgIgorICAgICAgICAgICAgICAgICAldS1i b290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBp LTAtdworICAobWFrZS1wcmVpbnN0YWxsZWQtdS1ib290LXBhY2thZ2UKKyAgICJycGlfMF93Igor ICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWRl c2NyaXB0aW9uLTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGkKKyAgKG1ha2Ut cHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpIgorICAgImFybS1saW51eC1nbnVl YWJpaGYiCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTMyLWJpdCkp CisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktMgorICAobWFrZS1wcmVpbnN0YWxsZWQtdS1i b290LXBhY2thZ2UKKyAgICJycGlfMiIKKyAgICJhcm0tbGludXgtZ251ZWFiaWhmIgorICAgIzpk ZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCisoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtcnBpLTMKKyAgKG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisg ICAicnBpXzNfMzJiIgorICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS0z IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1iaXQpKQorCiso ZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTQKKyAgKG1ha2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1w YWNrYWdlCisgICAicnBpXzRfMzJiIgorICAgImFybS1saW51eC1nbnVlYWJpaGYiCisgICAjOm5h bWUgInJwaS00IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlwdGlvbi0zMi1i aXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTY0CisgIChtYWtlLXByZWluc3RhbGxl ZC11LWJvb3QtcGFja2FnZQorICAgInJwaV9hcm02NCIKKyAgICJhYXJjaDY0LWxpbnV4LWdudSIK KyAgICM6bmFtZSAicnBpLTY0IgorICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1kZXNjcmlw dGlvbi02NC1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTAtdy1lZmkKKyAgKG1h a2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzBfdyIKKyAgICJhcm0tbGlu dXgtZ251ZWFiaWhmIgorICAgIzpuYW1lICJycGktMC13LWVmaSIKKyAgICM6Y29uZmlncyAldS1i b290LXJwaS1lZmktY29uZmlncworICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1lZmktZGVz Y3JpcHRpb24tMzItYml0KSkKKworKGRlZmluZS1wdWJsaWMgdS1ib290LXJwaS1lZmkKKyAgKG1h a2UtcHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpIgorICAgImFybS1saW51eC1n bnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS1lZmkiCisgICAjOmNvbmZpZ3MgJXUtYm9vdC1ycGkt ZWZpLWNvbmZpZ3MKKyAgICM6ZGVzY3JpcHRpb24gJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9u LTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktMi1lZmkKKyAgKG1ha2UtcHJl aW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzIiCisgICAiYXJtLWxpbnV4LWdudWVh YmloZiIKKyAgICM6bmFtZSAicnBpLTItZWZpIgorICAgIzpjb25maWdzICV1LWJvb3QtcnBpLWVm aS1jb25maWdzCisgICAjOmRlc2NyaXB0aW9uICV1LWJvb3QtcnBpLWVmaS1kZXNjcmlwdGlvbi0z Mi1iaXQpKQorCisoZGVmaW5lLXB1YmxpYyB1LWJvb3QtcnBpLTMtZWZpCisgIChtYWtlLXByZWlu c3RhbGxlZC11LWJvb3QtcGFja2FnZQorICAgInJwaV8zXzMyYiIKKyAgICJhcm0tbGludXgtZ251 ZWFiaWhmIgorICAgIzpuYW1lICJycGktMy1lZmkiCisgICAjOmNvbmZpZ3MgJXUtYm9vdC1ycGkt ZWZpLWNvbmZpZ3MKKyAgICM6ZGVzY3JpcHRpb24gJXUtYm9vdC1ycGktZWZpLWRlc2NyaXB0aW9u LTMyLWJpdCkpCisKKyhkZWZpbmUtcHVibGljIHUtYm9vdC1ycGktNC1lZmkKKyAgKG1ha2UtcHJl aW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpXzRfMzJiIgorICAgImFybS1saW51eC1n bnVlYWJpaGYiCisgICAjOm5hbWUgInJwaS00LWVmaSIKKyAgICM6Y29uZmlncyAldS1ib290LXJw aS1lZmktY29uZmlncworICAgIzpkZXNjcmlwdGlvbiAldS1ib290LXJwaS1lZmktZGVzY3JpcHRp b24tMzItYml0KSkKKworKGRlZmluZS1wdWJsaWMgdS1ib290LXJwaS1lZmktNjQKKyAgKG1ha2Ut cHJlaW5zdGFsbGVkLXUtYm9vdC1wYWNrYWdlCisgICAicnBpX2FybTY0IgorICAgImFhcmNoNjQt bGludXgtZ251IgorICAgIzpuYW1lICJycGktZWZpLTY0IgorICAgIzpjb25maWdzICV1LWJvb3Qt cnBpLWVmaS1jb25maWdzCisgICAjOmRlc2NyaXB0aW9uIChzdHJpbmctYXBwZW5kICV1LWJvb3Qt cnBpLWVmaS1kZXNjcmlwdGlvbiAiICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICV1LWJvb3QtcnBpLWRlc2NyaXB0aW9uLTY0LWJpdCkpKQorCiAoZGVmaW5lLXB1YmxpYyB2Ym9v dC11dGlscwogICAocGFja2FnZQogICAgIChuYW1lICJ2Ym9vdC11dGlscyIpCi0tIAoyLjM0LjAK Cg== --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0007-gnu-raspberry-pi-New-function-to-make-a-package-w.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0007-gnu-raspberry-pi-New-function-to-make-a-package-w.patch RnJvbSA0MzZiNDU0NGY1MjZiOTZlM2Q2MDAzNjAxNmQxMzFmMTNlNDM5ODQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTozNiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Ny84XSBnbnU6IHJhc3BiZXJyeS1waTogTmV3IGZ1bmN0aW9uIHRvIG1ha2UgYSBwYWNrYWdlIHdp dGgKIGRldmljZS10cmVlIGZpbGVzLgoKKiBnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbSAo bWFrZS1yYXNwaS1iY20yOC1kdGJzKTogTmV3IGZ1bmN0aW9uIHRvIG1ha2UKYSBwYWNrYWdlIHdp dGggZGV2aWNlLXRyZWUgZmlsZXMgZm9yIFJhc3BiZXJyeSBQaSBtb2RlbHMgZnJvbSB0aGUga2Vy bmVsIGdpdmVuCmFzIGFyZ3VtZW50LgoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9yYXNwYmVy cnktcGkuc2NtIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KaW5kZXggMDcwNzUxNmY3 Mi4uZDgwOGY2MWFjMiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20K KysrIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KQEAgLTMwLDYgKzMwLDcgQEAgKGRl ZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcyByYXNwYmVycnktcGkpCiAgICM6dXNlLW1vZHVsZSAo Z251IHBhY2thZ2VzIGZpbGUpCiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGdjYykKICAg Izp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgbGludXgpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBi dWlsZC1zeXN0ZW0gY29weSkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSBnbnUp CiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGdp dC1kb3dubG9hZCkKQEAgLTI5MSw2ICsyOTIsMjYgQEAgKGRlZmluZS1wdWJsaWMgKHJhc3BpLWN1 c3RvbS10eHQgY29udGVudCkKIGNoYXJhY3Rlci4gIEFsdGVybmF0aXZlbHkgQ09OVEVOVCBjYW4g YmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxlIGNvbnRlbnQuIgogICAocmFzcGktY29uZmln LWZpbGUgImN1c3RvbS50eHQiIGNvbnRlbnQpKQogCisoZGVmaW5lLXB1YmxpYyAobWFrZS1yYXNw aS1iY20yOC1kdGJzIGxpbnV4KQorICAiTWFrZSBhIHBhY2thZ2Ugd2l0aCB0aGUgZGV2aWNlLXRy ZWUgZmlsZXMgZm9yIFJhc3BiZXJyeSBQaSBtb2RlbHMgZnJvbSB0aGUKK2tlcm5lbCBMSU5VWC4i CisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbGludXgpCisgICAgKG5hbWUgInJhc3BpLWJjbTI4 LWR0YnMiKQorICAgIChzb3VyY2UgI2YpCisgICAgKGJ1aWxkLXN5c3RlbSBjb3B5LWJ1aWxkLXN5 c3RlbSkKKyAgICAoYXJndW1lbnRzCisgICAgIGAoIzpwaGFzZXMgKG1vZGlmeS1waGFzZXMgJXN0 YW5kYXJkLXBoYXNlcyAoZGVsZXRlICd1bnBhY2spKQorICAgICAgICM6aW5zdGFsbC1wbGFuCisg ICAgICAgKGxpc3QgKGxpc3QgKHN0cmluZy1hcHBlbmQgKGFzc29jLXJlZiAlYnVpbGQtaW5wdXRz ICJsaW51eCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9saWIvZHRicy9i cm9hZGNvbS8iKQorICAgICAgICAgICAgICAgICAgICIuIiAjOmluY2x1ZGUtcmVnZXhwICcoIi9i Y20uLi4uLXJwaS4qXFwuZHRiIikpKSkpCisgICAgKGlucHV0cyBgKCgibGludXgiICxsaW51eCkp KQorICAgIChzeW5vcHNpcyAiRGV2aWNlLXRyZWUgZmlsZXMgZm9yIGEgUmFzcGJlcnJ5IFBpIikK KyAgICAoZGVzY3JpcHRpb24KKyAgICAgKHNpbXBsZS1mb3JtYXQgI2YgIlRoZSBkZXZpY2UtdHJl ZSBmaWxlcyBmb3IgUmFzcGJlcnJ5IFBpIG1vZGVscyBmcm9tIH5hLiIKKyAgICAgICAgICAgICAo cGFja2FnZS1uYW1lIGxpbnV4KSkpKSkKKwogKGRlZmluZSAobWFrZS1yYXNwaS1kZWZjb25maWcg YXJjaCBkZWZjb25maWcgc2hhMjU2LWFzLWJhc2UzMikKICAgIk1ha2UgZm9yIHRoZSBhcmNoaXRl Y3R1cmUgQVJDSCBhIGZpbGUtbGlrZSBvYmplY3QgZnJvbSB0aGUgREVGQ09ORklHIGZpbGUKIHdp dGggdGhlIGhhc2ggU0hBMjU2LUFTLUJBU0UzMi4gIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIGFz IHRoZSAjOmRlZmNvbmZpZwotLSAKMi4zNC4wCgo= --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0002-build-kconfig-Add-new-module-to-modify-a-defconfi.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0002-build-kconfig-Add-new-module-to-modify-a-defconfi.patch RnJvbSBhMjM1ZDc1NjQ3MTVjY2ExY2VjNzc0ZDlkNTE1Y2FmMWJjY2I0ODU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxMDoxOSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Mi84XSBidWlsZDoga2NvbmZpZzogQWRkIG5ldyBtb2R1bGUgdG8gbW9kaWZ5IGEgZGVmY29uZmln CiBmaWxlLgoKRnJvbTogU3RlZmFuIDxzdGVmYW4tZ3VpeEB2b2RhZm9uZW1haWwuZGU+CgoqIGd1 aXgvYnVpbGQva2NvbmZpZy5zY20gKG1vZGlmeS1kZWZjb25maWcpOiBOZXcgZmlsZSB3aXRoIGEg bmV3IGZ1bmN0aW9uLgoqIGdudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20gKG1ha2UtdS1ib290 LXBhY2thZ2UsCm1ha2UtdS1ib290LXN1bnhpNjQtcGFja2FnZSk6IEFkZGluZyBuZXcga2V5IGFy Z3VtZW50cyB0byBwYXNzIGFuZC9vciBtb2RpZnkKYSBkZWZjb25maWcgZmlsZS4KKHUtYm9vdC1h bTMzNXgtYm9uZWJsYWNrLCB1LWJvb3QtcGluZWJvb2ssIHUtYm9vdC1ub3ZlbmEpOiBTaW1wbGlm eSBmdW5jdGlvbnMKYnkgdXNpbmcgdGhlIG5ldyBrZXkgYXJndW1lbnRzIG9mIHRoZSBmb3JtZXIg ZnVuY3Rpb25zLgoqIE1ha2VmaWxlLmFtOiBBZGRpbmcgZ3VpeC9idWlsZC9rY29uZmlnLnNjbSB0 byBNT0RVTEVTLgoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXgg ZmVjY2U3YzZmNy4uN2Y2OWFhY2JkMSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFr ZWZpbGUuYW0KQEAgLTIyMyw2ICsyMjMsNyBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9idWls ZC93YWYtYnVpbGQtc3lzdGVtLnNjbQkJXAogICBndWl4L2J1aWxkL2hhc2tlbGwtYnVpbGQtc3lz dGVtLnNjbQkJXAogICBndWl4L2J1aWxkL2p1bGlhLWJ1aWxkLXN5c3RlbS5zY20JCVwKKyAgZ3Vp eC9idWlsZC9rY29uZmlnLnNjbSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZ3VpeC9idWls ZC9saW51eC1tb2R1bGUtYnVpbGQtc3lzdGVtLnNjbQlcCiAgIGd1aXgvYnVpbGQvc3RvcmUtY29w eS5zY20JCQlcCiAgIGd1aXgvYnVpbGQvanNvbi5zY20JCQkJXApkaWZmIC0tZ2l0IGEvZ251L3Bh Y2thZ2VzL2Jvb3Rsb2FkZXJzLnNjbSBiL2dudS9wYWNrYWdlcy9ib290bG9hZGVycy5zY20KaW5k ZXggNjg3NmFiMTdiOS4uMTBmMmRkNWZhZCAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2Jvb3Rs b2FkZXJzLnNjbQorKysgYi9nbnUvcGFja2FnZXMvYm9vdGxvYWRlcnMuc2NtCkBAIC0xNiw2ICsx Niw3IEBACiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEgVmluY2VudCBMZWdvbGwgPHZpbmNlbnQubGVn b2xsQGdtYWlsLmNvbT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBCcmljZSBXYWVnZW5laXJlIDxi cmljZUB3YWVnZW5laS5yZT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTdGVmYW4gPHN0ZWZhbi1n dWl4QHZvZGFmb25lbWFpbC5kZT4KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMiBQZXRyIEhvZGluYSA8 cGhvZGluYUBwcm90b25tYWlsLmNvbT4KIDs7OwogOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdO VSBHdWl4LgogOzs7CkBAIC03NDcsOCArNzQ4LDkgQEAgKGRlZmluZS1wdWJsaWMgdS1ib290LXRv b2xzCiBhbHNvIGluaXRpYWxpemVzIHRoZSBib2FyZHMgKFJBTSBldGMpLiAgVGhpcyBwYWNrYWdl IHByb3ZpZGVzIGl0cwogYm9hcmQtaW5kZXBlbmRlbnQgdG9vbHMuIikpKQogCi0oZGVmaW5lLXB1 YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KQotICAiUmV0dXJucyBhIHUt Ym9vdCBwYWNrYWdlIGZvciBCT0FSRCBjcm9zcy1jb21waWxlZCBmb3IgVFJJUExFVC4iCisoZGVm aW5lKi1wdWJsaWMgKG1ha2UtdS1ib290LXBhY2thZ2UgYm9hcmQgdHJpcGxldCAjOmtleSBkZWZj b25maWcgY29uZmlncykKKyAgIlJldHVybnMgYSB1LWJvb3QgcGFja2FnZSBmb3IgQk9BUkQgY3Jv c3MtY29tcGlsZWQgZm9yIFRSSVBMRVQgd2l0aCB0aGUKK29wdGlvbmFsIERFRkNPTkZJRyBmaWxl IGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgZnJvbSBDT05GSUdTLiIKICAgKGxl dCAoKHNhbWUtYXJjaD8gKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9 PyAoJWN1cnJlbnQtc3lzdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ251 LXRyaXBsZXQtPm5peC1zeXN0ZW0gdHJpcGxldCkpKSkpCkBAIC03NjYsOCArNzY4LDExIEBAIChk ZWZpbmUtcHVibGljIChtYWtlLXUtYm9vdC1wYWNrYWdlIGJvYXJkIHRyaXBsZXQpCiAgICAgICAo YXJndW1lbnRzCiAgICAgICAgYCgjOm1vZHVsZXMgKChpY2UtOSBmdHcpCiAgICAgICAgICAgICAg ICAgICAgIChzcmZpIHNyZmktMSkKLSAgICAgICAgICAgICAgICAgICAgKGd1aXggYnVpbGQgdXRp bHMpCi0gICAgICAgICAgICAgICAgICAgIChndWl4IGJ1aWxkIGdudS1idWlsZC1zeXN0ZW0pKQor ICAgICAgICAgICAgICAgICAgICAoZ3VpeCBidWlsZCBnbnUtYnVpbGQtc3lzdGVtKQorICAgICAg ICAgICAgICAgICAgICAoZ3VpeCBidWlsZCBrY29uZmlnKQorICAgICAgICAgICAgICAgICAgICAo Z3VpeCBidWlsZCB1dGlscykpCisgICAgICAgICAjOmltcG9ydGVkLW1vZHVsZXMgKCxAJWdudS1i dWlsZC1zeXN0ZW0tbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeCBi dWlsZCBrY29uZmlnKSkKICAgICAgICAgICM6dGVzdC10YXJnZXQgInRlc3QiCiAgICAgICAgICAj Om1ha2UtZmxhZ3MKICAgICAgICAgIChsaXN0ICJIT1NUQ0M9Z2NjIgpAQCAtNzc4LDkgKzc4Mywx OCBAQCAoZGVmaW5lLXB1YmxpYyAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KQog ICAgICAgICAgKG1vZGlmeS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcwogICAgICAgICAgICAocmVw bGFjZSAnY29uZmlndXJlCiAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IG91dHB1dHMgbWFr ZS1mbGFncyAjOmFsbG93LW90aGVyLWtleXMpCi0gICAgICAgICAgICAgICAobGV0ICgoY29uZmln LW5hbWUgKHN0cmluZy1hcHBlbmQgLGJvYXJkICJfZGVmY29uZmlnIikpKQotICAgICAgICAgICAg ICAgICAoaWYgKGZpbGUtZXhpc3RzPyAoc3RyaW5nLWFwcGVuZCAiY29uZmlncy8iIGNvbmZpZy1u YW1lKSkKLSAgICAgICAgICAgICAgICAgICAgIChhcHBseSBpbnZva2UgIm1ha2UiIGAoLEBtYWtl LWZsYWdzICxjb25maWctbmFtZSkpCisgICAgICAgICAgICAgICAobGV0KiAoKGNvbmZpZy1uYW1l IChzdHJpbmctYXBwZW5kICxib2FyZCAiX2RlZmNvbmZpZyIpKQorICAgICAgICAgICAgICAgICAg ICAgIChjb25maWctZmlsZSAoc3RyaW5nLWFwcGVuZCAiY29uZmlncy8iIGNvbmZpZy1uYW1lKSkK KyAgICAgICAgICAgICAgICAgICAgICAoZGVmY29uZmlnICxkZWZjb25maWcpCisgICAgICAgICAg ICAgICAgICAgICAgKGNvbmZpZ3MgJyxjb25maWdzKSkKKyAgICAgICAgICAgICAgICAgKHdoZW4g ZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgOzsgUmVwbGFjZSB0aGUgYm9hcmQtc3BlY2lm aWMgZGVmY29uZmlnIHdpdGggdGhlIGdpdmVuIG9uZS4KKyAgICAgICAgICAgICAgICAgICAoY29w eS1maWxlIGRlZmNvbmZpZyBjb25maWctZmlsZSkpCisgICAgICAgICAgICAgICAgIChpZiAoZmls ZS1leGlzdHM/IGNvbmZpZy1maWxlKQorICAgICAgICAgICAgICAgICAgICAgKGJlZ2luCisgICAg ICAgICAgICAgICAgICAgICAgICh3aGVuIGNvbmZpZ3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAobW9kaWZ5LWRlZmNvbmZpZyBjb25maWctZmlsZSBjb25maWdzKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgKGFwcGx5IGludm9rZSAibWFrZSIgYCgsQG1ha2UtZmxhZ3MgLGNvbmZpZy1uYW1l KSkpCiAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAg KGRpc3BsYXkgIkludmFsaWQgYm9hcmQgbmFtZS4gVmFsaWQgYm9hcmQgbmFtZXMgYXJlOiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtZXJyb3ItcG9ydCkpCkBAIC04 MzQsNyArODQ4LDExIEBAIChkZWZpbmUtcHVibGljIHUtYm9vdC1tYWx0YQogICAobWFrZS11LWJv b3QtcGFja2FnZSAibWFsdGEiICJtaXBzNjRlbC1saW51eC1nbnVhYmk2NCIpKQogCiAoZGVmaW5l LXB1YmxpYyB1LWJvb3QtYW0zMzV4LWJvbmVibGFjawotICAobGV0ICgoYmFzZSAobWFrZS11LWJv b3QtcGFja2FnZSAiYW0zMzV4X2V2bSIgImFybS1saW51eC1nbnVlYWJpaGYiKSkpCisgIChsZXQg KChiYXNlIChtYWtlLXUtYm9vdC1wYWNrYWdlICJhbTMzNXhfZXZtIiAiYXJtLWxpbnV4LWdudWVh YmloZiIKKyAgICAgICAgICAgICAgIDs7IFBhdGNoIG91dCBvdGhlciBkZXZpY2UgdHJlZXMgdG8g YnVpbGQgaW1hZ2Ugc21hbGwgZW5vdWdoIHRvCisgICAgICAgICAgICAgICA7OyBmaXQgd2l0aGlu IHR5cGljYWwgcGFydGl0aW9uaW5nIHNjaGVtZXMgd2hlcmUgdGhlIGZpcnN0CisgICAgICAgICAg ICAgICA7OyBwYXJ0aXRpb24gYmVnaW5zIGF0IHNlY3RvciAyMDQ4LgorICAgICAgICAgICAgICAg Izpjb25maWdzICcoIkNPTkZJR19PRl9MSVNUPVwiYW0zMzV4LWV2bSBhbTMzNXgtYm9uZWJsYWNr XCIiKSkpKQogICAgIChwYWNrYWdlCiAgICAgICAoaW5oZXJpdCBiYXNlKQogICAgICAgKG5hbWUg InUtYm9vdC1hbTMzNXgtYm9uZWJsYWNrIikKQEAgLTg0MywyNSArODYxLDEzIEBAIChkZWZpbmUt cHVibGljIHUtYm9vdC1hbTMzNXgtYm9uZWJsYWNrCiAKIFRoaXMgVS1Cb290IGlzIGJ1aWx0IGZv ciB0aGUgQmVhZ2xlQm9uZSBCbGFjaywgd2hpY2ggd2FzIHJlbW92ZWQgdXBzdHJlYW0sCiBhZGp1 c3RlZCBmcm9tIHRoZSBhbTMzNXhfZXZtIGJ1aWxkIHdpdGggc2V2ZXJhbCBkZXZpY2UgdHJlZXMg cmVtb3ZlZCBzbyB0aGF0Ci1pdCBmaXRzIHdpdGhpbiBjb21tb24gcGFydGl0aW9uaW5nIHNjaGVt ZXMuIikKLSAgICAgIChhcmd1bWVudHMKLSAgICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3Vt ZW50cyAocGFja2FnZS1hcmd1bWVudHMgYmFzZSkKLSAgICAgICAgICgoIzpwaGFzZXMgcGhhc2Vz KQotICAgICAgICAgIGAobW9kaWZ5LXBoYXNlcyAscGhhc2VzCi0gICAgICAgICAgICAgKGFkZC1h ZnRlciAndW5wYWNrICdwYXRjaC1kZWZjb25maWcKLSAgICAgICAgICAgICAgIDs7IFBhdGNoIG91 dCBvdGhlciBkZXZpY2V0cmVlcyB0byBidWlsZCBpbWFnZSBzbWFsbCBlbm91Z2ggdG8KLSAgICAg ICAgICAgICAgIDs7IGZpdCB3aXRoaW4gdHlwaWNhbCBwYXJ0aXRpb25pbmcgc2NoZW1lcyB3aGVy ZSB0aGUgZmlyc3QKLSAgICAgICAgICAgICAgIDs7IHBhcnRpdGlvbiBiZWdpbnMgYXQgc2VjdG9y IDIwNDguCi0gICAgICAgICAgICAgICAobGFtYmRhIF8KLSAgICAgICAgICAgICAgICAgKHN1YnN0 aXR1dGUqICJjb25maWdzL2FtMzM1eF9ldm1fZGVmY29uZmlnIgotICAgICAgICAgICAgICAgICAg ICgoIkNPTkZJR19PRl9MSVNUPS4qJCIpICJDT05GSUdfT0ZfTElTVD1cImFtMzM1eC1ldm0gYW0z MzV4LWJvbmVibGFja1wiXG4iKSkKLSAgICAgICAgICAgICAgICAgI3QpKSkpKSkpKSkKK2l0IGZp dHMgd2l0aGluIGNvbW1vbiBwYXJ0aXRpb25pbmcgc2NoZW1lcy4iKSkpKQogCiAoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtYW0zMzV4LWV2bQogICAobWFrZS11LWJvb3QtcGFja2FnZSAiYW0zMzV4X2V2 bSIgImFybS1saW51eC1nbnVlYWJpaGYiKSkKIAotKGRlZmluZS1wdWJsaWMgKG1ha2UtdS1ib290 LXN1bnhpNjQtcGFja2FnZSBib2FyZCB0cmlwbGV0KQotICAobGV0ICgoYmFzZSAobWFrZS11LWJv b3QtcGFja2FnZSBib2FyZCB0cmlwbGV0KSkpCisoZGVmaW5lKi1wdWJsaWMgKG1ha2UtdS1ib290 LXN1bnhpNjQtcGFja2FnZSBib2FyZCB0cmlwbGV0ICM6a2V5IGRlZmNvbmZpZyBjb25maWdzKQor ICAobGV0ICgoYmFzZSAobWFrZS11LWJvb3QtcGFja2FnZSBib2FyZCB0cmlwbGV0ICM6ZGVmY29u ZmlnIGRlZmNvbmZpZyAjOmNvbmZpZ3MgY29uZmlncykpKQogICAgIChwYWNrYWdlCiAgICAgICAo aW5oZXJpdCBiYXNlKQogICAgICAgKGFyZ3VtZW50cwpAQCAtODkxLDIwICs4OTcsMTAgQEAgKGRl ZmluZS1wdWJsaWMgdS1ib290LXBpbmU2NC1sdHMKICAgKG1ha2UtdS1ib290LXN1bnhpNjQtcGFj a2FnZSAicGluZTY0LWx0cyIgImFhcmNoNjQtbGludXgtZ251IikpCiAKIChkZWZpbmUtcHVibGlj IHUtYm9vdC1waW5lYm9vawotICAobGV0ICgoYmFzZSAobWFrZS11LWJvb3Qtc3VueGk2NC1wYWNr YWdlICJwaW5lYm9vayIgImFhcmNoNjQtbGludXgtZ251IikpKQotICAgIChwYWNrYWdlCi0gICAg ICAoaW5oZXJpdCBiYXNlKQotICAgICAgKGFyZ3VtZW50cwotICAgICAgIChzdWJzdGl0dXRlLWtl eXdvcmQtYXJndW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBiYXNlKQotICAgICAgICAgKCgjOnBo YXNlcyBwaGFzZXMpCi0gICAgICAgICAgYChtb2RpZnktcGhhc2VzICxwaGFzZXMKLSAgICAgICAg ICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ3BhdGNoLXBpbmVib29rLWNvbmZpZwotICAgICAgICAg ICAgICAgOzsgRml4IHJlZ3Jlc3Npb24gd2l0aCBMQ0QgdmlkZW8gb3V0cHV0IGludHJvZHVjZWQg aW4gMjAyMC4wMQotICAgICAgICAgICAgICAgOzsgaHR0cHM6Ly9wYXRjaHdvcmsub3psYWJzLm9y Zy9wYXRjaC8xMjI1MTMwLwotICAgICAgICAgICAgICAgKGxhbWJkYSBfCi0gICAgICAgICAgICAg ICAgIChzdWJzdGl0dXRlKiAiY29uZmlncy9waW5lYm9va19kZWZjb25maWciCi0gICAgICAgICAg ICAgICAgICAgKCgiQ09ORklHX1ZJREVPX0JSSURHRV9BTkFMT0dJWF9BTlg2MzQ1PXkiKSAiQ09O RklHX1ZJREVPX0JSSURHRV9BTkFMT0dJWF9BTlg2MzQ1PXlcbkNPTkZJR19WSURFT19CUFAzMj15 IikpCi0gICAgICAgICAgICAgICAgICN0KSkpKSkpKSkpCisgIChtYWtlLXUtYm9vdC1zdW54aTY0 LXBhY2thZ2UgInBpbmVib29rIiAiYWFyY2g2NC1saW51eC1nbnUiCisgICA7OyBGaXggcmVncmVz c2lvbiB3aXRoIExDRCB2aWRlbyBvdXRwdXQgaW50cm9kdWNlZCBpbiAyMDIwLjAxCisgICA7OyBo dHRwczovL3BhdGNod29yay5vemxhYnMub3JnL3BhdGNoLzEyMjUxMzAvCisgICAjOmNvbmZpZ3Mg JygiQ09ORklHX1ZJREVPX0JQUDMyPXkiKSkpCiAKIChkZWZpbmUtcHVibGljIHUtYm9vdC1iYW5h bmFwaS1tMi11bHRyYQogICAobWFrZS11LWJvb3QtcGFja2FnZSAiQmFuYW5hcGlfTTJfVWx0cmEi ICJhcm0tbGludXgtZ251ZWFiaWhmIikpCkBAIC05NTUsMjUgKzk1MSwxNyBAQCAoZGVmaW5lLXB1 YmxpYyB1LWJvb3QtbXg2Y3Vib3hpCiAgIChtYWtlLXUtYm9vdC1wYWNrYWdlICJteDZjdWJveGki ICJhcm0tbGludXgtZ251ZWFiaWhmIikpCiAKIChkZWZpbmUtcHVibGljIHUtYm9vdC1ub3ZlbmEK LSAgKGxldCAoKGJhc2UgKG1ha2UtdS1ib290LXBhY2thZ2UgIm5vdmVuYSIgImFybS1saW51eC1n bnVlYWJpaGYiKSkpCisgIChsZXQgKChiYXNlIChtYWtlLXUtYm9vdC1wYWNrYWdlICJub3ZlbmEi ICJhcm0tbGludXgtZ251ZWFiaWhmIgorICAgICAgICAgICAgICAgOzsgUGF0Y2ggY29uZmlndXJh dGlvbiB0byBkaXNhYmxlIGxvYWRpbmcgdS1ib290LmltZyBmcm9tIEZBVAorICAgICAgICAgICAg ICAgOzsgcGFydGl0aW9uLCBhbGxvd2luZyBpdCB0byBiZSBpbnN0YWxsZWQgYXQgYSBkZXZpY2Ug b2Zmc2V0LgorICAgICAgICAgICAgICAgIzpjb25maWdzICcoIkNPTkZJR19TUExfRlNfRkFUPSIp KSkpCiAgICAgKHBhY2thZ2UKICAgICAgIChpbmhlcml0IGJhc2UpCiAgICAgICAoZGVzY3JpcHRp b24gIlUtQm9vdCBpcyBhIGJvb3Rsb2FkZXIgdXNlZCBtb3N0bHkgZm9yIEFSTSBib2FyZHMuICBJ dAogYWxzbyBpbml0aWFsaXplcyB0aGUgYm9hcmRzIChSQU0gZXRjKS4KIAogVGhpcyBVLUJvb3Qg aXMgYnVpbHQgZm9yIE5vdmVuYS4gIEJlIGFkdmlzZWQgdGhhdCB0aGlzIHZlcnNpb24sIGNvbnRy YXJ5Ci10byBOb3ZlbmEgdXBzdHJlYW0sIGRvZXMgbm90IGxvYWQgdS1ib290LmltZyBmcm9tIHRo ZSBmaXJzdCBwYXJ0aXRpb24uIikKLSAgICAgIChhcmd1bWVudHMKLSAgICAgICAoc3Vic3RpdHV0 ZS1rZXl3b3JkLWFyZ3VtZW50cyAocGFja2FnZS1hcmd1bWVudHMgYmFzZSkKLSAgICAgICAgICgo IzpwaGFzZXMgcGhhc2VzKQotICAgICAgICAgIGAobW9kaWZ5LXBoYXNlcyAscGhhc2VzCi0gICAg ICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdwYXRjaC1ub3ZlbmEtZGVmY29uZmlnCi0gICAg ICAgICAgICAgICA7OyBQYXRjaCBjb25maWd1cmF0aW9uIHRvIGRpc2FibGUgbG9hZGluZyB1LWJv b3QuaW1nIGZyb20gRkFUIHBhcnRpdGlvbiwKLSAgICAgICAgICAgICAgIDs7IGFsbG93aW5nIGl0 IHRvIGJlIGluc3RhbGxlZCBhdCBhIGRldmljZSBvZmZzZXQuCi0gICAgICAgICAgICAgICAobGFt YmRhIF8KLSAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJjb25maWdzL25vdmVuYV9kZWZj b25maWciCi0gICAgICAgICAgICAgICAgICAgKCgiQ09ORklHX1NQTF9GU19GQVQ9eSIpICIjIENP TkZJR19TUExfRlNfRkFUIGlzIG5vdCBzZXQiKSkKLSAgICAgICAgICAgICAgICAgI3QpKSkpKSkp KSkKK3RvIE5vdmVuYSB1cHN0cmVhbSwgZG9lcyBub3QgbG9hZCB1LWJvb3QuaW1nIGZyb20gdGhl IGZpcnN0IHBhcnRpdGlvbi4iKSkpKQogCiAoZGVmaW5lLXB1YmxpYyB1LWJvb3QtY3ViaWVib2Fy ZAogICAobWFrZS11LWJvb3QtcGFja2FnZSAiQ3ViaWVib2FyZCIgImFybS1saW51eC1nbnVlYWJp aGYiKSkKZGlmZiAtLWdpdCBhL2d1aXgvYnVpbGQva2NvbmZpZy5zY20gYi9ndWl4L2J1aWxkL2tj b25maWcuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA5ZGRmNTlk ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2J1aWxkL2tjb25maWcuc2NtCkBAIC0wLDAgKzEs MTQ4IEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50IGZv ciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAyMCBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25l bWFpbC5kZT4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7 OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7 Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBidWls ZCBrY29uZmlnKQorICAjOnVzZS1tb2R1bGUgIChpY2UtOSByZGVsaW0pCisgICM6dXNlLW1vZHVs ZSAgKGljZS05IHJlZ2V4KQorICAjOnVzZS1tb2R1bGUgIChzcmZpIHNyZmktMSkKKyAgIzp1c2Ut bW9kdWxlICAoc3JmaSBzcmZpLTI2KQorICAjOmV4cG9ydCAobW9kaWZ5LWRlZmNvbmZpZykpCisK Kzs7IENvbW1lbnRhcnk6Cis7OworOzsgQnVpbGRlci1zaWRlIGNvZGUgdG8gbW9kaWZ5IGNvbmZp Z3VyYXRpb25zIGZvciB0aGUgS2NvbmZpZyBidWlsZCBzeXN0ZW0gYXMKKzs7IHVzZWQgYnkgTGlu dXggYW5kIFUtQm9vdC4KKzs7Cis7OyBDb2RlOgorCisoZGVmaW5lIChtb2RpZnktZGVmY29uZmln IGRlZmNvbmZpZyBjb25maWdzKQorICAiVGhpcyBmdW5jdGlvbiBjYW4gbW9kaWZ5IGEgZ2l2ZW4g REVGQ09ORklHIGZpbGUgYnkgYWRkaW5nLCBjaGFuZ2luZyBvcgorcmVtb3ZpbmcgdGhlIGxpc3Qg b2Ygc3RyaW5ncyBpbiBDT05GSUdTLiAgVGhpcyBhbGxvd3MgYW4gZWFzeSBjdXN0b21pemF0aW9u IG9mCitLY29uZmlnIGJhc2VkIHByb2plY3RzIGxpa2UgdGhlIGtlcm5lbCBMaW51eCBvciB0aGUg Ym9vdGxvYWRlciAnRGFzIFUtQm9vdCcuCisKK1RoZXNlIGFyZSBleGFtcGxlcyBmb3IgQ09ORklH UyB0byBhZGQgb3IgY2hhbmdlIG9yIHJlbW92ZQorY29uZmlndXJhdGlvbnMgdG8vZnJvbSBERUZD T05GSUc6CisKKycoXCJDT05GSUdfQT1cXFwiYVxcXCJcIgorICBcIkNPTkZJR19CPTBcIgorICBc IkNPTkZJR19DPXlcIgorICBcIkNPTkZJR19EPW1cIgorICBcIkNPTkZJR19FPVwiCisgIFwiQ09O RklHX0ZcIgorICBcIiMgQ09ORklHX0cgaXMgbm90IHNldFwiKQorCitJbnN0ZWFkIG9mIGEgbGlz dCwgQ09ORkdJUyBjYW4gYmUgYSBzdHJpbmcgd2l0aCBvbmUgY29uZmlndXJhdGlvbiBwZXIgbGlu ZS4iCisgIChkZWZpbmUgY29uZmlnLXJ4CisgICAgKG1ha2UtcmVnZXhwCisgICAgIDs7IChtYXRj aDpzdWJzdHJpbmcgKHN0cmluZy1tYXRjaCAiPSguKikiICI9IikgMSkgcmV0dXJucyAiIiwgYnV0 IHRoZQorICAgICA7OyBwYXR0ZXJuICI9KC4rKT8iIG1ha2VzIGl0IHJldHVybiAjZiBpbnN0ZWFk LiAgRm9yIGEgIkNPTkZJR19BPSIgd2UgbGlrZQorICAgICA7OyB0byBnZXQgI2YsIHdoaWNoIGFz IGEgdmFsdWUgZW1pdHMgIiMg4oCmIGlzIG5vdCBzZXQiLgorICAgICAiXigjW1xcdCBdKik/KENP TkZJR19bQS1aMC05X10rKShbXFx0IF0qPVtcXHQgXSooLispP3woW1xcdCBdK2lzW1xcdCBdK25v dFtcXHQgXStzZXQpKT8kIikpCisKKyAgKGRlZmluZSAoY29uZmlnLXN0cmluZy0+cGFpciBjb25m aWctc3RyaW5nKQorICAgICJQYXJzZSBhIGNvbmZpZy1zdHJpbmcgbGlrZSBcIkNPTkZJR19FWEFN UExFPXlcIiBpbnRvIGEga2V5LXZhbHVlIHBhaXIuCitTcGFjZXMgZ2V0IHRyaW1tZWQuCitcIkNP TkZJR19BPXlcIiAgICAgICAgICAgIC0+ICcoXCJDT05GSUdfQVwiIC4gXCJ5XCIpCitcIkNPTkZJ R19CPVxcXCJcXFwiXCIgICAgICAgICAtPiAnKFwiQ09ORklHX0JcIiAuIFwiXFxcIlxcXCJcIikK K1wiQ09ORklHX0M9XCIgICAgICAgICAgICAgLT4gJyhcIkNPTkZJR19DXCIgLiAjZikKK1wiQ09O RklHX0RcIiAgICAgICAgICAgICAgLT4gJyhcIkNPTkZJR19EXCIgLiAjZikKK1wiIyBDT05GSUdf RSBpcyBub3Qgc2V0XCIgLT4gJyhcIkNPTkZJR19FXCIgLiAjZikKK1wiIyBBbnl0aGluZyBlbHNl XCIgICAgICAgLT4gJyhcIiMgQW55dGhpbmcgZWxzZVwiIC4gXCJcIikiCisgICAgKGxldCAoKG1h dGNoIChyZWdleHAtZXhlYyBjb25maWctcnggKHN0cmluZy10cmltLWJvdGggY29uZmlnLXN0cmlu ZykpKSkKKyAgICAgIChpZiAobm90IG1hdGNoKQorICAgICAgICAgIDs7IFRoaXMgaXMgc29tZSB1 bnBhcnNhYmxlIGNvbmZpZy1zdHJpbmcuCisgICAgICAgICAgOzsgV2Uga2VlcCBpdCBhcyBpdCBp cy4KKyAgICAgICAgICAoY29ucyBjb25maWctc3RyaW5nICIiKQorICAgICAgICAgIChsZXQqICgo Y29tbWVudCAobWF0Y2g6c3Vic3RyaW5nIG1hdGNoIDEpKQorICAgICAgICAgICAgICAgICAoa2V5 IChtYXRjaDpzdWJzdHJpbmcgbWF0Y2ggMikpCisgICAgICAgICAgICAgICAgICh1bnNldCAobWF0 Y2g6c3Vic3RyaW5nIG1hdGNoIDUpKQorICAgICAgICAgICAgICAgICAodmFsdWUgKGFuZCAobm90 IGNvbW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgdW5zZXQpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcgbWF0Y2ggNCkpKSkKKyAg ICAgICAgICAgIChpZiAob3IgKGFuZCBjb21tZW50IChub3QgdW5zZXQpKQorICAgICAgICAgICAg ICAgICAgICAoYW5kIChub3QgY29tbWVudCkgdW5zZXQpKQorICAgICAgICAgICAgICAgIDs7IFRo aXMgaXMganVzdCBzb21lIGNvbW1lbnQgb3Igc3RyYW5nZSBsaW5lLCB3aGljaCB3ZSBrZWVwIGFz IGlzLgorICAgICAgICAgICAgICAgIChjb25zIGNvbmZpZy1zdHJpbmcgIiIpCisgICAgICAgICAg ICAgICAgKGNvbnMga2V5IHZhbHVlKSkpKSkpCisKKyAgKGRlZmluZSAocGFpci0+Y29uZmlnLXN0 cmluZyBwYWlyKQorICAgICJDb252ZXJ0IGEgUEFJUiBiYWNrIHRvIGEgY29uZmlnLXN0cmluZy4i CisgICAgKGxldCogKChrZXkgKGNhciBwYWlyKSkKKyAgICAgICAgICAgKHZhbHVlIChjZHIgcGFp cikpKQorICAgICAgKGlmIChzdHJpbmc/IHZhbHVlKQorICAgICAgICAgIChpZiAoc3RyaW5nLW51 bGw/IHZhbHVlKQorICAgICAgICAgICAgICBrZXkKKyAgICAgICAgICAgICAgKHN0cmluZy1hcHBl bmQga2V5ICI9IiB2YWx1ZSkpCisgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIiMgIiBrZXkgIiBp cyBub3Qgc2V0IikpKSkKKworICAoZGVmaW5lIChyZW1vdmUtcGFpciBwYWlyIGJsYWNrbGlzdCkK KyAgICAiVHVybiBhIGtleS12YWx1ZSBQQUlSIGludG8gJygiIiAuICIiKSwgaWYgaXRzIGtleSBp cyBsaXN0ZWQgaW4gQkxBQ0tMSVNULiIKKyAgICAobGV0KiAoKGtleSAoZmlyc3QgcGFpcikpKQor ICAgICAgKGlmIChtZW1iZXIga2V5IGJsYWNrbGlzdCkKKyAgICAgICAgICAnKCIiIC4gIiIpCisg ICAgICAgICAgcGFpcikpKQorCisgIChkZWZpbmUgKHJlbW92ZS1jb25maWctc3RyaW5nIGNvbmZp Zy1zdHJpbmcgYmxhY2tsaXN0KQorICAgICJSZW1vdmUgdGhlIENPTkZJRy1TVFJJTkcsIGlmIGl0 cyBrZXkgaXMgbGlzdGVkIGluIEJMQUNLTElTVC4iCisgICAgKHBhaXItPmNvbmZpZy1zdHJpbmcg KHJlbW92ZS1wYWlyIChjb25maWctc3RyaW5nLT5wYWlyIGNvbmZpZy1zdHJpbmcpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja2xpc3QpKSkKKworICAoZGVmaW5l KiAod3JpdGUtbGluZXMgaW5wdXQgIzprZXkgKGxpbmUtbW9kaWZpZXIgaWRlbnRpdHkpKQorICAg ICJXcml0ZSBhbGwgbGluZXMgZnJvbSB0aGUgSU5QVVQgYWZ0ZXIgYXBwbHlpbmcgdGhlIExJTkUt TU9ESUZJRVIgdG8gdGhlCisgY3VycmVudC1vdXRwdXQtcG9ydC4iCisgICAgKGxldCBsb29wICgo bGluZSAocmVhZC1saW5lIGlucHV0KSkpCisgICAgICAod2hlbiAobm90IChlb2Ytb2JqZWN0PyBs aW5lKSkKKyAgICAgICAgKGRpc3BsYXkgKGxpbmUtbW9kaWZpZXIgbGluZSkpCisgICAgICAgIChu ZXdsaW5lKQorICAgICAgICAobG9vcCAocmVhZC1saW5lIGlucHV0KSkpKSkKKworICAobGV0KiAo KG1vZGlmaWVkLWRlZmNvbmZpZyAoc3RyaW5nLWFwcGVuZCBkZWZjb25maWcgIi5tb2QiKSkKKyAg ICAgICAgIDs7IFNwbGl0IHRoZSBjb25maWdzIGludG8gYSBsaXN0IG9mIHNpbmdsZSBjb25maWd1 YXRpb25zLgorICAgICAgICAgOzsgVG8gbWluaW1pemUgbWlzdGFrZXMsIHdlIHN1cHBvcnQgYSBz dHJpbmcgYW5kIGEgbGlzdCBvZiBzdHJpbmdzLAorICAgICAgICAgOzsgZWFjaCB3aXRoIG5ld2xp bmVzIHRvIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgKGNvbmZpZy1saXN0IChm b2xkLXJpZ2h0IGFwcGVuZCAnKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bWFwIChsYW1iZGEgKHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdHJpbmctc3BsaXQgcyAjXG5ld2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGlmIChzdHJpbmc/IGNvbmZpZ3MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgY29uZmlncykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzKSkpKQorICAgICAgICAgOzsgR2VuZXJhdGUg a2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIGNvbmZpZy1saXN0LgorICAgICAgICAgKHBhaXJzICht YXAgKGxhbWJkYSAoY29uZmlnLXN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZp Zy1zdHJpbmctPnBhaXIgY29uZmlnLXN0cmluZykpCisgICAgICAgICAgICAgICAgICAgICBjb25m aWctbGlzdCkpCisgICAgICAgICA7OyBHZW5lcmF0ZSBhIGJsYWNrbGlzdCBvZiBjb25maWcga2V5 cyBmcm9tIHBhaXJzLgorICAgICAgICAgKGJsYWNrbGlzdCAobWFwIChsYW1iZGEgKGNvbmZpZy1w YWlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpcnN0IGNvbmZpZy1wYWlyKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICBwYWlycykpCisgICAgICAgICAocmVtb3ZlLWNvbmZpZy1z dHJpbmcgKGN1dCByZW1vdmUtY29uZmlnLXN0cmluZyA8PiBibGFja2xpc3QpKSkKKyAgICA7OyBX cml0ZSB0byB0aGUgbW9kaWZpZWQtZGVmY29uZmlnIGZpbGUgZmlyc3QgdGhlIGNvbnRlbnQgb2Yg dGhlIGRlZmNvbmZpZworICAgIDs7IGZpbGUgd2l0aCByZW1vdmVkIGxpbmVzLCBhbmQgYWZ0ZXJ3 YXJkcyB0aGUgY29uZmlncy4KKyAgICAoY2FsbC13aXRoLW91dHB1dC1maWxlIG1vZGlmaWVkLWRl ZmNvbmZpZworICAgICAgKGxhbWJkYSAob3V0cHV0KQorICAgICAgICAod2l0aC1vdXRwdXQtdG8t cG9ydCBvdXRwdXQKKyAgICAgICAgICAobGFtYmRhICgpCisgICAgICAgICAgICAoY2FsbC13aXRo LWlucHV0LWZpbGUgZGVmY29uZmlnCisgICAgICAgICAgICAgIChsYW1iZGEgKGlucHV0KQorICAg ICAgICAgICAgICAgICh3cml0ZS1saW5lcyBpbnB1dCAjOiBsaW5lLW1vZGlmaWVyIHJlbW92ZS1j b25maWctc3RyaW5nKSkpCisgICAgICAgICAgICAoY2FsbC13aXRoLWlucHV0LXN0cmluZworICAg ICAgICAgICAgICAoc3RyaW5nLWpvaW4gKG1hcCBwYWlyLT5jb25maWctc3RyaW5nIHBhaXJzKSAi XG4iKQorICAgICAgICAgICAgICAobGFtYmRhIChpbnB1dCkKKyAgICAgICAgICAgICAgICAod3Jp dGUtbGluZXMgaW5wdXQpKSkpKSkpCisgICAgOzsgRW5zdXJlIHRoZSBtb2RpZmllZC1kZWZjb25m aWcgZmlsZSBpcyB1c2VkLgorICAgIChkZWxldGUtZmlsZSBkZWZjb25maWcpCisgICAgKHJlbmFt ZS1maWxlIG1vZGlmaWVkLWRlZmNvbmZpZyBkZWZjb25maWcpKSkKLS0gCjIuMzQuMAoK --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0004-gnu-linux-New-function-to-modify-the-configuratio.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0004-gnu-linux-New-function-to-modify-the-configuratio.patch RnJvbSA1NjgxNDkxNGQ4NmRhOGVmNWIzMjFlNzgyN2RlODYyMzdiN2FjY2RjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxODozNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg NC84XSBnbnU6IGxpbnV4OiBOZXcgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBjb25maWd1cmF0aW9u CiBvZiBhIExpbnV4IGtlcm5lbC4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkZy b206IFN0ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgoKKiBnbnUvcGFja2FnZXMv bGludXguc2NtIChzeXN0ZW0tPmxpbnV4LXNyY2FyY2gpOiBOZXcgZnVuY3Rpb24gdG8gcmV0dXJu IHRoZQpyZWxldmVudCBmb2xkZXIgbmFtZSBiZWxvdyBhcmNoLyBpbiB0aGUgTGludXggc291cmNl IGNvZGUuCihtYWtlLWxpbnV4LWxpYnJlKikgWydzZXQtZW52aXJvbm1lbnRdOiBTcGxpdHRlZCB0 aGlzIG5ldyBwaGFzZSBvdXQgb2YgYW5kCmFkZGluZyBpdCBiZWZvcmUg4oCmClsnY29uZmlndXJl XTog4oCmIHRvIGFsbG93IGEgcmVwbGFjZW1lbnQgYW5kIHJldXNlIGZyb20gKG1vZGlmeS1saW51 eCkuCihtb2RpZnktbGludXgpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBhIGN1c3RvbWl6ZWQgTGlu dXggcGFja2FnZSBpbmhlcml0ZWQKZnJvbSBhbm90aGVyIExpbnV4IHBhY2thZ2UsIHdoaWNoIHdp bGwgYmUgYnVpbGQgd2l0aCBhbiBvd24gZGVmY29uZmlnIG9yCmNvbmZpZ3VyYXRpb24gY2hhbmdl cy4KKG1ha2UtZGVmY29uZmlnKTogRnVuY3Rpb24gdG8gZ2V0IGEgZGVmY29uZmlnIGZyb20gYW4g dXJpLgoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9saW51eC5zY20gYi9nbnUvcGFja2FnZXMv bGludXguc2NtCmluZGV4IGE0MDU4MzdiYjEuLmY4MDJkZTk2NjYgMTAwNjQ0Ci0tLSBhL2dudS9w YWNrYWdlcy9saW51eC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2xpbnV4LnNjbQpAQCAtNTksNyAr NTksOCBAQAogOzs7IENvcHlyaWdodCDCqSAyMDIxIEpvc3NlbGluIFBvaXJldCA8am9zc2VsaW4u cG9pcmV0QHByb3Rvbm1haWwuY2g+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEgT2xpdmllciBEaW9u IDxvbGl2aWVyLmRpb25AcG9seW10bC5jYT4KIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTb2xlbmUg UmFwZW5uZSA8c29sZW5lQHBlcnNvLnB3PgotOzs7IENvcHlyaWdodCDCqSAyMDIxIFBldHIgSG9k aW5hIDxwaG9kaW5hQHByb3Rvbm1haWwuY29tPgorOzs7IENvcHlyaWdodCDCqSAyMDIxLCAyMDIy IFBldHIgSG9kaW5hIDxwaG9kaW5hQHByb3Rvbm1haWwuY29tPgorOzs7IENvcHlyaWdodCDCqSAy MDIxIFN0ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgogOzs7IENvcHlyaWdodCDC qSAyMDIyIEFydHlvbSBWLiBQb3B0c292IDxwb3B0c292LmFydHlvbUBnbWFpbC5jb20+CiAKIDs7 OwpAQCAtMTc5LDYgKzE4MCw3IEBAIChkZWZpbmUtbW9kdWxlIChnbnUgcGFja2FnZXMgbGludXgp CiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTIpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZp LTI2KQogICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKGljZS05 IG9wdGFyZ3MpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVnZXgpKQogCiAoZGVmaW5lLXB1Ymxp YyAoc3lzdGVtLT5saW51eC1hcmNoaXRlY3R1cmUgYXJjaCkKQEAgLTE5NSw2ICsxOTcsMjEgQEAg KGRlZmluZS1wdWJsaWMgKHN5c3RlbS0+bGludXgtYXJjaGl0ZWN0dXJlIGFyY2gpCiAgICAgICAg ICAgKChzdHJpbmctcHJlZml4PyAicmlzY3YiIGFyY2gpICJyaXNjdiIpCiAgICAgICAgICAgKGVs c2UgYXJjaCkpKSkKIAorKGRlZmluZS1wdWJsaWMgKHN5c3RlbS0+bGludXgtc3JjYXJjaCBhcmNo KQorICAiUmV0dXJuIGZvciBhIEd1aXggc3lzdGVtIEFSQ0ggbmFtZSB0aGUgU1JDQVJDSCBuYW1l LCB3aGljaCBpcyBzZXQgaW4gdGhlCit0b3BsZXZlbCBNYWtlZmlsZSBvZiBMaW51eCBhbmQgZGVu b3RlcyB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRpcmVjdG9yeSBuYW1lCitiZWxvdyBhcmNo LyBpbiBpdHMgc291cmNlIGNvZGUuICBTb21lIGZldyBhcmNoaXRlY3R1cmVzIHNoYXJlIGEgY29t bW9uIGZvbGRlci4KK0l0IHJlc2VtYmxlcyB0aGUgZGVmaW5pdGlvbiBvZiBTUkNBUkNIIGJhc2Vk IG9uIEFSQ0ggaW4gdGhlIE1ha2VmaWxlIGFuZCBtYXkKK2JlIHVzZWQgdG8gcGxhY2UgYSBkZWZj b25maWcgZmlsZSBpbiB0aGUgcHJvcGVyIHBhdGguIgorICAobGV0ICgobGludXgtYXJjaCAoc3lz dGVtLT5saW51eC1hcmNoaXRlY3R1cmUgYXJjaCkpKQorICAgIChtYXRjaCBsaW51eC1hcmNoCisg ICAgICAoImkzODYiICAgICJ4ODYiKQorICAgICAgKCJ4ODZfNjQiICAieDg2IikKKyAgICAgICgi c3BhcmMzMiIgInNwYXJjIikKKyAgICAgICgic3BhcmM2NCIgInNwYXJjIikKKyAgICAgICgic2g2 NCIgICAgInNoIikKKyAgICAgIChfICAgICAgICAgbGludXgtYXJjaCkpKSkKKwogKGRlZmluZS1w dWJsaWMgKHN5c3RlbS0+ZGVmY29uZmlnIHN5c3RlbSkKICAgIlNvbWUgc3lzdGVtcyAobm90YWJs eSBwb3dlcnBjLWxpbnV4KSByZXF1aXJlIGEgc3BlY2lhbCB0YXJnZXQgZm9yIGtlcm5lbAogZGVm Y29uZmlnLiAgUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBtYWtlIHRhcmdldCBpZiBhcHBsaWNhYmxl LCBvdGhlcndpc2UgcmV0dXJuCkBAIC04NTIsNyArODY5LDcgQEAgKGRlZmluZSogKG1ha2UtbGlu dXgtbGlicmUqIHZlcnNpb24gZ251LXJldmlzaW9uIHNvdXJjZSBzdXBwb3J0ZWQtc3lzdGVtcwog ICAgICAgICAgICAgICAgICAobGFtYmRhIF8KICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0 ZSogKGZpbmQtZmlsZXMgIi4iICJeTWFrZWZpbGUoXFwuaW5jbHVkZSk/JCIpCiAgICAgICAgICAg ICAgICAgICAgICAoKCIvYmluL3B3ZCIpICJwd2QiKSkpKQotICAgICAgICAgICAgICAgKHJlcGxh Y2UgJ2NvbmZpZ3VyZQorICAgICAgICAgICAgICAgKGFkZC1iZWZvcmUgJ2NvbmZpZ3VyZSAnc2V0 LWVudmlyb25tZW50CiAgICAgICAgICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMgdGFy Z2V0ICM6YWxsb3ctb3RoZXIta2V5cykKICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCBpbnRy b2R1Y2luZyB0aW1lc3RhbXBzLgogICAgICAgICAgICAgICAgICAgIChzZXRlbnYgIktDT05GSUdf Tk9USU1FU1RBTVAiICIxIikKQEAgLTg3Nyw4ICs4OTQsMTAgQEAgKGRlZmluZSogKG1ha2UtbGlu dXgtbGlicmUqIHZlcnNpb24gZ251LXJldmlzaW9uIHNvdXJjZSBzdXBwb3J0ZWQtc3lzdGVtcwog CiAgICAgICAgICAgICAgICAgICAgKHNldGVudiAiRVhUUkFWRVJTSU9OIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyQoYW5kIGV4dHJhLXZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiLSIgZXh0cmEtdmVyc2lvbikpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICItIiBleHRyYS12ZXJz aW9uKSkpKSkKIAorICAgICAgICAgICAgICAgKHJlcGxhY2UgJ2NvbmZpZ3VyZQorICAgICAgICAg ICAgICAgICAobGFtYmRhKiAoIzprZXkgaW5wdXRzIG5hdGl2ZS1pbnB1dHMgIzphbGxvdy1vdGhl ci1rZXlzKQogICAgICAgICAgICAgICAgICAgIChsZXQgKChidWlsZCAgKGFzc29jLXJlZiAlc3Rh bmRhcmQtcGhhc2VzICdidWlsZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZyAo YXNzb2MtcmVmIGlucHV0cyAia2NvbmZpZyIpKSkKIApAQCAtMTIxMCw2ICsxMjI5LDExMCBAQCAo ZGVmaW5lLXB1YmxpYyBsaW51eC1saWJyZS13aXRoLWJwZgogICAgICAgKGlucHV0cyAobW9kaWZ5 LWlucHV0cyAocGFja2FnZS1pbnB1dHMgYmFzZS1saW51eC1saWJyZSkKICAgICAgICAgICAgICAg ICAocHJlcGVuZCBjcGlvKSkpKSkpCiAKKwwKKzs7OworOzs7IExpbnV4IGtlcm5lbCBjdXN0b21p emF0aW9uIGZ1bmN0aW9ucy4KKzs7OworCisoZGVmaW5lKi1wdWJsaWMgKG1vZGlmeS1saW51eCAj OmtleSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGludXggbGlu dXgtbGlicmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmNvbmZpZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ3MgIiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBleHRyYS12ZXJzaW9uKQorICAiTWFrZSBhIExpbnV4IHBhY2thZ2Ug TkFNRSBhcyBhIG1vZGlmaWNhdGlvbiBvZiBhbm90aGVyIExJTlVYIHBhY2thZ2UuCisKK0lmIE5B TUUgaXMgbm90IGdpdmVuLCB0aGVuIGl0IGRlZmF1bHRzIHRvIHRoZSBzYW1lIG5hbWUgYXMgdGhl IExJTlVYIHBhY2thZ2UuCisKK1VubGVzcyBTT1VSQ0UgaXMgZ2l2ZW4gdGhlIHNvdXJjZSBvZiBM SU5VWCBpcyB1c2VkLgorCitBIERFRkNPTkZJRyBmaWxlIHRvIGJlIHVzZWQgY2FuIGJlIGdpdmVu IGFzIGEgcGFja2FnZSwgYXMgYSBmaWxlIGxpa2Ugb2JqZWN0CisoZmlsZS1hcHBlbmQsIGxvY2Fs LWZpbGUgZXRjLiksIG9yIGFzIGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgYSBkZWZjb25maWcg ZmlsZQorYXZhaWxhYmxlIGluIHRoZSBMaW51eCBzb3VyY2VzLiAgSWYgREVGQ09ORklHIGlzIG5v dCBnaXZlbiwgdGhlbiBhIGRlZmNvbmZpZworZmlsZSB3aWxsIGJlIHNhdmVkIGZyb20gdGhlIExJ TlVYIHBhY2thZ2UgY29uZmlndXJhdGlvbi4KKworQWRkaXRpb25hbCBDT05GSUdTIHdpbGwgYmUg dXNlZCB0byBtb2RpZnkgdGhlIGdpdmVuIG9yIHNhdmVkIGRlZmNvbmZpZywgd2hpY2gKK3dpbGwg ZmluYWxseSBiZSB1c2VkIHRvIGJ1aWxkIExpbnV4LgorCitDT05GSUdTIGNhbiBiZSBhIGxpc3Qg b2Ygc3RyaW5ncywgd2l0aCBvbmUgY29uZmlndXJhdGlvbiBwZXIgbGluZS4gIFRoZSB1c3VhbAor ZGVmY29uZmlnIHN5bnRheCBoYXMgdG8gYmUgdXNlZCwgYnV0IHRoZXJlIGlzIGEgc3BlY2lhbCBl eHRlbnNpb24gdG8gZWFzZSB0aGUKK3JlbW92YWwgb2YgY29uZmlndXJhdGlvbnMuICBDb21tZW50 IGxpbmVzIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4KKworSGVyZSBpcyBhbiBleHBsYWluaW5nIHVz YWdlIGV4YW1wbGU6CisKKyAgJyg7OyBUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSB2ZXJzaW9uIHRh aWwgaW4gJ3VuYW1lIC1yJy4KKyAgICBcIkNPTkZJR19MT0NBTFZFUlNJT049XFxcIi1oYW5kY3Jh ZnRlZFxcXCIKKyAgICA7OyBUaGlzICcjIENPTkZJR1/igKYgaXMgbm90IHNldCcgc3ludGF4IGhh cyB0byBtYXRjaCBleGFjdGx5IQorICAgIFwiIyBDT05GSUdfQk9PVF9DT05GSUcgaXMgbm90IHNl dFwiCisgICAgXCJDT05GSUdfTkZTX1NXQVA9eVwiCisgICAgOzsgVGhpcyBpcyBhIG11bHRpbGlu ZSBjb25maWd1cmF0aW9uOgorICAgIFwiQ09ORklHX0UxMDAwPXkKKyMgVGhpcyBpcyBhIGNvbW1l bnQsIGJlbG93IGZvbGxvdyB0d28gc3BlY2lhbCByZW1vdmFsIGV4dGVuc2lvbnM6CitDT05GSUdf Q01ETElORV9FWFRFTkQKK0NPTkZJR19DTURMSU5FX0ZPUkNFPVwiKQorCitBIHN0cmluZyBvZiBj b25maWd1cmF0aW9ucyBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIHN0cmluZ3Mg aXMgYWxzbworcG9zc2libGUuCisKK0VYVFJBLVZFUlNJT04gY2FuIGJlIGEgc3RyaW5nIG92ZXJ3 cml0aW5nIHRoZSBFWFRSQVZFUlNJT04gc2V0dGluZyBvZiB0aGUgTElOVVgKK3BhY2thZ2UsIGFm dGVyIGJlaW5nIHByZXBlbmRlZCBieSBhIGh5cGhlbi4gIEl0IHdpbGwgYmUgdmlzaWJsZSBpbiB0 aGUgb3V0cHV0CitvZiAndW5hbWUgLXInIGJlaGluZCB0aGUgTGludXggdmVyc2lvbiBudW1iZXJz LiIKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBsaW51eCkKKyAgICAobmFtZSAob3IgbmFtZSAo cGFja2FnZS1uYW1lIGxpbnV4KSkpCisgICAgKHNvdXJjZSAob3Igc291cmNlIChwYWNrYWdlLXNv dXJjZSBsaW51eCkpKQorICAgIChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUta2V5d29yZC1h cmd1bWVudHMKKyAgICAgICAgIChwYWNrYWdlLWFyZ3VtZW50cyBsaW51eCkKKyAgICAgICAoKCM6 aW1wb3J0ZWQtbW9kdWxlcyBpbXBvcnRlZC1tb2R1bGVzICVnbnUtYnVpbGQtc3lzdGVtLW1vZHVs ZXMpCisgICAgICAgIGAoKGd1aXggYnVpbGQga2NvbmZpZykgLEBpbXBvcnRlZC1tb2R1bGVzKSkK KyAgICAgICAoKCM6bW9kdWxlcyBtb2R1bGVzKQorICAgICAgICBgKChndWl4IGJ1aWxkIGtjb25m aWcpICxAbW9kdWxlcykpCisgICAgICAgKCgjOnBoYXNlcyBwaGFzZXMpCisgICAgICAgICN+KG1v ZGlmeS1waGFzZXMgIyRwaGFzZXMKKyAgICAgICAgICAgKHJlcGxhY2UgJ2NvbmZpZ3VyZQorICAg ICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMgIzphbGxvdy1vdGhlci1rZXlzICM6cmVz dCBhcmd1bWVudHMpCisgICAgICAgICAgICAgICAobGV0KiAoKHNyY2FyY2gKKyAgICAgICAgICAg ICAgICAgICAgICAgIyQoc3lzdGVtLT5saW51eC1zcmNhcmNoIChvciAoJWN1cnJlbnQtdGFyZ2V0 LXN5c3RlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICglY3VycmVudC1zeXN0ZW0pKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZ3Mg KHN0cmluZy1hcHBlbmQgImFyY2gvIiBzcmNhcmNoICIvY29uZmlncy8iKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoZ3VpeF9kZWZjb25maWcgKHN0cmluZy1hcHBlbmQgY29uZmlncyAiZ3VpeF9k ZWZjb25maWciKSkpCisgICAgICAgICAgICAgICAgICMkKGNvbmQKKyAgICAgICAgICAgICAgICAg ICAoKG5vdCBkZWZjb25maWcpCisgICAgICAgICAgICAgICAgICAgICN+KGJlZ2luCisgICAgICAg ICAgICAgICAgICAgICAgIDs7IENhbGwgdGhlIG9yaWdpbmFsICdjb25maWd1cmUgcGhhc2UuCisg ICAgICAgICAgICAgICAgICAgICAgIChhcHBseSAoYXNzb2MtcmVmICMkcGhhc2VzICdjb25maWd1 cmUpIGFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgOzsgU2F2ZSBhIGRlZmNvbmZp ZyBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlICJtYWtlIiAic2F2ZWRlZmNv bmZpZyIpCisgICAgICAgICAgICAgICAgICAgICAgIDs7IE1vdmUgdGhlIHNhdmVkIGRlZmNvbmZp ZyB0byB0aGUgcHJvcGVyIGxvY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAocmVuYW1l LWZpbGUgImRlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1 aXhfZGVmY29uZmlnKSkpCisgICAgICAgICAgICAgICAgICAgKChzdHJpbmc/IGRlZmNvbmZpZykK KyAgICAgICAgICAgICAgICAgICAgOzsgVXNlIGFub3RoZXIgZXhpc3RpbmcgZGVmY29uZmlnIGZy b20gdGhlIExpbnV4IHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgICR+KHJlbmFtZS1maWxl IChzdHJpbmctYXBwZW5kIGNvbmZpZ3MgIyRkZWZjb25maWcpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3VpeF9kZWZjb25maWcpKQorICAgICAgICAgICAgICAgICAgIChlbHNl CisgICAgICAgICAgICAgICAgICAgIDs7IENvcHkgdGhlIGRlZmNvbmZpZyBpbnB1dCB0byB0aGUg cHJvcGVyIGxvY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAnKGNvcHktZmlsZSAoYXNzb2Mt cmVmIGlucHV0cyAiZ3VpeF9kZWZjb25maWciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBndWl4X2RlZmNvbmZpZykpKQorICAgICAgICAgICAgICAgICAobW9kaWZ5LWRlZmNvbmZp ZyBndWl4X2RlZmNvbmZpZyAnIyRjb25maWdzKQorICAgICAgICAgICAgICAgICAjJEAoaWYgZXh0 cmEtdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICBgKChzZXRlbnYgIkVYVFJBVkVSU0lP TiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwoc3RyaW5nLWFwcGVuZCAiLSIg ZXh0cmEtdmVyc2lvbikpKQorICAgICAgICAgICAgICAgICAgICAgICAnKCkpCisgICAgICAgICAg ICAgICAgIChpbnZva2UgIm1ha2UiICJndWl4X2RlZmNvbmZpZyIpKSkpKSkpKQorICAgIChuYXRp dmUtaW5wdXRzCisgICAgIChhcHBlbmQgKGlmIChvciAobm90IGRlZmNvbmZpZykKKyAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmc/IGRlZmNvbmZpZykpCisgICAgICAgICAgICAgICAgICcoKQor ICAgICAgICAgICAgICAgICA7OyBUaGUgZGVmY29uZmlnIHNob3VsZCBiZSBhIHBhY2thZ2Ugb3Ig ZmlsZS1saWtlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgYCgoImd1aXhfZGVmY29uZmlnIiAs ZGVmY29uZmlnKSkpCisgICAgICAgICAgICAgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBsaW51eCkp KSkpCisKKyhkZWZpbmUtcHVibGljIChtYWtlLWRlZmNvbmZpZyB1cmkgc2hhMjU2LWFzLWJhc2Uz MikKKyAgKG9yaWdpbiAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAodXJpIHVyaSkKKyAg ICAgICAgICAoc2hhMjU2IChiYXNlMzIgc2hhMjU2LWFzLWJhc2UzMikpKSkKIAogDAogOzs7Ci0t IAoyLjM0LjAKCg== --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0006-gnu-raspberry-pi-Add-helpers-for-config.txt-file-.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0006-gnu-raspberry-pi-Add-helpers-for-config.txt-file-.patch RnJvbSA5NWRhODNmMTE1OWFiMjgwYjIzMTNiODE2Y2U3ODQxZjVmYmRiMDZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Ni84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGhlbHBlcnMgZm9yIGNvbmZpZy50eHQgZmlsZQog Z2VuZXJhdGlvbi4KCiogZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20gKHJhc3BpLWNvbmZp Zy1maWxlLCByYXNwaS1jdXN0b20tdHh0KToKTmV3IGZ1bmN0aW9ucy4KKCVyYXNwaS1jb25maWct dHh0LCAlcmFzcGktYmNtMjctZHRiLXR4dCwgJXJhc3BpLWJjbTI4LWR0Yi10eHQKJXJhc3BpLXUt Ym9vdC1ib290bG9hZGVyLXR4dCk6IE5ldyB2YXJpYWJsZXMuCgpkaWZmIC0tZ2l0IGEvZ251L3Bh Y2thZ2VzL3Jhc3BiZXJyeS1waS5zY20gYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpp bmRleCBhMmFiMzAwNTMxLi4wNzA3NTE2ZjcyIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvcmFz cGJlcnJ5LXBpLnNjbQorKysgYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpAQCAtMjM4 LDYgKzIzOCw1OSBAQCAoZGVmaW5lLXB1YmxpYyByYXNwaS1hcm02NC1jaGFpbmxvYWRlcgogICAg ICAgICAgICAgICAgI3QpKSkpKSkpKQogICAgIChzdXBwb3J0ZWQtc3lzdGVtcyAnKCJhYXJjaDY0 LWxpbnV4IikpKSkKIAorKGRlZmluZS1wdWJsaWMgKHJhc3BpLWNvbmZpZy1maWxlIG5hbWUgY29u dGVudCkKKyAgIk1ha2UgYSBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSBjb25maWcudHh0IGZvciB0 aGUgUmFzcGJlcnJ5IFBpIGZpcm13YXJlLgorQ09OVEVOVCBjYW4gYmUgYSBsaXN0IG9mIHN0cmlu Z3MsIHdoaWNoIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCBhIG5ld2xpbmUKK2NoYXJhY3Rlci4gIEFs dGVybmF0aXZlbHkgQ09OVEVOVCBjYW4gYmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxlIGNv bnRlbnQuIgorICAocGxhaW4tZmlsZQorICAgbmFtZQorICAgKGlmIChsaXN0PyBjb250ZW50KQor ICAgICAgIChzdHJpbmctam9pbiBjb250ZW50ICJcbiIgJ3N1ZmZpeCkKKyAgICAgICBjb250ZW50 KSkpCisKKyhkZWZpbmUtcHVibGljICVyYXNwaS1jb25maWctdHh0CisgIDs7IEEgY29uZmlnLnR4 dCBmaWxlIHRvIHN0YXJ0IHRoZSBBUk0gY29yZXMgdXAgaW4gNjQtYml0IG1vZGUgaWYgbmVjZXNz YXJ5CisgIDs7IGFuZCB0byBpbmNsdWRlIGEgZHRiLnR4dCwgYm9vdGxvYWRlci50eHQsIGFuZCBh IGN1c3RvbS50eHQsIGVhY2ggd2l0aAorICA7OyBzZXBhcmF0ZWQgY29uZmlndXJhdGlvbnMgZm9y IHRoZSBSYXNwYmVycnkgUGkgZmlybXdhcmUuCisgIChyYXNwaS1jb25maWctZmlsZQorICAgImNv bmZpZy50eHQiCisgICBgKCIjIFNlZSBodHRwczovL3d3dy5yYXNwYmVycnlwaS5vcmcvZG9jdW1l bnRhdGlvbi9jb25maWd1cmF0aW9uL2NvbmZpZy10eHQvUkVBRE1FLm1kIGZvciBkZXRhaWxzLiIK KyAgICAgIiIKKyAgICAgLChzdHJpbmctYXBwZW5kICJhcm1fNjRiaXQ9IiAoaWYgKHRhcmdldC1h YXJjaDY0PykgIjEiICIwIikpCisgICAgICJpbmNsdWRlIGR0Yi50eHQiCisgICAgICJpbmNsdWRl IGJvb3Rsb2FkZXIudHh0IgorICAgICAiaW5jbHVkZSBjdXN0b20udHh0IikpKQorCisoZGVmaW5l LXB1YmxpYyAlcmFzcGktYmNtMjctZHRiLXR4dAorICA7OyBBIGR0Yi50eHQgZmlsZSB0byBiZSBp bmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgOzsgZG93bnN0 cmVhbSBkZXZpY2UgdHJlZSBmaWxlcyBiY20yNyouZHRiIHdpbGwgYmUgdXNlZC4KKyAgKHJhc3Bp LWNvbmZpZy1maWxlCisgICAiZHRiLnR4dCIKKyAgICJ1cHN0cmVhbV9rZXJuZWw9MCIpKQorCiso ZGVmaW5lLXB1YmxpYyAlcmFzcGktYmNtMjgtZHRiLXR4dAorICA7OyBBIGR0Yi50eHQgZmlsZSB0 byBiZSBpbmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBlbnN1cmUgdGhhdCB0aGUKKyAgOzsg dXBzdHJlYW0gZGV2aWNlIHRyZWUgZmlsZXMgYmNtMjgqLmR0YiB3aWxsIGJlIHVzZWQuCisgIDs7 IFRoaXMgYWxzbyBpbXBsaWVzIHRoZSB1c2Ugb2YgdGhlIGR0b3ZlcmxheT11cHN0cmVhbS4KKyAg KHJhc3BpLWNvbmZpZy1maWxlCisgICAiZHRiLnR4dCIKKyAgICJ1cHN0cmVhbV9rZXJuZWw9MSIp KQorCisoZGVmaW5lLXB1YmxpYyAlcmFzcGktdS1ib290LWJvb3Rsb2FkZXItdHh0CisgIDs7IEEg Ym9vdGxvYWRlci50eHQgZmlsZSB0byBiZSBpbmNsdWRlZCBieSB0aGUgY29uZmlnLnR4dCB0byBs b2FkIHRoZQorICA7OyBVLUJvb3QgYm9vdGxvYWRlci4KKyAgKHJhc3BpLWNvbmZpZy1maWxlCisg ICAiYm9vdGxvYWRlci50eHQiCisgICAnKCJkdG92ZXJsYXk9dXBzdHJlYW0iCisgICAgICJlbmFi bGVfdWFydD0xIgorICAgICAia2VybmVsPXUtYm9vdC5iaW4iKSkpCisKKyhkZWZpbmUtcHVibGlj IChyYXNwaS1jdXN0b20tdHh0IGNvbnRlbnQpCisgICJNYWtlIGEgY3VzdG9tLnR4dCBmaWxlIGZv ciB0aGUgUmFzcGJlcnJ5IFBpIGZpcm13YXJlLgorQ09OVEVOVCBjYW4gYmUgYSBsaXN0IG9mIHN0 cmluZ3MsIHdoaWNoIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCBhIG5ld2xpbmUKK2NoYXJhY3Rlci4g IEFsdGVybmF0aXZlbHkgQ09OVEVOVCBjYW4gYmUgYSBzdHJpbmcgd2l0aCB0aGUgZnVsbCBmaWxl IGNvbnRlbnQuIgorICAocmFzcGktY29uZmlnLWZpbGUgImN1c3RvbS50eHQiIGNvbnRlbnQpKQor CiAoZGVmaW5lIChtYWtlLXJhc3BpLWRlZmNvbmZpZyBhcmNoIGRlZmNvbmZpZyBzaGEyNTYtYXMt YmFzZTMyKQogICAiTWFrZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSBBUkNIIGEgZmlsZS1saWtlIG9i amVjdCBmcm9tIHRoZSBERUZDT05GSUcgZmlsZQogd2l0aCB0aGUgaGFzaCBTSEEyNTYtQVMtQkFT RTMyLiAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlICM6ZGVmY29uZmlnCi0tIAoyLjM0 LjAKCg== --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0005-gnu-raspberry-pi-Add-defconfig-objects-to-build-c.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0005-gnu-raspberry-pi-Add-defconfig-objects-to-build-c.patch RnJvbSA0MjhkZTBjYmZiOWYwM2MxNGY4OGI5ZGI1ZTU2MTgxZWY3NTlkN2ViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOToyNSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg NS84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGRlZmNvbmZpZyBvYmplY3RzIHRvIGJ1aWxkCiBj dXN0b21pemVkIExpbnV4IGtlcm5lbHMuCgpnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbSAo bWFrZS1yYXNwaS1kZWZjb25pZyk6IE5ldyBmdW5jdGlvbiB0byBtYWtlCmRvd25sb2FkZWQgZGVm Y29uZmlnIG9iamVjdHMgZnJvbSB0aGUgTGludXggcmVwb3NpdG9yeSBvZiB0aGUgUmFzcGJlcnJ5 IFBpCkZvdW5kYXRpb24uCiglYmNtMjcwOS1kZWZjb25maWcsICViY20yNzEwLWRlZmNvbmZpZywg JWJjbTI3MTEtZGVmY29uZmlnLAolYmNtMjgzNS1kZWZjb25maWcsICViY21ycGktZGVmY29uZmln LCAlYmNtMjcxMS1kZWZjb25maWctNjQsCiViY21ycGkzLWRlZmNvbmZpZyk6IE5ldyB2YXJpYWJs ZXMgY29udGFpbmluZyBkZWZjb25maWcgb2JqZWN0cyB0byBidWlsZApMaW51eCBrZXJuZWxzIGN1 c3RvbWl6ZWQgZm9yIFJhc3BiZXJyeSBQaSBzaW5nbGUgYm9hcmQgY29tcHV0ZXJzLgoKZGlmZiAt LWdpdCBhL2dudS9wYWNrYWdlcy9yYXNwYmVycnktcGkuc2NtIGIvZ251L3BhY2thZ2VzL3Jhc3Bi ZXJyeS1waS5zY20KaW5kZXggYmIzOGI4YjIxOC4uYTJhYjMwMDUzMSAxMDA2NDQKLS0tIGEvZ251 L3BhY2thZ2VzL3Jhc3BiZXJyeS1waS5zY20KKysrIGIvZ251L3BhY2thZ2VzL3Jhc3BiZXJyeS1w aS5zY20KQEAgLTEsNSArMSw2IEBACiA7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2Fn ZSBtYW5hZ2VtZW50IGZvciBHTlUKIDs7OyBDb3B5cmlnaHQgwqkgMjAyMCBEYW5ueSBNaWxvc2F2 bGpldmljIDxkYW5ueW1Ac2NyYXRjaHBvc3Qub3JnPgorOzs7IENvcHlyaWdodCDCqSAyMDIxIFN0 ZWZhbiA8c3RlZmFuLWd1aXhAdm9kYWZvbmVtYWlsLmRlPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR05VIEd1aXguCiA7OzsKQEAgLTI1LDkgKzI2LDEwIEBAIChkZWZpbmUtbW9kdWxl IChnbnUgcGFja2FnZXMgcmFzcGJlcnJ5LXBpKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cyBjb21tZW5jZW1lbnQpCiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGNyb3NzLWJhc2Up CiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGRvY3VtZW50YXRpb24pCisgICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzIGVtYmVkZGVkKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cyBmaWxlKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBnY2MpCi0gICM6dXNlLW1vZHVs ZSAoZ251IHBhY2thZ2VzIGVtYmVkZGVkKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBs aW51eCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSBnbnUpCiAgICM6dXNlLW1v ZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGdpdC1kb3dubG9hZCkK QEAgLTIzNSwzICsyMzcsNDMgQEAgKGRlZmluZS1wdWJsaWMgcmFzcGktYXJtNjQtY2hhaW5sb2Fk ZXIKICAgICAgICAgICAgICAgIChpbnN0YWxsLWZpbGUgImFybTY0LmJpbiIgbGliZXhlYykKICAg ICAgICAgICAgICAgICN0KSkpKSkpKSkKICAgICAoc3VwcG9ydGVkLXN5c3RlbXMgJygiYWFyY2g2 NC1saW51eCIpKSkpCisKKyhkZWZpbmUgKG1ha2UtcmFzcGktZGVmY29uZmlnIGFyY2ggZGVmY29u ZmlnIHNoYTI1Ni1hcy1iYXNlMzIpCisgICJNYWtlIGZvciB0aGUgYXJjaGl0ZWN0dXJlIEFSQ0gg YSBmaWxlLWxpa2Ugb2JqZWN0IGZyb20gdGhlIERFRkNPTkZJRyBmaWxlCit3aXRoIHRoZSBoYXNo IFNIQTI1Ni1BUy1CQVNFMzIuICBUaGlzIG9iamVjdCBjYW4gYmUgdXNlZCBhcyB0aGUgIzpkZWZj b25maWcKK2FyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiAobW9kaWZ5LWxpbnV4KS4iCisgIChtYWtl LWRlZmNvbmZpZworICAgKHN0cmluZy1hcHBlbmQKKyAgICAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNl cmNvbnRlbnQuY29tL3Jhc3BiZXJyeXBpL2xpbnV4L3Jhc3BiZXJyeXBpLWtlcm5lbF8xLjIwMjEw NDMwLTEvYXJjaC8iCisgICAgYXJjaCAiL2NvbmZpZ3MvIiBkZWZjb25maWcpCisgICBzaGEyNTYt YXMtYmFzZTMyKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbTI3MDktZGVmY29uZmlnCisgIChtYWtl LXJhc3BpLWRlZmNvbmZpZworICAgImFybSIgImJjbTI3MDlfZGVmY29uZmlnIgorICAgIjB5dnJt aWQyamFrbDkyOWQxbXYwMGdpZG5xYmY5MWZmaGo2MWM5Z2w3NWY3a200ODgxMWMiKSkKKworKGRl ZmluZS1wdWJsaWMgJWJjbTI3MTEtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZwor ICAgImFybSIgImJjbTI3MTFfZGVmY29uZmlnIgorICAgIjE5aGI2bnduYTdzazNiNHJuNXlqZmhs ZHJzM2MxbHYyNHEwOHc0Z3BhNHh6aDFieXY3amoiKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbTI4 MzUtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZworICAgImFybSIgImJjbTI4MzVf ZGVmY29uZmlnIgorICAgIjE3ZG12YWJxdnh3cW42bGd2MXg4cmZoMndxZjFyMnhtbTEwbmtkbnJn d2ttZ3Y4YmgyZDUiKSkKKworKGRlZmluZS1wdWJsaWMgJWJjbXJwaS1kZWZjb25maWcKKyAgKG1h a2UtcmFzcGktZGVmY29uZmlnCisgICAiYXJtIiAiYmNtcnBpX2RlZmNvbmZpZyIKKyAgICIwbGNt cjZueGRkNTNtM2s4aHFiNWs2YzViN3ZiZGdtZnZjbGlxeWw5NXNucDQ1cnhqamt3IikpCisKKyhk ZWZpbmUtcHVibGljICViY20yNzExLWRlZmNvbmZpZy02NAorICAobWFrZS1yYXNwaS1kZWZjb25m aWcKKyAgICJhcm02NCIgImJjbTI3MTFfZGVmY29uZmlnIgorICAgIjB4ZjM4bmN6d2lucjBqOHZo c244bmQ4aDR5c2puNzd4cGhnN3huc3N6MDRnY2xiN2ZuZHIiKSkKKworKGRlZmluZS1wdWJsaWMg JWJjbXJwaTMtZGVmY29uZmlnCisgIChtYWtlLXJhc3BpLWRlZmNvbmZpZworICAgImFybTY0IiAi YmNtcnBpM19kZWZjb25maWciCisgICAiMDFrMDk4c25kN2tibWh6NjhqOTNtajJmd3AzOWM1Nmc5 cjhyZ2F3MTdqczVyMHcwemJoeSIpKQotLSAKMi4zNC4wCgo= --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0 Content-Type: text/x-patch; name=v5-0008-gnu-raspberry-pi-Add-a-bootloader-chain-for-the-R.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0008-gnu-raspberry-pi-Add-a-bootloader-chain-for-the-R.patch RnJvbSA3ZTEzYWIwYmIzM2UwZjkwYjA5NGFkNGUyNzU5ZTZlOGJjMWU4ZTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gPHN0ZWZhbi1ndWl4QHZvZGFmb25lbWFpbC5kZT4K RGF0ZTogV2VkLCAxMyBBcHIgMjAyMiAyMToxOTo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjUg OC84XSBnbnU6IHJhc3BiZXJyeS1waTogQWRkIGEgYm9vdGxvYWRlci1jaGFpbiBmb3IgdGhlCiBS YXNwYmVycnkgUGkgYW5kIG9zIGV4YW1wbGVzLgoKKiBnbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBp LnNjbSAoZ3J1Yi1lZmktYm9vdGxvYWRlci1jaGFpbi1yYXNwaS02NCk6IE5ldwpib290bG9hZGVy IHZhcmlhYmxlLCBjYXBhYmxlIHRvIGJvb3QgYSBSYXNwYmVycnkgUGkgb3ZlciBuZXR3b3JrIG9y IGZyb20gYQpsb2NhbCBzdG9yYWdlLgoqIGdudS9zeXN0ZW0vZXhhbXBsZXMvcmFzcGJlcnJ5LXBp LTY0LnRtcGw6IE5ldyBvcGVyYXRpbmctc3lzdGVtIGV4YW1wbGUuCiogZ251L3N5c3RlbS9leGFt cGxlcy9yYXNwYmVycnktcGktNjQtbmZzLXJvb3QudG1wbDogTmV3IG9wZXJhdGluZy1zeXN0ZW0K ZXhhbXBsZSBmb3IgYm9vdGluZyBvdmVyIG5ldHdvcmsuCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2th Z2VzL3Jhc3BiZXJyeS1waS5zY20gYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQppbmRl eCBkODA4ZjYxYWMyLi5kNTJhNGE3MmM1IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvcmFzcGJl cnJ5LXBpLnNjbQorKysgYi9nbnUvcGFja2FnZXMvcmFzcGJlcnJ5LXBpLnNjbQpAQCAtMTgsMTEg KzE4LDE0IEBACiA7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBy YXNwYmVycnktcGkpCisgICM6dXNlLW1vZHVsZSAoZ251IGJvb3Rsb2FkZXIpCisgICM6dXNlLW1v ZHVsZSAoZ251IGJvb3Rsb2FkZXIgZ3J1YikKICAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMp CiAgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGFkbWluKQogICAjOnVzZS1tb2R1bGUgKGdu dSBwYWNrYWdlcyBhbGdlYnJhKQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBiYXNlKQog ICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBiYXNoKQorICAjOnVzZS1tb2R1bGUgKGdudSBw YWNrYWdlcyBib290bG9hZGVycykKICAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgY29tbWVu Y2VtZW50KQogICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBjcm9zcy1iYXNlKQogICAjOnVz ZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBkb2N1bWVudGF0aW9uKQpAQCAtMzEyLDYgKzMxNSwyMiBA QCAoZGVmaW5lLXB1YmxpYyAobWFrZS1yYXNwaS1iY20yOC1kdGJzIGxpbnV4KQogICAgICAoc2lt cGxlLWZvcm1hdCAjZiAiVGhlIGRldmljZS10cmVlIGZpbGVzIGZvciBSYXNwYmVycnkgUGkgbW9k ZWxzIGZyb20gfmEuIgogICAgICAgICAgICAgIChwYWNrYWdlLW5hbWUgbGludXgpKSkpKQogCiso ZGVmaW5lLXB1YmxpYyBncnViLWVmaS1ib290bG9hZGVyLWNoYWluLXJhc3BpLTY0CisgIDs7IEEg Ym9vdGxvYWRlciBjYXBhYmxlIHRvIGJvb3QgYSBSYXNwYmVycnkgUGkgb3ZlciBuZXR3b3JrIHZp YSBURlRQIG9yIGZyb20KKyAgOzsgYSBsb2NhbCBzdG9yYWdlIGxpa2UgYSBtaWNybyBTRCBjYXJk LgorICA7OyBJdCBuZWl0aGVyIGluc3RhbGxzIGZpcm13YXJlIG5vciBkZXZpY2UtdHJlZSBmaWxl cyBmb3IgdGhlIFJhc3BiZXJyeSBQaS4KKyAgOzsgSXQganVzdCBhc3N1bWVzIHRoZW0gdG8gYmUg ZXhpc3RpbmcgaW4gYm9vdC9lZmkgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc29tZQorICA7OyBVRUZJ IGZpcm13YXJlIHdpdGggQUNQSSBkYXRhIGlzIHVzdWFsbHkgYXNzdW1lZCB0byBiZSBleGlzdGlu ZyBvbiBQQ3MuCisgIDs7IEl0IGNyZWF0ZXMgZmlybXdhcmUgY29uZmlndXJhdGlvbiBmaWxlcyBh bmQgYSBib290bG9hZGVyLWNoYWluIHdpdGggVS1Cb290CisgIDs7IHRvIHByb3ZpZGUgYW4gRUZJ IEFQSSBmb3IgdGhlIGZpbmFsIEdSVUIgYm9vdGxvYWRlci4KKyAgOzsgSXQgYWxzbyBzZXJ2ZXMg YXMgYSBibHVlLXByaW50IHRvIGNyZWF0ZSBhbiBvd24gYm9vdGxvYWRlci1jaGFpbiB3aXRoCisg IDs7IGZpcm13cmUgYW5kIGRldmljZS10cmVlIHBhY2thZ2VzIG9yIGZpbGVzLgorICAoZWZpLWJv b3Rsb2FkZXItY2hhaW4gZ3J1Yi1lZmktbmV0Ym9vdC1yZW1vdmFibGUtYm9vdGxvYWRlcgorICAg ICAgICAgICAgICAgICAgICAgICAgIzpwYWNrYWdlcyAobGlzdCB1LWJvb3QtcnBpLWVmaS02NCkK KyAgICAgICAgICAgICAgICAgICAgICAgICM6ZmlsZXMgKGxpc3QgJXJhc3BpLWNvbmZpZy10eHQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXJhc3BpLWJjbTI3LWR0Yi10 eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXJhc3BpLXUtYm9vdC1i b290bG9hZGVyLXR4dCkpKQorCiAoZGVmaW5lIChtYWtlLXJhc3BpLWRlZmNvbmZpZyBhcmNoIGRl ZmNvbmZpZyBzaGEyNTYtYXMtYmFzZTMyKQogICAiTWFrZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSBB UkNIIGEgZmlsZS1saWtlIG9iamVjdCBmcm9tIHRoZSBERUZDT05GSUcgZmlsZQogd2l0aCB0aGUg aGFzaCBTSEEyNTYtQVMtQkFTRTMyLiAgVGhpcyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlICM6 ZGVmY29uZmlnCmRpZmYgLS1naXQgYS9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02 NC1uZnMtcm9vdC50bXBsIGIvZ251L3N5c3RlbS9leGFtcGxlcy9yYXNwYmVycnktcGktNjQtbmZz LXJvb3QudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMDA2YTI4 N2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3N5c3RlbS9leGFtcGxlcy9yYXNwYmVycnktcGkt NjQtbmZzLXJvb3QudG1wbApAQCAtMCwwICsxLDczIEBACis7OyBUaGlzIGlzIGFuIG9wZXJhdGlu Zy1zeXN0ZW0gY29uZmlndXJhdGlvbiB0ZW1wbGF0ZSBvZiBhCis7OyA2NC1iaXQgbWluaW1hbCBz eXN0ZW0gZm9yIGEgUmFzcGJlcnJ5IFBpIHdpdGggYW4gTkZTIHJvb3QgZmlsZS1zeXN0ZW0uCisK Kzs7IEl0IG5laXRoZXIgaW5zdGFsbHMgZmlybXdhcmUgbm9yIGRldmljZS10cmVlIGZpbGVzIGZv ciB0aGUgUmFzcGJlcnJ5IFBpLgorOzsgSXQganVzdCBhc3N1bWVzIHRoZW0gdG8gYmUgZXhpc3Rp bmcgaW4gYm9vdC9lZmkgaW4gdGhlIHNhbWUgd2F5IHRoYXQgc29tZQorOzsgVUVGSSBmaXJtd2Fy ZSB3aXRoIEFDUEkgZGF0YSBpcyB1c3VhbGx5IGFzc3VtZWQgdG8gYmUgZXhpc3Rpbmcgb24gUENz LgorCis7OyBJdCBleHBlY3RzIHRoZSBib290L2VmaSBkaXJlY3RvcnkgdG8gYmUgc2VydmVkIHZp YSBURlRQIGFuZCB0aGUgcm9vdAorOzsgZmlsZS1zeXN0ZW0gdG8gYmUgc2VydmVkIHZpYSBORlMu IFNlZSB0aGUgZ3J1Yi1lZmktbmV0Ym9vdC1ib290bG9hZGVyCis7OyBkZXNjcmlwdGlvbiBpbiB0 aGUgbWFudWFsIGZvciBtb3JlIGRldGFpbHMuCisKKyh1c2UtbW9kdWxlcyAoZ251KQorICAgICAg ICAgICAgIChnbnUgYXJ0d29yaykKKyAgICAgICAgICAgICAoZ251IHN5c3RlbSBuc3MpKQorKHVz ZS1zZXJ2aWNlLW1vZHVsZXMgYWRtaW4KKyAgICAgICAgICAgICAgICAgICAgIGF2YWhpCisgICAg ICAgICAgICAgICAgICAgICBuZXR3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICBzc2gpCiso dXNlLXBhY2thZ2UtbW9kdWxlcyBjZXJ0cworICAgICAgICAgICAgICAgICAgICAgbGludXgKKyAg ICAgICAgICAgICAgICAgICAgIHJhc3BiZXJyeS1waQorICAgICAgICAgICAgICAgICAgICAgc3No KQorCisoZGVmaW5lICVteS1wdWJsaWMta2V5CisgIChsb2NhbC1maWxlIChzdHJpbmctYXBwZW5k IChnZXRlbnYgIkhPTUUiKSAiLy5zc2gvaWRfZWNkc2EucHViIikpKQorCisoZGVmaW5lLXB1Ymxp YyByYXNwYmVycnktcGktNjQtbmZzLXJvb3QKKyAgKG9wZXJhdGluZy1zeXN0ZW0KKyAgIChob3N0 LW5hbWUgInJhc3BiZXJyeXBpLWd1aXgiKQorICAgKHRpbWV6b25lICJFdXJvcGUvQmVybGluIikK KyAgIChib290bG9hZGVyIChib290bG9hZGVyLWNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAg ICAoYm9vdGxvYWRlciBncnViLWVmaS1ib290bG9hZGVyLWNoYWluLXJhc3BpLTY0KQorICAgICAg ICAgICAgICAgICh0YXJnZXRzICcoIi9ib290L2VmaSIpKQorICAgICAgICAgICAgICAgICh0aGVt ZSAoZ3J1Yi10aGVtZSAocmVzb2x1dGlvbiAnKDE5MjAgLiAxMDgwKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgKGltYWdlIChmaWxlLWFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICVhcnR3b3JrLXJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi L2dydWIvR3VpeFNELWZ1bGx5LWJsYWNrLTE2LTkuc3ZnIikpKSkpKQorICAgKGtlcm5lbC1hcmd1 bWVudHMgJygiaXA9ZGhjcCIpKQorICAgKGtlcm5lbCAobW9kaWZ5LWxpbnV4ICM6bGludXggbGlu dXgtbGlicmUtYXJtNjQtZ2VuZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgICM6ZXh0cmEt dmVyc2lvbiAiYXJtNjQtZ2VuZXJpYy1uZXRib290IgorICAgICAgICAgICAgICAgICAgICAgICAg ICM6Y29uZmlncyAnKCJDT05GSUdfTkZTX1NXQVA9eSIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiQ09ORklHX1VTQl9VU0JORVQ9eSIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ09ORklHX1VTQl9MQU43OFhYPXkiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkNPTkZJR19VU0JfTkVUX1NNU0M5NVhYPXkiKSkpCisgICAo aW5pdHJkLW1vZHVsZXMgJygpKQorICAgKGZpbGUtc3lzdGVtcyAoY29ucyogKGZpbGUtc3lzdGVt CisgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdW50LXBvaW50ICIvIikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAodHlwZSAibmZzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZGV2 aWNlICI6L2V4cG9ydC9yYXNwYmVycnlwaS9ndWl4IikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAob3B0aW9ucyAiYWRkcj0xMC4yMC4zMC40MCx2ZXJzPTQuMSIpKQorICAgICAgICAgICAgICAg ICAgICAgICAgJWJhc2UtZmlsZS1zeXN0ZW1zKSkKKyAgIChzd2FwLWRldmljZXMgKGxpc3QgKHN3 YXAtc3BhY2UgKHRhcmdldCAiL3J1bi9zd2FwZmlsZSIpKSkpCisgICAodXNlcnMgKGNvbnMqICh1 c2VyLWFjY291bnQKKyAgICAgICAgICAgICAgICAgIChuYW1lICJwaSIpCisgICAgICAgICAgICAg ICAgICAoZ3JvdXAgInVzZXJzIikKKyAgICAgICAgICAgICAgICAgIChzdXBwbGVtZW50YXJ5LWdy b3VwcyAnKCJ3aGVlbCIgIm5ldGRldiIgImF1ZGlvIiAidmlkZW8iKSkKKyAgICAgICAgICAgICAg ICAgIChob21lLWRpcmVjdG9yeSAiL2hvbWUvcGkiKSkKKyAgICAgICAgICAgICAgICAgJWJhc2Ut dXNlci1hY2NvdW50cykpCisgICAocGFja2FnZXMgKGNvbnMqIG5zcy1jZXJ0cworICAgICAgICAg ICAgICAgICAgICBvcGVuc3NoCisgICAgICAgICAgICAgICAgICAgICViYXNlLXBhY2thZ2VzKSkK KyAgIChzZXJ2aWNlcyAoY29ucyogKHNlcnZpY2UgYXZhaGktc2VydmljZS10eXBlKQorICAgICAg ICAgICAgICAgICAgICAoc2VydmljZSBkaGNwLWNsaWVudC1zZXJ2aWNlLXR5cGUpCisgICAgICAg ICAgICAgICAgICAgIChzZXJ2aWNlIG50cC1zZXJ2aWNlLXR5cGUpCisgICAgICAgICAgICAgICAg ICAgIChzZXJ2aWNlIG9wZW5zc2gtc2VydmljZS10eXBlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChvcGVuc3NoLWNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh4MTEtZm9yd2FyZGluZz8gI3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YXV0aG9yaXplZC1rZXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKCgicGkiICwl bXktcHVibGljLWtleSkpKSkpCisgICAgICAgICAgICAgICAgICAgICViYXNlLXNlcnZpY2VzKSkK KyAgIChuYW1lLXNlcnZpY2Utc3dpdGNoICVtZG5zLWhvc3QtbG9va3VwLW5zcykpKQorCityYXNw YmVycnktcGktNjQtbmZzLXJvb3QKZGlmZiAtLWdpdCBhL2dudS9zeXN0ZW0vZXhhbXBsZXMvcmFz cGJlcnJ5LXBpLTY0LnRtcGwgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC50 bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZiMDE3OGM4NjEKLS0t IC9kZXYvbnVsbAorKysgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC50bXBs CkBAIC0wLDAgKzEsNzcgQEAKKzs7IFRoaXMgaXMgYW4gb3BlcmF0aW5nLXN5c3RlbSBjb25maWd1 cmF0aW9uIHRlbXBsYXRlIG9mIGEKKzs7IDY0LWJpdCBtaW5pbWFsIHN5c3RlbSBmb3IgYSBSYXNw YmVycnkgUGkgd2l0aCBsb2NhbCBzdG9yYWdlLgorCis7OyBJdCBuZWl0aGVyIGluc3RhbGxzIGZp cm13YXJlIG5vciBkZXZpY2UtdHJlZSBmaWxlcyBmb3IgdGhlIFJhc3BiZXJyeSBQaS4KKzs7IEl0 IGp1c3QgYXNzdW1lcyB0aGVtIHRvIGJlIGV4aXN0aW5nIGluIGJvb3QvZWZpIGluIHRoZSBzYW1l IHdheSB0aGF0IHNvbWUKKzs7IFVFRkkgZmlybXdhcmUgd2l0aCBBQ1BJIGRhdGEgaXMgdXN1YWxs eSBhc3N1bWVkIHRvIGJlIGV4aXN0aW5nIG9uIFBDcy4KKworOzsgSXQgZXhwZWN0cyB0aGUgYm9v dC1wYXJ0aXRpb24gdG8gYmUgbW91bnRlZCBhcyBib290L2VmaSBpbiB0aGUgc2FtZSB3YXkKKzs7 IGFzIGl0IGlzIHVzdWFsbHkgZXhwZXRlZCBvbiBQQ3Mgd2l0aCBVRUZJIGZpcm13YXJlLgorCiso dXNlLW1vZHVsZXMgKGdudSkKKyAgICAgICAgICAgICAoZ251IGFydHdvcmspCisgICAgICAgICAg ICAgKGdudSBzeXN0ZW0gbnNzKSkKKyh1c2Utc2VydmljZS1tb2R1bGVzIGFkbWluCisgICAgICAg ICAgICAgICAgICAgICBhdmFoaQorICAgICAgICAgICAgICAgICAgICAgbmV0d29ya2luZworICAg ICAgICAgICAgICAgICAgICAgc3NoKQorKHVzZS1wYWNrYWdlLW1vZHVsZXMgY2VydHMKKyAgICAg ICAgICAgICAgICAgICAgIGxpbnV4CisgICAgICAgICAgICAgICAgICAgICByYXNwYmVycnktcGkK KyAgICAgICAgICAgICAgICAgICAgIHNzaCkKKworKGRlZmluZSAlbXktcHVibGljLWtleQorICAo bG9jYWwtZmlsZSAoc3RyaW5nLWFwcGVuZCAoZ2V0ZW52ICJIT01FIikgIi8uc3NoL2lkX2VjZHNh LnB1YiIpKSkKKworKGRlZmluZS1wdWJsaWMgcmFzcGJlcnJ5LXBpLTY0CisgIChvcGVyYXRpbmct c3lzdGVtCisgICAoaG9zdC1uYW1lICJyYXNwYmVycnlwaS1ndWl4IikKKyAgICh0aW1lem9uZSAi RXVyb3BlL0JlcmxpbiIpCisgICAoYm9vdGxvYWRlciAoYm9vdGxvYWRlci1jb25maWd1cmF0aW9u CisgICAgICAgICAgICAgICAgKGJvb3Rsb2FkZXIgZ3J1Yi1lZmktYm9vdGxvYWRlci1jaGFpbi1y YXNwaS02NCkKKyAgICAgICAgICAgICAgICAodGFyZ2V0cyAnKCIvYm9vdC9lZmkiKSkKKyAgICAg ICAgICAgICAgICAodGhlbWUgKGdydWItdGhlbWUgKHJlc29sdXRpb24gJygxOTIwIC4gMTA4MCkp CisgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZSAoZmlsZS1hcHBlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlYXJ0d29yay1yZXBvc2l0b3J5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIi9ncnViL0d1aXhTRC1mdWxseS1ibGFjay0xNi05LnN2ZyIpKSkpKSkK KyAgIChrZXJuZWwgKG1vZGlmeS1saW51eCAjOmxpbnV4IGxpbnV4LWxpYnJlLWFybTY0LWdlbmVy aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAjfCBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSBz cGVjaWZpYyBkZWZjb25maWcgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig ZXhhbXBsZSB0aGUgImJjbXJwaTNfZGVmY29uZmlnIiB3aXRoIHRoZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhcmlhYmxlIHNob3duIGJlbG93LiAgVW5mb3J0dW5hdGVseSB0aGUga2Vy bmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgZnJvbSB0aGUgbGludXgtbGli cmUgc291cmNlcyB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb25m aWcgZmlsZSBkb2VzIG5vdCBib290LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6ZXh0 cmEtdmVyc2lvbiAiZ251LWJjbXJwaTMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpk ZWZjb25maWcgJWJjbXJwaTMtZGVmY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICAgfCMp KQorICAgKGluaXRyZC1tb2R1bGVzICcoKSkKKyAgIChmaWxlLXN5c3RlbXMgKGNvbnMqIChmaWxl LXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VudC1wb2ludCAiLyIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgKHR5cGUgImV4dDQiKQorICAgICAgICAgICAgICAgICAgICAg ICAgIChkZXZpY2UgKGZpbGUtc3lzdGVtLWxhYmVsICJHdWl4IikpKQorICAgICAgICAgICAgICAg ICAgICAgICAgKGZpbGUtc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdW50LXBv aW50ICIvYm9vdC9lZmkiKQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlICJ2ZmF0IikK KyAgICAgICAgICAgICAgICAgICAgICAgICAoZGV2aWNlIChmaWxlLXN5c3RlbS1sYWJlbCAiRUZJ IikpKQorICAgICAgICAgICAgICAgICAgICAgICAgJWJhc2UtZmlsZS1zeXN0ZW1zKSkKKyAgIChz d2FwLWRldmljZXMgKGxpc3QgKHN3YXAtc3BhY2UgKHRhcmdldCAiL3J1bi9zd2FwZmlsZSIpKSkp CisgICAodXNlcnMgKGNvbnMqICh1c2VyLWFjY291bnQKKyAgICAgICAgICAgICAgICAgIChuYW1l ICJwaSIpCisgICAgICAgICAgICAgICAgICAoZ3JvdXAgInVzZXJzIikKKyAgICAgICAgICAgICAg ICAgIChzdXBwbGVtZW50YXJ5LWdyb3VwcyAnKCJ3aGVlbCIgIm5ldGRldiIgImF1ZGlvIiAidmlk ZW8iKSkKKyAgICAgICAgICAgICAgICAgIChob21lLWRpcmVjdG9yeSAiL2hvbWUvcGkiKSkKKyAg ICAgICAgICAgICAgICAgJWJhc2UtdXNlci1hY2NvdW50cykpCisgICAocGFja2FnZXMgKGNvbnMq IG5zcy1jZXJ0cworICAgICAgICAgICAgICAgICAgICBvcGVuc3NoCisgICAgICAgICAgICAgICAg ICAgICViYXNlLXBhY2thZ2VzKSkKKyAgIChzZXJ2aWNlcyAoY29ucyogKHNlcnZpY2UgYXZhaGkt c2VydmljZS10eXBlKQorICAgICAgICAgICAgICAgICAgICAoc2VydmljZSBkaGNwLWNsaWVudC1z ZXJ2aWNlLXR5cGUpCisgICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlIG50cC1zZXJ2aWNlLXR5 cGUpCisgICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlIG9wZW5zc2gtc2VydmljZS10eXBlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuc3NoLWNvbmZpZ3VyYXRpb24KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh4MTEtZm9yd2FyZGluZz8gI3QpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYXV0aG9yaXplZC1rZXlzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBgKCgicGkiICwlbXktcHVibGljLWtleSkpKSkpCisgICAgICAgICAgICAgICAg ICAgICViYXNlLXNlcnZpY2VzKSkKKyAgIChuYW1lLXNlcnZpY2Utc3dpdGNoICVtZG5zLWhvc3Qt bG9va3VwLW5zcykpKQorCityYXNwYmVycnktcGktNjQKLS0gCjIuMzQuMAoK --b1_dy1TZ2hS49oNQXeFOaGaAgaz8PDQdSfZJR0gkUp7ur0-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 09:03:22 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 13:03:22 +0000 Received: from localhost ([127.0.0.1]:55579 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nez86-0002S4-Ls for submit@debbugs.gnu.org; Thu, 14 Apr 2022 09:03:22 -0400 Received: from mail-40134.protonmail.ch ([185.70.40.134]:30326) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nez83-0002Rq-GU for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 09:03:21 -0400 Date: Thu, 14 Apr 2022 13:03:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649941392; bh=5/07Jho388PPpFQ0eM1XsQzgIM3MtsF38zPj2ZPs2PI=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=zg/JmrIQrqBAAC9f+cv8ptCBnT5WRdPoU1c1tPzug7A6cyFckhwNJGJ+EiiBHRvwZ jq5zRR13cUteA63Gif505/SayqAiiqez7te9F/Afa5nzJxxmY/3QrzYZk/kn+T0zNm 3q3ITqoZnis/SpIiBd+gzkrqEJe04nMNPPjt3Dk3riaMnXj5sosYP73EJmTehq7PHF LbD9uOoxScGIivEWQztu8tjBXC2DckDIgbMuyet06rbEstO1Xxk1ZnETDUQBPkgQku o3Z8pisfg19902MlH2GGMqilakZN7Fgv6tQsxxsgt0G8HuKCz4E7ul0r23EA0/Dnyw T7JQ1kUGvxFog== To: Maxime Devos From: phodina Subject: [PATCH v5] Install guix system on Raspberry Pi Message-ID: <_G8Wp0VvUVQwRBwRglLXwBugZu8x_4_D739HjTzIFUqEBlHTehUq9JkCc0pSXhvZC1bJZTlFicZBHYs5ZROL_4LVIPQs34I2b7OymZM0FNU=@protonmail.com> In-Reply-To: References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Here's more details about the login issue. I've chrooted into the SDcard and setup the password for the pi user manual= ly. Then booted the board and login: ~$ ssh pi@192.168.1.181 Last login: Thu Apr 14 14:52:56 2022 from 192.168.1.224 Could not chdir to home directory /home/pi: Permission denied -bash: /home/pi/.bash_profile: Permission denied -bash-5.1$ id -u 1002 -bash-5.1$ id -gn users -bash-5.1$ sudo -E /gnu/store/ja92d7xpmyh94gm6n83bajx9dy4h6pbl-bash-5.1.8/b= in/bash root@raspberrypi-guix /# ls -al /home/pi total 40 drwx------ 4 1000 users 4096 Nov 24 08:16 ./ drwxr-xr-x 4 root root 4096 Jan 1 1970 ../ -rw-r--r-- 1 1000 users 85 Jan 1 1970 .bash_profile -rw-r--r-- 1 1000 users 834 Jan 1 1970 .bashrc drwxr-xr-x 3 1000 users 4096 Jan 1 1970 .config/ -rw-r--r-- 1 1000 users 235 Jan 1 1970 .gdbinit -rw-r--r-- 1 1000 users 789 Jan 1 1970 .guile drwxr-xr-x 2 root root 4096 Nov 24 08:16 .ssh/ -rw-r--r-- 1 1000 users 47 Jan 1 1970 .Xdefaults -rw-r--r-- 1 1000 users 62 Jan 1 1970 .zprofile As you can see the execute bit is missing. Therefore running chmod +x /home/pi/ fixed the problem. But I'm unsure why the home dir was created without the = those flags. Is it a side effect of using the following declaration? (home-directory "/home/pi") ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 09:57:44 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 13:57:44 +0000 Received: from localhost ([127.0.0.1]:56823 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nezyi-00049q-FO for submit@debbugs.gnu.org; Thu, 14 Apr 2022 09:57:44 -0400 Received: from andre.telenet-ops.be ([195.130.132.53]:39382) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nezyg-00049g-Fv for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 09:57:43 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by andre.telenet-ops.be with bizsmtp id Jdxg2700C4UW6Th01dxgLQ; Thu, 14 Apr 2022 15:57:40 +0200 Message-ID: <80407def8662e15c9a6ab7ffcfaaa89137641747.camel@telenet.be> Subject: Re: [PATCH v5] Install guix system on Raspberry Pi From: Maxime Devos To: phodina Date: Thu, 14 Apr 2022 15:57:35 +0200 In-Reply-To: <_G8Wp0VvUVQwRBwRglLXwBugZu8x_4_D739HjTzIFUqEBlHTehUq9JkCc0pSXhvZC1bJZTlFicZBHYs5ZROL_4LVIPQs34I2b7OymZM0FNU=@protonmail.com> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> <_G8Wp0VvUVQwRBwRglLXwBugZu8x_4_D739HjTzIFUqEBlHTehUq9JkCc0pSXhvZC1bJZTlFicZBHYs5ZROL_4LVIPQs34I2b7OymZM0FNU=@protonmail.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-HeWEJrHFDddSfh32VLoM" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649944660; bh=mSDXyHcikKj/Wfh3YpMI5bviwKmSq+eTpfXjHpi+nrE=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=F++sl97MkVOzRSHErNItwh+d6maTfY924SmAdgiD+qK5LaXQmngK7NcZPVzPBhKC2 XvgmMGAhJBGsgq7Da7WNkva74P+zHJ9uK7bG+o8Mz3kaycWm0QupiZ1MgKyVIgolzN KhWD0lNk127gRxsOaDeXazV2e+UfKQJv6ck8v8/fFCYUnojD8AQhcBGp/IF7PeukbB yvCPWsvuZe/48INGHPGb3XWBsTONzsDNnz3E8BMksMDexFx+lFVwf7Ll1r42R8NZdS rqxW9xuOczLTrx7VwNxOBjzgxDVIVuFFLMsK67LdvqYxFs6LyLi48Y+uUEiOHvo2r/ mz9qvvR1W1pJQ== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-HeWEJrHFDddSfh32VLoM Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable phodina schreef op do 14-04-2022 om 13:03 [+0000]: > ~$ ssh pi@192.168.1.181 > Last login: Thu Apr 14 14:52:56 2022 from 192.168.1.224 > Could not chdir to home directory /home/pi: Permission denied > -bash: /home/pi/.bash_profile: Permission denied > -bash-5.1$ id -u > 1002 > -bash-5.1$ id -gn > users > -bash-5.1$ sudo -E /gnu/store/ja92d7xpmyh94gm6n83bajx9dy4h6pbl-bash-5.1.8= /bin/bash > root@raspberrypi-guix /# ls -al /home/pi > total 40 > drwx------ 4 1000 users 4096 Nov 24 08:16 ./ You are logging in as 1002. /home/pi is owned by =E2=80=981000=E2=80=99. = =C2=A0Is this difference intentional? Maybe you have added two users, but with the home directory? (guesswork). > As you can see the execute bit is missing. Therefore running The user has the read-write-execute bits, the group and other don't. > chmod +x /home/pi/ > > fixed the problem. But I'm unsure why the home dir was created > without the those flags. I'm not on Guix System at the moment, so I cannot tell what the usual behaviour is, but why wouldn't the home directory be non-group- executable and non-other executable?=C2=A0 Unless you want to share the contents of your home to other users on the system, or if you have a web server that looks for http://.../~pi/index.html in /home/pi/web/index.html or the like, restricting readability, writability and executability to the actual =E2=80=98owner=E2=80=99 of the directory seems good security practice to me= . Usually, AFAICT, all that's needed is for $HOME to be user-readable, writable and executable. (/me quickly does "chmod go-rwx $HOME") Greetings, Maxime. --=-HeWEJrHFDddSfh32VLoM Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlgoTxccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7ofTAP4m9v+xx+ODX/ys/yU5lzerybnC tIxqzeIQNpw5I/3HNwEAyeDw2MPo0n0NpfAhS+maT1nRfpD+Qgv1MpADGo8rdA4= =gFe5 -----END PGP SIGNATURE----- --=-HeWEJrHFDddSfh32VLoM-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 10:00:53 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 14:00:53 +0000 Received: from localhost ([127.0.0.1]:56831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf01e-00051p-Ld for submit@debbugs.gnu.org; Thu, 14 Apr 2022 10:00:53 -0400 Received: from baptiste.telenet-ops.be ([195.130.132.51]:57604) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf01d-0004zQ-7v for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 10:00:45 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by baptiste.telenet-ops.be with bizsmtp id Je0j2700M4UW6Th01e0jHR; Thu, 14 Apr 2022 16:00:43 +0200 Message-ID: <5d9ba4b6fcbeb602c9d187611fd65606622549cf.camel@telenet.be> Subject: Re: [PATCH v5] Install guix system on Raspberry Pi From: Maxime Devos To: phodina Date: Thu, 14 Apr 2022 16:00:43 +0200 In-Reply-To: References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <86d36088dc4c81112e1529ef9e5e46d6629912c1.camel@telenet.be> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-muzNTRd+Ze3TV+n6Dmru" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649944843; bh=SfutqiINqPqrTaFvb//Y14nFnpme98Vthg74YUz/3bI=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=ZQbcrVPYUhUgITfOXiX00k8/F9jIvYix3HI7PP/oCHPTlX4DI2LTF6KXp1Hzf8DTo fdvPTi7VMAPRXOn9saOQogQTUjoVnETJhdOzTBV5sGNp0ju2TemQ1SZh1eRgNezRao 29CSfU1qafDWuamE0cvTebps/fDKE6wtvShGmrrjv7NPObGFFAnO4Sfa8y5o2F1iHh 1mmdUGPy9moPGIR/CqlwF5PuEj0VGQba+NLm+Uw3AxxnPDr7NjjL6C6IaoOoVwGtPX WhyXv/hAG5Jb5+2fk6MdRht8CohMqaWkN4fNzsjWUyraz3+1n5uH/juv3oLfC6QJ66 9pzYmdDkpaJVQ== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-muzNTRd+Ze3TV+n6Dmru Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable phodina schreef op do 14-04-2022 om 12:23 [+0000]: > However, I experience an issue when login into the system. I can get > there using my SSH key, but it seems the passwd set-uid binary is > missing from the profile: >=20 > $ ssh pi@192.168.1.181 > You are required to change your password immediately (administrator > enforced). > WARNING: Your password has expired. > passwd: no such file or directory > [...] I don't know what's going in here, though the =E2=80=98passwd not in $PATH= =E2=80=99 seems a plausible hypothesis to me. Greetings, Maxime. --=-muzNTRd+Ze3TV+n6Dmru Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlgpCxccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7lSOAQCyLEiyKCA7oChvitNIJYOK8qaF ItmKymjIfR/qUz5H6QEAtCl/6bD5kS8F2A+fsfHGzNouFVncYczyvXLRtVuBEgg= =7eTr -----END PGP SIGNATURE----- --=-muzNTRd+Ze3TV+n6Dmru-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 10:06:56 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 14:06:56 +0000 Received: from localhost ([127.0.0.1]:56867 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf07c-0006d1-66 for submit@debbugs.gnu.org; Thu, 14 Apr 2022 10:06:56 -0400 Received: from xavier.telenet-ops.be ([195.130.132.52]:56206) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf07Z-0006cr-SU for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 10:06:54 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by xavier.telenet-ops.be with bizsmtp id Je6s2700A4UW6Th01e6s7X; Thu, 14 Apr 2022 16:06:52 +0200 Message-ID: <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi From: Maxime Devos To: phodina , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> Date: Thu, 14 Apr 2022 16:06:51 +0200 In-Reply-To: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-QVjoMau4sXM370T8X8+a" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649945212; bh=vQoXD82n25GjXRGkuO9lFRUWsij0Kgd2IrXliUoSOZE=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=ZsYP1/O5PedGhwXUieBUjQrmEyAvrBd9MFTGoifrTpiGreFYPZIQLJ9+FSiC4Qpqo mNQepKXz3qyFHo/lA4QTlwaLEz2R1Xd3tB11irGXAvW4RrRYkc0+VuRX6o9fK5aShI 8ZprXSNJ+nc8vIwUSi8jqeeUc0OMwIFqiIFFQ5q3Q9jfKHYt80h0xcXqG87tX33YEe z/o7ivosj0HSHJo/ygwoydZGGROWemB0Xv3SU9Bnzg7k42OBn23Q4jPYJxKjf7dxOG oQ94kNzJupOEuZ6rybaqgKtwI8M0Q8pQmiWklQ/xoZjCmRgo0K8M3iEnvbUNMlWnvv 74tlku0mTSdcg== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , Ludovic =?ISO-8859-1?Q?Court=E8s?= , "dannym@scratchpost.org" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-QVjoMau4sXM370T8X8+a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable phodina via Guix-patches via schreef op do 14-04-2022 om 07:38 [+0000]: > I've also attempted to cross-compile the system (from x86_64) but > there is at least one package that can't be build - guile-fibers- > 1.1.0. I've attached the build log as well. This one should now be fixed by 1f82602153 gnu: guile-fibers@1.1: Support cross-compilation. Greetings, Maxime. --=-QVjoMau4sXM370T8X8+a Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlgqexccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7rT5AP9dGOLYZ984EsaZMRXS87uTZPKq axF1JfaT5vtWh01rZgD+NSt5pjJa3b/9Vx2mZ5EPqggr9G/1ilndgLuXNeqBJgc= =PC2/ -----END PGP SIGNATURE----- --=-QVjoMau4sXM370T8X8+a-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 11:53:46 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 15:53:46 +0000 Received: from localhost ([127.0.0.1]:57003 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf1n0-0003Db-Dl for submit@debbugs.gnu.org; Thu, 14 Apr 2022 11:53:46 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:36181) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf1mx-0003DN-QB for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 11:53:44 -0400 Date: Thu, 14 Apr 2022 15:53:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1649951617; bh=jaToy154P7NwBb2gVpR7FubNLBjQzXiJvoEjwIpsPns=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=EPRuZ9/kLSD1VamGO4OZI9qCdbXHOrv7ZV4+ClJsmaBaOddi2aKGu6MVEF3zXNNLN epKUleAP7obB4Q50WUmZ+8cpexIw5liTuvC5vcH+aQSW3+64aExYBfQu1meyO/G9Rp nLexsMH1YS7aOoRCBAKn/TIRlkL/c+CQoVbNeLM36vHlw3XJ+3ObpG16ckUDIQH2Dm oxB1YB+WRk29OczUnI2x+4QXt05yL9x8wA1kofZRphBHFfhvcmfmq1X0D4+rs8/lZZ 8vROrM6liJSAE6vMiOaDWIX96KhVY6CyVaH9QQRpaChvOeVQ7h2rdqKwNmo8oVy2Yu Ls0pGz5ognFZg== To: Maxime Devos From: phodina Subject: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_QQVv8a3KLGyROgE9coXJIzK4SjUOL16ueiArgqfo" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , =?utf-8?Q?Ludovic_Court=C3=A8s?= , "dannym@scratchpost.org" , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_QQVv8a3KLGyROgE9coXJIzK4SjUOL16ueiArgqfo Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > > > I've also attempted to cross-compile the system (from x86_64) but > > there is at least one package that can't be build - guile-fibers- > > 1.1.0. I've attached the build log as well. > > > This one should now be fixed by > > 1f82602153 gnu: guile-fibers@1.1: Support cross-compilation. > > Greetings, > Maxime. Yes, guile-fibers are now fixed, but the cross compile build fails now on shephe= rd-0.9 due to guile-fibers not being available. Also the NTP requires this configure flag. diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm index 7a3c033b2e..cb90432730 100644 --- a/gnu/packages/ntp.scm +++ b/gnu/packages/ntp.scm @@ -153,7 +153,8 @@ (define-public ntp `(("libcap" ,libcap)) '()))) (arguments - `(#:phases + `(#:configure-flags (list "--with-yielding-select=3Dyes") + #:phases (modify-phases %standard-phases (add-after 'unpack 'disable-network-test (lambda _ ---- Petr --b1_QQVv8a3KLGyROgE9coXJIzK4SjUOL16ueiArgqfo Content-Type: application/gzip; name=dnq1fk0xwj7fhmspnzqgdvlnk59p6p-shepherd-0.9.0.drv.gz Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=dnq1fk0xwj7fhmspnzqgdvlnk59p6p-shepherd-0.9.0.drv.gz H4sIAAAAAAACA+082XbbOpLv/gqe9MwkOX0ocZMoeiZ9xlGcpa+vnWPHvTz5giAIgrsAiou+fgqU bMsiKVuJbzIPfrKEWlCoKtQCQBYF4gVLqZIHSBDlD0EK9eri+nJ+qn44+Xaqnn69mH9+fbQXqogl xoR4xFOQXxCuaCNNEQRnqSeORM8EOSoC8fqIpCXjWZqQtFBKxBlyY0D4evJNsiSFUmTKH2OaLsei yDgZT2vGMbVneln6VkiR3gjuceS5Ik+aMg7VPKIqTOozqiLEcTC11Jily1oFHqo2MpyRMXZZerzF E6e+KJ2mQgg3yI8W3kKUBm9mvqY33EaOSpcsJqo50kb2Lm3EJ4sQzdImqPJ4VYX1qnFKK2eBWaHc rmKVYqxingnRI46ujYDpLksvcqe2ly+4zbCfiFq30MIU1OPGzJulHKuAvyxYLAb5GiOzIyg1UNjE szpyAL/mNHRTagRRaC4So9RWhgomUvWRae0SMlZXuDQjy4mEzn3TykPqr5JVEwS0Sqmp0hXLgVLv LESYQawboBKncYWdisaOFnbjrlb2Il0lgqouUBpAqo1mHZvMmAitcDGN0lIDPVBumR6bLsy09FZR bav1Sp2MjNFkl9BieGpYFjMxslyL19ioUk7jWDCvYSIoVV/acjIynV1KFCRJWRl6russmmkx1X1n Yja2783cRRQmqsd8f614syvwynSClFee0D2K3dyn4cxLSwOnoGmjdmPp7zgA09ij6S6t6XBRm2ls YVN3JkbYuG7ozrwp8/gkqG0OMqfeemZrNOt6zNTRFivTp6ZpeXmVmnk6jSZOalXYsczccFWKqgjW rHdJq5qWUzajWm5YiwnFzcrTGq7ZYhalznSmqYJ4ctJdujqsciMQnmNMpgyHILLPk1Wa5yHDTeVP VcpJDnrqrNUzJuBFFDtpYuB45furgDKWe6VfrqKyYrB5OVmvdTYyO3t1MgHlCqbPEhRQ3dTThDVo GiUT10oE9pGaoIiAwGbHL5pJ4sTuLDIXkas3TqIZonIqB00DhD19qrpIBGrCUpaguNVVZ83CyOkk cmZ+bFBDrKjjNVHdeM4qNmsWlI4ae2rFUZ4TrnYUzbEMWlakeTxAi9TRar+qcpFHbFJrbunf7+q+ 3atNHbQwSscxoxxbeoPcfOJOy8SqXCeMAtqGmf5wMgmMylowJ4j0xWpFmV7NTMPQGk9AwOCWUGnM XCxnNX+EVADtYDT/7dPN/OL845dPN4OBfaLFLHSonYchngaJteALpE28hVV5HIc1fxCEYdoxBPp1 nH8QrAwnR5ZhmMzWoik3NDuNqlwTJrX9IE5tCJIuxeBZ2sga5iIgYEwXelObmnDqJi4be1L6ISq5 lpjGNJZcUJElDKtZLlTY0TL6PWA3pIr55cXV1c3Zl/eXJ5f/fj5tbEs/WzlTI/cqHmi+ScGEUVXh kC40qxYTnxobWp+5hAsZuEfaLotD1bhNG66oNqk0w3ambmn509xITdpg3XOisLZXrfKWKRMFh4IA MrKz0d2zGOBBVPVMatp85aCVz1aajWeNZxtTDsku8O2JvfHePUnU3GWJKwvXwQIFNav00swTO7QX kUOdaLUy7TB8AksVaqGCYcl5v4/Mb76cz8+uP5w+k5ewFMdLj3y3mXvov8vUPXy+z9w9jJ6jGuth +xye1MM2NqHotP3KxGVsaEEI8XzCSyyaNNQS24k3LIA3J2pAkCf369AkkLFA/sntPI/41tez66sX //qV/jXGf/3ri+se7roX7//+EhlfIuOf6V4vwfHFxf4UF/t0/eXs9Obs4uTDxq2WKTjW48jzi9+/ wpenUL0/ufrcEp28Pzu9egLBE4LpQedjP88xnumcrG9LHHJw1UP/9MOrHuIDDrB6qA85Cuohf/rx Sg/xgUccPRwOOebok/6A84oeciPGYB3Xc1eBRSO7ChzdXfEFj+xgQnUvfiwiB1HgLoyFTn3h2BoV EJEDkeCFa5VJaUBGeGJEniZhVVlsZdUeSm3Lm7hu6Ac2i2c8pX4U9Yamp2a5pyW3/0db/icVyi/R 5CWadJ3tJSD92QHp0aPQg0LRznndM23q3dPJQzb07gnikzfzDuEBG3mH8pBNvEN64B7coT7E+3dX G3o0SPB0srCZzdyZs0rKxXQaaxRq/hBbW6RbB6rbHPyU66tpLVCqWdA+aA21Zp7WzCLTiBa122w4 LAt/psYZRjERvZIctAd3aL9r/+05GIaW4F9Q3M8H98qPLHq8Hnhwzb++oz/oap+lMBLH6i23pZDA 1yS9ub4ayYlfK2uQ4mdcwaggNOON8upsfnNydvbqqJ/NQSIs0xzh6PWRCEgeEO61mtXGu98Tq28I NCG3fzRKrB5ozjNaEFEMQLP+8Zan1w9LY9EPYGkRJwhnoh5mmnPiswE4JUVB6gFJGWiu7AHJjyOW diiYkGbcHfYyPO4bux0a6X1QTtwsK0azXsoCJblaFqwP6MNu0yHVwrJ64aQGYnDp8V7g5enJh99P 96JUWexTlNJwJHCyF/NmmUZpVqVDiCVkQpalgyIHKB7QxLD+7rQ7xPQOgaV+1rGwnLFr4Twb9wx5 ZJRnPeMFGtGkD7CMBgl6x/Pi5v3lAK+1L+wh6wWJcoCdNyDCnbbyrOgBf7349vHL2elVv85I+r9u FnuLJTj0uvDpQxIDIp19Of90fXLVA/kdCmOI+6J/yv3TQegkvNjUYSPRK/c8APcmZxntgd0tSBCv B7wH5A25hYgGAHKdsnAB7fYreBXczM/7DXe5lOlLitPviIOi9HIDIw35U+84J0lWEnDPAnuQxAb0 DBuoXwyfDwDWCx4k6spycv3t88Vlx4lcqIo9FS3r8TBkIKxvIcilqSIYxli/dhiJpfsoDpfVxDDW bcbfN1tcJAg8ZR+KzM6qx1nZ3RvbSLWMjTKCPio2XRIh9mElOTjwLsL56T87Jjl5f3H9TT0/6wDu dgHqJBGE2wqoJ1X357G10EtOBufo+qlUWTdprkc5aaurHpWv4QVHqWBQpg5iAIccValaBDwrCiit 6CBqnFG6Dy4r/aVQBanzPdPlMcIk2SdSlkqnzoYRcua1/dRjixqEt80Y5gQ6kyxVEwRRZwiVpaTw hhllPJLNAYT0kuFhgUQjCpIM84Gt7pIAlcRTcbzXXoLRFEFROgR3kWB4EJpmapAlfXJuyr6u+22V K12eg/v0LoOphqaZg9BdwLeLDxe7Y6TolrFyDHP5JBA4eTEkUtxh9fnk/LfOXv5yfvUNGpnBfTlC HUbzi6//hkqgU3Rn3rKvmr0dvx1+HAFiVNJXoXYQBeYsL54w5S3ixqiH8G4L0IMIpG88iWCZ5xl/ IvPb/fQU3HZvSdS+1qir7HVGfBo24lQ8RYgW52F/e1BPLM0kIFjnr48+nV8rbf5S1gtT7mC5JEiz Qklbtkcd2oOmXD94XgouT4nacHp3ttAD6mGtP8JaZEuOZSQnLux2AdzXw+vvx8qom6aPFSwjg2T1 h3ztCvp9vXuI8p0vhSWr/RLclxO/Xoy2GPv1YkDd+AuFuC85f6EQdzXtAxm2DiCdMHBdqgf+ZGLX s3Bi+o6oPYclceJrBtqddvMjlZ+4gtsu4RcqcdPJ/EIJtvqOny7FXXHx02fu03vK6tvrgybSm2q1 MvUot1yG43phNotpkIcN9DRNs57KWv8i69ll3ZcqDkpkd+p9fbTmo3iMEwwSNsfKq3GR5GO6ZLW6 doaHiXzk8VK9r3HXg6+UN5zE0BuURPF5lqzTMfAavXp7tE7NPzrD0Z3Qih8jChnnzav5/ObjxeXN ++svZx/eUYxfKa82v8q4+nx6dvbuGRQvh4Htc/NTNyfd2yyZLlBaRotJNdGFOZkK3Q4pzTHFEU7T 2Fd3dQ5cSCovUlQfwV7dBP92vNXru3o2vZla6uZI9/4SsEUJMlG869wPtqC2Q5e9KQGrvRuXiIMZ t/bkP08uz6G+P1aWKRg1oylbgd9luewNwTC9Yh3hgGDZ+bXXJEh5f/VBlTUMOI28CtpgjUYj5cd+ W3WbAxUV309ZBaQAzW2qxO27KCYU0DqR8zZE7AjZuTyVF1u5xB0A7S6SQ+Ou+pwQJYlAlYqaP8MC b1k9nEzeeUrm8m934fJdgrxfE8p/vPn95LfTtxI1zYYQ132HgLIZ6mnv7sJOdNT0dLI3GAGV97ZH zSCYpxQBKhQvI6Kt1wu+TOVVmpIti3xZ7GjtkN/4jeXJbkfe87MraXpOFstW1l77J4L6SbGrqVbZ 96Djh5D69paqhwqIEsIpeZruYUjZPDXYBE+Irhs5lTey5xFFE5O3j/ksxMV+jwVAVwY561zZNBdc qTIeiV7lbCF5xEfLuNjYSpHdj5KipBUWjWD0IaVY+hD5lMxXSE3wsrhzka40FVEQBPz2LcNmPnmc 1ifPPdfMDUFZrRgt26x/lXfi32lc6nQ+6OK9ClQQZF3o6RWVPjGESKJ1pJS1wTpQKnNdV3yCCoiu Yu0dKbntWZ8oyDKVj1QKBPkeQp8CfxU1gyloS9QRziM5AYoUN2s3koob9B0pzj3pg1a7aPLWzkOp 5p5M5ptdqtsZ95BJLcJ0Sxkj3GZYxmd+UBczV3rnGFDHHaRxvGUW5rfuJK/YwThvfrIcb2UYk44b 98cwEcAG8hT5kgnxRoGwqshGWck4g+pWkngPjBtklfRLibcOBVCn5DzD0ONnfDCOKOrpToAEqnVI X582CiXOAARE8LH1TbJjtIN+fz2WXx7OSOTQD/PsLGT+8SsUaoTDTiFinuXNSZ7/A8VL0hfg5x/P 2tcdEm++5FyeSvegSXNt0gREeGkbPBh1wBbg+jJf9aFAbJRWumXmQ9JsIwvENtCzrMQllZzgu1Lu Xc5+ltzbHw/v/73FjvGe6x9jjPfNeS/d/ZjcUaCYmED1qmzeOyjrzuTWBNvt6bbXy4d7CmzbbQw/ g9C8DepQtE/9+qoMCdwHA8JhsiHIjpoP/V8h4/b7jkO3i7tV1d/eKRuhW6KuCN5ziOD16aPXkb5v hR0HgTj/Zv0T8zbmohKxWCbvW0XfW5xwnvFj5WOLLHE3hwr/reTSqe6aHYUVo6MNMsSBdXP++r45 l/0VRksaFFApyTIDtHt89J93n5W//M9/sbTMIqK2XBT5mIujRHbYz9WpIk6XslFq++2tgxnZar90 3z+t+wYHYIW6vi4+VnSlIDxR1xebx8pffKjhsnzr+9+Uo85Rj+KDw94dD+lblxHyNk3m5OfzmhdP +VWecmvlikGRt/YXRT/6PwPP2RMQSwAA --b1_QQVv8a3KLGyROgE9coXJIzK4SjUOL16ueiArgqfo-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 11:56:40 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 15:56:40 +0000 Received: from localhost ([127.0.0.1]:57016 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf1po-0003It-CY for submit@debbugs.gnu.org; Thu, 14 Apr 2022 11:56:40 -0400 Received: from cascadia.aikidev.net ([173.255.214.101]:59402) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf1pm-0003Id-2g for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 11:56:39 -0400 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 0C5131AC62; Thu, 14 Apr 2022 08:56:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1649951792; bh=I1pUHf/ElpSw5pfm9Okt/q2e1zhcxFZpJincMz1GZro=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ld1OSadJJNhkw0K7b6EQ0jyRrjWBuL9USxKH8IEAKAMurkelJszB7tAOFgBFXv9lF tdIR8iaiSAFKPqC1rETG79D3PJkrPlLkreOzuy5Ten8vkPPWdxGenJbP1uHa3oPwXi mVkHFenYLnToKu5Si5g7vmVWdqSQA8ir/TslWstNchnrWXVyjxTzmVmIumbJ5/0P7h CH9+5hGsIGel0B5qCo8hiaMMW79n7D/Jc4ek/+C2MNUu08DX3hITS0k71R+v1zd+jw mgX4rYkRrJVvDTtzkCiYUDUe420OE0BffWN4wj6LRWfZ9aB4+V1sJA73e6B0dXkRbc jfvKtjhynIc+Q== From: Vagrant Cascadian To: phodina , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> Subject: Re: [PATCH v3] Install guix system on Raspberry Pi In-Reply-To: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> References: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> Date: Thu, 14 Apr 2022 08:56:26 -0700 Message-ID: <87a6cnvetx.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , "dannym@scratchpost.org" , Ludovic =?utf-8?Q?Court=C3=A8s?= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2022-04-14, phodina@protonmail.com wrote: > (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4, > u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi, > u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages. Comments from November are still relevent: https://issues.guix.gnu.org/48314#12 (e.g. drop drop u-boot-rpi-0-w*, u-boot-rpi, u-boot-rpi-efi, maybe consider droping u-boot-rpi-2* and the 32-bit variants for rpi3 and rpi4, as armhf is not well maintained at the moment). Basically, ARMv6 is not supportable by guix, ARMv7 is poorly supported in the armhf architecture, and ARMv8 is capable of running aarch64 (a.k.a. arm64): https://en.wikipedia.org/wiki/Raspberry_Pi#Specifications Only proposing aarch64 variants would pretty much leave you with rpi-arm64. The EFI variants and 32-bit variants supported on armhf could be easily added later once the other patches land. > +(define-public %u-boot-rpi-efi-configs > + '("CONFIG_OF_EMBED=" > + "CONFIG_OF_BOARD=y" > + "CONFIG_BOOTDELAY=0")) See comment: https://issues.guix.gnu.org/48314#15 e.g. Please do not set BOOTDELAY=0. It makes it nearly impossible to debug. For people who want to live on the edge, they could build custom variants and set it to 0. > +(define-public u-boot-rpi-64 > + (make-preinstalled-u-boot-package > + "rpi_arm64" > + "aarch64-linux-gnu" > + #:name "rpi-64" > + #:description %u-boot-rpi-description-64-bit)) Please keep package names consistent with defconfig name. (e.g. u-boot-rpi-arm64). It's confusing enough without extra newly invented names! :) > +(define-public u-boot-rpi-3-efi > + (make-preinstalled-u-boot-package > + "rpi_3_32b" > + "arm-linux-gnueabihf" > + #:name "rpi-3-efi" > + #:configs %u-boot-rpi-efi-configs > + #:description %u-boot-rpi-efi-description-32-bit)) Ditto, or drop this variant; same for the 32-bit rpi-4 variants. > Subject: [PATCH v3 2/8] build: kconfig: Add new module to modify a defconfig > file. ... > (define-public u-boot-pinebook > - (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu"))) > - (package > - (inherit base) > - (arguments > - (substitute-keyword-arguments (package-arguments base) > - ((#:phases phases) > - `(modify-phases ,phases > - (add-after 'unpack 'patch-pinebook-config > - ;; Fix regression with LCD video output introduced in 2020.01 > - ;; https://patchwork.ozlabs.org/patch/1225130/ > - (lambda _ > - (substitute* "configs/pinebook_defconfig" > - (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y") "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y\nCONFIG_VIDEO_BPP32=y")) > - #t))))))))) > + (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu" > + ;; Fix regression with LCD video output introduced in 2020.01 > + ;; https://patchwork.ozlabs.org/patch/1225130/ > + #:configs '("CONFIG_VIDEO_BPP32=y"))) I like how this simplifies the package definitions where you need to adjust the defconfig! This particular workaround for u-boot-pinebook may no longer be needed, thanks for the reminder to check. > (define-public u-boot-novena > - (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf"))) > + (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf" > + ;; Patch configuration to disable loading u-boot.img from FAT > + ;; partition, allowing it to be installed at a device offset. > + #:configs '("CONFIG_SPL_FS_FAT=")))) Maybe this is different in upstream u-boot, but in the past setting it to an empty value could result in the default value, which is why: > - (substitute* "configs/novena_defconfig" > - (("CONFIG_SPL_FS_FAT=y") "# CONFIG_SPL_FS_FAT is not set")) > - #t))))))))) ... was used previously. > Subject: [PATCH v3 5/8] gnu: raspberry-pi: Add defconfig objects to build > customized Linux kernels. > > gnu/packages/raspberry-pi.scm (make-raspi-defconig): New function to make > downloaded defconfig objects from the Linux repository of the Raspberry Pi > Foundation. > (%bcm2709-defconfig, %bcm2710-defconfig, %bcm2711-defconfig, > %bcm2835-defconfig, %bcmrpi-defconfig, %bcm2711-defconfig-64, > %bcmrpi3-defconfig): New variables containing defconfig objects to build > Linux kernels customized for Raspberry Pi single board computers. Similar to my comments on u-boot variants, some of these are for models that are not supportable on guix (rpi, rpi-0), so probably best to leave out entirely, and the 32-bit variants for armhf are debatable at this point. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYlhEKwAKCRDcUY/If5cW qtkeAP0c+M3oO8eUcFKXVFHoY5Kr8nwQTvh3udPDYOmaNMj7dAEA9f69eAL8ydg4 T05WR5yUZNqKRMmBCjkkGnGgSe+fmw0= =tQLe -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 14 13:33:11 2022 Received: (at 48314) by debbugs.gnu.org; 14 Apr 2022 17:33:11 +0000 Received: from localhost ([127.0.0.1]:57282 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf3LC-0006DL-Pu for submit@debbugs.gnu.org; Thu, 14 Apr 2022 13:33:10 -0400 Received: from michel.telenet-ops.be ([195.130.137.88]:40044) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nf3LA-0006DC-Is for 48314@debbugs.gnu.org; Thu, 14 Apr 2022 13:33:09 -0400 Received: from ptr-bvsjgyhxw7psv60dyze.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:3c5f:2eff:feb0:ba5a]) by michel.telenet-ops.be with bizsmtp id JhZ62700D4UW6Th06hZ6ex; Thu, 14 Apr 2022 19:33:07 +0200 Message-ID: <751092aecc38c221e13af71417e1ccace8c875eb.camel@telenet.be> Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi From: Maxime Devos To: phodina Date: Thu, 14 Apr 2022 19:33:01 +0200 In-Reply-To: References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-1H1mKzsrfGLWrj6Alozy" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22; t=1649957587; bh=sWhEW1b87Jp94k3UOltA5O/t/o5Q5JoQ3CFh4RU7zx0=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=NSJuPIirywsIW1e2fPek5DcFcGquEo1tJQKKorhXYhWSnTXU0C8WP01J27g0kZYRP eQBXZNFy6EkCSwOGD7v/O4OOjs3zwCB9YHbWeepVoKPLi9LBnCFPre3ZFbMDQnH0UN 4ZeOk6Z3KIb1fXqUbdzZyj17OLu+qjXSNtCFR0mvePWcQA2aboz2QXfR0u90WTu+j0 WuosC/yd1qSH3/fr9TFaxm0h1VZDwoHMSrHUYOEkGp1m7SmBEs61QYQazdwaqjMno/ B/D5S8AdujRUj/mNcBj3cCRBOBqzCk5j4iB3t0VklnXNub03Qz/HzsEZaEWho/TLU5 MS7VhY+iBG+Hg== X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , Ludovic =?ISO-8859-1?Q?Court=E8s?= , "dannym@scratchpost.org" , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-1H1mKzsrfGLWrj6Alozy Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable phodina schreef op do 14-04-2022 om 15:53 [+0000]: > Yes, >=20 > guile-fibers are now fixed, but the cross compile build fails now on > shepherd-0.9 due to guile-fibers not being available. Possibly the problem is just that guile-fibers is only in 'inputs' and not 'native-inputs' -- due to how compilation and the module system works in Guile, they need to be in both. Greetings, Maxime. --=-1H1mKzsrfGLWrj6Alozy Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYlhazRccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7r/ZAQCnEfmywGkenWDS3A2JNh9qQdtu jRpOnoQsgg99DbyIFQD8C002b/XUYvQ/edQSMYmNGDyivkxp+z4WG4DLi8sJBw0= =S//B -----END PGP SIGNATURE----- --=-1H1mKzsrfGLWrj6Alozy-- From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 15 13:17:34 2022 Received: (at 48314) by debbugs.gnu.org; 15 Apr 2022 17:17:34 +0000 Received: from localhost ([127.0.0.1]:60266 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nfPZe-000495-5W for submit@debbugs.gnu.org; Fri, 15 Apr 2022 13:17:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56864) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nfPZc-00048q-Cr for 48314@debbugs.gnu.org; Fri, 15 Apr 2022 13:17:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34212) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nfPZV-0005Y5-Fl; Fri, 15 Apr 2022 13:17:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=w6yX/5N1aDYQY51qKOKkJThAFHBAEztrZ8MMicW8a7c=; b=AchkguKOzyo8VbavD7Cz O/wHxzAPRjCbOcpCsdYo3MP87kb5vDr2INkF/skOwe7uC29ORWndveZbJMJEmaS2RHhwpM25rux8G 4Klqly86qbbGi5u7NPKH4VFD+SiJIFGQ+t9KRRopmh054eIXmVnxWlWrayIPMtLYUkDp3XYzqhSwe Ts/RsCQP31yjRf/Uoq/R0yESZ2LL+PheuayFro9g4jUGDyk8umqMdAOgimD8VQFhjZTFGNFKX3k3b 178MQcr7sbQD12a6WdX0eE66Er9dxBYeWO146wtXCt0oFadohpsaUC6kA3GJJt4faLDwoks7uNF7t muOpXqILZOo8TA==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:61954 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nfPZV-0000mr-3O; Fri, 15 Apr 2022 13:17:25 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: phodina Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 26 Germinal an 230 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Fri, 15 Apr 2022 19:17:23 +0200 In-Reply-To: (phodina@protonmail.com's message of "Thu, 14 Apr 2022 15:53:33 +0000") Message-ID: <8735ie2rmk.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , "dannym@scratchpost.org" , Maxime Devos , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, phodina skribis: > guile-fibers are now fixed, but the cross compile build fails now on shep= herd-0.9 due to guile-fibers not being available. Fixed as suggested by Maxime in commit 6e174c4edd4786d93c1e424c45052f70b2bb3fb0. Let us know what the next issue is. :-) Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 16 04:54:12 2022 Received: (at 48314) by debbugs.gnu.org; 16 Apr 2022 08:54:12 +0000 Received: from localhost ([127.0.0.1]:60695 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nfeC3-0002f7-VZ for submit@debbugs.gnu.org; Sat, 16 Apr 2022 04:54:12 -0400 Received: from mail-40134.protonmail.ch ([185.70.40.134]:57291) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nfeC1-0002es-DS for 48314@debbugs.gnu.org; Sat, 16 Apr 2022 04:54:10 -0400 Date: Sat, 16 Apr 2022 08:53:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1650099243; bh=WFtFe5hYwktiJK+ird40/iU9cmgQ80GqM0LdRFQhq4U=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=qqdVr/bdy4CVHaDUD7uYZbDnwq7yaShgseLrrs+sUbmMQeLrCRTKo5dbTLg072YNc CReKcV14uorbtsLDvLHGB7V6b015KDscCGBBJfzNOe5DWQP5w7ANq4XWUJWXhnhIYf eRTrmg+7hBCjvrUa0s8SelzMqFrIFrda6p+IeQrwh6MuDFdTC/XyOQwvqkFG64ip7Y qKR0weeJtx0vzO1nziKyAEf/Q0dd9CMGnjwMq7rHZl24mMHaFUIQws25DwOtCnOsOp KZ12ifejwM2yUKgyFMlZcVM8St7e0oZ5zWntbMT/8Rs1EXyZZCwgREC1Nmaqqou9AG VczUUW+Mcq5yA== To: =?utf-8?Q?Ludovic_Court=C3=A8s?= From: phodina Subject: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <8735ie2rmk.fsf@gnu.org> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> <8735ie2rmk.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_0t5JhqKGwtmbCzkrvzC30ZfjsTJbbzRxm4kOQJxM" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , "dannym@scratchpost.org" , Maxime Devos , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_0t5JhqKGwtmbCzkrvzC30ZfjsTJbbzRxm4kOQJxM Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > > guile-fibers are now fixed, but the cross compile build fails now on sh= epherd-0.9 due to guile-fibers not being available. > > > Fixed as suggested by Maxime in commit > 6e174c4edd4786d93c1e424c45052f70b2bb3fb0. > > Let us know what the next issue is. :-) > > Ludo=E2=80=99. Thanks Maxime for the advice and for Ludo' for applying the change! I've rebased the patches from Stefan and there are only two packages that d= on't cross-compile - nss-certs and ntp. I attempted to do guix pull on Raspberry Pi 3, but it failed due to running= of memory - I'll attempt to test it with a swap file/partition. Or is it possible to do guix pull using a substitute so that the computatio= n wouldn't be done locally? This offloading would be really great for these= embedded platforms. ---- Petr --b1_0t5JhqKGwtmbCzkrvzC30ZfjsTJbbzRxm4kOQJxM Content-Type: text/x-patch; name=0001-gnu-nss-certs-Support-cross-compilation.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-gnu-nss-certs-Support-cross-compilation.patch RnJvbSBkZWFiNjg3YzJiMDU0MGE5NDRiNDhjNjhmYTAwY2FjNGJhYzk5YjgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogU2F0LCAxNiBBcHIgMjAyMiAxMDoyMjoxNCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS8y XSBnbnU6IG5zcy1jZXJ0czogU3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbi4KCiogZ251L3BhY2th Z2VzL2NlcnRzLnNjbSAobnNzLWNlcnRzKVthcmd1bWVudHNdOiBGaXggdW5yZXNvbHZlZAogIHZh cmlhYmxlIC0gb3V0cHV0LgoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9jZXJ0cy5zY20gYi9n bnUvcGFja2FnZXMvY2VydHMuc2NtCmluZGV4IDI4YzJmODRmOTguLjYzNDg2YjU5NmMgMTAwNjQ0 Ci0tLSBhL2dudS9wYWNrYWdlcy9jZXJ0cy5zY20KKysrIGIvZ251L3BhY2thZ2VzL2NlcnRzLnNj bQpAQCAtNyw2ICs3LDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAyMSBNYXhpbSBDb3Vybm95ZXIg PG1heGltLmNvdXJub3llckBnbWFpbC5jb20+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEgRWZyYWlt IEZsYXNobmVyIDxlZnJhaW1AZmxhc2huZXIuY28uaWw+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjEg UmFnaGF2IEd1cnVyYWphbiA8cmdAcmFnaGF2Z3VydXJhamFuLm5hbWU+Cis7OzsgQ29weXJpZ2h0 IMKpIDIwMjIgUGV0ciBIb2RpbmEgPHBob2RpbmFAcHJvdG9ubWFpbC5jb20+CiA7OzsKIDs7OyBU aGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMTY4LDggKzE2OSw4IEBAIChk ZWZpbmUtcHVibGljIG5zcy1jZXJ0cwogICAgICAgICAgICAobWFwIChjdXQgYXNzcSA8PiAlc3Rh bmRhcmQtcGhhc2VzKQogICAgICAgICAgICAgICAgICcoc2V0LXBhdGhzIGluc3RhbGwtbG9jYWxl IHVucGFjaykpCiAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2luc3RhbGwKLSAgICAgICAg ICAgKGxhbWJkYSBfCi0gICAgICAgICAgICAgKGxldCAoKGNlcnRzZGlyIChzdHJpbmctYXBwZW5k ICVvdXRwdXQgIi9ldGMvc3NsL2NlcnRzLyIpKSkKKyAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5 IG91dHB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAgIChsZXQgKChjZXJ0c2Rp ciAoc3RyaW5nLWFwcGVuZCAoYXNzb2MtcmVmIG91dHB1dHMgIm91dCIpICIvZXRjL3NzbC9jZXJ0 cy8iKSkpCiAgICAgICAgICAgICAgICAod2l0aC1kaXJlY3RvcnktZXhjdXJzaW9uICJuc3MvbGli L2NrZncvYnVpbHRpbnMvIgogICAgICAgICAgICAgICAgICAodW5sZXNzIChmaWxlLWV4aXN0cz8g ImJsYWNrbGlzdC50eHQiKQogICAgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtb3V0cHV0LWZp bGUgImJsYWNrbGlzdC50eHQiIChjb25zdCAjdCkpKQotLSAKMi4zNS4xCgo= --b1_0t5JhqKGwtmbCzkrvzC30ZfjsTJbbzRxm4kOQJxM Content-Type: text/x-patch; name=0002-gnu-ntp-Support-cross-compilation.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0002-gnu-ntp-Support-cross-compilation.patch RnJvbSA5OGFkOTRmNjI4MmQ4ZmYzYTI0NDE4MWVjYzMyOTQ2ZWEyODFhYTAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEhvZGluYSA8cGhvZGluYUBwcm90b25tYWlsLmNvbT4K RGF0ZTogU2F0LCAxNiBBcHIgMjAyMiAxMDoyNDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8y XSBnbnU6IG50cDogU3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbi4KCiogZ251L3BhY2thZ2VzL250 cC5zY20gKG50cClbYXJndW1lbnRzXTogQWRkIGNvbmZpZ3VyYXRpb24gZmxhZy4KCmRpZmYgLS1n aXQgYS9nbnUvcGFja2FnZXMvbnRwLnNjbSBiL2dudS9wYWNrYWdlcy9udHAuc2NtCmluZGV4IDdh M2MwMzNiMmUuLmE2NDg2MWQ3ZmQgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9udHAuc2NtCisr KyBiL2dudS9wYWNrYWdlcy9udHAuc2NtCkBAIC04LDYgKzgsNyBAQAogOzs7IENvcHlyaWdodCDC qSAyMDE5IE1heGltIENvdXJub3llciA8bWF4aW0uY291cm5veWVyQGdtYWlsLmNvbT4KIDs7OyBD b3B5cmlnaHQgwqkgMjAyMSBNYXJpdXMgQmFra2UgPG1hcml1c0BnbnUub3JnPgogOzs7IENvcHly aWdodCDCqSAyMDIxIEJyaWNlIFdhZWdlbmVpcmUgPGJyaWNlQHdhZWdlbmVpLnJlPgorOzs7IENv cHlyaWdodCDCqSAyMDIyIFBldHIgSG9kaW5hIDxwaG9kaW5hQHByb3Rvbm1haWwuY29tPgogOzs7 CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXguCiA7OzsKQEAgLTE1Myw3ICsxNTQs OCBAQCAoZGVmaW5lLXB1YmxpYyBudHAKICAgICAgICAgICAgIGAoKCJsaWJjYXAiICxsaWJjYXAp KQogICAgICAgICAgICAgJygpKSkpCiAgICAoYXJndW1lbnRzCi0gICAgYCgjOnBoYXNlcworICAg IGAoIzpjb25maWd1cmUtZmxhZ3MgKGxpc3QgIi0td2l0aC15aWVsZGluZy1zZWxlY3Q9eWVzIikK KyAgICAgICM6cGhhc2VzCiAgICAgICAobW9kaWZ5LXBoYXNlcyAlc3RhbmRhcmQtcGhhc2VzCiAg ICAgICAgIChhZGQtYWZ0ZXIgJ3VucGFjayAnZGlzYWJsZS1uZXR3b3JrLXRlc3QKICAgICAgICAg ICAgICAgICAgICAobGFtYmRhIF8KLS0gCjIuMzUuMQoK --b1_0t5JhqKGwtmbCzkrvzC30ZfjsTJbbzRxm4kOQJxM-- From debbugs-submit-bounces@debbugs.gnu.org Mon Apr 18 17:01:35 2022 Received: (at 48314) by debbugs.gnu.org; 18 Apr 2022 21:01:35 +0000 Received: from localhost ([127.0.0.1]:40939 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ngYV4-0002KG-Rw for submit@debbugs.gnu.org; Mon, 18 Apr 2022 17:01:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36582) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ngYV3-0002K1-9A for 48314@debbugs.gnu.org; Mon, 18 Apr 2022 17:01:33 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52486) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ngYUt-0002Zt-ME; Mon, 18 Apr 2022 17:01:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=QJlnwOW+HGy1nAXpZa8lyD1EPUvtZ+S7pG7PdlpFKYY=; b=WfDq4PC/yv7npEA4AJmu wSDcMgRyHiWN7u45kyAJF4WKRM6khPf9KWOpdxOZnhso2BtkbC0Z6R3blXKpHaL8QCFqq9d0tc9uE jcYG2CdZbAfxFpkd+/o/vy0Os9gUcF75zHYYbz87sANgwW/IhS6dI7o4inOnDRL11D4oYMEcjNoGs VrufLOlW2NPqt0yU6x5rNibD1admz6HncdqqfvuKAgAjlDmS68PbhmI7ZzY+qXbum2NhIMo9b/brC //nj1rcQju5MkQMW5WkCsnHyLokjd07VRFN8LVLnRj6zfjGfEFE3a4qPGPYUBWwdwaiipltKc8UYA +Ayfy8VGkgN9mQ==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:57830 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ngYUP-0008LX-Da; Mon, 18 Apr 2022 17:01:09 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: phodina Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> <8735ie2rmk.fsf@gnu.org> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 29 Germinal an 230 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Mon, 18 Apr 2022 23:00:50 +0200 In-Reply-To: (phodina@protonmail.com's message of "Sat, 16 Apr 2022 08:53:53 +0000") Message-ID: <87lew2umwt.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , "dannym@scratchpost.org" , Maxime Devos , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, phodina skribis: > I've rebased the patches from Stefan and there are only two packages that= don't cross-compile - nss-certs and ntp. > > I attempted to do guix pull on Raspberry Pi 3, but it failed due to runni= ng of memory - I'll attempt to test it with a swap file/partition. > > Or is it possible to do guix pull using a substitute so that the computat= ion wouldn't be done locally? This offloading would be really great for the= se embedded platforms. Normally you should be able to get substitutes, making =E2=80=98guix pull= =E2=80=99 actually usable on these platforms. But I=E2=80=99m not sure what the stat= us is on armhf-linux. This platform needs love! > From deab687c2b0540a944b48c68fa00cac4bac99b80 Mon Sep 17 00:00:00 2001 > From: Petr Hodina > Date: Sat, 16 Apr 2022 10:22:14 +0200 > Subject: [PATCH 1/2] gnu: nss-certs: Support cross-compilation. > > * gnu/packages/certs.scm (nss-certs)[arguments]: Fix unresolved > variable - output. I addressed this one differently to avoid rebuilding the 600+ packages that depends on nss-certs. > From 98ad94f6282d8ff3a244181ecc32946ea281aa03 Mon Sep 17 00:00:00 2001 > From: Petr Hodina > Date: Sat, 16 Apr 2022 10:24:46 +0200 > Subject: [PATCH 2/2] gnu: ntp: Support cross-compilation. > > * gnu/packages/ntp.scm (ntp)[arguments]: Add configuration flag. I added a comment explaining why this flag is needed and committed. Should we close this issue now? Thanks! Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 21 06:52:39 2022 Received: (at 48314) by debbugs.gnu.org; 21 Apr 2022 10:52:39 +0000 Received: from localhost ([127.0.0.1]:48538 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nhUQQ-0000Fp-P6 for submit@debbugs.gnu.org; Thu, 21 Apr 2022 06:52:38 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:48543) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nhUQP-0000FJ-JM for 48314@debbugs.gnu.org; Thu, 21 Apr 2022 06:52:37 -0400 Date: Thu, 21 Apr 2022 10:52:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1650538350; bh=EgeOGS55XWIohUkh3YjzbVZ9X/qTcNnrLd8BZc1V/uU=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=tqtLSZ1b7ztOK0o+QvDfOEE62ll9g8IoDwCtQyH6tuS8AaiG2L6QqdzWlqP/TS57f 45SykuqcHMojhwd9yvFpOiSjPA+aTwFgYHwr3QEm/JKYjPIJGMTFY4qy378GWNGCfC zuzf6SINOB02QU5/kiNzGSv1+F95LCMw8KB5baQANlz0YwZg3WERVQ/R5X5gtWlE2X ndlzlkbfUe6IvU5JPBCCWWazC/yWvvzu/SCpeJUSQ2KwrHBDrPHKiKb87dF/4ghn7V MRiBwNAKiDBM4cF2yRdZb+s/KsYtbILo/DAdo96wdjK3VMf4jNN/jssQ1hb4tZf+v+ JG+Ufqm+8XY2A== To: =?utf-8?Q?Ludovic_Court=C3=A8s?= From: phodina Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <87lew2umwt.fsf@gnu.org> References: <19E4796A-B0DB-444F-8773-2E8D3EF6132D@vodafonemail.de> <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <08d2e5f4167486be4be7ef0dc024f1e2137b4bdf.camel@telenet.be> <8735ie2rmk.fsf@gnu.org> <87lew2umwt.fsf@gnu.org> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Vagrant Cascadian , "dannym@scratchpost.org" , Maxime Devos , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > Hi, > > phodina phodina@protonmail.com skribis: > > > I've rebased the patches from Stefan and there are only two packages th= at don't cross-compile - nss-certs and ntp. > > > > I attempted to do guix pull on Raspberry Pi 3, but it failed due to run= ning of memory - I'll attempt to test it with a swap file/partition. > > > > Or is it possible to do guix pull using a substitute so that the comput= ation wouldn't be done locally? This offloading would be really great for t= hese embedded platforms. > > > Normally you should be able to get substitutes, making =E2=80=98guix pull= =E2=80=99 > actually usable on these platforms. But I=E2=80=99m not sure what the sta= tus is > on armhf-linux. This platform needs love! > > > From deab687c2b0540a944b48c68fa00cac4bac99b80 Mon Sep 17 00:00:00 2001 > > From: Petr Hodina phodina@protonmail.com > > Date: Sat, 16 Apr 2022 10:22:14 +0200 > > Subject: [PATCH 1/2] gnu: nss-certs: Support cross-compilation. > > > > * gnu/packages/certs.scm (nss-certs)[arguments]: Fix unresolved > > variable - output. > > > I addressed this one differently to avoid rebuilding the 600+ packages > that depends on nss-certs. > > > From 98ad94f6282d8ff3a244181ecc32946ea281aa03 Mon Sep 17 00:00:00 2001 > > From: Petr Hodina phodina@protonmail.com > > Date: Sat, 16 Apr 2022 10:24:46 +0200 > > Subject: [PATCH 2/2] gnu: ntp: Support cross-compilation. > > > > * gnu/packages/ntp.scm (ntp)[arguments]: Add configuration flag. > > > I added a comment explaining why this flag is needed and committed. > > Should we close this issue now? > > Thanks! > > Ludo=E2=80=99. Thanks Ludo'! Vagrant has valid points about the patches. Stefan do you want to address them or shall I? I can confirm the Raspberry Pi 3 can run Guix, but when I attempt to do sim= ple `guix pull` it fails due to running out of memory (has just 1 GiB) ther= efore there is probably no point to run on less powerful boards. Not sure if the computation can be offloaded by using substitutes. It runs fine on Raspberry Pi 4 where there is 4GiB of memory (at least in m= y case :) - the variant with just one 1GiB would have probably same result = as RPi3. ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 21 15:32:58 2022 Received: (at 48314) by debbugs.gnu.org; 21 Apr 2022 19:32:58 +0000 Received: from localhost ([127.0.0.1]:50943 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nhcXy-0002zv-GR for submit@debbugs.gnu.org; Thu, 21 Apr 2022 15:32:58 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:33178) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nhcXw-0002zk-GR for 48314@debbugs.gnu.org; Thu, 21 Apr 2022 15:32:57 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4KknkZ68pBz25QF; Thu, 21 Apr 2022 19:32:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1650569575; bh=zpDkyD8w4U/RsHkgL+nIC0X6id+aLSOcDk1m2j9HMA8=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=cExDC2zAbahmZOoZaC0o3TIo8V5mTlH3IjcSB9Gwwqz5oWeDBqy4in1TCIlg2dlrM n5c8OCHXjWk/Kl5dPlRIThBjoApGA304D1uA0E08IXPC+5rr/MEexksbapZXLUVEMK oEeVqPhqiU2MJT7m4TyiSxJkortKl2oc6+Oq9iqk= Received: from smtpclient.apple (aftr-62-216-207-47.dynamic.mnet-online.de [62.216.207.47]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4KknkH1mGnzMkrs; Thu, 21 Apr 2022 19:32:36 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [bug#48314] [PATCH v3] Install guix system on Raspberry Pi Date: Thu, 21 Apr 2022 21:32:34 +0200 Message-Id: References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (19E258) X-purgate-type: clean X-purgate: clean X-purgate-size: 1888 X-purgate-ID: 155817::1650569574-00003D05-3C37A1B0/0/0 X-Spam-Score: 0.6 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , Maxime Devos , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.4 (/) Hi Petr! > Vagrant has valid points about the patches. >=20 > Stefan do you want to address them or shall I? I have already patches to address the review comments from Vagrant, actually= for months; also including improvements (e.g. checking that defconfig chang= es are successfully applied, which is not guaranteed). Beside a lack of time, it is as you said: Building with 1 GB RAM is very pro= blematic. Swap space is a requirement. Building takes days, using make with s= ub-targets helps a bit. In recent Linux kernels the virtual memory handling i= s badly broken; the build process gets killed, although there is empty swap s= pace. Only version 5.4 is still fine. Without other hardware offloading or c= ross-building is not an option. Substitutes of guix, Linux, which needs spec= ial config settings, U-Boot and I think GRUB, are not =E2=80=93 can=E2=80=99= t be =E2=80=93 available. Last time I tried at least qemu =E2=80=93 an input= of GRUB =E2=80=93 had build issues on aarch64 and was missing a substitute.= For Linux I meanwhile need to remove the deblob-check, as it even exhausts m= y swap space. I=E2=80=99m hesitant to submit my untestet patches. I hope to find some time= on the weekend =E2=80=93 and that I don=E2=80=99t make mistakes, as my turn= -around-time is close to a week. ;-) By the way: I have the feeling that a garbage-collector may be a real bottle= -neck, if most of a process=E2=80=99 memory is swapped out. I was surprised t= o not find papers about this. And once I was looking for options to limit th= e Guile heap, but didn=E2=80=99t find anything helpful. > It runs fine on Raspberry Pi 4 where there is 4GiB of memory This is good to know, thanks! Would you mind, if I send untested patches, which you could pick up? Is ther= e a possibility to offload to ci.guix.gnu.org?=20 Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 27 22:57:57 2022 Received: (at 48314) by debbugs.gnu.org; 28 Apr 2022 02:57:57 +0000 Received: from localhost ([127.0.0.1]:44840 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njuLt-0008EN-FB for submit@debbugs.gnu.org; Wed, 27 Apr 2022 22:57:57 -0400 Received: from cascadia.aikidev.net ([173.255.214.101]:34422) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njuLq-0008E8-CI for 48314@debbugs.gnu.org; Wed, 27 Apr 2022 22:57:55 -0400 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 4BCB61AB81; Wed, 27 Apr 2022 19:57:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1651114668; bh=nhfAkeciTvvugUigk27enUjB7fJbjGVC7ZLDFaYPDP8=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=DQepzBwSr2MY/e8VpkIFsPhb4xdt8qOi7xx/6uQ2v6IC3XoehU/yweEbtHzvL7r1w r5/rSLn7xzqDx80NQXEuUJq/E4JjQgfAwsItlXGrzn6rSrLwrj0XIuey2yXELg//fq o1vbaXyZCsNES6za9lWTN1vrryNcCcOuN1qsfVO3S/b3XbNDBhrxnGjIMyAkS2mu++ 96BS244EJsEzz6YDXPbOqbrFajbNN81giSz9uLBtBJghqtUhSiM8QSShUCbAzGLtpN YkrOM8Dw5HLsX2ILyO3rAQM/z98raoJs8xYj7NbrRKH3eae4Yta2NPneIlgoxAj61Z qy8ZqWgOMuiGA== From: Vagrant Cascadian To: phodina , "48314@debbugs.gnu.org" <48314@debbugs.gnu.org> Subject: Re: [PATCH v3] Install guix system on Raspberry Pi In-Reply-To: <87a6cnvetx.fsf@contorta> References: <1JV7YdNsB7LB0ij9pMN5ktIsdpU8g98Lpu0yOrl_r6wFvRjqRJ5XqOktugKlia2rSeyNVEwY0b8VJrFJr1TsWgOIo-JW6EmTpj6Bz4dNzxQ=@protonmail.com> <87a6cnvetx.fsf@contorta> Date: Wed, 27 Apr 2022 19:57:42 -0700 Message-ID: <87tuadhq3d.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , "dannym@scratchpost.org" , Ludovic =?utf-8?Q?Court=C3=A8s?= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2022-04-14, Vagrant Cascadian wrote: > On 2022-04-14, phodina@protonmail.com wrote: > (e.g. drop drop u-boot-rpi-0-w*, u-boot-rpi, u-boot-rpi-efi, maybe > consider droping u-boot-rpi-2* and the 32-bit variants for rpi3 and > rpi4, as armhf is not well maintained at the moment). > > Basically, ARMv6 is not supportable by guix, ARMv7 is poorly supported > in the armhf architecture, and ARMv8 is capable of running aarch64 > (a.k.a. arm64): > > https://en.wikipedia.org/wiki/Raspberry_Pi#Specifications > > > Only proposing aarch64 variants would pretty much leave you with > rpi-arm64. Just tested this on an rpi3b+ and sometime between u-boot 2021.01 and 2021.04 rpi-arm64 fails to boot on rpi3b+ ... but does work with the rpi_3 and rpi_3_b_plus defconfigs... so I guess that makes a case for having multiple variants, even if rpi_arm64 theoretically supports all the arm64 boards... hrm. That said, now that I've been able to test it; I feel confident at least adding a simple u-boot-rpi-3 and/or u-boot-rpi-3-b-plus package (without most of the proposed changes). Even though I haven't been able to test u-boot-rpi-arm64, might be worth adding just to get it out of the way. I could also test booting the rpi2 variants, though as mentioned earlier, I'm skeptical about adding more support until things improve for armhf on guix. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYmoCpwAKCRDcUY/If5cW qoDsAP9afw8hzCAE4v3A5hDThqmuVjJc6QY8GzcVXL6NfEf7vwEA77E5S47d/cPP DkSqZtZiEAknwSKor+q2kfrru0GZ5QE= =z51b -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 28 02:05:46 2022 Received: (at 48314) by debbugs.gnu.org; 28 Apr 2022 06:05:46 +0000 Received: from localhost ([127.0.0.1]:45022 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njxHe-0004wp-9h for submit@debbugs.gnu.org; Thu, 28 Apr 2022 02:05:46 -0400 Received: from mr6.vodafonemail.de ([145.253.228.166]:34148) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1njxHc-0004wc-3I for 48314@debbugs.gnu.org; Thu, 28 Apr 2022 02:05:45 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4KplTy3JKhz1xxX; Thu, 28 Apr 2022 06:05:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1651125942; bh=fYR/m7j3Enc2vIHu/deIkrCypFLrZWHTe4MxuNU/MFg=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=YUkdqKk+/FDcO7sPOKWinn8Wet/XSOCufTqBpoYVYKDkc5xZuYagkvynORFV3SmAN 2WHyY7qkx4wyRk4x4SbKP+BkDFnzvdrWisa5L1vZ/Q6vxpznIx8izqnUi/AsvNd49/ 2yOHgPgpQmkchfluOnQbN6ui1QFVFEpyAHUbTjPM= Received: from smtpclient.apple (aftr-62-216-210-182.dynamic.mnet-online.de [62.216.210.182]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4KplTj3hG8zHnHV; Thu, 28 Apr 2022 06:05:26 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Thu, 28 Apr 2022 08:05:25 +0200 Message-Id: <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> References: <87tuadhq3d.fsf@contorta> In-Reply-To: <87tuadhq3d.fsf@contorta> To: Vagrant Cascadian X-Mailer: iPhone Mail (19E258) X-purgate-type: clean X-purgate: clean X-purgate-size: 787 X-purgate-ID: 155817::1651125941-00007832-7D25A3D7/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Vagrant! > Just tested this on an rpi3b+ and sometime between u-boot 2021.01 and > 2021.04 rpi-arm64 fails to boot on rpi3b+ ...=20 IWithin my patch series there is one patch to modify a defconfig file. I enh= anced that patch meanwhile to check, that lines in the modified defconfig sh= ow up in the final .config file. Last weekend I found out that several setti= ngs differ. I also updated the raspberry specific defconfigs, but the mismat= ches still remain. My guess is, that the kernel has problems booting. Did GRUB show up? > I feel confident at least > adding a simple u-boot-rpi-3 and/or u-boot-rpi-3-b-plus package (without > most of the proposed changes) Please wait a bit longer, I addressed all your comments to U-Boot already. Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 28 11:26:17 2022 Received: (at 48314) by debbugs.gnu.org; 28 Apr 2022 15:26:17 +0000 Received: from localhost ([127.0.0.1]:49633 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nk625-0004lR-3o for submit@debbugs.gnu.org; Thu, 28 Apr 2022 11:26:17 -0400 Received: from cascadia.aikidev.net ([173.255.214.101]:34588) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nk623-0004lD-O2 for 48314@debbugs.gnu.org; Thu, 28 Apr 2022 11:26:16 -0400 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id B428C1AB85; Thu, 28 Apr 2022 08:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1651159569; bh=2E/MsoY+mp+W/gdgRWStoc7+cx3X8/PAlR1TJHILRvE=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=doKZY05wk4gRkWevvmcPDoLonFTrJni7BeQVH78shER5aq7Ceo4yVUvVCPeriDmOT tSkDeBAWoULXNMtKpVt/OtX9W5YZfm7CtKjvQEjEKs6sE7N1KEZem+Tniw/nOSISFP ao9NmZv/Y1SJbmkpx9OC836GIbo8utwnTns+Q17BqkL0J0RI+LjvHlX4tik9wW6IiE MtWU/4w0axH8nlbSGsdv4w7V2fscusKv9JeKtpEgClRlEfDK4NB7fb8z70wb4dHbqI 7J27cXU7uL+88AvHWTiIjqeTaEeHK0+Wyn2Wx7ILU5ty7QeyS5viem8DGyJFiLpSuQ llF6my8Rq0Xgw== From: Vagrant Cascadian To: Stefan Subject: Re: [PATCH v3] Install guix system on Raspberry Pi In-Reply-To: <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> References: <87tuadhq3d.fsf@contorta> <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> Date: Thu, 28 Apr 2022 08:25:50 -0700 Message-ID: <87zgk5b56p.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: dannym@scratchpost.org, Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On 2022-04-28, Stefan wrote: >> Just tested this on an rpi3b+ and sometime between u-boot 2021.01 and >> 2021.04 rpi-arm64 fails to boot on rpi3b+ ...=20 > > IWithin my patch series there is one patch to modify a defconfig > file. I enhanced that patch meanwhile to check, that lines in the > modified defconfig show up in the final .config file. Last weekend I > found out that several settings differ. I also updated the raspberry > specific defconfigs, but the mismatches still remain. Look forward to seeing an updated patch series! > My guess is, that the kernel has problems booting. Did GRUB show up? I didn't test with grub, just the syslinux-style menus, but it didn't even get as far as u-boot on the serial console with rpi_arm64_defconfig. With either rpi_3_defconfig or rpi_3_b_plus_defconfig, it worked just fine. I had to set gpu_freq=3D250 in config.txt, which is a bit of a known issue: https://github.com/raspberrypi/firmware/issues/553 >> I feel confident at least >> adding a simple u-boot-rpi-3 and/or u-boot-rpi-3-b-plus package (without >> most of the proposed changes) > > Please wait a bit longer, I addressed all your comments to U-Boot already. I really don't see the harm in it, and actually see considerable benefit to making a smaller diff for review as it is a huge patch series, but I'm not planning on actually using guix on any rpi hardware anytime soon, so... ok. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYmqx/wAKCRDcUY/If5cW qjkKAP9vc2+oukmzm3VHNTCP0xSP8eDLjTUOb2ieoZijcBjvQgEAtRn2AaYgXMAo FGdsy2yMy8eKCnw2aV7zFutax5qzmw4= =6bDk -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 02 02:40:35 2022 Received: (at 48314) by debbugs.gnu.org; 2 Jul 2022 06:40:35 +0000 Received: from localhost ([127.0.0.1]:39576 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o7Wny-0003Zj-QF for submit@debbugs.gnu.org; Sat, 02 Jul 2022 02:40:34 -0400 Received: from mail-4322.protonmail.ch ([185.70.43.22]:44467) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o7Wnw-0003ZN-8N for 48314@debbugs.gnu.org; Sat, 02 Jul 2022 02:40:33 -0400 Date: Sat, 02 Jul 2022 06:40:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1656744026; x=1657003226; bh=RvsLX/uZhftcYmCsxwfQ5jsXxzDYdx0wuVIAR4cdIOA=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=QxcCnv0ollqhN1WT3iJerEgJnb07r1suemXH1Fb2LYVwzVFh3k2aSSBO8XsTe9zNJ 2lcjrU8npTfD/iPkJZG9lGG7zAzfRrXP6/Ok2MkG+I3h5usXLe0F+SzID2+lsYK+vh f5M5AJD6PapvAtKXvO2jo3C4nphrrgryqqRMMXU/rGdZ5lW+v8mBFe0QiyNLS8ty9o 2xzWel/QjYBqOfY439WyIOzw+p9fG1havgkh4YS5tKM4/KqybGmbRbWLWC6MWT6JE7 WMExZc8hgbOyladlX2W+TU58M1VLohuBTBIZbGbmtl+Ppc1HFqmdfkGb4cP9/T+EqM b+TdTET75Q1Vw== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <87zgk5b56p.fsf@contorta> References: <87tuadhq3d.fsf@contorta> <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> <87zgk5b56p.fsf@contorta> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan, do you need help with the patches? Also should we provide some patches to the upstream kernel in Guix? [1] [1] https://github.com/lategoodbye/rpi-zero/issues/43 ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 12:48:12 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 16:48:12 +0000 Received: from localhost ([127.0.0.1]:48429 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7RD-0000RZ-RF for submit@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:12 -0400 Received: from mr6.vodafonemail.de ([145.253.228.166]:45166) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7R9-0000QJ-0l for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:10 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4Lm9y83M4cz1xr2; Sun, 17 Jul 2022 16:48:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658076480; bh=KgXm98wsCHaKDyNZ+lCPhEs+uCpg7v8RscfDP4iVz/g=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=XJUbUUsmZ83EGPfJBRz7zgHkYv4/7H6Yq70cl3mbUnGRbGiZbVm5qlkO/q2FJHBk3 sLqr3BdDoyg44/ssQhEFSDutB2aDS9D6FVLj17PJOzPO0IDH2jJ0FgqrkkXywIqkSK FLiN55saorBMBUb2FuJPOfH7QIUU8pTZGTsSX5hc= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lm9xy6zgbz9v2R; Sun, 17 Jul 2022 16:47:47 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi From: Stefan In-Reply-To: <87czn4aq2s.fsf@ponder> Date: Sun, 17 Jul 2022 18:47:47 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> <87czn4aq2s.fsf@ponder> To: Vagrant Cascadian X-Mailer: Apple Mail (2.3696.100.31) X-purgate-type: clean X-purgate: clean X-purgate-size: 1713 X-purgate-ID: 155817::1658076480-C6602208-C4C81094/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Danny Milosavljevic , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Vagrant! > The u-boot-rpi-0-w and u-boot-rpi variants are ARMv6 boards, and = Guix's armhf baseline is ARMv7, so those won't work with guix system. Uups. I will remove them. > In other words, keep names consistent with the upstream defconfig they = are based on. OK > I presume you didn't add the aarch64 rpi_3 and rpi_4 variants because = they are supported by rpi_arm64? Yes. > I think without addressing the rest of the patch series, adding to = guix master the following packages could make the remaining diff = smaller: >=20 > u-boot-rpi-2 (rpi_2_defconfig) > u-boot-rpi-3-32b (rpi_3_32b_defconfig) > u-boot-rpi-4-32b (rpi_4_32b_defconfig) > u-boot-rpi-arm64 (rpi_arm64_defconfig) >=20 > We wouldn't have a relevent installation configuration, but at least = it would allow building them and manually copying u-boot.bin to the = firmware partition=E2=80=A6 Well, in the past I tried to get one patch into master before sending = the next for review. Doing so I got the comment that it would be hard to = test the changes, as they are not complete and don=E2=80=99t build a = system. :-) > Which leads me to wonder, why have the name and description argument = at all, when you could just inherit and set the name, like done with the = boneblack? For the same board name there will be two packages, the =E2=80=9Cnormal=E2= =80=9D and an EFI variant. Having name-suffix and additional-description = fields eases appending. I will change the parameters accordingly. Having = these parameters also avoids to copy the U-Boot description, like done = for the boneblack. A while back you fixed that description three times. = :-) Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 12:48:17 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 16:48:17 +0000 Received: from localhost ([127.0.0.1]:48432 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7RJ-0000Rr-8u for submit@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:17 -0400 Received: from mr6.vodafonemail.de ([145.253.228.166]:45322) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7RH-0000RJ-24 for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:15 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4Lm9yK52kCz1xy4; Sun, 17 Jul 2022 16:48:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658076489; bh=W/hUwFds2+w70Zq0BCdw7BfLfdyhhVZM2YWzmuSrpVo=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=bej7t9N4KM3sWbUKWm10fhY+hf0kT/SR+voHP8m/jpcSXDTOOODKj9ez3DXUkdQsl in/6VcyOPYD9YCVEiLHW5fIwN6KjM25hdiuBxMjJid4mOml36Nc7/L6oekOCC/TbvA 9+JpDuTJi0rBOltgvlsygUWRxLzebwWWseGZ0BDY= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lm9yC3jVNz9v2S; Sun, 17 Jul 2022 16:48:00 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi From: Stefan In-Reply-To: <87a6i7c3sw.fsf@ponder> Date: Sun, 17 Jul 2022 18:47:52 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <86D908EE-955D-4EA1-AE2A-4072BB40468D@vodafonemail.de> References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> <87a6i7c3sw.fsf@ponder> To: Vagrant Cascadian X-Mailer: Apple Mail (2.3696.100.31) X-purgate-type: clean X-purgate: clean X-purgate-size: 2222 X-purgate-ID: 155817::1658076489-C6602208-3EE4B9FD/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Vagrant! > u-boot-file appears to be hard-coded; there may be other boards which = use a different u-boot artifact. If you build U-Boot, there is also u-boot-nodtb.bin. Therefore the = u-boot-file is a function argument to the public = make-preinstalled-u-boot-package to allow a selection. > Also, why return a single file, rather than just building a package = and then allowing other functions to pick the appropriate file out of = the resulting package? The reason is in the patch set 1: There is (already in master) a = bootloader-profile which is able to collect a chain of bootloaders. The = version in master allows a collection of files from packages, but = requires a special installer. I figured out that the usage of the = bootloader-profile gets much easier if the packages to chain only = contain preselected files. =46rom a user perspective the content of a = complete bootloader-package is kind of a blackbox. When writing an = operating-system configuration it is easy to figure out the right U-Boot = package name, but no one expects to be required to install U-Boot in his = profile to figure out that the u-boot.bin is below the libexec directory = and that he is even required to care about moving the file around in = directory hierarchies.=20 However, you are right that the make-preinstalled-u-boot-package could = take another U-Boot package as argument, being that other function to = pick the appropriate file. Then it might be useful for other boards, = too. The only trouble to solve then is a proper package name. Currently = using make-preinstalled-u-boot-package the result of make-u-boot-package = is only an intermediate package prefixed with =E2=80=9C-complete=E2=80=9D.= Then a preinstalled package needs a suffix like =E2=80=9C-bin=E2=80=9D. = I think this makes sense, I will change it. > I wondered "why does it have to be cross-compiled" but then realized = that came from the existing make-u-boot-package function.=20 Yes, that=E2=80=99s right, it is a copy from the other function. It will = be gone with the re-work. > I've mostly been building u-boot natively these days. :) Me too, exclusively. :-) Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 12:48:33 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 16:48:33 +0000 Received: from localhost ([127.0.0.1]:48435 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7RY-0000SM-Jb for submit@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:32 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:49454) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7RU-0000S4-3G for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:31 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4Lm9yZ0s7Pz1y4K; Sun, 17 Jul 2022 16:48:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658076502; bh=WnhjxYBfoIVdO0OLead7qS7TP7pq9z7ter/MS0jJvLc=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=TaGi9hU+cvYFa9Ja9mjd4mIGWpjhsfRyDd8co2w3ghDV6D44l9qSOgsq+Smma/NGm XN3Dix0SvSNjlXFYeW03OFEOsyulQmdjewz7IbfzjzWSLMI2LLbM6X4cUttPrNeash ZQNYeHstkNJu12vjLACarwbMU6GCKqNTqJQ1R+X4= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lm9yN5SFSz9v2y; Sun, 17 Jul 2022 16:48:09 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi From: Stefan In-Reply-To: <87zgq7ajt5.fsf@ponder> Date: Sun, 17 Jul 2022 18:47:58 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <3FFD5D1E-3FB9-4EB9-907A-8502519FF7FE@vodafonemail.de> References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> <87zgq7ajt5.fsf@ponder> To: Vagrant Cascadian X-Mailer: Apple Mail (2.3696.100.31) X-purgate-type: clean X-purgate: clean X-purgate-size: 2002 X-purgate-ID: 155817::1658076498-C6602208-7D36E43E/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Vagrant! >> +(define-public %u-boot-rpi-efi-configs >> + '("CONFIG_OF_EMBED=3D" >> + "CONFIG_OF_BOARD=3Dy" >> + "CONFIG_BOOTDELAY=3D0")) >=20 > This is surely a matter of opinion, but CONFIG_BOOTDELAY=3D0 is kind = of > nasty; it makes it nearly impossible to debug from a u-boot prompt if > needed. The default is probably "2" ... long enough to actually > interrupt it, but short enough that it shouldn't cause huge delays in > the boot process... >=20 > I know grub-efi will add it's own delay, so in a working environment, > this just seems like an additional two seconds, but u-boot's EFI > implementation is changing often enough that I wouldn't be surprised = if > you need to occasionally debug something. During all the months of work to get Guix System booting over network = with U-Boot and GRUB, there was no need for me to play around on the = U-Boot prompt. I was even affected by a bug=C2=B9 preventing U-Boot to = detect my keyboard at all. The actual problem with that bug was not that = the U-Boot prompt was unusable, but that GRUB relies on the keyboard = functionality of U-Boot, so I couldn=E2=80=99t debug boot problems e.g. = due to kernel argument problems in GRUB. Well, in this constellation U-Boot just needs to find and load the = efi/boot/bootaa64.efi file. It doesn=E2=80=99t need to load device-tree = files or care for overlays. It doesn=E2=80=99t need to load other stuff = like SPL or other images. Its only purpose is to impose an EFI interface = and to load GRUB. So the benefit of the U-Boot prompt is quite limited. Also other distributions like openSUSE use U-Boot as EFI firmware, so I = think the basic EFI functionality is tested quite well. My preference is = to not bother pure users with a delayed boot time. However, I changed it = to CONFIG_BOOTDELAY=3D1. Bye Stefan =C2=B9 = From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 12:48:44 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 16:48:44 +0000 Received: from localhost ([127.0.0.1]:48438 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7Rk-0000Sl-14 for submit@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:44 -0400 Received: from mr3.vodafonemail.de ([145.253.228.163]:51430) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7Rh-0000SX-Us for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 12:48:42 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr3.vodafonemail.de (Postfix) with ESMTPS id 4Lm9yr0fHYz1ycx; Sun, 17 Jul 2022 16:48:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658076516; bh=kjw+ohokM28VqdlG6b2J9U13FsPdhVY0xILO2Q+CTbY=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=CLOjuLG1cdSZvEiyRsCYhUm9EaSQhHioINTMhiyUUudIbs+udQpdW75p5bYfO/k8U 6yp6f35qWOekGRY1OHYfbGLbWx9IhCYUhmLvH4JNds3b/KwR0m2DtEliDlJMEBm23X B9OWd+KeGvcExp+Eg0SSusHzg8rrcZY62SGWmY+Q= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lm9yZ5K39z9tDb; Sun, 17 Jul 2022 16:48:19 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi From: Stefan In-Reply-To: Date: Sun, 17 Jul 2022 18:48:05 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <87tuadhq3d.fsf@contorta> <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> <87zgk5b56p.fsf@contorta> To: phodina X-Mailer: Apple Mail (2.3696.100.31) X-purgate-type: clean X-purgate: clean X-purgate-size: 1175 X-purgate-ID: 155817::1658076514-C6602208-A3E35430/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi! Sorry for tho long period of silence.=20 > do you need help with the patches? Actually not with the patches, but with building and testing. I was affected by the lack of substitutes for aarch64. Building with = only 1 GB RAM and swap space is a pain. For building Guix I figured out that building only sub-targets like = make-core-go, make-packages-go, etc. helps. But this way I missed to do = a =E2=80=9Cmake all=E2=80=9D and was wondering a lot and for long time = about errors because silently a wrong /gnu/stor/=E2=80=A6-guix-module-unio= n/ got used. I have a set of patches to fix or disable tests, just because of too = less RAM, too less computing-power and an NFS root file-system. Currently one test of glib is failing. So I can=E2=80=99t proof that my = patches lead to a working system on current Guix. > Also should we provide some patches to the upstream kernel in Guix? = [1] >=20 > [1] https://github.com/lategoodbye/rpi-zero/issues/43 I=E2=80=99m far from a point to care for patches to the kernel. I=E2=80=99= d be glad, if the linux-libre kernel is able to run a minimal Guix = System. :-) Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 13:21:50 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 17:21:50 +0000 Received: from localhost ([127.0.0.1]:48472 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7xm-0001HP-1I for submit@debbugs.gnu.org; Sun, 17 Jul 2022 13:21:50 -0400 Received: from cascadia.aikidev.net ([173.255.214.101]:56244) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD7xj-0001HD-K1 for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 13:21:49 -0400 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 8542B1AA7B; Sun, 17 Jul 2022 10:21:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1658078500; bh=pExzRNDhDz3/J1nTQQSshnyWyv85qsOvQM1fPB+Xr4c=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=BAkw4AopjHJ9qDj5UpwSOTzWpxQwZuS5jmNRFBmhHUHGTAv0oxskzKFjX6Ia9ab9E /TIJo2gI288UJlflwhPceLkAZeYBdMe+2BSWwDplPuuXyRN8/NPyXGCMBH/bGC1fUt bWXgPjGFhCHZ9tJA63eFiciTp24tZoYZOcbDMW3pfgMjPTmcyoYd5r+u0S/dwufNP2 DU0Uv+5rr0ws/ZtLCOqHpIrdewuY2aRXwbey7OW36YARWbfpiGmvsARbRuTqZF+AQZ wOedn97QQjiXe2NNYrm67zj67RPbX31rOkIe8g/E1vkunzzvNBmtZegvzk0qvqK+gM PCa0SYJi9xHaA== From: Vagrant Cascadian To: Stefan Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi In-Reply-To: <3FFD5D1E-3FB9-4EB9-907A-8502519FF7FE@vodafonemail.de> References: <20210619211026.5eb44073@scratchpost.org> <897B7FF7-24C1-4B96-8441-415596267E99@vodafonemail.de> <87zgq7ajt5.fsf@ponder> <3FFD5D1E-3FB9-4EB9-907A-8502519FF7FE@vodafonemail.de> Date: Sun, 17 Jul 2022 10:21:35 -0700 Message-ID: <878rork63k.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2022-07-17, Stefan wrote: >>> +(define-public %u-boot-rpi-efi-configs >>> + '("CONFIG_OF_EMBED=3D" >>> + "CONFIG_OF_BOARD=3Dy" >>> + "CONFIG_BOOTDELAY=3D0")) >>=20 >> This is surely a matter of opinion, but CONFIG_BOOTDELAY=3D0 is kind of >> nasty; it makes it nearly impossible to debug from a u-boot prompt if >> needed. The default is probably "2" ... long enough to actually >> interrupt it, but short enough that it shouldn't cause huge delays in >> the boot process... >>=20 >> I know grub-efi will add it's own delay, so in a working environment, >> this just seems like an additional two seconds, but u-boot's EFI >> implementation is changing often enough that I wouldn't be surprised if >> you need to occasionally debug something. > > During all the months of work to get Guix System booting over network > with U-Boot and GRUB, there was no need for me to play around on the > U-Boot prompt. ... > Well, in this constellation U-Boot just needs to find and load the > efi/boot/bootaa64.efi file. It doesn=E2=80=99t need to load device-tree f= iles > or care for overlays. It doesn=E2=80=99t need to load other stuff like SP= L or > other images. Its only purpose is to impose an EFI interface and to > load GRUB. So the benefit of the U-Boot prompt is quite limited. So if it does not find that one file, what do you do? > Also other distributions like openSUSE use U-Boot as EFI firmware, so > I think the basic EFI functionality is tested quite well. Sure, it has improved greatly. > My preference is to not bother pure users with a delayed boot > time. However, I changed it to CONFIG_BOOTDELAY=3D1. Well, from my perspective, this is obviously significantly less bad that 0 seconds... In general, it is my understanding that Guix prefers to go with upstream defaults, unless there is a strong argument otherwise. I do not personally see this as warranting a difference from upstream defaults to gain 1 or 2 seconds of boot time. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCYtRFIAAKCRDcUY/If5cW qkV1AQD5YpgU1NoDSozQ9h76dRLSKujel1If4JX8OoYBxJIeHQEAlkUgCXjX2S4i JAov6lkPch3hjAfJst0RxMN6yGAmjQQ= =z7Bo -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jul 17 14:04:42 2022 Received: (at 48314) by debbugs.gnu.org; 17 Jul 2022 18:04:42 +0000 Received: from localhost ([127.0.0.1]:48513 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD8dG-0002NG-1v for submit@debbugs.gnu.org; Sun, 17 Jul 2022 14:04:42 -0400 Received: from mr3.vodafonemail.de ([145.253.228.163]:44124) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oD8dC-0002N1-NJ for 48314@debbugs.gnu.org; Sun, 17 Jul 2022 14:04:41 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr3.vodafonemail.de (Postfix) with ESMTPS id 4LmCfS4C2Sz1yf5; Sun, 17 Jul 2022 18:04:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658081072; bh=Cx0jpDhq0wVDZv4N9/M28Z/XJ2a6iSi05QfI0UI+is8=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=f1SpS9UZSKVtU5Ceu6RuCyNsLKn9QmgaJtEQVOQxUWhyIEJCqc7vIlkgFwQuzbuMg LQq1sFtnj6wdLYRM4CMQ/gzzuCz4kTLvRMVTBH4euwa7+jGY9jqMB5oMQ6x4cN91Ju cSRCj2v6MuytkMPkp3ZFXhyhenTamFPdxPo25n3s= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4LmCfG5pMFzMmvN; Sun, 17 Jul 2022 18:04:19 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [bug#48314] Patches to install guix system on Raspberry Pi Date: Sun, 17 Jul 2022 20:04:19 +0200 Message-Id: References: <878rork63k.fsf@contorta> In-Reply-To: <878rork63k.fsf@contorta> To: Vagrant Cascadian X-Mailer: iPhone Mail (19F77) X-purgate-type: clean X-purgate: clean X-purgate-size: 327 X-purgate-ID: 155817::1658081069-1C2F12A7-3E65B3BC/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Vagrant! > So if it does not find that one file, what do you do? Valid point. Actually I would have copied back a working U-Boot version from= the NFS server side. ;-) > it is my understanding that Guix prefers to go with upstream defaults Would you mind removing that line if committing? Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 06:39:55 2022 Received: (at 48314) by debbugs.gnu.org; 18 Jul 2022 10:39:55 +0000 Received: from localhost ([127.0.0.1]:49259 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDOAN-0006yd-8n for submit@debbugs.gnu.org; Mon, 18 Jul 2022 06:39:55 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:38806) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDOAL-0006yN-Dk for 48314@debbugs.gnu.org; Mon, 18 Jul 2022 06:39:54 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4Lmdkq2LLcz1yD4; Mon, 18 Jul 2022 10:39:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658140787; bh=c+QhzsIUtddFEE6UMsGJyRunieEZI0UN+styDQZaUKU=; h=From:Message-Id:Content-Type:Subject:Date:In-Reply-To:To: References:X-Mailer:From; b=IEtaI+cL8khszkch2GjRaH8370dFbKilApDu7/SHG06NzXennyDm+yNfT8J+Im1C5 ZMdQYj73y55hArcmg6fcKVINjby8T6YiCIcG7FLj5TN3wkQECyiwX9hlmJPyCrrKtB 87wCNMifWdi28hesw/o49Firq84EZImXeLhH8k6Q= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4LmdkZ1sb2zMmvR; Mon, 18 Jul 2022 10:39:31 +0000 (UTC) From: Stefan Message-Id: <125F42BC-E90F-47A5-9997-7E0089AF07BF@vodafonemail.de> Content-Type: multipart/mixed; boundary="Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Sun, 17 Jul 2022 18:48:09 +0200 In-Reply-To: To: 48314@debbugs.gnu.org References: <87tuadhq3d.fsf@contorta> <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> <87zgk5b56p.fsf@contorta> X-Mailer: Apple Mail (2.3696.100.31) X-purgate-type: clean X-purgate: clean X-purgate-size: 144608 X-purgate-ID: 155817::1658140786-1C2F12A7-7D3003D7/0/0 X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , phodina X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi! A new patch series based on 7558417360d2ae011ec23197c75ef8e411558810. I = tried to apply all review comments. Bye Stefan --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=01-gnu-linux-fix-extra-version.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="01-gnu-linux-fix-extra-version.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20Fix=20the=20extra-version=20parameter=20in=20= make-linux-libre*.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(make-linux-libre*)=20= ['set-environment]:=20Make=0Athe=20Makefile=20accept=20EXTRAVERSION=20= from=20the=20environment.=20Fix=20the=20usage=20of=0Aan=20empty=20= extra-version=20string.=20Split=20this=20new=20phase=20out=20of=20and=20= adding=0Aif=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20make=20= the=20phases=20more=20hackable.=0A---=0A=20gnu/packages/linux.scm=20|=20=20= =2017=20+++++++++++------=0A=201=20file=20changed,=2011=20insertions(+),=20= 6=20deletions(-)=0A=0Adiff=20--git=20a/gnu/packages/linux.scm=20= b/gnu/packages/linux.scm=0Aindex=2019ba30aa16..b00b46be47=20100644=0A---=20= a/gnu/packages/linux.scm=0A+++=20b/gnu/packages/linux.scm=0A@@=20-63,6=20= +63,7=20@@=0A=20;;;=20Copyright=20=C2=A9=202021=20Petr=20Hodina=20= =0A=20;;;=20Copyright=20=C2=A9=202022=20Artyom=20= V.=20Poptsov=20=0A=20;;;=20Copyright=20=C2=A9=20= 2022=20Rene=20Saavedra=20=0A+;;;=20Copyright=20=C2=A9= =202022=20Stefan=20=0A=20=0A=20;;;=0A=20;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A@@=20-823,8=20+824,8=20@@=20= for=20ARCH=20and=20optionally=20VARIANT,=20or=20#f=20if=20there=20is=20= no=20such=20configuration."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda=20_=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(substitute*=20(find-files=20"."=20"^Makefile(\\.include)?$")=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("/bin/pwd")=20"pwd"))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (replace=20'configure=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(lambda*=20(#:key=20inputs=20target=20#:allow-other-keys)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(add-before=20'configure=20= 'set-environment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20target=20#:allow-other-keys)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Avoid=20introducing=20= timestamps.=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"KCONFIG_NOTIMESTAMP"=20"1")=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setenv=20"KBUILD_BUILD_TIMESTAMP"=0A@@=20= -846,11=20+847,15=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20or=20= #f=20if=20there=20is=20no=20such=20configuration."=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "CROSS_COMPILE"=20(string-append=20target=20"-"))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(format=20#t=20= "`CROSS_COMPILE'=20set=20to=20`~a'~%"=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(getenv=20= "CROSS_COMPILE"))))=0A-=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20Allow=20EXTRAVERSION=20to=20be=20set=20via=20the=20= environment.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (substitute*=20"Makefile"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(("^=20*EXTRAVERSION[[:blank:]]*=3D")=20"EXTRAVERSION=20= ?=3D"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"EXTRAVERSION"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#$(and=20extra-version=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(string-append=20"-"=20extra-version)))=0A-=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(not=20(string-null?=20extra-version))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(string-append=20"-"=20extra-version)))))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20inputs=20= #:allow-other-keys)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(let=20((build=20=20(assoc-ref=20%standard-phases=20'build))=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (config=20(assoc-ref=20inputs=20"kconfig")))=0A=20=0A@@=20-871,7=20= +876,7=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20or=20#f=20if=20= there=20is=20no=20such=20configuration."=0A=20=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(invoke=20"make"=20= "oldconfig"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (replace=20'install=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20native-inputs=20#:allow-other-keys)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20inputs=20= #:allow-other-keys)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(let=20((moddir=20(string-append=20#$output=20"/lib/modules"))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(dtbdir=20(string-append=20#$output=20"/lib/dtbs")))=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Install=20kernel=20= image,=20kernel=20configuration=20and=20link=20map.=0A= --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=02-gnu-bootloader-rework-chaining.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="02-gnu-bootloader-rework-chaining.patch" Content-Transfer-Encoding: quoted-printable gnu:=20bootloader:=20Rework=20chaining,=20add=20= grub-efi-netboot-removable-bootloader.=0A=0AFrom:=20Stefan=20= =0A=0A*=20doc/guix.texi=20(Bootloader=20= Configuration):=20Describe=20the=20new=0A= =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99.=20=20Mention=20= used=20sub-directories=20and=0Athat=20the=20UEFI=20Boot=20Manager=20is=20= not=20modified.=20=20Advice=20to=20disable=20write-access=0Aover=20TFTP.=0A= *=20gnu/bootloader.scm=20(efi-bootloader-profile):=20Allow=20a=20list=20= of=20packages=20and=0Acollect=20everything=20directly=20in=20the=20= profile,=20avoiding=20a=20separate=20collection=0Adirectory.=20=20= Renamed=20the=20profile=20from=20"bootloader-profile"=20to=0A= "efi-bootloader-profile".=0A[bootloader-collection]:=20Renamed=20to=20= =E2=80=A6=0A[efi-bootloader-profile-hook]:=20=E2=80=A6=20this=20and=20= removed=20unused=20modules=20and=20the=0Acreation=20of=20the=20now=20= unneeded=20collection=20directory.=0A(efi-bootloader-chain):=20Added=20= packages=20and=20disk-image-installer=20arguments.=0ARemoved=20handling=20= of=20the=20collection=20directory,=20now=20only=20calling=20the=20given=0A= installer=20procedure.=0A*=20gnu/bootloader/grub.scm=20= (make-grub-efi-netboot-installer):=20New=20helper.=0A= (make-grub-configuration):=20New=20helper=20based=20on=20= (grub-configuration-file).=0AAdding=20grub=20argument,=20fixed=20= indentation,=20removend=20code=20to=20get=20grub.=0A= (grub-configuration-file):=20Now=20using=20(make-grub-configuration).=0A= (grub-efi-configuration-file):=20New=20function=20using=20= (make-grub-configuration).=0AInstead=20of=20getting=20the=20grub-efi=20= package=20from=20the=20bootloader-configuration=0Athis=20function=20= refers=20to=20the=20grub-efi=20package=20directly.=0A(grub-cfg):=20New=20= variable=20to=20replace=20"/boot/grub/grub.cfg".=0A= (install-grub-efi-netboot):=20Removed,=20the=20functionality=20got=20= moved.=0A(make-grub-efi-netboot-installer):=20New=20helper=20function=20= to=20return=20a=20customized=0Ainstaller=20for=20a=20certain=20= efi-sub-directory.=20=20The=20installer=20basically=20copies=0Aa=20= pre-installed=20efi-bootloader-profile,=20and=20adds=20needed=20symlinks=20= for=20booting=0Aover=20network,=20or=20=E2=80=93=20on=20an=20ESP=20=E2=80=93= =20an=20intermediate=20grub-cfg=20to=20load=20the=20final=0Agrub-cfg=20= file.=0A(grub-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=0A= (grub-efi-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=20=20= Removed=20inheritance,=0Agiving=20complete=20set=20of=20fields.=0A= (make-grub-efi-netboot-bootloader):=20New=20helper=20function.=0A= (grub-efi-netboot-bootloader):=20Now=20using=20the=20helper.=0A= (grub-efi-netboot-removable-bootloader):=20New=20bootloader=20using=20= the=20helper.=0AIt=20uses=20the=20efi-sub-directory=20"efi/boot"=20for=20= removable=20media.=0A*=20gnu/packages/bootloaders.scm=20= (make-grub-efi-netboot):=20New=20function=20to=20return=0Aa=20grub-efi=20= package=20pre-installed=20via=20grub-mknetdir,=20customized=20for=20an=0A= efi-sub-directory=20and=20able=20to=20boot=20via=20network=20and=20local=20= storage.=0A=0AThe=20rework=20allows=20to=20use=20an=20= (efi-bootloader-chain)=20like=20this,=20which=20is=20able=0Ato=20boot=20= over=20network=20or=20local=20storage,=20depending=20on=20the=20= symlink-support=20at=0Athe=20bootloader-target:=0A=0A(operating-system=0A= =20(bootloader=0A=20=20=20(bootloader-configuration=0A=20=20=20=20=20= (bootloader=0A=20=20=20=20=20=20=20(efi-bootloader-chain=0A=20=20=20=20=20= =20=20=20=20grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20= =20=20#:packages=20(list=20my-firmware-package=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20my-u-boot-package)=0A= =20=20=20=20=20=20=20=20=20#:files=20(list=20(plain-file=20"config.txt"=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"kernel=3Du-boot.bin"))=0A=20=20=20=20=20=20= =20=20=20#:hooks=20my-special-bootloader-profile-manipulator))=0A=20=20=20= =20=20(target=20"/booti/efi")=0A=20=20=20=20=20=E2=80=A6))=0A=20=E2=80=A6)= =0A)=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=2058=20+++++++---=0A=20gnu/bootloader.scm=20=20=20=20=20=20=20= =20=20=20=20|=20=20104=20+++++++++---------=0A=20gnu/bootloader/grub.scm=20= =20=20=20=20=20|=20=20241=20++++++++++++++++++++++++++----------------=0A= =20gnu/packages/bootloaders.scm=20|=20=20=2090=20++++++++++++++++=0A=204=20= files=20changed,=20331=20insertions(+),=20162=20deletions(-)=0A=0Adiff=20= --git=20a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20= 8fc8f53d0e..e4fb4a6bc8=20100644=0A---=20a/doc/guix.texi=0A+++=20= b/doc/guix.texi=0A@@=20-36937,8=20+36937,9=20@@=20The=20type=20of=20a=20= bootloader=20configuration=20declaration.=0A=20@cindex=20BIOS,=20= bootloader=0A=20The=20bootloader=20to=20use,=20as=20a=20= @code{bootloader}=20object.=20=20For=20now=0A=20@code{grub-bootloader},=20= @code{grub-efi-bootloader},=0A-@code{grub-efi-netboot-bootloader},=20= @code{grub-efi-removable-bootloader},=0A-@code{extlinux-bootloader}=20= and=20@code{u-boot-bootloader}=20are=20supported.=0A= +@code{grub-efi-removable-bootloader},=20= @code{grub-efi-netboot-bootloader},=0A= +@code{grub-efi-netboot-removable-bootloader},=20= @code{extlinux-bootloader}=0A+and=20@code{u-boot-bootloader}=20are=20= supported.=0A=20=0A=20@cindex=20ARM,=20bootloaders=0A=20@cindex=20= AArch64,=20bootloaders=0A@@=20-36947,15=20+36948,29=20@@=20modules.=20=20= In=20particular,=20@code{(gnu=20bootloader=20u-boot)}=20contains=20= definitions=0A=20of=20bootloaders=20for=20a=20wide=20range=20of=20ARM=20= and=20AArch64=20systems,=20using=20the=0A=20= @uref{https://www.denx.de/wiki/U-Boot/,=20U-Boot=20bootloader}.=0A=20=0A= +@vindex=20grub-bootloader=0A+@code{grub-bootloader}=20allows=20you=20to=20= boot=20in=20particular=20Intel-based=20machines=0A+in=20``legacy''=20= BIOS=20mode.=0A+=0A=20@vindex=20grub-efi-bootloader=0A=20= @code{grub-efi-bootloader}=20allows=20to=20boot=20on=20modern=20systems=20= using=20the=0A=20@dfn{Unified=20Extensible=20Firmware=20Interface}=20= (UEFI).=20=20This=20is=20what=20you=20should=0A=20use=20if=20the=20= installation=20image=20contains=20a=20@file{/sys/firmware/efi}=20= directory=0A=20when=20you=20boot=20it=20on=20your=20system.=0A=20=0A= -@vindex=20grub-bootloader=0A-@code{grub-bootloader}=20allows=20you=20to=20= boot=20in=20particular=20Intel-based=20machines=0A-in=20``legacy''=20= BIOS=20mode.=0A+@vindex=20grub-efi-removable-bootloader=0A= +@code{grub-efi-removable-bootloader}=20allows=20you=20to=20boot=20your=20= system=20from=0A+removable=20media=20by=20writing=20the=20GRUB=20file=20= to=20the=20UEFI-specification=20location=20of=0A= +@file{/EFI/BOOT/BOOTX64.efi}=20of=20the=20boot=20directory,=20usually=20= @file{/boot/efi}.=0A+This=20is=20also=20useful=20for=20some=20UEFI=20= firmwares=20that=20``forget''=20their=20configuration=0A+from=20their=20= non-volatile=20storage.=20Like=20@code{grub-efi-bootloader},=20this=20= can=20only=0A+be=20used=20if=20the=20@file{/sys/firmware/efi}=20= directory=20is=20available.=0A+=0A+@quotation=20Note=0A+This=20= @emph{will}=20overwrite=20the=20GRUB=20file=20from=20any=20other=20= operating=20systems=20that=0A+also=20place=20their=20GRUB=20file=20in=20= the=20UEFI-specification=20location;=20making=20them=0A+unbootable.=0A= +@end=20quotation=0A=20=0A=20@vindex=20grub-efi-netboot-bootloader=0A=20= @code{grub-efi-netboot-bootloader}=20allows=20you=20to=20boot=20your=20= system=20over=20network=0A@@=20-36964,9=20+36979,10=20@@=20build=20a=20= diskless=20Guix=20system.=0A=20=0A=20The=20installation=20of=20the=20= @code{grub-efi-netboot-bootloader}=20generates=20the=0A=20content=20of=20= the=20TFTP=20root=20directory=20at=20@code{targets}=20(@pxref{Bootloader=0A= -Configuration,=20@code{targets}}),=20to=20be=20served=20by=20a=20TFTP=20= server.=20=20You=20may=0A-want=20to=20mount=20your=20TFTP=20server=20= directories=20onto=20the=20@code{targets}=20to=0A-move=20the=20required=20= files=20to=20the=20TFTP=20server=20automatically.=0A+Configuration,=20= @code{targets}})=20below=20the=20sub-directory=20@file{efi/Guix},=20to=20= be=0A+served=20by=20a=20TFTP=20server.=20=20You=20may=20want=20to=20= mount=20your=20TFTP=20server=20directories=0A+onto=20the=20= @code{targets}=20to=20move=20the=20required=20files=20to=20the=20TFTP=20= server=0A+automatically=20during=20installation.=0A=20=0A=20If=20you=20= plan=20to=20use=20an=20NFS=20root=20file=20system=20as=20well=20= (actually=20if=20you=20mount=20the=0A=20store=20from=20an=20NFS=20= share),=20then=20the=20TFTP=20server=20needs=20to=20serve=20the=20file=0A= @@=20-36995,25=20+37011,33=20@@=20this=20constellation=20the=20symlinks=20= will=20work.=0A=20For=20other=20constellations=20you=20will=20have=20to=20= program=20your=20own=20bootloader=0A=20installer,=20which=20then=20takes=20= care=20to=20make=20necessary=20files=20from=20the=20store=0A=20= accessible=20through=20TFTP,=20for=20example=20by=20copying=20them=20= into=20the=20TFTP=20root=0A-directory=20to=20your=20@code{targets}.=0A= +directory=20for=20your=20@code{targets}.=0A=20=0A=20It=20is=20important=20= to=20note=20that=20symlinks=20pointing=20outside=20the=20TFTP=20root=20= directory=0A=20may=20need=20to=20be=20allowed=20in=20the=20configuration=20= of=20your=20TFTP=20server.=20=20Further=20the=0A=20store=20link=20= exposes=20the=20whole=20store=20through=20TFTP@.=20=20Both=20points=20= need=20to=20be=0A-considered=20carefully=20for=20security=20aspects.=0A= +considered=20carefully=20for=20security=20aspects.=20=20It=20is=20= advised=20to=20disable=20any=20TFTP=0A+write=20access!=0A+=0A+Please=20= note,=20that=20this=20bootloader=20will=20not=20modify=20the=20=E2=80=98UE= FI=20Boot=20Manager=E2=80=99=20of=0A+the=20system.=0A=20=0A=20Beside=20= the=20@code{grub-efi-netboot-bootloader},=20the=20already=20mentioned=20= TFTP=20and=0A=20NFS=20servers,=20you=20also=20need=20a=20properly=20= configured=20DHCP=20server=20to=20make=20the=20booting=0A=20over=20= netboot=20possible.=20=20For=20all=20this=20we=20can=20currently=20only=20= recommend=20you=20to=20look=0A=20for=20instructions=20about=20= @acronym{PXE,=20Preboot=20eXecution=20Environment}.=0A=20=0A-@vindex=20= grub-efi-removable-bootloader=0A-@code{grub-efi-removable-bootloader}=20= allows=20you=20to=20boot=20your=20system=20from=0A-removable=20media=20= by=20writing=20the=20GRUB=20file=20to=20the=20UEFI-specification=20= location=20of=0A-@file{/EFI/BOOT/BOOTX64.efi}=20of=20the=20boot=20= directory,=20usually=20@file{/boot/efi}.=0A-This=20is=20also=20useful=20= for=20some=20UEFI=20firmwares=20that=20``forget''=20their=20= configuration=0A-from=20their=20non-volatile=20storage.=20Like=20= @code{grub-efi-bootloader},=20this=20can=20only=0A-be=20used=20if=20the=20= @file{/sys/firmware/efi}=20directory=20is=20available.=0A+If=20a=20local=20= EFI=20System=20Partition=20(ESP)=20or=20a=20similar=20partition=20with=20= a=20FAT=20file=0A+system=20is=20mounted=20in=20@code{targets},=20then=20= symlinks=20cannot=20be=20created.=20=20In=20this=0A+case=20everything=20= will=20be=20prepared=20for=20booting=20from=20local=20storage,=20= simialar=20as=20if=0A+using=20@code{grub-efi-bootloader},=20with=20the=20= difference=20that=20all=20GRUB=20binaries=0A+reside=20on=20= @code{targets},=20too,=20like=20needed=20for=20booting=20over=20network.=0A= +=0A+@vindex=20grub-efi-netboot-removable-bootloader=0A= +@code{grub-efi-netboot-removable-bootloader}=20is=20identical=20to=0A= +@code{grub-efi-netboot-bootloader}=20with=20the=20exception=20that=20= the=20sub-directory=0A+@file{efi/boot}=20will=20be=20used=20instead=20of=20= @file{efi/Guix}=20to=20comply=20to=20the=20UEFI=0A+specification=20for=20= removable=20media.=0A=20=0A=20@quotation=20Note=0A=20This=20@emph{will}=20= overwrite=20the=20GRUB=20file=20from=20any=20other=20operating=20systems=20= that=0Adiff=20--git=20a/gnu/bootloader.scm=20b/gnu/bootloader.scm=0A= index=209cf5457873..797908e24a=20100644=0A---=20a/gnu/bootloader.scm=0A= +++=20b/gnu/bootloader.scm=0A@@=20-259,26=20+259,22=20@@=20instead~%")))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20(force=20%bootloaders))=0A=20=20=20= =20=20=20=20(leave=20(G_=20"~a:=20no=20such=20bootloader~%")=20name)))=0A= =20=0A-(define=20(efi-bootloader-profile=20files=20bootloader-package=20= hooks)=0A-=20=20"Creates=20a=20profile=20with=20BOOTLOADER-PACKAGE=20and=20= a=20directory=20collection/=20with=0A-links=20to=20additional=20FILES=20= from=20the=20store.=20=20This=20collection=20is=20meant=20to=20be=20used=0A= -by=20the=20bootloader=20installer.=0A+(define=20(efi-bootloader-profile=20= packages=20files=20hooks)=0A+=20=20"Creates=20a=20profile=20from=20the=20= lists=20of=20PACKAGES=20and=20FILES=20from=20the=20store.=0A+This=20= profile=20is=20meant=20to=20be=20used=20by=20the=20bootloader-installer.=0A= =20=0A=20FILES=20is=20a=20list=20of=20file=20or=20directory=20names=20= from=20the=20store,=20which=20will=20be=0A-symlinked=20into=20the=20= collection/=20directory.=20=20If=20a=20directory=20name=20ends=20with=20= '/',=0A-then=20the=20directory=20content=20instead=20of=20the=20= directory=20itself=20will=20be=20symlinked=0A-into=20the=20collection/=20= directory.=0A+symlinked=20into=20the=20profile.=20=20If=20a=20directory=20= name=20ends=20with=20'/',=20then=20the=0A+directory=20content=20instead=20= of=20the=20directory=20itself=20will=20be=20symlinked=20into=20the=0A= +profile.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A+FILES=20may=20contain=20= file=20like=20objects=20produced=20by=20procedures=20like=20plain-file,=0A= =20local-file,=20etc.,=20or=20package=20contents=20produced=20with=20= file-append.=0A=20=0A=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A-=20=20(define=20(bootloader-collection=20= manifest)=0A+=20=20(define=20(efi-bootloader-profile-hook=20manifest)=0A=20= =20=20=20=20(define=20build=0A-=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(ice-9=20ftw)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(srfi=20srfi-26))=0A+=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils))=0A=20=20=20=20=20=20=20= =20=20=20=20#~(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20((guix=20build=20utils)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:select=20(mkdir-p=20= strip-store-file-name))=0A@@=20-302,7=20+298,7=20@@=20HOOKS=20lists=20= additional=20hook=20functions=20to=20modify=20the=20profile."=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20(define=20(name-is-store-entry?=20name)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Return=20#t=20if=20NAME=20is=20= a=20direct=20store=20entry=20and=20nothing=20inside."=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(string-index=20(strip-store-file-name=20= name)=20#\/)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20(let*=20= ((collection=20(string-append=20#$output=20"/collection"))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(let*=20((output=20#$output)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20'#$files)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(directories=20(filter=20= name-ends-with-/?=20files))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(names-from-directories=0A@@=20-311,11=20+307,11=20@@=20= HOOKS=20lists=20additional=20hook=20functions=20to=20modify=20the=20= profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20directories))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(names=20(append=20= names-from-directories=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20= name-ends-with-/?=20files))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20collection)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20output)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (every=20file-exists?=20names)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(for-each=20(lambda=20(name)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-to=20name=20collection=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(symlink-to=20name=20= output=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (name-is-store-entry?=20name)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20strip-store-file-name=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20basename)))=0A@@=20= -323,57=20+319,63=20@@=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#t)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#f)))))=0A=20=0A-=20=20=20=20(gexp->derivation=20= "bootloader-collection"=0A+=20=20=20=20(gexp->derivation=20= "efi-bootloader-profile"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20build=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:local-build?=20#t=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:substitutable?=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:properties=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((type=20.=20profile-hook)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hook=20.=20bootloader-collection))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (hook=20.=20efi-bootloader-profile-hook))))=0A=20=0A-=20=20(profile=20= (content=20(packages->manifest=20(list=20bootloader-package)))=0A-=20=20=20= =20=20=20=20=20=20=20=20(name=20"bootloader-profile")=0A-=20=20=20=20=20=20= =20=20=20=20=20(hooks=20(append=20(list=20bootloader-collection)=20= hooks))=0A+=20=20(profile=20(content=20(packages->manifest=20packages))=0A= +=20=20=20=20=20=20=20=20=20=20=20(name=20"efi-bootloader-profile")=0A+=20= =20=20=20=20=20=20=20=20=20=20(hooks=20(cons=20= efi-bootloader-profile-hook=20hooks))=0A=20=20=20=20=20=20=20=20=20=20=20= =20(locales?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (allow-collisions?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (relative-symlinks?=20#f)))=0A=20=0A-(define*=20(efi-bootloader-chain=20= files=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20final-bootloader=0A+(define*=20= (efi-bootloader-chain=20final-bootloader=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(packages=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20= '())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hooks=20'())=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= installer)=0A-=20=20"Define=20a=20bootloader=20chain=20with=20= FINAL-BOOTLOADER=20as=20the=20final=20bootloader=20and=0A-certain=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20installer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= disk-image-installer)=0A+=20=20"Define=20a=20chain=20of=20bootloaders=20= with=20the=20FINAL-BOOTLOADER,=20optional=20PACKAGES,=0A+and=20optional=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A-local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=20=20They=20= will=20be=0A-collected=20inside=20a=20directory=20collection/=20inside=20= a=20generated=20bootloader=20profile,=0A-which=20will=20be=20passed=20to=20= the=20INSTALLER.=0A+The=20package=20of=20the=20FINAL-BOOTLOADER=20and=20= all=20PACKAGES=20and=20FILES=20will=20be=20placed=0A+in=20an=20= efi-bootloader-profile,=20which=20will=20be=20passed=20to=20the=20= INSTALLER.=0A+=0A+FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20procedures=20like=20plain-file,=0A+local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=0A=20=0A=20If=20= a=20directory=20name=20in=20FILES=20ends=20with=20'/',=20then=20the=20= directory=20content=20instead=0A-of=20the=20directory=20itself=20will=20= be=20symlinked=20into=20the=20collection/=20directory.=0A+of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=20= efi-bootloader-profile.=0A=20=0A=20The=20procedures=20in=20the=20HOOKS=20= list=20can=20be=20used=20to=20further=20modify=20the=20bootloader=0A=20= profile.=20=20It=20is=20possible=20to=20pass=20a=20single=20function=20= instead=20of=20a=20list.=0A=20=0A-If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20function=20will=20be=20called=20to=20install=0A= -the=20bootloader.=20=20Otherwise=20the=20installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A-=20=20(let*=20= ((final-installer=20(or=20installer=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A-=20=20=20=20=20=20=20=20=20= (profile=20(efi-bootloader-profile=20files=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(bootloader-package=20final-bootloader)=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20hooks=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20= hooks)))))=0A-=20=20=20=20(bootloader=0A-=20=20=20=20=20(inherit=20= final-bootloader)=0A-=20=20=20=20=20(package=20profile)=0A-=20=20=20=20=20= (installer=0A-=20=20=20=20=20=20#~(lambda=20(bootloader=20target=20= mount-point)=0A-=20=20=20=20=20=20=20=20=20=20(#$final-installer=20= bootloader=20target=20mount-point)=0A-=20=20=20=20=20=20=20=20=20=20= (copy-recursively=0A-=20=20=20=20=20=20=20=20=20=20=20(string-append=20= bootloader=20"/collection")=0A-=20=20=20=20=20=20=20=20=20=20=20= (string-append=20mount-point=20target)=0A-=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A-=20=20=20=20=20=20=20=20=20=20=20#:log=20= (%make-void-port=20"w")))))))=0A+If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20gexp=20procedure=20will=20be=20called=20to=0A= +install=20the=20efi-bootloader-profile.=20=20Otherwise=20the=20= installer=20of=20the=0A+FINAL-BOOTLOADER=20will=20be=20called.=0A+=0A+If=20= the=20DISK-IMAGE-INSTALLER=20is=20used,=20then=20this=20gexp=20procedure=20= will=20be=20called=0A+to=20install=20the=20efi-bootloader-profile=20into=20= a=20disk-image.=20=20Otherwise=20the=0A+disk-image-installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A+=20=20(bootloader=0A+=20=20=20= =20(inherit=20final-bootloader)=0A+=20=20=20=20(name=20= "efi-bootloader-chain")=0A+=20=20=20=20(package=0A+=20=20=20=20=20= (efi-bootloader-profile=20(cons=20(bootloader-package=20= final-bootloader)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20packages)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20files=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= hooks=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20hooks))))=0A+=20=20=20=20= (installer=0A+=20=20=20=20=20(or=20installer=0A+=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A+=20=20=20=20= (disk-image-installer=0A+=20=20=20=20=20(or=20disk-image-installer=0A+=20= =20=20=20=20=20=20=20=20(bootloader-disk-image-installer=20= final-bootloader)))))=0Adiff=20--git=20a/gnu/bootloader/grub.scm=20= b/gnu/bootloader/grub.scm=0Aindex=204f18c9b518..2406e204ab=20100644=0A= ---=20a/gnu/bootloader/grub.scm=0A+++=20b/gnu/bootloader/grub.scm=0A@@=20= -53,13=20+53,14=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-gfxmode=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-removable=0A-=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-netboot=0A+=20=20=20=20=20=20=20=20=20=20=20=20= make-grub-efi-netboot-installer=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi32-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-mkrescue-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-minimal-bootloader=0A=20=0A@@=20-353,7=20+354,7=20@@=20code."=0A=20=20= =20=20=20=20=20=20=20((or=20#f=20(?=20string?))=0A=20=20=20=20=20=20=20=20= =20=20#~(format=20#f=20"search=20--file=20--set=20~a"=20#$file)))))=0A=20= =0A-(define*=20(grub-configuration-file=20config=20entries=0A+(define*=20= (make-grub-configuration=20grub=20config=20entries=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale=20#f)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(system=20(%current-system))=0A@@=20-383,27=20= +384,27=20@@=20when=20booting=20a=20root=20file=20system=20on=20a=20= Btrfs=20subvolume."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (initrd=20(normalize-file=20(menu-entry-initrd=20entry)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20device-mount-point=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20store-directory-prefix)))=0A-=20=20=20=20=20=20= =20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A-=20=20=20=20=20=20=20=20= =20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20INITRD=20= in=20case=0A-=20=20=20=20=20=20=20=20=20;;=20DEVICE-MOUNT-POINT=20is=20= not=20"/",=20meaning=20that=20the=20store=20is=20on=20a=0A-=20=20=20=20=20= =20=20=20=20;;=20separate=20partition.=0A-=0A-=20=20=20=20=20=20=20=20=20= ;;=20When=20BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20= the=20linux=20and=0A-=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20= to=20allow=20booting=20from=20a=20Btrfs=20subvolume.=0A-=20=20=20=20=20=20= =20=20=20#~(format=20port=20"menuentry=20~s=20{=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Here=20DEVICE=20is=20the=20store=20and=20= DEVICE-MOUNT-POINT=20is=20its=20mount=20point.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Use=20the=20right=20file=20names=20for=20LINUX=20and=20= INITRD=20in=20case=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= DEVICE-MOUNT-POINT=20is=20not=20"/",=20meaning=20that=20the=20store=20is=20= on=20a=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20separate=20partition.=0A= +=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20When=20= BTRFS-SUBVOLUME-FILE-NAME=20is=20defined,=20prepend=20it=20the=20linux=20= and=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20initrd=20paths,=20to=20= allow=20booting=20from=20a=20Btrfs=20subvolume.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20#~(format=20port=20"menuentry=20~s=20{=0A=20=20=20~a=0A=20=20= =20linux=20~a=20~a=0A=20=20=20initrd=20~a=0A=20}~%"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20#$label=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$linux=20= (string-join=20(list=20#$@arguments))=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#$initrd))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#$label=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20#$(grub-root-search=20device=20linux)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #$linux=20(string-join=20(list=20#$@arguments))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#$initrd))=0A=20=20=20=20=20=20= =20=20=20=20=20(let=20((kernel=20(menu-entry-multiboot-kernel=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(arguments=20= (menu-entry-multiboot-arguments=20entry))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(modules=20(menu-entry-multiboot-modules=20entry))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(root-index=201))=20=20= =20=20=20=20=20=20=20=20=20=20;=20XXX=20EFI=20will=20need=20root-index=20= 2=0A-=20=20=20=20=20=20=20=20#~(format=20port=20"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20#~(format=20port=20"=0A=20menuentry=20~s=20{=0A=20=20=20= multiboot=20~a=20root=3Ddevice:hd0s~a~a~a=0A=20}~%"=0A@@=20-440,9=20= +441,7=20@@=20menuentry=20~s=20{=0A=20=20=20(define=20locale-config=0A=20= =20=20=20=20(let*=20((entry=20(first=20all-entries))=0A=20=20=20=20=20=20= =20=20=20=20=20=20(device=20(menu-entry-device=20entry))=0A-=20=20=20=20=20= =20=20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20= entry))=0A-=20=20=20=20=20=20=20=20=20=20=20(bootloader=20= (bootloader-configuration-bootloader=20config))=0A-=20=20=20=20=20=20=20=20= =20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20=20=20=20= =20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20entry)))=0A= =20=20=20=20=20=20=20#~(let=20((locale=20#$(and=20locale=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (locale-definition-source=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale-name->definition=20= locale))))=0A@@=20-468,8=20+467,6=20@@=20set=20lang=3D~a~%"=0A=20=0A=20=20= =20(define=20keyboard-layout-config=0A=20=20=20=20=20(let*=20((layout=20= (bootloader-configuration-keyboard-layout=20config))=0A-=20=20=20=20=20=20= =20=20=20=20=20(grub=20=20=20(bootloader-package=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-configuration-bootloader=20config)))=0A=20=20=20=20=20=20=20=20= =20=20=20=20(keymap*=20(and=20layout=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(keyboard-layout-file=20layout=20= #:grub=20grub)))=0A=20=20=20=20=20=20=20=20=20=20=20=20(entry=20(first=20= all-entries))=0A@@=20-520,6=20+517,16=20@@=20fi~%"))))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:options=20'(#:local-build?=20#t=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:substitutable?=20#f)))=0A=20=0A+(define=20= (grub-configuration-file=20config=20.=20args)=0A+=20=20(let*=20= ((bootloader=20(bootloader-configuration-bootloader=20config))=0A+=20=20=20= =20=20=20=20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20= =20(apply=20make-grub-configuration=20grub=20config=20args)))=0A+=0A= +(define=20(grub-efi-configuration-file=20.=20args)=0A+=20=20(apply=20= make-grub-configuration=20grub-efi=20args))=0A+=0A+(define=20grub-cfg=20= "/boot/grub/grub.cfg")=0A+=0A=20=0C=0A=20=0A=20;;;=0A@@=20-661,42=20= +668,31=20@@=20fi~%"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((target-arm?)=20= "--target=3Darm-efi"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"--efi-directory"=20target-esp)))))=0A=20=0A= -(define=20(install-grub-efi-netboot=20subdir)=0A-=20=20"Define=20a=20= grub-efi-netboot=20bootloader=20installer=20for=20installation=20in=20= SUBDIR,=0A-which=20is=20usually=20efi/Guix=20or=20efi/boot."=0A-=20=20= (let*=20((system=20(string-split=20(nix-system->gnu-triplet=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(or=20(%current-target-system)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(%current-system)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A-=20=20=20=20=20=20=20= =20=20(arch=20(first=20system))=0A-=20=20=20=20=20=20=20=20=20= (boot-efi-link=20(match=20system=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20the=20= supportend=20systems=20and=20the=20names=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20defined=20by=20the=20= UEFI=20standard=20for=20removable=20media.=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("i686"=20_=20...)=20= =20=20=20=20=20=20=20"/bootia32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20= =20=20=20"/bootx64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("arm"=20_=20...)=20=20=20=20=20=20=20=20= =20"/bootarm.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("riscv"=20_=20...)=20=20=20=20=20=20=20= "/bootriscv32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Other=20systems=20are=20not=20supported,=20= although=20defined.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("ia64"=20_=20...)=20=20=20=20=20= "/bootia64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A-=20=20=20=20=20=20=20=20=20(core-efi=20(string-append=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20This=20is=20= the=20arch=20dependent=20file=20name=20of=20GRUB,=20e.g.=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20i368-efi/core.efi=20or=20= arm64-efi/core.efi.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20arch=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20("i686"=20=20=20=20"i386")=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("riscv"=20=20=20= "riscv32")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(_=20=20=20=20=20=20=20=20=20arch))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"-efi/core.efi")))=0A-=20=20=20=20= (with-imported-modules=0A-=20=20=20=20=20'((guix=20build=20union))=0A-=20= =20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A-=20=20=20=20= =20=20=20=20=20"Install=20the=20BOOTLOADER,=20which=20must=20be=20the=20= package=20grub,=20as=20e.g.=0A-bootx64.efi=20or=20bootaa64.efi=20into=20= SUBDIR,=20which=20is=20usually=20efi/Guix=20or=20efi/boot,=0A-below=20= the=20directory=20TARGET=20for=20the=20system=20whose=20root=20is=20= mounted=20at=20MOUNT-POINT.=0A+(define*=20= (make-grub-efi-netboot-installer=20grub-efi=20grub-cfg=20subdir)=0A+=20=20= "Make=20a=20bootloader-installer=20for=20a=20grub-efi-netboot=20= bootloader,=20which=20expects=0A+its=20files=20in=20SUBDIR=20and=20its=20= configuration=20file=20in=20GRUB-CFG.=0A+=0A+As=20a=20grub-efi-netboot=20= package=20is=20already=20preinstalled=20by=20'grub-mknetdir',=20the=0A= +installer=20basically=20copies=20all=20files=20from=20the=20= bootloader-package=20(or=20profile)=0A+into=20the=20bootloader-target=20= directory.=0A+=0A+Additionally=20for=20network=20booting=20over=20TFTP,=20= two=20relative=20symlinks=20to=20the=20store=0A+and=20to=20the=20= GRUB-CFG=20file=20are=20necessary.=20=20Due=20to=20this=20a=20TFTP=20= root=20directory=20must=0A+not=20be=20located=20on=20a=20FAT=20= file-system.=0A+=0A+If=20the=20bootloader-target=20does=20not=20support=20= symlinks,=20then=20it=20is=20assumed=20to=20be=20a=0A+kind=20of=20EFI=20= System=20Partition=20(ESP).=20=20In=20this=20case=20an=20intermediate=20= configuration=0A+file=20is=20created=20with=20the=20help=20of=20GRUB-EFI=20= to=20load=20the=20GRUB-CFG.=0A+=0A+The=20installer=20is=20usable=20for=20= any=20efi-bootloader-chain,=20which=20prepares=20the=0A= +bootloader-profile=20in=20a=20way=20ready=20for=20copying.=0A+=0A+The=20= installer=20does=20not=20manipulate=20the=20system's=20'UEFI=20Boot=20= Manager'."=0A+=20=20(with-imported-modules=20'((guix=20build=20union))=0A= +=20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A+=20=20=20= =20=20=20=20=20"Copy=20the=20BOOTLOADER,=20which=20must=20be=20a=20= preinstalled=20grub-efi-netboot=0A+package=20with=20a=20SUBDIR=20like=20= efi/boot=20or=20efi/Guix,=20below=20the=20directory=0A+TARGET=20for=20= the=20system=20whose=20root=20is=20mounted=20at=20MOUNT-POINT.=0A=20=0A=20= MOUNT-POINT=20is=20the=20last=20argument=20in=20'guix=20system=20init=20= /etc/config.scm=20mnt/point'=0A=20or=20'/'=20for=20other=20'guix=20= system'=20commands.=0A@@=20-706,17=20+702,18=20@@=20= bootloader-configuration=20in:=0A=20=0A=20(operating-system=0A=20=20= (bootloader=20(bootloader-configuration=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(targets=20'(\"/boot\"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(targets=20'(\"/boot/efi\"))=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=E2=80=A6))=0A=20=20=E2=80=A6)=0A=20=0A=20TARGET=20is=20= required=20to=20be=20an=20absolute=20directory=20name,=20usually=20= mounted=20via=20NFS,=0A=20and=20finally=20needs=20to=20be=20provided=20= by=20a=20TFTP=20server=20as=20the=20TFTP=20root=20directory.=0A=20=0A= +Usually=20the=20installer=20will=20be=20used=20to=20prepare=20network=20= booting=20over=20TFTP.=20=20Then=0A=20GRUB=20will=20load=20= tftp://server/SUBDIR/grub.cfg=20and=20this=20file=20will=20instruct=20it=20= to=0A=20load=20more=20files=20from=20the=20store=20like=20= tftp://server/gnu/store/=E2=80=A6-linux=E2=80=A6/Image.=0A=20=0A-To=20= make=20this=20possible=20two=20symlinks=20will=20be=20created.=20The=20= first=20symlink=20points=0A+To=20make=20this=20possible=20two=20symlinks=20= will=20be=20created.=20=20The=20first=20symlink=20points=0A=20relatively=20= form=20MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20to=0A=20= MOUNT-POINT/boot/grub/grub.cfg,=20and=20the=20second=20symlink=20points=20= relatively=20from=0A=20MOUNT-POINT/TARGET/%store-prefix=20to=20= MOUNT-POINT/%store-prefix.=0A@@=20-726,34=20+723,78=20@@=20paths=20on=20= the=20TFTP=20server=20side=20are=20unknown.=0A=20=0A=20It=20is=20also=20= important=20to=20note=20that=20both=20symlinks=20will=20point=20outside=20= the=20TFTP=20root=0A=20directory=20and=20that=20the=20= TARGET/%store-prefix=20symlink=20makes=20the=20whole=20store=0A= -accessible=20via=20TFTP.=20Possibly=20the=20TFTP=20server=20must=20be=20= configured=0A-to=20allow=20accesses=20outside=20its=20TFTP=20root=20= directory.=20This=20may=20need=20to=20be=0A-considered=20for=20security=20= aspects."=0A-=20=20=20=20=20=20=20=20=20(use-modules=20((guix=20build=20= union)=20#:select=20(symlink-relative)))=0A-=20=20=20=20=20=20=20=20=20= (let*=20((net-dir=20(string-append=20mount-point=20target=20"/"))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20(string-append=20= net-dir=20#$subdir=20"/"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(store=20(string-append=20mount-point=20(%store-prefix)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= net-dir=20(%store-prefix)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(grub-cfg=20(string-append=20mount-point=20"/boot/grub/grub.cfg"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(grub-cfg-link=20= (string-append=20sub-dir=20(basename=20grub-cfg)))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(boot-efi-link=20(string-append=20sub-dir=20= #$boot-efi-link)))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20store-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20store-link))=0A-=20=20=20=20=20=20=20= =20=20=20=20(symlink-relative=20store=20store-link)=0A-=20=20=20=20=20=20= =20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg,=20= which=20points=20into=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20grub-cfg-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A-=20=20=20=20=20=20= =20=20=20=20=20(symlink-relative=20grub-cfg=20grub-cfg-link)=0A-=20=20=20= =20=20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= encrypted=20partitions,=0A-=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "GRUB_ENABLE_CRYPTODISK"=20"y")=0A-=20=20=20=20=20=20=20=20=20=20=20= (invoke/quiet=20(string-append=20bootloader=20"/bin/grub-mknetdir")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"--net-directory=3D"=20net-dir)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "--subdir=3D"=20#$subdir))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= Prepare=20the=20bootloader=20symlink,=20which=20points=20to=20core.efi=20= of=20GRUB.=0A-=20=20=20=20=20=20=20=20=20=20=20(false-if-exception=20= (delete-file=20boot-efi-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (symlink=20#$core-efi=20boot-efi-link))))))=0A+accessible=20via=20TFTP.=20= =20Possibly=20the=20TFTP=20server=20must=20be=20configured=20to=20allow=0A= +accesses=20outside=20its=20TFTP=20root=20directory.=20=20This=20all=20= may=20need=20to=20be=20considered=0A+for=20security=20aspects.=20=20It=20= is=20advised=20to=20disable=20any=20TFTP=20write=20access!=0A+=0A+The=20= installer=20can=20also=20be=20used=20to=20prepare=20booting=20from=20= local=20storages,=20if=20the=0A+underlying=20file-system,=20like=20FAT=20= on=20an=20EFI=20System=20Partition=20(ESP),=20does=20not=0A+support=20= symlinks.=20=20In=20this=20case=20the=20= MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20will=20be=0A+created=20with=20the=20= help=20of=20GRUB-EFI=20to=20load=20the=20/boot/grub/grub.cfg=20file.=20=20= A=0A+symlink=20to=20the=20store=20is=20not=20needed=20in=20this=20case."=0A= +=20=20=20=20=20=20=20=20;;=20In=20context=20of=20a=20disk=20image=20= creation=20TARGET=20will=20be=20#f=20and=20an=0A+=20=20=20=20=20=20=20=20= ;;=20installer=20is=20expected=20to=20do=20necessary=20installations=20= on=20MOUNT-POINT,=0A+=20=20=20=20=20=20=20=20;;=20which=20will=20become=20= the=20root=20file=20system.=0A+=20=20=20=20=20=20=20=20;;=20If=20TARGET=20= is=20#f,=20this=20installer=20has=20nothing=20to=20do,=20as=20it=20only=20= cares=0A+=20=20=20=20=20=20=20=20;;=20about=20the=20EFI=20System=20= Partition=20(ESP).=0A+=20=20=20=20=20=20=20=20(when=20target=0A+=20=20=20= =20=20=20=20=20=20=20(use-modules=20((guix=20build=20union)=20#:select=20= (symlink-relative))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(ice-9=20popen)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(ice-9=20rdelim))=0A+=20=20=20=20=20=20=20= =20=20=20(let*=20((mount-point/target=20(string-append=20mount-point=20= target=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= When=20installing=20Guix,=20it=20is=20common=20to=20mount=20TARGET=20= below=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= MOUNT-POINT=20rather=20than=20the=20root=20directory.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bootloader-target=20(if=20= (file-exists?=20mount-point/target)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mount-point/target=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20target))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20= (string-append=20mount-point=20(%store-prefix)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= bootloader-target=20(%store-prefix)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(grub-cfg=20(string-append=20mount-point=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (grub-cfg-link=20(string-append=20bootloader-target=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$subdir=20"/"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(basename=20= grub-cfg))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Copy=20the=20= bootloader=20into=20the=20bootloader-target=20directory.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Should=20we=20beforehand=20recursively=20= delete=20any=20existing=20file?=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (copy-recursively=20bootloader=20bootloader-target=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:log=20(%make-void-port=20= "w"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20For=20TFTP=20we=20need=20= to=20install=20additional=20relative=20symlinks.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20If=20we=20install=20on=20an=20EFI=20System=20= Partition=20(ESP)=20or=20some=20other=20FAT=0A+=20=20=20=20=20=20=20=20=20= =20=20=20;;=20file-system,=20then=20symlinks=20cannot=20be=20created=20= and=20are=20not=20needed.=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Therefore=20we=20ignore=20exceptions=20when=20trying.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20(dirname=20= grub-cfg-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(if=20(unspecified?=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(false-if-exception=20(symlink-relative=20grub-cfg=20= grub-cfg-link)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Symlinks=20are=20supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(mkdir-p=20(dirname=20store-link))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20= store-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-relative=20store=20store-link))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Creating=20symlinks=20does=20not=20seem=20to=20be=20= supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Probably=20= an=20ESP=20is=20used.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Instead=20we=20can=20script=20to=20search=20and=20load=20the=20actual=20= grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((probe=20= #$(file-append=20grub-efi=20"/sbin/grub-probe"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(port=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-pipe*=20OPEN_READ=20= probe=20"--target=3Dfs_uuid"=20grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(search-root=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20(read-line=20port)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((?=20eof-object?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20There=20is=20no=20UUID=20= available.=20As=20a=20fallback=20search=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20everywhere=20for=20= the=20grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20"search=20--file=20--set=20"=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(fs-uuid=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20UUID=20to=20load=20the=20= grub.cfg=20from=20is=20known.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"search=20= --fs-uuid=20--set=20"=20fs-uuid))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(load-grub-cfg=20(string-append=20"configfile=20= "=20#$grub-cfg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (close-pipe=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-output-to-file=20grub-cfg-link=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(display=20(string-join=20(list=20search-root=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= load-grub-cfg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "\n")))))))))))=0A=20=0A=20=0C=0A=20=0A@@=20-771,7=20+812,7=20@@=20= considered=20for=20security=20aspects."=0A=20=20=20=20(package=20grub)=0A= =20=20=20=20(installer=20install-grub)=0A=20=20=20=20= (disk-image-installer=20install-grub-disk-image)=0A-=20=20=20= (configuration-file=20"/boot/grub/grub.cfg")=0A+=20=20=20= (configuration-file=20grub-cfg)=0A=20=20=20=20= (configuration-file-generator=20grub-configuration-file)))=0A=20=0A=20= (define=20grub-minimal-bootloader=0A@@=20-781,11=20+822,12=20@@=20= considered=20for=20security=20aspects."=0A=20=0A=20(define=20= grub-efi-bootloader=0A=20=20=20(bootloader=0A-=20=20=20(inherit=20= grub-bootloader)=0A+=20=20=20(name=20'grub-efi)=0A+=20=20=20(package=20= grub-efi)=0A=20=20=20=20(installer=20install-grub-efi)=0A=20=20=20=20= (disk-image-installer=20#f)=0A-=20=20=20(name=20'grub-efi)=0A-=20=20=20= (package=20grub-efi)))=0A+=20=20=20(configuration-file=20grub-cfg)=0A+=20= =20=20(configuration-file-generator=20grub-configuration-file)))=0A=20=0A= =20(define=20grub-efi-removable-bootloader=0A=20=20=20(bootloader=0A@@=20= -800,11=20+842,22=20@@=20considered=20for=20security=20aspects."=0A=20=20= =20=20(name=20'grub-efi32)=0A=20=20=20=20(package=20grub-efi32)))=0A=20=0A= -(define=20grub-efi-netboot-bootloader=0A+(define=20= (make-grub-efi-netboot-bootloader=20name=20subdir)=0A=20=20=20= (bootloader=0A-=20=20=20(inherit=20grub-efi-bootloader)=0A-=20=20=20= (name=20'grub-efi-netboot-bootloader)=0A-=20=20=20(installer=20= (install-grub-efi-netboot=20"efi/Guix"))))=0A+=20=20=20(name=20name)=0A+=20= =20=20(package=20(make-grub-efi-netboot=20(symbol->string=20name)=20= subdir))=0A+=20=20=20(installer=20(make-grub-efi-netboot-installer=20= grub-efi=20grub-cfg=20subdir))=0A+=20=20=20(disk-image-installer=20#f)=0A= +=20=20=20(configuration-file=20grub-cfg)=0A+=20=20=20= (configuration-file-generator=20grub-efi-configuration-file)))=0A+=0A= +(define=20grub-efi-netboot-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20'grub-efi-netboot-bootloader=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"efi/Guix"))=0A+=0A+(define=20= grub-efi-netboot-removable-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20= 'grub-efi-netboot-removable-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "efi/boot"))=0A=20=0A=20(define=20grub-mkrescue-bootloader=0A=20=20=20= (bootloader=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=2071a10f54d5..3dbd3c97e8=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-16,6=20+16,7=20@@=0A=20;;;=20= Copyright=20=C2=A9=202021=20Vincent=20Legoll=20= =0A=20;;;=20Copyright=20=C2=A9=202021=20Brice=20= Waegeneire=20=0A=20;;;=20Copyright=20=C2=A9=202022=20= Denis=20'GNUtoo'=20Carikli=20=0A+;;;=20= Copyright=20=C2=A9=202021=20Stefan=20=0A=20= ;;;=0A=20;;;=20This=20file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20= -67,13=20+68,17=20@@=0A=20=20=20#:use-module=20(gnu=20packages=20= virtualization)=0A=20=20=20#:use-module=20(gnu=20packages=20xorg)=0A=20=20= =20#:use-module=20(guix=20build-system=20gnu)=0A+=20=20#:use-module=20= (guix=20build-system=20trivial)=0A=20=20=20#:use-module=20(guix=20= download)=0A+=20=20#:use-module=20(guix=20gexp)=0A=20=20=20#:use-module=20= (guix=20git-download)=0A=20=20=20#:use-module=20((guix=20licenses)=20= #:prefix=20license:)=0A=20=20=20#:use-module=20(guix=20packages)=0A=20=20= =20#:use-module=20(guix=20utils)=0A=20=20=20#:use-module=20(srfi=20= srfi-1)=0A=20=20=20#:use-module=20(srfi=20srfi-26)=0A+=20=20#:use-module=20= (ice-9=20match)=0A+=20=20#:use-module=20(ice-9=20optargs)=0A=20=20=20= #:use-module=20(ice-9=20regex))=0A=20=0A=20(define=20unifont=0A@@=20= -379,6=20+384,91=20@@=20menu=20to=20select=20one=20of=20the=20installed=20= operating=20systems.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(scandir=20input-dir))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20#t)))))))))=0A=20=0A+(define-public=20= (make-grub-efi-netboot=20name=20subdir)=0A+=20=20"Make=20a=20= grub-efi-netboot=20package=20named=20NAME,=20which=20will=20be=20able=20= to=20boot=20over=0A+network=20via=20TFTP=20by=20accessing=20its=20files=20= in=20the=20SUBDIR=20of=20a=20TFTP=20root=20directory.=0A+This=20package=20= is=20also=20able=20to=20boot=20from=20local=20storage=20devices.=0A+=0A= +A=20bootloader-installer=20basically=20needs=20to=20copy=20the=20= package=20content=20into=20the=0A+bootloader-target=20directory,=20which=20= will=20usually=20be=20the=20TFTP=20root,=20as=0A+'grub-mknetdir'=20will=20= be=20invoked=20already=20during=20the=20package=20creation.=0A+=0A= +Alternatively=20the=20bootloader-target=20directory=20can=20be=20a=20= mounted=20EFI=20System=0A+Partition=20(ESP),=20or=20a=20similar=20= partition=20with=20a=20FAT=20file=20system,=20for=20booting=0A+from=20= local=20storage=20devices.=0A+=0A+The=20name=20of=20the=20GRUB=20EFI=20= binary=20will=20conform=20to=20the=20UEFI=20specification=20for=0A= +removable=20media.=20=20Depending=20on=20the=20system=20it=20will=20be=20= e.g.=20bootx64.efi=20or=0A+bootaa64.efi=20below=20SUBDIR.=0A+=0A+The=20= SUBDIR=20argument=20needs=20to=20be=20set=20to=20\"efi/boot\"=20to=20= create=20a=20package=20which=0A+conforms=20to=20the=20UEFI=20= specification=20for=20removable=20media.=0A+=0A+The=20SUBDIR=20argument=20= defaults=20to=20\"efi/Guix\",=20as=20it=20is=20also=20the=20case=20for=0A= +'grub-efi-bootloader'."=0A+=20=20(package=0A+=20=20=20=20(name=20name)=0A= +=20=20=20=20(version=20(package-version=20grub-efi))=0A+=20=20=20=20;;=20= Source=20is=20not=20needed,=20but=20it=20cannot=20be=20omitted.=0A+=20=20= =20=20(source=20#f)=0A+=20=20=20=20(build-system=20trivial-build-system)=0A= +=20=20=20=20(arguments=0A+=20=20=20=20=20(let*=20((system=20= (string-split=20(nix-system->gnu-triplet=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (or=20(%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(arch=20(first=20system))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(boot-efi=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20= the=20supportend=20systems=20and=20the=20names=20defined=20by=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20the=20UEFI=20standard=20for=20= removable=20media.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("i686"=20_=20...)=20=20=20=20=20=20=20=20"/bootia32.efi")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20=20=20=20= "/bootx64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("arm"=20= _=20...)=20=20=20=20=20=20=20=20=20"/bootarm.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("riscv"=20_=20...)=20=20=20=20=20=20=20"/bootriscv32.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Other=20systems=20are=20not=20supported,=20although=20defined.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= (("ia64"=20_=20...)=20=20=20=20=20"/bootia64.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(core-efi=20= (string-append=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20This=20is=20the=20arch=20dependent=20file=20name=20of=20= GRUB,=20e.g.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20i368-efi/core.efi=20or=20arm64-efi/core.efi.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= arch=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20("i686"=20=20=20=20"i386")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ("riscv"=20=20=20"riscv32")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20arch))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "-efi/core.efi")))=0A+=20=20=20=20=20=20=20`(#:modules=20((guix=20build=20= utils))=0A+=20=20=20=20=20=20=20=20=20#:builder=0A+=20=20=20=20=20=20=20=20= =20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(guix=20= build=20utils))=0A+=20=20=20=20=20=20=20=20=20=20=20(let*=20((bootloader=20= (assoc-ref=20%build-inputs=20"grub-efi"))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(net-dir=20(assoc-ref=20%outputs=20"out"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20= (string-append=20net-dir=20"/"=20,subdir=20"/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(boot-efi=20(string-append=20sub-dir=20= ,boot-efi))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (core-efi=20(string-append=20sub-dir=20,core-efi)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20encrypted=20partitions,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"GRUB_ENABLE_CRYPTODISK"=20"y")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(invoke/quiet=20(string-append=20bootloader=20= "/bin/grub-mknetdir")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--net-directory=3D"=20= net-dir)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"--subdir=3D"=20,subdir)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20modules=20must=20be=20preloaded=20to=20allow=20booting=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20from=20an=20ESP=20or=20a=20similar=20partition=20with=20a=20FAT=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20file=20system.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--modules=3Dpart_msdos=20= part_gpt=20fat"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20= GRUB's=20core.efi=20to=20the=20removable=20media=20name.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20boot-efi))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20core-efi=20= boot-efi))))))=0A+=20=20=20=20(inputs=20`(("grub-efi"=20,grub-efi)))=0A+=20= =20=20=20(synopsis=20(package-synopsis=20grub-efi))=0A+=20=20=20=20= (description=20(package-description=20grub-efi))=0A+=20=20=20=20= (home-page=20(package-home-page=20grub-efi))=0A+=20=20=20=20(license=20= (package-license=20grub-efi))))=0A+=0A=20(define-public=20syslinux=0A=20=20= =20(let=20((commit=20"bb41e935cc83c6242de24d2271e067d76af3585c"))=0A=20=20= =20=20=20(package=0A= --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=03-build-kconfig-add-new-module.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="03-build-kconfig-add-new-module.patch" Content-Transfer-Encoding: quoted-printable build:=20kconfig:=20Add=20new=20module=20to=20modify=20a=20defconfig=20= file.=0A=0AFrom:=20Stefan=20=0A=0A*=20= guix/build/kconfig.scm=20(config-string->pair,=20(pair->config-string,=0A= defconfig->alist,=20modify-defconfig,=20verify-config):=20New=20file=20= with=20some=20new=0Afunctions=20for=20handling=20of=20defconfig=20and=20= .config=20files.=0A*=20gnu/packages/bootloaders.scm=20= (make-u-boot-package,=0Amake-u-boot-sunxi64-package):=20Adding=20new=20= key=20arguments=20to=20pass=20and/or=20modify=0Aa=20defconfig=20file.=0A= (u-boot-am335x-boneblack,=20u-boot-pinebook,=20u-boot-novena):=20= Simplify=20functions=0Aby=20using=20the=20new=20key=20arguments=20of=20= the=20former=20functions.=0A*=20Makefile.am:=20Adding=20= guix/build/kconfig.scm=20to=20MODULES.=0A---=0A=20Makefile.am=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=20=201=20=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2088=20+++++++++-----------=0A=20= guix/build/kconfig.scm=20=20=20=20=20=20=20|=20=20184=20= ++++++++++++++++++++++++++++++++++++++++++=0A=203=20files=20changed,=20= 223=20insertions(+),=2050=20deletions(-)=0A=20create=20mode=20100644=20= guix/build/kconfig.scm=0A=0Adiff=20--git=20a/Makefile.am=20b/Makefile.am=0A= index=20e5363140fb..8f53bb54bc=20100644=0A---=20a/Makefile.am=0A+++=20= b/Makefile.am=0A@@=20-233,6=20+233,7=20@@=20MODULES=20=3D=09=09=09=09=09= \=0A=20=20=20guix/build/waf-build-system.scm=09=09\=0A=20=20=20= guix/build/haskell-build-system.scm=09=09\=0A=20=20=20= guix/build/julia-build-system.scm=09=09\=0A+=20=20guix/build/kconfig.scm=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\=0A= =20=20=20guix/build/linux-module-build-system.scm=09\=0A=20=20=20= guix/build/store-copy.scm=09=09=09\=0A=20=20=20guix/build/json.scm=09=09=09= =09\=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=203dbd3c97e8..c4f23f239e=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-760,8=20+760,9=20@@=20def=20= test_ctrl_c"))=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=20=20= This=20package=20provides=20its=0A=20board-independent=20tools.")))=0A=20= =0A-(define-public=20(make-u-boot-package=20board=20triplet)=0A-=20=20= "Returns=20a=20u-boot=20package=20for=20BOARD=20cross-compiled=20for=20= TRIPLET."=0A+(define*-public=20(make-u-boot-package=20board=20triplet=20= #:key=20defconfig=20configs)=0A+=20=20"Returns=20a=20u-boot=20package=20= for=20BOARD=20cross-compiled=20for=20TRIPLET=20with=20the=0A+optional=20= DEFCONFIG=20file=20and=20optional=20configuration=20changes=20from=20= CONFIGS."=0A=20=20=20(let=20((same-arch?=20(lambda=20()=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string=3D?=20= (%current-system)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gnu-triplet->nix-system=20= triplet)))))=0A@@=20-779,8=20+780,11=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20(arguments=0A=20=20=20=20=20=20=20=20= `(#:modules=20((ice-9=20ftw)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20= gnu-build-system))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix=20build=20gnu-build-system)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20utils))=0A= +=20=20=20=20=20=20=20=20=20#:imported-modules=20= (,@%gnu-build-system-modules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig))=0A= =20=20=20=20=20=20=20=20=20=20#:test-target=20"test"=0A=20=20=20=20=20=20= =20=20=20=20#:make-flags=0A=20=20=20=20=20=20=20=20=20=20(list=20= "HOSTCC=3Dgcc"=0A@@=20-791,9=20+795,19=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20=20=20=20(modify-phases=20= %standard-phases=0A=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20= outputs=20make-flags=20#:allow-other-keys)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((config-name=20(string-append=20,board=20= "_defconfig")))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(file-exists?=20(string-append=20"configs/"=20config-name))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20invoke=20= "make"=20`(,@make-flags=20,config-name))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let*=20((config-name=20(string-append=20,board=20= "_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(config-file=20(string-append=20"configs/"=20config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (defconfig=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(configs=20',configs))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(when=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Replace=20the=20board-specific=20= defconfig=20with=20the=20given=20one.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(copy-file=20defconfig=20config-file))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(file-exists?=20= config-file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(when=20configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20config-file=20= configs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(apply=20invoke=20"make"=20`(,@make-flags=20,config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (verify-config=20".config"=20config-file))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(display=20"Invalid=20board=20= name.=20Valid=20board=20names=20are:"=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (current-error-port))=0A@@=20-847,7=20+861,11=20@@=20board-independent=20= tools.")))=0A=20=20=20(make-u-boot-package=20"malta"=20= "mips64el-linux-gnuabi64"))=0A=20=0A=20(define-public=20= u-boot-am335x-boneblack=0A-=20=20(let=20((base=20(make-u-boot-package=20= "am335x_evm"=20"arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"am335x_evm"=20"arm-linux-gnueabihf"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20device=20= trees=20to=20build=20image=20small=20enough=20to=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20fit=20within=20typical=20partitioning=20= schemes=20where=20the=20first=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20partition=20begins=20at=20sector=202048.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:configs=20'("CONFIG_OF_LIST=3D\"am335x-evm=20= am335x-boneblack\""))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(name=20= "u-boot-am335x-boneblack")=0A@@=20-856,25=20+874,13=20@@=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20the=20BeagleBone=20Black,=20which=20was=20removed=20= upstream,=0A=20adjusted=20from=20the=20am335x_evm=20build=20with=20= several=20device=20trees=20removed=20so=20that=0A-it=20fits=20within=20= common=20partitioning=20schemes.")=0A-=20=20=20=20=20=20(arguments=0A-=20= =20=20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-defconfig=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20devicetrees=20to=20= build=20image=20small=20enough=20to=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20fit=20within=20typical=20partitioning=20schemes=20where=20= the=20first=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition=20begins=20at=20sector=202048.=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(substitute*=20"configs/am335x_evm_defconfig"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(("CONFIG_OF_LIST=3D.*$")=20= "CONFIG_OF_LIST=3D\"am335x-evm=20am335x-boneblack\"\n"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+it=20fits=20within=20= common=20partitioning=20schemes."))))=0A=20=0A=20(define-public=20= u-boot-am335x-evm=0A=20=20=20(make-u-boot-package=20"am335x_evm"=20= "arm-linux-gnueabihf"))=0A=20=0A-(define-public=20= (make-u-boot-sunxi64-package=20board=20triplet)=0A-=20=20(let=20((base=20= (make-u-boot-package=20board=20triplet)))=0A+(define*-public=20= (make-u-boot-sunxi64-package=20board=20triplet=20#:key=20defconfig=20= configs)=0A+=20=20(let=20((base=20(make-u-boot-package=20board=20triplet=20= #:defconfig=20defconfig=20#:configs=20configs)))=0A=20=20=20=20=20= (package=0A=20=20=20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20= (arguments=0A@@=20-904,20=20+910,10=20@@=20it=20fits=20within=20common=20= partitioning=20schemes.")=0A=20=20=20(make-u-boot-sunxi64-package=20= "pine64-lts"=20"aarch64-linux-gnu"))=0A=20=0A=20(define-public=20= u-boot-pinebook=0A-=20=20(let=20((base=20(make-u-boot-sunxi64-package=20= "pinebook"=20"aarch64-linux-gnu")))=0A-=20=20=20=20(package=0A-=20=20=20=20= =20=20(inherit=20base)=0A-=20=20=20=20=20=20(arguments=0A-=20=20=20=20=20= =20=20(substitute-keyword-arguments=20(package-arguments=20base)=0A-=20=20= =20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20=20=20=20=20=20= `(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-after=20'unpack=20'patch-pinebook-config=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Fix=20regression=20with=20LCD=20video=20output=20= introduced=20in=202020.01=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20https://patchwork.ozlabs.org/patch/1225130/=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(substitute*=20"configs/pinebook_defconfig"=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy")=20= "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy\nCONFIG_VIDEO_BPP32=3Dy"))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+=20=20= (make-u-boot-sunxi64-package=20"pinebook"=20"aarch64-linux-gnu"=0A+=20=20= =20;;=20Fix=20regression=20with=20LCD=20video=20output=20introduced=20in=20= 2020.01=0A+=20=20=20;;=20https://patchwork.ozlabs.org/patch/1225130/=0A+=20= =20=20#:configs=20'("CONFIG_VIDEO_BPP32=3Dy")))=0A=20=0A=20= (define-public=20u-boot-bananapi-m2-ultra=0A=20=20=20= (make-u-boot-package=20"Bananapi_M2_Ultra"=20"arm-linux-gnueabihf"))=0A= @@=20-968,25=20+964,17=20@@=20device=20while=20it's=20being=20turned=20= on=20(and=20a=20while=20longer).")=0A=20=20=20(make-u-boot-package=20= "mx6cuboxi"=20"arm-linux-gnueabihf"))=0A=20=0A=20(define-public=20= u-boot-novena=0A-=20=20(let=20((base=20(make-u-boot-package=20"novena"=20= "arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20(make-u-boot-package=20= "novena"=20"arm-linux-gnueabihf"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20= from=20FAT=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition,=20allowing=20it=20to=20be=20installed=20at=20a=20device=20= offset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20= '("CONFIG_SPL_FS_FAT=3D"))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20= =20(inherit=20base)=0A=20=20=20=20=20=20=20(description=20"U-Boot=20is=20= a=20bootloader=20used=20mostly=20for=20ARM=20boards.=20=20It=0A=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20Novena.=20=20Be=20advised=20that=20this=20version,=20= contrary=0A-to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition.")=0A-=20=20=20=20=20=20(arguments=0A-=20=20= =20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-novena-defconfig=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Patch=20configuration=20to=20disable=20= loading=20u-boot.img=20from=20FAT=20partition,=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20allowing=20it=20to=20be=20installed=20at=20a=20= device=20offset.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20= _=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(substitute*=20= "configs/novena_defconfig"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(("CONFIG_SPL_FS_FAT=3Dy")=20"#=20CONFIG_SPL_FS_FAT=20is=20= not=20set"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #t)))))))))=0A+to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition."))))=0A=20=0A=20(define-public=20= u-boot-cubieboard=0A=20=20=20(make-u-boot-package=20"Cubieboard"=20= "arm-linux-gnueabihf"))=0Adiff=20--git=20a/guix/build/kconfig.scm=20= b/guix/build/kconfig.scm=0Anew=20file=20mode=20100644=0Aindex=20= 0000000000..e32503c9c3=0A---=20/dev/null=0A+++=20= b/guix/build/kconfig.scm=0A@@=20-0,0=20+1,184=20@@=0A+;;;=20GNU=20Guix=20= ---=20Functional=20package=20management=20for=20GNU=0A+;;;=20Copyright=20= =C2=A9=202020=20Stefan=20=0A+;;;=0A+;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20GNU=20Guix=20= is=20free=20software;=20you=20can=20redistribute=20it=20and/or=20modify=20= it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20General=20Public=20= License=20as=20published=20by=0A+;;;=20the=20Free=20Software=20= Foundation;=20either=20version=203=20of=20the=20License,=20or=20(at=0A= +;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(guix=20build=20= kconfig)=0A+=20=20#:use-module=20=20(ice-9=20rdelim)=0A+=20=20= #:use-module=20=20(ice-9=20regex)=0A+=20=20#:use-module=20=20(srfi=20= srfi-1)=0A+=20=20#:use-module=20=20(srfi=20srfi-26)=0A+=20=20#:export=20= (modify-defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20=20verify-config))=0A= +=0A+;;=20Commentary:=0A+;;=0A+;;=20Builder-side=20code=20to=20modify=20= configurations=20for=20the=20Kconfig=20build=20system=20as=0A+;;=20used=20= by=20Linux=20and=20U-Boot.=0A+;;=0A+;;=20Code:=0A+=0A+(define=20= (config-string->pair=20config-string)=0A+=20=20"Parse=20a=20= configuration=20string=20like=20\"CONFIG_EXAMPLE=3Dm\"=20into=20a=20= key-value=20pair.=0A+An=20error=20is=20thrown=20for=20invalid=20= configurations.=0A+=0A+\"CONFIG_A=3Dy\"=20=20=20=20=20=20=20=20=20=20=20=20= ->=20'(\"CONFIG_A\"=20.=20\"y\")=0A+\"CONFIG_B=3D\\\"\\\"\"=20=20=20=20=20= =20=20=20=20->=20'(\"CONFIG_B\"=20.=20\"\\\"\\\"\")=0A+\"#=20CONFIG_E=20= is=20not=20set\"=20->=20'(\"CONFIG_E\"=20.=20#f)=0A+\"CONFIG_C=3D\"=20=20= =20=20=20=20=20=20=20=20=20=20=20->=20'(\"CONFIG_C\"=20.=20#f)=0A= +\"CONFIG_D\"=20=20=20=20=20=20=20=20=20=20=20=20=20=20->=20= '(\"CONFIG_D\"=20.=20#f)=0A+\"#=20Any=20comment\"=20=20=20=20=20=20=20=20= =20->=20'(#f=20.=20\"#=20Any=20comment\")=0A+\"\"=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20->=20'(#f=20.=20\"\")=0A+\"#=20= CONFIG_E=3Dy\"=20=20=20=20=20=20=20=20=20=20->=20(error=20\"Invalid=20= configuration\")=0A+\"CONFIG_E=20is=20not=20set\"=20=20=20->=20(error=20= \"Invalid=20configuration\")=0A+\"Anything=20else\"=20=20=20=20=20=20=20=20= =20->=20(error=20\"Invalid=20configuration\")"=0A+=20=20(define=20= config-regexp=0A+=20=20=20=20(make-regexp=0A+=20=20=20=20=20;;=20= (match:substring=20(string-match=20"=3D(.*)"=20"=3D")=201)=20returns=20= "",=20but=20the=0A+=20=20=20=20=20;;=20pattern=20"=3D(.+)?"=20makes=20it=20= return=20#f=20instead.=20=20For=20a=20"CONFIG_A=3D"=20we=20like=0A+=20=20= =20=20=20;;=20to=20get=20#f,=20which=20later=20emits=20"#=20=E2=80=A6=20= is=20not=20set".=0A+=20=20=20=20=20"^=20*(#[\\t=20= ]*)?(CONFIG_[a-zA-Z0-9_]+)([\\t=20]*=3D[\\t=20]*(.+)?|([\\t=20]+is[\\t=20= ]+not[\\t=20]+set))?$"))=0A+=0A+=20=20(define=20config-comment-regexp=0A= +=20=20=20=20(make-regexp=20"^(|=20[\\t=20]*|=20*#.*)$"))=0A+=0A+=20=20= (let=20((match=20(regexp-exec=20config-regexp=20(string-trim-right=20= config-string))))=0A+=20=20=20=20(if=20match=0A+=20=20=20=20=20=20=20=20= (let*=20((comment=20(match:substring=20match=201))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(key=20(match:substring=20match=202))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(unset=20(match:substring=20match=20= 5))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(value=20(and=20(not=20= comment)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(not=20unset)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(match:substring=20match=20= 4))))=0A+=20=20=20=20=20=20=20=20=20=20(if=20(eq?=20(not=20comment)=20= (not=20unset))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20= key=20is=20uncommented=20and=20set=20or=20commented=20and=20unset.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20key=20value)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20The=20key=20is=20set=20or=20unset=20= ambigiously.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=20= (format=20#f=20"Invalid=20configuration,=20did=20you=20mean=20\"~a\"?"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(pair->config-string=20(cons=20key=20#f)))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20config-string)))=0A+=20= =20=20=20=20=20=20=20;;=20This=20is=20not=20a=20valid=20or=20ambigious=20= config-string,=20but=20mayby=20a=20comment.=0A+=20=20=20=20=20=20=20=20= (if=20(regexp-exec=20config-comment-regexp=20config-string)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20;;=20We=20keep=20valid=20comments.=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(cons=20#f=20config-string)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(error=20"Invalid=20configuration"=20= config-string)))))=0A+=0A+(define=20(pair->config-string=20pair)=0A+=20=20= "Convert=20a=20PAIR=20back=20to=20a=20config-string."=0A+=20=20(let*=20= ((key=20(first=20pair))=0A+=20=20=20=20=20=20=20=20=20(value=20(cdr=20= pair)))=0A+=20=20=20=20(if=20(string?=20key)=0A+=20=20=20=20=20=20=20=20= (if=20(string?=20value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20key=20"=3D"=20value)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20(string-append=20"#=20"=20key=20"=20is=20not=20set"))=0A+=20=20=20=20=20= =20=20=20value)))=0A+=0A+(define=20(defconfig->alist=20defconfig)=0A+=20=20= "Convert=20the=20content=20of=20a=20DEFCONFIG=20(or=20.config)=20file=20= into=20an=20alist."=0A+=20=20(with-input-from-file=20defconfig=0A+=20=20=20= =20(lambda=20()=0A+=20=20=20=20=20=20(let=20loop=20((alist=20'())=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(line=20(read-line)))=0A+=20= =20=20=20=20=20=20=20(if=20(eof-object?=20line)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Building=20the=20alist=20is=20done,=20now=20check=20for=20= duplicates.=0A+=20=20=20=20=20=20=20=20=20=20=20=20(let=20loop=20((keys=20= (map=20first=20(filter=20first=20alist)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(duplicates=20'()))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(if=20(null?=20keys)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20The=20search=20for=20duplicates=20= is=20done.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Return=20the=20alist=20or=20throw=20an=20error=20on=20duplicates.=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(null?=20= duplicates)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20alist=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(error=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(format=20#f=20"Duplicate=20configurations=20in=20~a"=20= defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20duplicates))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Continue=20the=20search=20for=20duplicates.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(loop=20(cdr=20keys)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (member=20(first=20keys)=20(cdr=20keys)=20equal?)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cons=20= (first=20keys)=20duplicates)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20duplicates))))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Build=20the=20alist.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(loop=20(cons=20(config-string->pair=20line)=20alist)=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(read-line)))))))=0A+=0A= +(define=20(modify-defconfig=20defconfig=20configs)=0A+=20=20"This=20= function=20can=20modify=20a=20given=20DEFCONFIG=20(or=20.config)=20file=20= by=20adding,=0A+changing=20or=20removing=20the=20list=20of=20strings=20= in=20CONFIGS.=20=20This=20allows=20customization=0A+of=20Kconfig=20based=20= projects=20like=20the=20kernel=20Linux=20or=20the=20bootloader=20'Das=20= U-Boot'.=0A+=0A+These=20are=20examples=20for=20CONFIGS=20to=20add,=20= change=20or=20remove=20configurations=20to/from=0A+DEFCONFIG:=0A+=0A= +'(\"CONFIG_A=3D\\\"a\\\"\"=0A+=20=20\"CONFIG_B=3D0\"=0A+=20=20= \"CONFIG_C=3Dy\"=0A+=20=20\"CONFIG_D=3Dm\"=0A+=20=20\"CONFIG_E=3D\"=0A+=20= =20\"CONFIG_F\"=0A+=20=20\"#=20CONFIG_G=20is=20not=20set\")=0A+=0A= +Instead=20of=20a=20list,=20CONFGIS=20can=20be=20a=20string=20with=20one=20= configuration=20per=20line."=0A+=20=20(let*=20(;;=20Split=20the=20= configs=20into=20a=20list=20of=20single=20configuations.=0A+=20=20=20=20=20= =20=20=20=20;;=20To=20minimize=20mistakes,=20we=20support=20a=20string=20= and=20a=20list=20of=20strings,=0A+=20=20=20=20=20=20=20=20=20;;=20each=20= with=20newlines=20to=20separate=20configurations.=0A+=20=20=20=20=20=20=20= =20=20(config-pairs=20(map=20config-string->pair=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (append-map=20(cut=20string-split=20<>=20=20#\newline)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(if=20(string?=20configs)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20configs)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20configs))))=0A+=20=20=20=20=20= =20=20=20=20;;=20Generate=20a=20blocklist=20from=20all=20valid=20keys=20= in=20config-pairs.=0A+=20=20=20=20=20=20=20=20=20(blocklist=20(delete=20= #f=20(map=20first=20config-pairs)))=0A+=20=20=20=20=20=20=20=20=20;;=20= Generate=20an=20alist=20from=20the=20defconifg=20without=20the=20keys=20= in=20blocklist.=0A+=20=20=20=20=20=20=20=20=20(filtered-defconfig-pairs=20= (remove=20(lambda=20(pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(member=20(first=20pair)=20blocklist))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(defconfig->alist=20defconfig))))=0A= +=20=20=20=20(with-output-to-file=20defconfig=0A+=20=20=20=20=20=20= (lambda=20()=0A+=20=20=20=20=20=20=20=20(for-each=0A+=20=20=20=20=20=20=20= =20=20=20=20(lambda=20(pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (display=20(pair->config-string=20pair))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(newline))=0A+=20=20=20=20=20=20=20=20=20=20=20(append=20= filtered-defconfig-pairs=20config-pairs))))))=0A+=0A+(define=20= (verify-config=20config=20defconfig)=0A+=20=20"Verify=20that=20the=20= CONFIG=20file=20contains=20all=20configurations=20from=20the=20DEFCONFIG=0A= +file=20and=20return=20#t=20in=20this=20case.=20Otherwise=20throw=20an=20= error=20with=20the=20mismatching=0A+keys=20and=20their=20values."=0A+=20=20= (let*=20((config-pairs=20(defconfig->alist=20config))=0A+=20=20=20=20=20=20= =20=20=20(defconfig-pairs=20(defconfig->alist=20defconfig))=0A+=20=20=20=20= =20=20=20=20=20(mismatching-pairs=0A+=20=20=20=20=20=20=20=20=20=20= (remove=20(lambda=20(pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Remove=20all=20configurations,=20whose=20values=20= are=20#f=20and=20whose=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20keys=20are=20not=20in=20config-pairs,=20as=20not=20in=20= config-pairs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20means=20unset,=20=E2=80=A6=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(and=20(not=20(cdr=20pair))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (assoc-ref=20config-pairs=20(first=20pair)))))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20=E2=80=A6=20from=20the=20= defconfig-pairs=20different=20to=20config-pairs.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(lset-difference=20equal?=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Remove=20comments=20by=20filtering=20with=20= first.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(filter=20first=20= defconfig-pairs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20config-pairs))))=0A+=20= =20=20=20(if=20(null?=20mismatching-pairs)=0A+=20=20=20=20=20=20=20=20#t=0A= +=20=20=20=20=20=20=20=20(error=20(format=20#f=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"Mismatching=20= configurations=20in=20~a=20and=20~a"=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20config=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20defconfig)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(map=20(lambda=20(mismatching-pair)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((key=20= (first=20mismatching-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(defconfig-value=20(cdr=20= mismatching-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(config-value=20(assoc-ref=20= config-pairs=20key)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(cons=20key=20(list=20(list=20config-value=20= defconfig-value)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mismatching-pairs)))))=0A= --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=04-gnu-bootloader-add-u-boot.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="04-gnu-bootloader-add-u-boot.patch" Content-Transfer-Encoding: 7bit gnu: bootloader: Add U-Boot packages for Raspberry Pi models. From: Stefan * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name-suffix' and 'append-description'. (make-u-boot-bin-package): New function to make minimal packages. (%u-boot-rpi-efi-configs): New helper list with config strings. (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): New helper strings. (u-boot-rpi-2{,-efi,-bin,-efi-bin}, u-boot-rpi-3-32b{,-efi,-bin,-efi-bin}, u-boot-rpi-4-32b{,-efi,-bin,-efi-bin}, u-boot-rpi-arm64{,-efi,-bin,-efi-bin}): New packages. --- gnu/packages/bootloaders.scm | 198 +++++++++++++++++++++++++++++++++--------- 1 file changed, 155 insertions(+), 43 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index c4f23f239e..16112c7e4b 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -756,13 +756,21 @@ def test_ctrl_c")) (setenv "PAGER" "cat") (apply invoke "make" test-target make-flags)))) '())))) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). This package provides its -board-independent tools."))) - -(define*-public (make-u-boot-package board triplet #:key defconfig configs) - "Returns a u-boot package for BOARD cross-compiled for TRIPLET with the -optional DEFCONFIG file and optional configuration changes from CONFIGS." + (description (string-append (package-description u-boot) + " This package provides board-independent +tools of U-Boot.")))) + +(define*-public (make-u-boot-package board + triplet + #:key + defconfig + configs + name-suffix + append-description) + "Returns a U-Boot package for BOARD cross-compiled for TRIPLET with the +optional DEFCONFIG file and optional configuration changes from CONFIGS. +A NAME-SUFFIX will be appended to the package name. An APPEND-DESCRIPTION will +be appended to the package description." (let ((same-arch? (lambda () (string=? (%current-system) (gnu-triplet->nix-system triplet))))) @@ -770,7 +778,12 @@ optional DEFCONFIG file and optional configuration changes from CONFIGS." (inherit u-boot) (name (string-append "u-boot-" (string-replace-substring (string-downcase board) - "_" "-"))) + "_" "-") + (or name-suffix ""))) + (description (if append-description + (string-append (package-description u-boot) + "\n\n" append-description) + (package-description u-boot))) (native-inputs `(,@(if (not (same-arch?)) `(("cross-gcc" ,(cross-gcc triplet)) @@ -861,20 +874,15 @@ optional DEFCONFIG file and optional configuration changes from CONFIGS." (make-u-boot-package "malta" "mips64el-linux-gnuabi64")) (define-public u-boot-am335x-boneblack - (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf" - ;; Patch out other device trees to build image small enough to - ;; fit within typical partitioning schemes where the first - ;; partition begins at sector 2048. - #:configs '("CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"")))) - (package - (inherit base) - (name "u-boot-am335x-boneblack") - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This U-Boot is built for the BeagleBone Black, which was removed upstream, -adjusted from the am335x_evm build with several device trees removed so that -it fits within common partitioning schemes.")))) + (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf" + ;; Patch out other device trees to build an image small enough to fit within + ;; typical partitioning schemes where the first partition begins at sector + ;; 2048. + #:configs '("CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"") + #:name-suffix "-boneblack" + #:append-description "This U-Boot is built for the BeagleBone Black, which +was removed upstream, adjusted from the am335x_evm build with several device +trees removed so that it fits within common partitioning schemes.")) (define-public u-boot-am335x-evm (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf")) @@ -929,7 +937,14 @@ it fits within common partitioning schemes.")))) (define-public u-boot-nintendo-nes-classic-edition (let ((base (make-u-boot-package "Nintendo_NES_Classic_Edition" - "arm-linux-gnueabihf"))) + "arm-linux-gnueabihf" + #:append-description "This version is for +the Nintendo NES Classic Edition. It is assumed that you have added a serial +port to pins PB0 and PB1 as described on +@url{https://linux-sunxi.org/Nintendo_NES_Classic_Edition}. + +In order to use FEL mode on the device, hold the Reset button on the +device while it's being turned on (and a while longer)."))) (package (inherit base) ;; Starting with 2019.01, FEL doesn't work anymore on A33. @@ -944,15 +959,6 @@ it fits within common partitioning schemes.")))) "0znkwljfwwn4y7j20pzz4ilqw8znphrfxns0x1lwdzh3xbr96z3k")) (patches (search-patches "u-boot-nintendo-nes-serial.patch")))) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This version is for the Nintendo NES Classic Edition. It is assumed that -you have added a serial port to pins PB0 and PB1 as described on -@url{https://linux-sunxi.org/Nintendo_NES_Classic_Edition}. - -In order to use FEL mode on the device, hold the Reset button on the -device while it's being turned on (and a while longer).") (native-inputs `(("python" ,python-2) ,@(package-native-inputs base)))))) @@ -964,17 +970,13 @@ device while it's being turned on (and a while longer).") (make-u-boot-package "mx6cuboxi" "arm-linux-gnueabihf")) (define-public u-boot-novena - (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf" - ;; Patch configuration to disable loading u-boot.img from FAT - ;; partition, allowing it to be installed at a device offset. - #:configs '("CONFIG_SPL_FS_FAT=")))) - (package - (inherit base) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This U-Boot is built for Novena. Be advised that this version, contrary -to Novena upstream, does not load u-boot.img from the first partition.")))) + (make-u-boot-package "novena" "arm-linux-gnueabihf" + ;; Patch configuration to disable loading u-boot.img from FAT partition, + ;; allowing it to be installed at a device offset. + #:configs '("CONFIG_SPL_FS_FAT=") + #:append-description "This U-Boot is built for Novena. Be advised that this +version, contrary to Novena upstream, does not load u-boot.img from the first +partition.")) (define-public u-boot-cubieboard (make-u-boot-package "Cubieboard" "arm-linux-gnueabihf")) @@ -1130,6 +1132,116 @@ BOOT_TARGET_NVME(func) \\ `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define*-public (make-u-boot-bin-package u-boot-package + #:key + (u-boot-bin "u-boot.bin")) + "Return a package with a single U-BOOT-BIN file from the U-BOOT-PACKAGE. +The package name will be that of the U-BOOT package suffixed with \"-bin\"." + (package + (name (string-append (package-name u-boot-package) "-bin")) + (version (package-version u-boot-package)) + (source #f) + (build-system trivial-build-system) + (arguments + `(#:builder + (begin + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink (string-append (assoc-ref %build-inputs "u-boot") + "/libexec/" + ,u-boot-bin) + (string-append out "/" ,u-boot-bin)))))) + (inputs `(("u-boot" ,u-boot-package))) + (home-page (package-home-page u-boot-package)) + (synopsis (package-synopsis u-boot-package)) + (description (format #f (string-append + (package-description u-boot-package) + "\n\nThis package only contains the file ~a.") + u-boot-bin)) + (license (package-license u-boot-package)))) + +(define-public %u-boot-rpi-efi-configs + '("CONFIG_OF_EMBED=" + "CONFIG_OF_BOARD=y" + "CONFIG_BOOTDELAY=1")) + +(define %u-boot-rpi-description-32-bit + "This is a 32-bit build of U-Boot.") + +(define %u-boot-rpi-description-64-bit + "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi +variants.") + +(define %u-boot-rpi-efi-description + "It allows network booting and uses the device-tree from the firmware, +allowing the usage of overlays. It can act as an EFI firmware for the +grub-efi-netboot-removable-bootloader.") + +(define %u-boot-rpi-efi-description-32-bit + (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-2 + (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-3-32b + (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-4-32b + (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-arm64 + (make-u-boot-package "rpi_arm64" "aarch64-linux-gnu" + #:append-description %u-boot-rpi-description-64-bit)) + +(define-public u-boot-rpi-2-efi + (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-3-32b-efi + (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-4-32b-efi + (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-arm64-efi + (make-u-boot-package "rpi_arm64""aarch64-linux-gnu" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description (string-append + %u-boot-rpi-efi-description " " + %u-boot-rpi-description-64-bit))) + +(define-public u-boot-rpi-2-bin (make-u-boot-bin-package u-boot-rpi-2)) + +(define-public u-boot-rpi-3_32b-bin (make-u-boot-bin-package u-boot-rpi-3-32b)) + +(define-public u-boot-rpi-4_32b-bin (make-u-boot-bin-package u-boot-rpi-4-32b)) + +(define-public u-boot-rpi-arm64-bin (make-u-boot-bin-package u-boot-rpi-arm64)) + +(define-public u-boot-rpi-2-efi-bin (make-u-boot-bin-package u-boot-rpi-2-efi)) + +(define-public u-boot-rpi-3-32b-efi-bin + (make-u-boot-bin-package u-boot-rpi-3-32b-efi)) + +(define-public u-boot-rpi-4-32b-efi-bin + (make-u-boot-bin-package u-boot-rpi-4-32b-efi)) + +(define-public u-boot-rpi-arm64-efi-bin + (make-u-boot-bin-package u-boot-rpi-arm64-efi)) + (define-public vboot-utils (package (name "vboot-utils") --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=05-gnu-linux-new-function-to.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="05-gnu-linux-new-function-to.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20New=20function=20to=20modify=20the=20configuration=20of=20= a=20Linux=20kernel.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(system->linux-srcarch):=20New=20= function=20to=20return=20the=0Arelevent=20folder=20name=20below=20arch/=20= in=20the=20Linux=20source=20code.=0A(make-linux-libre*)=20= ['set-environment]:=20Splitted=20this=20new=20phase=20out=20of=20and=0A= adding=20it=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20= allow=20a=20replacement=20and=20reuse=20from=20(modify-linux).=0A= (modify-linux):=20New=20function=20to=20make=20a=20customized=20Linux=20= package=20inherited=0Afrom=20another=20Linux=20package,=20which=20will=20= be=20build=20with=20an=20own=20defconfig=20or=0Aconfiguration=20changes.=0A= (make-defconfig):=20Function=20to=20get=20a=20defconfig=20from=20an=20= uri.=0A---=0A=20gnu/packages/linux.scm=20|=20=20124=20= ++++++++++++++++++++++++++++++++++++++++++++++++=0A=201=20file=20= changed,=20124=20insertions(+)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= b00b46be47..4febdbdece=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-185,8=20+185,27=20@@=0A=20=20=20= #:use-module=20(srfi=20srfi-2)=0A=20=20=20#:use-module=20(srfi=20= srfi-26)=0A=20=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs)=0A=20=20=20#:use-module=20(ice-9=20regex))=0A=20=0A= +(define-public=20(linux-srcarch)=0A+=20=20"Return=20the=20linux=20= SRCARCH=20name,=20which=20is=20set=20in=20the=20toplevel=20Makefile=20of=0A= +Linux=20and=20denotes=20the=20architecture=20specific=20directory=20= name=20below=20arch/=20in=20its=0A+source=20code.=20=20Some=20few=20= architectures=20share=20a=20common=20folder.=20=20It=20resembles=20the=0A= +definition=20of=20SRCARCH=20based=20on=20ARCH=20in=20the=20Makefile=20= and=20may=20be=20used=20to=20place=20a=0A+defconfig=20file=20in=20the=20= proper=20path."=0A+=20=20(let=20((linux-arch=20= (platform-linux-architecture=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lookup-platform-by-target-or-system=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(%current-system))))))=0A+=20=20=20= =20(match=20linux-arch=0A+=20=20=20=20=20=20("i386"=20=20=20=20"x86")=0A= +=20=20=20=20=20=20("x86_64"=20=20"x86")=0A+=20=20=20=20=20=20("sparc32"=20= "sparc")=0A+=20=20=20=20=20=20("sparc64"=20"sparc")=0A+=20=20=20=20=20=20= ("sh64"=20=20=20=20"sh")=0A+=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20= linux-arch))))=0A+=0A=20(define-public=20(system->defconfig=20system)=0A=20= =20=20"Some=20systems=20(notably=20powerpc-linux)=20require=20a=20= special=20target=20for=20kernel=0A=20defconfig.=20=20Return=20the=20= appropriate=20make=20target=20if=20applicable,=20otherwise=20return=0A@@=20= -1180,6=20+1199,111=20@@=20It=20has=20been=20modified=20to=20remove=20= all=20non-free=20binary=20blobs.")=0A=20=20=20=20=20=20=20(inputs=20= (modify-inputs=20(package-inputs=20base-linux-libre)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(prepend=20cpio))))))=0A=20=0A+=0C=0A= +;;;=0A+;;;=20Linux=20kernel=20customization=20functions.=0A+;;;=0A+=0A= +(define*-public=20(modify-linux=20#:key=20name=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(linux=20linux-libre)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= source=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20defconfig=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(configs=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= extra-version)=0A+=20=20"Make=20a=20Linux=20package=20NAME=20as=20a=20= modification=20of=20another=20LINUX=20package.=0A+=0A+If=20NAME=20is=20= not=20given,=20then=20it=20defaults=20to=20the=20same=20name=20as=20the=20= LINUX=20package.=0A+=0A+Unless=20SOURCE=20is=20given=20the=20source=20of=20= LINUX=20is=20used.=0A+=0A+A=20DEFCONFIG=20file=20to=20be=20used=20can=20= be=20given=20as=20an=20origin,=20as=20a=20file=20like=20object=0A= +(file-append,=20local-file=20etc.),=20or=20as=20a=20string=20with=20the=20= name=20of=20a=20defconfig=20file=0A+available=20in=20the=20Linux=20= sources.=20=20If=20DEFCONFIG=20is=20not=20given,=20then=20a=20defconfig=0A= +file=20will=20be=20saved=20from=20the=20LINUX=20package=20= configuration.=0A+=0A+Additional=20CONFIGS=20will=20be=20used=20to=20= modify=20the=20given=20or=20saved=20defconfig,=20which=0A+will=20finally=20= be=20used=20to=20build=20Linux.=0A+=0A+CONFIGS=20can=20be=20a=20list=20= of=20strings,=20with=20one=20configuration=20per=20line.=20=20The=20= usual=0A+defconfig=20syntax=20has=20to=20be=20used,=20but=20there=20is=20= a=20special=20extension=20to=20ease=20the=0A+removal=20of=20= configurations.=20=20Comment=20lines=20are=20supported=20as=20well.=0A+=0A= +Here=20is=20an=20explaining=20usage=20example:=0A+=0A+=20=20'(;;=20This=20= string=20defines=20the=20version=20tail=20in=20'uname=20-r'.=0A+=20=20=20= =20\"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\"=0A+=20=20=20=20;;=20This=20= '#=20CONFIG_=E2=80=A6=20is=20not=20set'=20syntax=20has=20to=20match=20= exactly!=0A+=20=20=20=20\"#=20CONFIG_BOOT_CONFIG=20is=20not=20set\"=0A+=20= =20=20=20\"CONFIG_NFS_SWAP=3Dy\"=0A+=20=20=20=20;;=20This=20is=20a=20= multiline=20configuration:=0A+=20=20=20=20\"CONFIG_E1000=3Dy=0A+#=20This=20= is=20a=20comment,=20below=20follow=20two=20special=20removal=20= extensions:=0A+CONFIG_CMDLINE_EXTEND=0A+CONFIG_CMDLINE_FORCE=3D\")=0A+=0A= +A=20string=20of=20configurations=20instead=20of=20a=20list=20of=20= configuration=20strings=20is=20also=0A+possible.=0A+=0A+EXTRA-VERSION=20= can=20be=20a=20string=20overwriting=20the=20EXTRAVERSION=20setting=20of=20= the=20LINUX=0A+package,=20after=20being=20prepended=20by=20a=20hyphen.=20= =20It=20will=20be=20visible=20in=20the=20output=0A+of=20'uname=20-r'=20= behind=20the=20Linux=20version=20numbers."=0A+=20=20(package=0A+=20=20=20= =20(inherit=20linux)=0A+=20=20=20=20(name=20(or=20name=20(package-name=20= linux)))=0A+=20=20=20=20(source=20(or=20source=20(package-source=20= linux)))=0A+=20=20=20=20(arguments=0A+=20=20=20=20=20= (substitute-keyword-arguments=0A+=20=20=20=20=20=20=20=20=20= (package-arguments=20linux)=0A+=20=20=20=20=20=20=20((#:imported-modules=20= imported-modules=20%gnu-build-system-modules)=0A+=20=20=20=20=20=20=20=20= `((guix=20build=20kconfig)=20,@imported-modules))=0A+=20=20=20=20=20=20=20= ((#:modules=20modules)=0A+=20=20=20=20=20=20=20=20`((guix=20build=20= kconfig)=20,@modules))=0A+=20=20=20=20=20=20=20((#:phases=20phases)=0A+=20= =20=20=20=20=20=20=20#~(modify-phases=20#$phases=0A+=20=20=20=20=20=20=20= =20=20=20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(lambda*=20(#:key=20inputs=20#:allow-other-keys=20#:rest=20= arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "EXTRAVERSION"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20#$(and=20extra-version=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (string-null?=20extra-version))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "-"=20extra-version)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (let*=20((configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"arch/"=20#$(linux-srcarch)=20= "/configs/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(guix_defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(string-append=20configs=20= "guix_defconfig")))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20#$(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20#~(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20Call=20the=20original=20'configure=20= phase.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(apply=20(assoc-ref=20#$phases=20'configure)=20arguments)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20Save=20a=20defconfig=20file.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(invoke=20"make"=20= "savedefconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Move=20the=20saved=20defconfig=20to=20the=20= proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(rename-file=20"defconfig"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20((string?=20defconfig)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Use=20another=20= existing=20defconfig=20from=20the=20Linux=20sources.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#~(rename-file=20= (string-append=20configs=20#$defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20guix_defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(else=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Copy=20the=20defconfig=20input=20to=20the=20proper=20= location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#~(copy-file=20(assoc-ref=20inputs=20"guix_defconfig")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(chmod=20guix_defconfig=20#o644)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20guix_defconfig=20= '#$configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"guix_defconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(verify-config=20".config"=20guix_defconfig))))))))=0A= +=20=20=20=20(native-inputs=0A+=20=20=20=20=20(append=20(if=20(or=20(not=20= defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(string?=20defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20'()=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20= defconfig=20should=20be=20an=20origin=20or=20file-like=20object.=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`(("guix_defconfig"=20= ,defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (package-native-inputs=20linux)))))=0A+=0A+(define-public=20= (make-defconfig=20uri=20sha256-as-base32)=0A+=20=20(origin=20(method=20= url-fetch)=0A+=20=20=20=20=20=20=20=20=20=20(uri=20uri)=0A+=20=20=20=20=20= =20=20=20=20=20(sha256=20(base32=20sha256-as-base32))))=0A=20=0A=20=0C=0A= =20;;;=0A= --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=06-gnu-raspberry-pi-add-defconfig.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="06-gnu-raspberry-pi-add-defconfig.patch" Content-Transfer-Encoding: quoted-printable gnu:=20raspberry-pi:=20Add=20defconfig=20objects=20to=20build=20= customized=20Linux=20kernels.=0A=0AFrom:=20Stefan=20= =0A=0Agnu/packages/raspberry-pi.scm=20= (make-raspi-defconig):=20New=20function=20to=20make=0Adownloaded=20= defconfig=20objects=20from=20the=20Linux=20repository=20of=20the=20= Raspberry=20Pi=0AFoundation.=0A(%bcm2709-defconfig,=20= %bcm2711-defconfig,=20%bcm2711-defconfig-64,=0A%bcmrpi3-defconfig):=20= New=20variables=20containing=20defconfig=20objects=20to=20build=0ALinux=20= kernels=20customized=20for=20Raspberry=20Pi=20single=20board=20= computers.=0A---=0A=20gnu/packages/raspberry-pi.scm=20|=20=20=2037=20= ++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2036=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/gnu/packages/raspberry-pi.scm=20b/gnu/packages/raspberry-pi.scm=0A= index=20bb38b8b218..8949d2237a=20100644=0A---=20= a/gnu/packages/raspberry-pi.scm=0A+++=20b/gnu/packages/raspberry-pi.scm=0A= @@=20-1,5=20+1,6=20@@=0A=20;;;=20GNU=20Guix=20---=20Functional=20package=20= management=20for=20GNU=0A=20;;;=20Copyright=20=C2=A9=202020=20Danny=20= Milosavljevic=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-25,9=20+26,10=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20commencement)=0A=20=20=20= #:use-module=20(gnu=20packages=20cross-base)=0A=20=20=20#:use-module=20= (gnu=20packages=20documentation)=0A+=20=20#:use-module=20(gnu=20packages=20= embedded)=0A=20=20=20#:use-module=20(gnu=20packages=20file)=0A=20=20=20= #:use-module=20(gnu=20packages=20gcc)=0A-=20=20#:use-module=20(gnu=20= packages=20embedded)=0A+=20=20#:use-module=20(gnu=20packages=20linux)=0A=20= =20=20#:use-module=20(guix=20build-system=20gnu)=0A=20=20=20#:use-module=20= (guix=20download)=0A=20=20=20#:use-module=20(guix=20git-download)=0A@@=20= -235,3=20+237,36=20@@=20Raspberry=20Pi.=20=20Note:=20It=20does=20not=20= work=20on=20Raspberry=20Pi=201.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(install-file=20"arm64.bin"=20libexec)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#t))))))))=0A=20=20=20=20=20(supported-systems=20= '("aarch64-linux"))))=0A+=0A+(define=20(make-raspi-defconfig=20arch=20= defconfig=20sha256-as-base32)=0A+=20=20"Make=20for=20the=20architecture=20= ARCH=20a=20file-like=20object=20from=20the=20DEFCONFIG=20file=0A+with=20= the=20hash=20SHA256-AS-BASE32.=20=20This=20object=20can=20be=20used=20as=20= the=20#:defconfig=0A+argument=20of=20the=20function=20(modify-linux)."=0A= +=20=20(make-defconfig=0A+=20=20=20(string-append=0A+=20=20=20=20;;=20= This=20is=20from=20commit=207838840=20on=20branch=20rpi-5.18.y,=0A+=20=20= =20=20;;=20see=20https://github.com/raspberrypi/linux/tree/rpi-5.18.y/=0A= +=20=20=20=20;;=20and=20= https://github.com/raspberrypi/linux/commit/7838840b5606a2051b31da4c598466= df7b1c3005=0A+=20=20=20=20= "https://raw.githubusercontent.com/raspberrypi/linux/7838840b5606a2051b31d= a4c598466df7b1c3005/arch/"=0A+=20=20=20=20arch=20"/configs/"=20= defconfig)=0A+=20=20=20sha256-as-base32))=0A+=0A+(define-public=20= %bcm2709-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20=20=20"arm"=20= "bcm2709_defconfig"=0A+=20=20=20= "1hcxmsr131f92ay3bfglrggds8ajy904yj3vw7c42i4c66256a79"))=0A+=0A= +(define-public=20%bcm2711-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2711_defconfig"=0A+=20=20=20= "1n7g5yq0hdp8lh0x6bfxph2ff8yn8zisdj3qg0gbn83j4v8i1zbd"))=0A+=0A= +(define-public=20%bcm2711-defconfig-64=0A+=20=20(make-raspi-defconfig=0A= +=20=20=20"arm64"=20"bcm2711_defconfig"=0A+=20=20=20= "0k9q7qvw826v2hrp49xnxnw93pnnkicwx869chvlf7i57461n4i7"))=0A+=0A= +(define-public=20%bcmrpi3-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm64"=20"bcmrpi3_defconfig"=0A+=20=20=20= "1bfnl4p0ddx3200dg91kmh2pln36w95y05x1asc312kixv0jgd81"))=0A= --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=07-gnu-raspberry-pi-add-helpers.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="07-gnu-raspberry-pi-add-helpers.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add helpers for config.txt file generation. From: Stefan * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): New functions. (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt %raspi-u-boot-bootloader-txt): New variables. --- gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 8949d2237a..12a919d5c6 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -238,6 +238,59 @@ Raspberry Pi. Note: It does not work on Raspberry Pi 1.") #t)))))))) (supported-systems '("aarch64-linux")))) +(define-public (raspi-config-file name content) + "Make a configuration file like config.txt for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (plain-file + name + (if (list? content) + (string-join content "\n" 'suffix) + content))) + +(define-public %raspi-config-txt + ;; A config.txt file to start the ARM cores up in 64-bit mode if necessary + ;; and to include a dtb.txt, bootloader.txt, and a custom.txt, each with + ;; separated configurations for the Raspberry Pi firmware. + (raspi-config-file + "config.txt" + `("# See https://www.raspberrypi.org/documentation/configuration/config-txt/README.md for details." + "" + ,(string-append "arm_64bit=" (if (target-aarch64?) "1" "0")) + "include dtb.txt" + "include bootloader.txt" + "include custom.txt"))) + +(define-public %raspi-bcm27-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; downstream device tree files bcm27*.dtb will be used. + (raspi-config-file + "dtb.txt" + "upstream_kernel=0")) + +(define-public %raspi-bcm28-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; upstream device tree files bcm28*.dtb will be used. + ;; This also implies the use of the dtoverlay=upstream. + (raspi-config-file + "dtb.txt" + "upstream_kernel=1")) + +(define-public %raspi-u-boot-bootloader-txt + ;; A bootloader.txt file to be included by the config.txt to load the + ;; U-Boot bootloader. + (raspi-config-file + "bootloader.txt" + '("dtoverlay=upstream" + "enable_uart=1" + "kernel=u-boot.bin"))) + +(define-public (raspi-custom-txt content) + "Make a custom.txt file for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (raspi-config-file "custom.txt" content)) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=08-gnu-raspberry-pi-new-function.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="08-gnu-raspberry-pi-new-function.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: New function to make a package with device-tree files. From: Stefan * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to make a package with device-tree files for Raspberry Pi models from the kernel given as argument. --- gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 12a919d5c6..92f5d22677 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages file) #:use-module (gnu packages gcc) #:use-module (gnu packages linux) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concatenated with a newline character. Alternatively CONTENT can be a string with the full file content." (raspi-config-file "custom.txt" content)) +(define-public (make-raspi-bcm28-dtbs linux) + "Make a package with the device-tree files for Raspberry Pi models from the +kernel LINUX." + (package + (inherit linux) + (name "raspi-bcm28-dtbs") + (source #f) + (build-system copy-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'unpack)) + #:install-plan + (list (list (string-append (assoc-ref %build-inputs "linux") + "/lib/dtbs/broadcom/") + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) + (inputs `(("linux" ,linux))) + (synopsis "Device-tree files for a Raspberry Pi") + (description + (simple-format #f "The device-tree files for Raspberry Pi models from ~a." + (package-name linux))))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4 Content-Disposition: attachment; filename=09-gnu-raspberry-pi-add-a.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="09-gnu-raspberry-pi-add-a.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. From: Stefan * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. --- gnu/packages/raspberry-pi.scm | 19 +++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 73 ++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 77 +++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 92f5d22677..3d62b028ba 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -312,6 +315,22 @@ kernel LINUX." (simple-format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. + ;; It neither installs firmware nor device-tree files for the Raspberry Pi. + ;; It just assumes them to be existing in boot/efi in the same way that some + ;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + ;; It creates firmware configuration files and a bootloader-chain with U-Boot + ;; to provide an EFI API for the final GRUB bootloader. + ;; It also serves as a blue-print to create an own bootloader-chain with + ;; firmwre and device-tree packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-arm64-efi-bin) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 0000000000..a1e41e3399 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,73 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 0000000000..7e18f00d86 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,77 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (target "/boot/efi") + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #| It is possible to use a specific defconfig file, + for example the "bcmrpi3_defconfig" with the + variable shown below. Unfortunately the kernel + build from the linux-libre sources with this + defconfig file does not boot. + #:extra-version "gnu-bcmrpi3" + #:defconfig %bcmrpi3-defconfig + |#)) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices '("/run/swapfile")) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 --Apple-Mail=_932B5A3D-1E15-46AB-A634-391CEB07DFD4-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 18 15:24:02 2022 Received: (at 48314) by debbugs.gnu.org; 18 Jul 2022 19:24:02 +0000 Received: from localhost ([127.0.0.1]:52134 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDWLa-0002VI-1N for submit@debbugs.gnu.org; Mon, 18 Jul 2022 15:24:02 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:50748) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDWLV-0002Ul-TE for 48314@debbugs.gnu.org; Mon, 18 Jul 2022 15:24:01 -0400 Date: Mon, 18 Jul 2022 19:23:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1658172231; x=1658431431; bh=+2kAvxi8sTDW36Cs2Sp8q480xGHP37FqkC/MYk4icqw=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=ge2UE6dxRmvQrvJSyVErpJF6qAU3Cge3qbUqF/7W7oigjiGLSohgVZSGbsxgb6wLc 6MHVMPJ7oqR9XmUloizeudgxNXlE8QVMXyVfQMakQmWGJ1oG9Rj5nyX9kgCGWq4eld zbYpWz3JXXPCi4otR1EA+AwO1nOv9QWSuUZouc6O4xRj8YV0msbubCY16jGxJL3dLX kqj6jnrN+mtR+ojUpzKZi2vkcI4vkee5tReehgKVGxEL0NEASI9eEKjURsgh+pMg8v ZZVHS/jHyIAqJ4sqw72za1FYU/zTN2duQ5mlZP0uHxMsa6eO2zU0n9HYwWXh8UP2D+ EYMJdCPD3Exsw== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <125F42BC-E90F-47A5-9997-7E0089AF07BF@vodafonemail.de> References: <87tuadhq3d.fsf@contorta> <81366405-13FD-4F0E-8180-4DFCB16A6C1A@vodafonemail.de> <87zgk5b56p.fsf@contorta> <125F42BC-E90F-47A5-9997-7E0089AF07BF@vodafonemail.de> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thanks Stefan for the updated patches! I've applied them and build the system. However, I'm unable to test the system as there is an error when invoking `guix syst= em init` command: $ sudo -E ./pre-inst-env guix system init --target=3Daarch64-linux-gnu gnu/= system/examples/raspberry-pi-64.tmpl /mnt /gnu/store/hhb5l2f5287xmfzz4jgvi15kb9bcqi33-system /gnu/store/fiq006ykhc0dkninzz5gxl2nh3vzc37p-grub.cfg initializing operating system under '/mnt'... copying to '/mnt'... populating '/mnt'... guix system: error: symlink: Operation not permitted: "/boot/efi/gnu/store" $ sudo fdisk /dev/mmcblk0 Welcome to fdisk (util-linux 2.37.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. This disk is currently in use - repartitioning is probably a bad idea. It's recommended to umount all file systems, and swapoff all swap partitions on this disk. Command (m for help): p Disk /dev/mmcblk0: 29.12 GiB, 31267487744 bytes, 61069312 sectors Disk model: 1081CS0 Units: sectors of 1 * 512 =3D 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 526335 524288 256M 83 Linux /dev/sda2 526336 61069311 60542976 28.9G 83 Linux $ mount /dev/mmcblk0p2 on /mnt type ext4 (rw,relatime) /dev/mmcblk0p1 on /mnt/boot type vfat (rw,relatime,fmask=3D0022,dmask=3D002= 2,codepage=3D437,iocharset=3Diso8859-1,shortname=3Dmixed,errors=3Dremount-r= o) I have these 2 remarks: 1) Why does it point to "/boot/efi/gnu/store" and not "/mnt"/boot/efi/gnu/s= tore"? 2) Symlink from ext4 "Guix" partition will not work on another vfat "EFI" p= artition. Do you know how to fix this issue? ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 02:55:51 2022 Received: (at 48314) by debbugs.gnu.org; 19 Jul 2022 06:55:51 +0000 Received: from localhost ([127.0.0.1]:52625 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDh8p-0006Rb-Vr for submit@debbugs.gnu.org; Tue, 19 Jul 2022 02:55:51 -0400 Received: from mr4.vodafonemail.de ([145.253.228.164]:46408) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDh8m-0006RM-Eo for 48314@debbugs.gnu.org; Tue, 19 Jul 2022 02:55:34 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr4.vodafonemail.de (Postfix) with ESMTPS id 4Ln8jV4VnSz1y4s; Tue, 19 Jul 2022 06:55:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658213726; bh=qecmggkKPLslr//YrpCvHcfeuq8Iqzz/lplh4Xrr6BI=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=pqolS+KhBhAj57/zUjBunesBzUKj538SmhiZEqhWBRQ5/B/HJyauO+saG2CuIHxu4 NEWNrj/4lG3lSnntfMR/WeF7IM+z12OFkFDEGTSTDTdWD/E9lv1SvN6Ta2b+Vyj292 EzGz4GiT6CEtnkx1zRmGO+hgcXV52l2o+uPgohdE= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Ln8jD2qs9zMmvM; Tue, 19 Jul 2022 06:55:09 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Tue, 19 Jul 2022 08:55:08 +0200 Message-Id: <3828D5BC-ABCF-4864-8AD8-A33ACBB99359@vodafonemail.de> References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (19F77) X-purgate-type: clean X-purgate: clean X-purgate-size: 1656 X-purgate-ID: 155817::1658213726-1C2F12A7-CB2867F8/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > Do you know how to fix this issue? Yes. Like on other EFI systems, you have to mount /dev/mmdblk0p1 on /mnt/boo= t/efi. There is the usual bootloader installation fallback, to use the bootloader-t= arget argument for installation on /, if it is not existing below /mnt. And t= his is happening in your case. I don=E2=80=99t understand why this common fallback got invented. I think it= =E2=80=99s actually dangerous. It could destroy your booted system, if you s= imply forgot to mount the EFI system partition. I would prefer a clear error= message. But well, the code is following existing standards. > 1) Why does it point to "/boot/efi/gnu/store" and not "/mnt"/boot/efi/gnu/= store"? Because /mnt/boot/efi was not existing in your case and because of that fall= back to ignore /mnt and use / instead. > 2) Symlink from ext4 "Guix" partition will not work on another vfat "EFI" p= artition. That=E2=80=99s true. This symlink will not be created for your use case. The= symlink will be created for booting over network, when the /mnt/boot/efi is= an NFS share which allows symlinks. The use-case decision is based on symli= nk support at the bootloader-target. Actually the installation on a microSD card is just a by-product of installa= tion for netboot. :-) Even on a normal x86_64 EFI system you could install the grub-efi-netboot-(r= emovable-)bootloader instead of the grub-efi-(removable-)bootloader. The dif= ference is, that all GRUB files will reside on the EFI system partition inst= ead of the root partition. This could be helpful for encryption problems. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 19 03:35:37 2022 Received: (at 48314) by debbugs.gnu.org; 19 Jul 2022 07:35:37 +0000 Received: from localhost ([127.0.0.1]:52699 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDhlZ-0007T0-5f for submit@debbugs.gnu.org; Tue, 19 Jul 2022 03:35:37 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:33668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oDhlX-0007Sn-3C for 48314@debbugs.gnu.org; Tue, 19 Jul 2022 03:35:36 -0400 Date: Tue, 19 Jul 2022 07:35:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1658216128; x=1658475328; bh=h5zN3rHZiRgoW/W/GyYwbGwbj2p+gJAq3CTge9ZfrYo=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=t+yZfVOwA3+Bihi1mRBZGcKuFW9072vl8UHPV82iaZTzCX5F/YQbNJVhGhCI9lMau T0anDQcVRX3oWw+nfOb4Realu9Q01W1X35IMNP4e31zC7QKVmRMo9Hm6p1kBCgz64b YoAD5vDacTGWyzhiute4ZY8rtUbtUjHDt9NJUGRCxITxUrmbBI9jIw2r0g4g0Alxfy hwAE3JJNpLdW5lKj4rqTCKU7JuwwBnm9xjcm8qNW17LH2c+SZbkwwS7MssxBCX5OBg 9UJpoEBsT5p6Tyr6cI/qBAtGGKeX9dDD3P2AOolXXLBMFFPdyN3AYDu3mUVq8CGr+n 1ces4cJFVsAIQ== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <3828D5BC-ABCF-4864-8AD8-A33ACBB99359@vodafonemail.de> References: <3828D5BC-ABCF-4864-8AD8-A33ACBB99359@vodafonemail.de> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan! > > > Do you know how to fix this issue? > > > Yes. Like on other EFI systems, you have to mount /dev/mmdblk0p1 on /mnt/= boot/efi. > > There is the usual bootloader installation fallback, to use the bootloade= r-target argument for installation on /, if it is not existing below /mnt. = And this is happening in your case. > > I don=E2=80=99t understand why this common fallback got invented. I think= it=E2=80=99s actually dangerous. It could destroy your booted system, if y= ou simply forgot to mount the EFI system partition. I would prefer a clear = error message. Thanks. I've mounted the boot partition to /mnt/boot instead of /mnt/boot/e= fi. I tend to agree with you as the default behaviour can damage the host syste= m without a warning which is dangerous. So now I get some weird guix error during copying files: sudo -E ./pre-inst-env guix system init --target=3Daarch64-linux-gnu gnu/sy= stem/examples/raspberry-pi-64.tmpl /mnt -v 3 gnu/system/examples/raspberry-pi-64.tmpl:32:24: warning: the 'target' field= is deprecated, please use 'targets' instead gnu/system/examples/raspberry-pi-64.tmpl:27:2: warning: List elements of th= e field 'swap-devices' should now use the record, as the old m= ethod is deprecated. See "(guix) operating-system Reference" for more detai= ls. /gnu/store/hhb5l2f5287xmfzz4jgvi15kb9bcqi33-system /gnu/store/fiq006ykhc0dkninzz5gxl2nh3vzc37p-grub.cfg initializing operating system under '/mnt'... copying to '/mnt'... [#################### = ]guix system: erro= r: readdir: Bad message copying to '/mnt'... I've added the verbosity level 3 to print everything but I didn't get more = info about what fails :-( ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 02:14:14 2022 Received: (at 48314) by debbugs.gnu.org; 20 Jul 2022 06:14:14 +0000 Received: from localhost ([127.0.0.1]:55646 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE2yL-0001Xt-Ng for submit@debbugs.gnu.org; Wed, 20 Jul 2022 02:14:13 -0400 Received: from mr3.vodafonemail.de ([145.253.228.163]:48870) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE2yI-0001Xd-G4 for 48314@debbugs.gnu.org; Wed, 20 Jul 2022 02:14:11 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr3.vodafonemail.de (Postfix) with ESMTPS id 4LnllJ33jrz204D; Wed, 20 Jul 2022 06:14:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658297644; bh=B/8tOnM6XptbhExqQqj/w4OJHV9IUNqgO7cdkPHhqVg=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=GS86LXvyg8YwRcnUYMIEKc7JGZB5IOsOtZPfFjgxPFSSdDSKbVLROaBKx27gwYLvu kvb2Bw7gST5djoCFLKE11njcuGsDH3oS4k+a+OCj+HGvrht/dX8IzSEYPeGMV7j9VV zDR6jpmMtVSI0rt5+X5Zqd/nUHgjpLJQfyXwQ+xM= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lnll27475zHpFl; Wed, 20 Jul 2022 06:13:47 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi From: Stefan In-Reply-To: Date: Wed, 20 Jul 2022 08:13:46 +0200 Message-Id: <9A647306-1C70-4A55-B6AB-35A414E6E633@vodafonemail.de> References: To: phodina X-Mailer: iPhone Mail (19F77) X-purgate-type: clean X-purgate: clean X-purgate-size: 1418 X-purgate-ID: 155817::1658297644-E29C42C7-169964D6/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > So now I get some weird guix error during copying files: > initializing operating system under '/mnt'... > copying to '/mnt'... [#################### = ]guix system: erro= r: readdir: Bad message > copying to '/mnt'... The function make-grub-efi-netboot-installer in gnu/bootloader/grub.scm firs= t uses copy-recursively to copy the collection of bootloader files to /mnt/b= oot/efi and creates afterwards the symlinks to /gnu/store and /boot/grub/gru= b.cfg or =E2=80=93 as in your case =E2=80=93 creates a /mnt/boot/efi/efi/boo= t/grub.cfg to point GRUB to the root partition to access /boot/grub/grub.cfg= and /gnu/store. Yesterday your guix system init struggled to create these symlinks. That mea= ns it was already done with the copy-recursively call. I=E2=80=99m pretty sure that this copy-recursively is using readdir internal= ly. The functionallity afterwards is surely not. Yesterday you also got the message =E2=80=98populating '/mnt'=E2=80=A6=E2=80= =99 before the symlink struggle. Therefore I assume that your current error h= as nothing to do with the bootloader installation.=20 Maybe there are leftovers from yesterday in /mnt, which prevent guix to copy= files sucessfully onto /dev/mmcblk0p2? Reformatting the ext4 filesystem might help. Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 03:16:53 2022 Received: (at 48314) by debbugs.gnu.org; 20 Jul 2022 07:16:53 +0000 Received: from localhost ([127.0.0.1]:55711 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3wz-00039X-0y for submit@debbugs.gnu.org; Wed, 20 Jul 2022 03:16:53 -0400 Received: from mail-4322.protonmail.ch ([185.70.43.22]:55775) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oE3wu-00039H-4M for 48314@debbugs.gnu.org; Wed, 20 Jul 2022 03:16:51 -0400 Date: Wed, 20 Jul 2022 07:16:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1658301401; x=1658560601; bh=u4gbV7LEyga3zXt30KqOPqCPhB874j5pxYwvlqLu4Fg=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=KRDRrswa5ip98mL/0+rufBWdWiZdu19I1ShAQUE5G+rBml6m+NQhUwNPLICBr8Yq8 M/ZrUh1bdBjrZj7cnvmQD9P2iwDc1bv/hqe86PQZRSNFyAhrrAnzw+0X0PPSpfOcM2 CXdR5DfRKD8yFKFAsRHcIAvNy31OLBzoCMlg7j4XvlBgT/G+4+z7Ycbz3OyWiCf2bT vF9zfO+U9wkTF1sn6DLY0S2bq96PmSJGP/ZQJcXE6HQJ8KintFeBF22wCwczIotnIh TH3ZY4eDdAjsH816w0nzdWVaaVPxHMqCF/0hemgYBKH12L69FPSkEgQPAOcGZ7/ZJ2 KKgUDtm/WU3/w== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <9A647306-1C70-4A55-B6AB-35A414E6E633@vodafonemail.de> References: <9A647306-1C70-4A55-B6AB-35A414E6E633@vodafonemail.de> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan, > > So now I get some weird guix error during copying files: > > > initializing operating system under '/mnt'... > > copying to '/mnt'... [#################### ]guix system: error: readdir= : Bad message > > copying to '/mnt'... > > > The function make-grub-efi-netboot-installer in gnu/bootloader/grub.scm f= irst uses copy-recursively to copy the collection of bootloader files to /m= nt/boot/efi and creates afterwards the symlinks to /gnu/store and /boot/gru= b/grub.cfg or =E2=80=93 as in your case =E2=80=93 creates a /mnt/boot/efi/e= fi/boot/grub.cfg to point GRUB to the root partition to access /boot/grub/g= rub.cfg and /gnu/store. > > Yesterday your guix system init struggled to create these symlinks. That = means it was already done with the copy-recursively call. > > I=E2=80=99m pretty sure that this copy-recursively is using readdir inter= nally. The functionallity afterwards is surely not. > > Yesterday you also got the message =E2=80=98populating '/mnt'=E2=80=A6= =E2=80=99 before the symlink struggle. Therefore I assume that your current= error has nothing to do with the bootloader installation. > > Maybe there are leftovers from yesterday in /mnt, which prevent guix to c= opy files sucessfully onto /dev/mmcblk0p2? > > Reformatting the ext4 filesystem might help. the issue seems to be connected to my guix instance on the host. I got anot= her weird messages and what finally help was to clean the profile cache in = my home dir. I then reformatted the SD card just to be sure. # parted /dev/mmcblk0 GNU Parted 3.5 Using /dev/mmcblk0 Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p Model: NORELSYS 1081CS0 (scsi) Disk /dev/mmcblk0: 31.3GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 269MB 268MB primary fat32 lba 2 269MB 31.3GB 31.0GB primary ext4 And then I also copied the firmware files [1] neccessary to boot: $ ls /mnt/boot/efi bcm2708-rpi-b.dtb bcm2710-rpi-2-b.dtb bcm2711-rpi-4-b.dtb efi= / fixup_db.dat start4.elf bcm2708-rpi-b-plus.dtb bcm2710-rpi-3-b.dtb bcm2711-rpi-cm4.dtb fix= up4cd.dat fixup_x.dat start4x.elf bcm2708-rpi-b-rev1.dtb bcm2710-rpi-3-b-plus.dtb bcm2711-rpi-cm4s.dtb fix= up4.dat LICENCE.broadcom start_cd.elf bcm2708-rpi-cm.dtb bcm2710-rpi-cm3.dtb bootcode.bin fix= up4db.dat manifest start_db.elf bcm2708-rpi-zero.dtb bcm2710-rpi-zero-2.dtb bootloader.txt fix= up4x.dat overlays/ start.elf bcm2708-rpi-zero-w.dtb bcm2710-rpi-zero-2-w.dtb config.txt fix= up_cd.dat start4cd.elf start_x.elf bcm2709-rpi-2-b.dtb bcm2711-rpi-400.dtb dtb.txt fix= up.dat start4db.elf u-boot.bin The board powers up and I see the RGB screen when the raspberrypi boots. Th= en it switches to black screen and I don't see any output on the HDMI. Also= there is no IP address assigned on the Ethernet even though the port itsel= f is active. I haven't run tcpdump or attached serial adapter yet so I don't know what's= wrong and where the system hangs. I'm testing this on Raspberry Pi 4. [1] https://github.com/raspberrypi/firmware ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 20 15:42:36 2022 Received: (at 48314) by debbugs.gnu.org; 20 Jul 2022 19:42:36 +0000 Received: from localhost ([127.0.0.1]:58902 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEFae-0005Tf-Gw for submit@debbugs.gnu.org; Wed, 20 Jul 2022 15:42:36 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:60724) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oEFab-0005TQ-2N for 48314@debbugs.gnu.org; Wed, 20 Jul 2022 15:42:34 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4Lp5h31w38z1yP5; Wed, 20 Jul 2022 19:42:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1658346147; bh=teDIFh9Prz8Zy34ardcZ82w1F9O7UhyeWAZYE0Ea4Jc=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=mBagsVgFGcSWpbpqpAPb8jDMfkDQr0h1+zr/EKuk5G7DYjbhco3nNkAxkadipdkbC RnWSEp+uyYqQJ/DiziP38APkgoheIk+ZVaOuw71TEEzIJ1rncFUZCVpCuKcz8Zvm/k 8VOTEOr0g7QLgHHi5XtDuL1lRD5zHgFCCeY66YwI= Received: from smtpclient.apple (aftr-62-216-210-100.dynamic.mnet-online.de [62.216.210.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Lp5gp1dkkzKm4M; Wed, 20 Jul 2022 19:42:11 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Wed, 20 Jul 2022 21:42:10 +0200 Message-Id: <1707AE25-4041-462A-B7D0-8611A02B0E41@vodafonemail.de> References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (19F77) X-purgate-type: clean X-purgate: clean X-purgate-size: 1517 X-purgate-ID: 155817::1658346147-F312A2E8-C097B38C/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > the issue seems to be connected to my guix instance on the host. Glad to hear you figured it out. > Then it switches to black screen That should mean that the graphic-card is not set up properly.=20 But additionally U-Boot, GRUB or the kernel could be hanging. :-/=20 > I'm testing this on Raspberry Pi 4. I prepared everything for a 3b monthes ago. Potentially this does not match t= he current firmware or kernel anymore or does not fit the 4. Take a look at grub-efi-bootloader-chain-raspi-64 in gnu/packages/raspberry-= pi.scm. Read the notes there. Take a look at raspi-custom-txt and the others there as well. You probably h= ave to use it to set some parameters. I use these with an older kernel: dtoverlay=3Ddisable-wifi dtoverlay=3Dvc4-fkms-v3d,cma-64 enable_uart=3D1=20 My best guess is a missing dtoverlay=3Dvc4-fkms-v3d. I just noticed that the= re is meanwhile a vc4-fkms-v3d-pi4. Try that first. There are also flavours w= ithout the f(ake). Attention with enable_uart, it is set in %raspi-u-boot-bootloader-txt to 1 a= lready. There was once a U-Boot version working without enable_uart, but the= recent one seems to require it again. If this does not help, then maybe the kernel needs to be customized. I never= heard of somone else running the linux-libre kernel on a Raspberry Pi. :-) The kernel configuration in gnu/system/examples/raspberry-pi-64.tmpl has som= e comments regarding possible customizations. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 12 10:27:31 2022 Received: (at 48314) by debbugs.gnu.org; 12 Aug 2022 14:27:31 +0000 Received: from localhost ([127.0.0.1]:58529 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMVdK-0002Xp-TH for submit@debbugs.gnu.org; Fri, 12 Aug 2022 10:27:31 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:60241) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMVdH-0002XZ-Tp for 48314@debbugs.gnu.org; Fri, 12 Aug 2022 10:27:29 -0400 Date: Fri, 12 Aug 2022 14:27:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1660314441; x=1660573641; bh=eTae+9b1qVMxTnoj2dIAd/VS0oroNNx3u9MbJHpEq/Q=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=r+RTOXDYikjjXMFTiQ5qBcYM2j8Eqcm5bIHVagWUNy62tmYfIzonvpp+pyuIsR412 ydbWoAk4r1fnYmSE45CQ7JEp1TU0Hh2InsM+m/rTHi6SGm5yzcaAz4mASbeuCu4T9z QZJQDiIKpBc+bu+p9yyDg9IRm9s4QoJn8Bx2chlarKRYvuaO3cjaXALLV6lkplO1Qe 4Y/VkQl4G7hWSUCBGq6E39a4IX0N3WbDW/h07pYa+fwEslDavt441rosqpqWdAYt0p eXJOXHrBNWQBd+C9BnkT8ksLjlX7VYWxbKNykY/rQDYxSTyi+akWEbk/85/1yoaAPw gbgZLUKha5ksA== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <1707AE25-4041-462A-B7D0-8611A02B0E41@vodafonemail.de> References: <1707AE25-4041-462A-B7D0-8611A02B0E41@vodafonemail.de> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_M6hbOoaVhedf72dztRjagpwjIoB25Pecpfab12UrMA" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_M6hbOoaVhedf72dztRjagpwjIoB25Pecpfab12UrMA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Stefan! Good news. I managed to run Guix libre kernel on the raspberry pi. Thanks f= or the help along the way! pi@raspberrypi-guix ~$ uname -a Linux raspberrypi-guix 5.18.16-gnu #1 SMP PREEMPT 1 aarch64 GNU/Linux The issue was in the firmware, therefore I'll post the hashes of the files = from the EFI partition: pi@raspberrypi-guix ~$ sha256sum /boot/efi/* 010beacf073dbf7a4be24288a5c8b93001f0d852387dce50bf50de51a7412cd6 /boot/efi= /bcm2711-rpi-400.dtb 489645357820f2e7e8f13841c901ba9571b779c07b3203f1627538d04ce45ad3 /boot/efi= /bcm2711-rpi-4-b.dtb c0f057eea9e357341265910000e56dab94b3200465b0556deb1eda3af117d3c9 /boot/efi= /bcm2837-rpi-3-a-plus.dtb df83b6dc6cda7e8eae62e8316b02a4c1659a6b0cf874c6caa075be9413a00b98 /boot/efi= /bcm2837-rpi-3-b.dtb c008e84ac57aa9c35aedabd1ed2cb4290088e33d85d1ef8ca56c5ef9b5f0d13c /boot/efi= /bcm2837-rpi-3-b-plus.dtb 6a1cc758d38edcf9f9213a8fcbc75d4bf06fbd86806b4430c15742b6ab427de9 /boot/efi= /bcm2837-rpi-cm3-io3.dtb 69309823da13dc96b89e3d82b44f820e4f84efa79d207adad2c8784559794f03 /boot/efi= /bootcode.bin 1ac38b353f924c56c5d5a587971f3f81d09c433787b99f889368fd342c4336da /boot/efi= /bootloader.txt df0ac4af19615f13ff7ffa395ae553c70813ef9d2a82fab0e1175adf80ed1294 /boot/efi= /cmdline.txt 9d4975d57f5eb54b08a430cb3d677e5dbf23ed48c73fe33a4e3efdfc35f8d41e /boot/efi= /config.txt bcc22553ef64d361270103e84c80ab5362bdb2ffba3c9eea13ee3de60f6cbaff /boot/efi= /dtb.txt 22db24c621c326d907c7b8c5975b1730e6ce78dea680bec3958d907093031638 /boot/efi= /fixup4cd.dat 7d28775bff4781bda065f37fbb64c88ed1b56d1f4af79d85f792032f55bb6de7 /boot/efi= /fixup4.dat b0d299dd46ddecd2c4eeeca61f42d114a0c464dcd6165861a662d118daa3afc0 /boot/efi= /fixup4db.dat 495076ed0488703ba59bd0d43bc577ad1695470379263854197a752cd1989330 /boot/efi= /fixup4x.dat 22db24c621c326d907c7b8c5975b1730e6ce78dea680bec3958d907093031638 /boot/efi= /fixup_cd.dat 8e90c8a379f3f99ee59370c50e48853db82669dbd6515d4ce08a24307d3dc4c5 /boot/efi= /fixup.dat 4f5d2433956f64cec640ae91dc47bdea3aa2c6c7cc579faafb779826bd7e554c /boot/efi= /fixup_db.dat 82bbf5a3f86f73a41e9f8975deb75e50ab4d7581500a43ec7f0fcc42214948dd /boot/efi= /fixup_x.dat 9756eca19be1a443fc6a6cd5f8ffb0759d8b5d68f24248829d39abdc59388490 /boot/efi= /manifest 9e1474d3b3078bb80e87f65a5122fd4a8a828b563de5652b37d8b40019b3a51a /boot/efi= /start4cd.elf 2dfb27b876ec00e54857e199e939def019b148010f03ce1947e4b48fa226e4f7 /boot/efi= /start4db.elf a607afd09523830bd524eafa2eb3f530d70cef643eb8eca14a80dcbd6830ec8f /boot/efi= /start4.elf 7ffa3ce1f93f61737fee68f61747b876fd1b15203553ebc096d2b64d79fb7da2 /boot/efi= /start4x.elf b21aeceec40aff935f70dfe3adc4d96963e61d4696f909ad910f299da978d8bb /boot/efi= /start_cd.elf 378e84616f28e63cb33c794e3430b7deeca5bb84067f79e71408f6aab587e0e7 /boot/efi= /start_db.elf e4a374d78f31d333b20ab128a614d3549f9dfe4103781c0938104fc0dd45d3fc /boot/efi= /start.elf dbdeb7c679566419035e70db8aff90954ca6ba45a579e990886ddc0b964b2621 /boot/efi= /start_x.elf f9c7d5534c787479601f1e70b4b108cd765445aecbc154296d0d35f423045ca4 /boot/efi= /sysconf.txt d47f45c6221ccaaf1ca0e66d01b90fca350a0b06b4c7a44a81b6f68a99f36607 /boot/efi= /u-boot.bin I'll test it also on RPi3 and I'll change the storage media to SSD on my RP= i4 to provide more space and faster reliable storage. - I just have question regarding the example if it wouldn't be better to pr= epare the whole image - partition the SD card and just copy it to the actua= l media? - Should there be some manual how to prepare the firmware files or format t= he SD card in case we prepare just the root filesystem and bootloader? IMHO having ISO image for Raspberry Pi 3,4 (aarch64) would be great as it w= ould allow them to run Guix easily without need to build it on some other a= arch64 machine or resort to crosscompile. What do you think? Also there's small patch to fix deprecated calls in os-defintion files. ---- Petr =20 --b1_M6hbOoaVhedf72dztRjagpwjIoB25Pecpfab12UrMA Content-Type: text/x-patch; name=raspberry-guix.diff Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=raspberry-guix.diff ZGlmZiAtLWdpdCBhL2dudS9zeXN0ZW0vZXhhbXBsZXMvcmFzcGJlcnJ5LXBpLTY0LW5mcy1yb290 LnRtcGwgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC1uZnMtcm9vdC50bXBs CnktcGktNjQtbmZzLXJvb3QudG1wbAppbmRleCBhMWU0MWUzMzk5Li4yNzk2MjBiMGZiIDEwMDY0 NAotLS0gYS9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3BiZXJyeS1waS02NC1uZnMtcm9vdC50bXBs CisrKyBiL2dudS9zeXN0ZW0vZXhhbXBsZXMvcmFzcGJlcnJ5LXBpLTY0LW5mcy1yb290LnRtcGwK QEAgLTMwLDcgKzMwLDcgQEAKICAgICh0aW1lem9uZSAiRXVyb3BlL0JlcmxpbiIpCiAgICAoYm9v dGxvYWRlciAoYm9vdGxvYWRlci1jb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgKGJvb3Rs b2FkZXIgZ3J1Yi1lZmktYm9vdGxvYWRlci1jaGFpbi1yYXNwaS02NCkKLSAgICAgICAgICAgICAg ICAodGFyZ2V0ICIvYm9vdC9lZmkiKQorICAgICAgICAgICAgICAgICh0YXJnZXRzIChsaXN0ICIv Ym9vdC9lZmkiKSkKICAgICAgICAgICAgICAgICAodGhlbWUgKGdydWItdGhlbWUgKHJlc29sdXRp b24gJygxOTIwIC4gMTA4MCkpCiAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZSAoZmlsZS1h cHBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlYXJ0d29yay1yZXBvc2l0b3J5 CkBAIC00OSw3ICs0OSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChkZXZpY2UgIjov ZXhwb3J0L3Jhc3BiZXJyeXBpL2d1aXgiKQogICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRp b25zICJhZGRyPTEwLjIwLjMwLjQwLHZlcnM9NC4xIikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAlYmFzZS1maWxlLXN5c3RlbXMpKQotICAgKHN3YXAtZGV2aWNlcyAnKCIvcnVuL3N3YXBmaWxl IikpCisgICAgKHN3YXAtZGV2aWNlcworICAgICAobGlzdAorICAgICAgKHN3YXAtc3BhY2UKKyAg ICAgICAodGFyZ2V0ICIvcnVuL3N3YXBmaWxlIikpKSkKICAgICh1c2VycyAoY29ucyogKHVzZXIt YWNjb3VudAogICAgICAgICAgICAgICAgICAgKG5hbWUgInBpIikKICAgICAgICAgICAgICAgICAg IChncm91cCAidXNlcnMiKQpkaWZmIC0tZ2l0IGEvZ251L3N5c3RlbS9leGFtcGxlcy9yYXNwYmVy cnktcGktNjQudG1wbCBiL2dudS9zeXN0ZW0vZXhhbXBsZXMvcmFzcGJlcnJ5LXBpLTY0LnRtcGwK aW5kZXggN2UxOGYwMGQ4Ni4uMDczOTU4MmNmMCAxMDA2NDQKLS0tIGEvZ251L3N5c3RlbS9leGFt cGxlcy9yYXNwYmVycnktcGktNjQudG1wbAorKysgYi9nbnUvc3lzdGVtL2V4YW1wbGVzL3Jhc3Bi ZXJyeS1waS02NC50bXBsCkBAIC0yOSw3ICsyOSw3IEBACiAgICAodGltZXpvbmUgIkV1cm9wZS9C ZXJsaW4iKQogICAgKGJvb3Rsb2FkZXIgKGJvb3Rsb2FkZXItY29uZmlndXJhdGlvbgogICAgICAg ICAgICAgICAgIChib290bG9hZGVyIGdydWItZWZpLWJvb3Rsb2FkZXItY2hhaW4tcmFzcGktNjQp Ci0gICAgICAgICAgICAgICAgKHRhcmdldCAiL2Jvb3QvZWZpIikKKyAgICAgICAgICAgICAgICAo dGFyZ2V0cyAobGlzdCAiL2Jvb3QvZWZpIikpCiAgICAgICAgICAgICAgICAgKHRoZW1lIChncnVi LXRoZW1lIChyZXNvbHV0aW9uICcoMTkyMCAuIDEwODApKQogICAgICAgICAgICAgICAgICAgICAg ICAoaW1hZ2UgKGZpbGUtYXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWFy dHdvcmstcmVwb3NpdG9yeQpAQCAtNTMsNyArNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAg ICAgICAodHlwZSAidmZhdCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRldmljZSAoZmls ZS1zeXN0ZW0tbGFiZWwgIkVGSSIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICViYXNlLWZp bGUtc3lzdGVtcykpCi0gICAoc3dhcC1kZXZpY2VzICcoIi9ydW4vc3dhcGZpbGUiKSkKKyAgIChz d2FwLWRldmljZXMKKyAgICAobGlzdAorICAgICAoc3dhcC1zcGFjZQorICAgICAgKHRhcmdldCAi L3J1bi9zd2FwZmlsZSIpKSkpCiAgICAodXNlcnMgKGNvbnMqICh1c2VyLWFjY291bnQKICAgICAg ICAgICAgICAgICAgIChuYW1lICJwaSIpCiAgICAgICAgICAgICAgICAgICAoZ3JvdXAgInVzZXJz IikK --b1_M6hbOoaVhedf72dztRjagpwjIoB25Pecpfab12UrMA-- From debbugs-submit-bounces@debbugs.gnu.org Sat Aug 13 06:49:22 2022 Received: (at 48314) by debbugs.gnu.org; 13 Aug 2022 10:49:22 +0000 Received: from localhost ([127.0.0.1]:59808 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMohl-0004aP-TH for submit@debbugs.gnu.org; Sat, 13 Aug 2022 06:49:22 -0400 Received: from mr6.vodafonemail.de ([145.253.228.166]:59142) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oMohi-0004aB-Ic for 48314@debbugs.gnu.org; Sat, 13 Aug 2022 06:49:20 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4M4cjh3P92z1xyG; Sat, 13 Aug 2022 10:49:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1660387752; bh=KJMHkydOUi5E0YkwBzTp2/hAhQGn3thVKzYxWMZmxGM=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=dl38nWXrpZomWTO3v4byAqCbgBmQlsYBSbvN1QiRhC0pGSRyRLOquz+iHaOc2PmJ7 toH0ehLURhFILtP/+js3PhahiKWOpCpDuU4Ao5IovVIMdYFaXzk8LxK1egAL+Vg+jW a8W887VwU7ze3tphfCsthZ+C4oSwdNqKUP89BKIc= Received: from smtpclient.apple (aftr-62-216-210-161.dynamic.mnet-online.de [62.216.210.161]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4M4cjP0FpZz9sNm; Sat, 13 Aug 2022 10:48:53 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Sat, 13 Aug 2022 12:48:52 +0200 Message-Id: References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (19G71) X-purgate-type: clean X-purgate: clean X-purgate-size: 2338 X-purgate-ID: 155817::1660387749-BA9E322F-616DC5FA/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > Good news. I managed to run Guix libre kernel on the raspberry pi. Woot! Great! > The issue was in the firmware Good to know! > I'll test it also on RPi3 In the meantime I got everything compiled and installed for my Raspberry Pi 3= b as well. But there is some issue with the U-Boot. If I replace U-Boot with= an older version, it boots and the system is running fine. However, during b= oot the Linux-Libre-Gnus and early kernel messages are not visible, but afte= r boot all seems to be fine. Maybe the troubles stem from the firmware, as in your case =E2=80=93 I use a= different one =E2=80=93, or maybe the U-Boot only works on a Pi 4. I=E2=80=99m using the Linux-Libre kernel with the %bcmrpi3-defconfig from th= e Raspberry Pi Linux sources (removing a long list of unsupported configurat= ions) stefan@guix ~$ uname -a Linux guix 5.18.12-bcmrpi3-v8 #1 SMP PREEMPT 1 aarch64 GNU/Linux > I just have question regarding the example if it wouldn't be better to pre= pare the whole image Yes, certainly. As you may know I started with Guix on void with an NFS root= file-system and patched Guix to get to this point, still on NFS. So I have n= o experience yet to build an image.=20 =46rom what I saw in the code, I guess that more work needs to be done to ge= nerate an image. My personal focus is to first get the patches merged. > Should there be some manual how to prepare the firmware files or format th= e SD card in case we prepare just the root filesystem and bootloader? I think the comments in e.g. raspberry-pi-64.tmpl could be improved. A hint t= o the non-free firmware is certainly problematic. Not sure, if we should or e= ven can mention the Raspberry Pi in the manual. > IMHO having ISO image for Raspberry Pi 3,4 (aarch64) would be great as it w= ould allow them to run Guix easily without need to build it on some other aa= rch64 machine or resort to crosscompile. What do you think? Yes, I totally agree. I also think that it could help to spread Guix. It wou= ld be great to see something like e.g. Pi-hole in the future to be based on G= uix System. But first things first, the merge is still pending. > Also there's small patch to fix deprecated calls in os-defintion files. Thanks, much appreciated! Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 14 05:59:20 2022 Received: (at 48314) by debbugs.gnu.org; 14 Aug 2022 09:59:21 +0000 Received: from localhost ([127.0.0.1]:35798 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oNAOu-0004l4-Mg for submit@debbugs.gnu.org; Sun, 14 Aug 2022 05:59:20 -0400 Received: from mail-40131.protonmail.ch ([185.70.40.131]:51793) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oNAOr-0004kn-Ty for 48314@debbugs.gnu.org; Sun, 14 Aug 2022 05:59:19 -0400 Date: Sun, 14 Aug 2022 09:59:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1660471150; x=1660730350; bh=a4+sHoCWyVAGr7LBWB2orOA0c+czEK58z8TLMLyOmbs=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=ayO/3/H9CuHQzT7YKdsc7iCxh65UG4PmsGHNAna5KHsPiqHpQAwTd9BiO2TIbGZx1 jinSRhQZ37mDmbsuNgLnt7GZj2tA/fqEVq7cBgzSbolT+X7wPyG7V59fWBBRJGe4y3 /5G+LrsD09eGX3QOr0iYVcQemSeSno3Et/5UTlDngFCF7p8NRn6uzuF+j9HRF9fZl9 EzzLbOCMXdzZc57z8AOHmVlFdW2PsWuIoPI8vqA47gIq0VxMXoDHRJx9Lk8mpsn2Y4 Z1RVEDeKIMdraB6l81h2pJYGtdODaGTpEIWlWfcLbDT5xA8hje6XwrUp20Da/SHa0a oQdce3wpKEvPg== To: Stefan From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: In-Reply-To: References: Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan! > > I'll test it also on RPi3 I got it working also there. I do have RPi2 but I doubt it will run there a= s it's just not that powerful. > > I just have question regarding the example if it wouldn't be better to = prepare the whole image >=20 >=20 > Yes, certainly. As you may know I started with Guix on void with an NFS r= oot file-system and patched Guix to get to this point, still on NFS. So I h= ave no experience yet to build an image. >=20 > From what I saw in the code, I guess that more work needs to be done to g= enerate an image. My personal focus is to first get the patches merged. >=20 Yes, the focus should be on mainlining these changes first. > > IMHO having ISO image for Raspberry Pi 3,4 (aarch64) would be great as = it would allow them to run Guix easily without need to build it on some oth= er aarch64 machine or resort to crosscompile. What do you think? >=20 >=20 > Yes, I totally agree. I also think that it could help to spread Guix. It = would be great to see something like e.g. Pi-hole in the future to be based= on Guix System. >=20 I know there is some open source bootloader which is already packaged in Gu= ix `raspi-arm64-chainloader`. Maybe this would be the way in the future :-) Good luck ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 14 07:35:39 2022 Received: (at 48314) by debbugs.gnu.org; 14 Aug 2022 11:35:40 +0000 Received: from localhost ([127.0.0.1]:36089 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oNBu7-0001F9-Kk for submit@debbugs.gnu.org; Sun, 14 Aug 2022 07:35:39 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:58110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oNBu4-0001Eu-H5 for 48314@debbugs.gnu.org; Sun, 14 Aug 2022 07:35:38 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4M5Fhf3DY5z1xy1; Sun, 14 Aug 2022 11:35:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1660476930; bh=ztJ6GxU6SZ+Ngb9MwBs7jRp1ywcOvF4JNey44BxmHZI=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=aKQ7mbmoyIUZNAWw/RaoXg090M3QNMakjithP09wLMpz0fdPQRoTKzEVdkFrIT03E EGL7FUHgjGGLI+zemLrssvVo4OnV/4qo9lgC5KQVhPgruiBBq1dKKJR25DlBYTT9US RQnkFUQPhMyfidGDnCAONbExJADkGGyajfaaDOY4= Received: from smtpclient.apple (aftr-62-216-210-161.dynamic.mnet-online.de [62.216.210.161]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4M5FhP4S3BzHqhk; Sun, 14 Aug 2022 11:35:14 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Date: Sun, 14 Aug 2022 13:35:13 +0200 Message-Id: References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (19G71) X-purgate-type: clean X-purgate: clean X-purgate-size: 449 X-purgate-ID: 155817::1660476930-11F7A23F-C2CFF5CA/0/0 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > I got it working also there. Great! Which Pi is it exactly? Did you use the same build as for your Pi 4? And the= same firmware? Did you see the Linux-Libre gnus and early kernel messages a= fter GRUB? > I know there is some open source bootloader which is already packaged in G= uix `raspi-arm64-chainloader`. Maybe this would be the way in the future :-)= I never tried it. It may be possible. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Thu Sep 01 19:55:56 2022 Received: (at 48314) by debbugs.gnu.org; 1 Sep 2022 23:55:56 +0000 Received: from localhost ([127.0.0.1]:44401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oTu2O-0005Gi-B9 for submit@debbugs.gnu.org; Thu, 01 Sep 2022 19:55:56 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:51132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oTu2M-0005GV-FB for 48314@debbugs.gnu.org; Thu, 01 Sep 2022 19:55:55 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4MJdGX5vPhz1yKb; Thu, 1 Sep 2022 23:55:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1662076549; bh=bVgd8RMnNdsXk9ybat62O17HehADFetQjeasO7B7a7c=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=V/5ufZWhLwPtr7EqCpI12B7Os3jybTOfBgd/7v62CKr1LxRE8jvGc0n0djbI866iM wv0IzEQgWZfMUunw2mqoEIkZmpi4IhsSJekPY/p4j7QZ2c8U1Bn+bLtL4wCgDKDYqC duSAJ6xtV1RV0oZIIh8ywn3mcYjPc/fBI2cRR/9M= Received: from macbook-pro.kuh-wiese.my-router.de (aftr-62-216-210-241.dynamic.mnet-online.de [62.216.210.241]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4MJdGF205BzHpKl; Thu, 1 Sep 2022 23:55:30 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi From: Stefan In-Reply-To: Date: Fri, 2 Sep 2022 01:55:28 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: To: phodina X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate: clean X-purgate-size: 457 X-purgate-ID: 155817::1662076548-E29C42C7-33F90B38/0/0 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , dannym@scratchpost.org, =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! The firmware I=E2=80=99m using is the same, but all dtb files differ. Did you use the same set of dtb files on our Pi 3? Especially I have a = /boot/efi/bcm2710-rpi-3-b.dtb =E2=80=93 which is loaded at boot due to = the upstream_kernel=3D0 setting in dtb.txt =E2=80=93, which you seem to = be missing. I guess that your Pi 3 will not load any dtb file. My current but not working U-Boot has a different hash. Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Fri Sep 02 01:50:11 2022 Received: (at 48314) by debbugs.gnu.org; 2 Sep 2022 05:50:11 +0000 Received: from localhost ([127.0.0.1]:44611 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oTzZD-0005t8-Eh for submit@debbugs.gnu.org; Fri, 02 Sep 2022 01:50:11 -0400 Received: from mail-4316.protonmail.ch ([185.70.43.16]:28361) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oTzZB-0005sr-0o for 48314@debbugs.gnu.org; Fri, 02 Sep 2022 01:50:09 -0400 Date: Fri, 02 Sep 2022 05:49:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1662097803; x=1662357003; bh=Ja2rWZG5x63c63VKeuqcRidB6k/1yTWnI+GjnXbYbdE=; h=Date:To:From:Cc:Reply-To:Subject:Message-ID:In-Reply-To: References:Feedback-ID:From:To:Cc:Date:Subject:Reply-To: Feedback-ID:Message-ID; b=rOmbGjr/zL/Yebi6LQOgSMX5TGjLnt34V1vPoe04xp/iSC5XVyFfUqwRbnnJbpa4t eJxPfx1jqETkenUPC88B/lm/XTcTjHjSC+IY1Q9+1pDMWbqvUCsgJAodNdAS5XOmdz 2wanbffY7Xqf9ea9de/8WuGCSrAxvDU4JU0XdgegEDzA1vAOJdjrxjwEo1/S8LasT6 3T/QgDpfy41PCwZTKk4Qs4Tf/Z4r82ahCGPBN1ZfWrCn/2ZbP6no2hdV8+dYHsnEvC doOE6NsQmDb7LM/i7t1gMdWA6V/IZav5mfKJzvvceEYqpZfPmeKkWbll05sIOKiAoU SLq9iI40FF1aA== To: stefan-guix@vodafonemail.de From: phodina Subject: Re: [PATCH v3] Install guix system on Raspberry Pi Message-ID: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> In-Reply-To: References: Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_5HABJfyaou58gqCi73cerfyIiLgpouHzGr8O9mqjCiA" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: vagrant@debian.org, dannym@scratchpost.org, ludo@gnu.org, 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: phodina Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --b1_5HABJfyaou58gqCi73cerfyIiLgpouHzGr8O9mqjCiA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGkgU3RlZmFuIQoKSSdsbCBjaGVjayBhbmQgcG9zdCB0aGUgY29uZmlnIGhlcmUgYnV0IEkgZG9u J3QgaGF2ZSBSYXNwYmVycnkgUGkgY3VycmVudGx5IHdpdGggbWUuCgotLS0tClBldHIKCi0tLS0t LS0tIE9yaWdpbmFsIE1lc3NhZ2UgLS0tLS0tLS0KT24gU2VwIDIsIDIwMjIsIDE6NTUgQU0sIFN0 ZWZhbiB3cm90ZToKCj4gSGkgUGV0ciEKPgo+IFRoZSBmaXJtd2FyZSBJ4oCZbSB1c2luZyBpcyB0 aGUgc2FtZSwgYnV0IGFsbCBkdGIgZmlsZXMgZGlmZmVyLgo+Cj4gRGlkIHlvdSB1c2UgdGhlIHNh bWUgc2V0IG9mIGR0YiBmaWxlcyBvbiBvdXIgUGkgMz8gRXNwZWNpYWxseSBJIGhhdmUgYSAvYm9v dC9lZmkvYmNtMjcxMC1ycGktMy1iLmR0YiDigJMgd2hpY2ggaXMgbG9hZGVkIGF0IGJvb3QgZHVl IHRvIHRoZSB1cHN0cmVhbV9rZXJuZWw9MCBzZXR0aW5nIGluIGR0Yi50eHQg4oCTLCB3aGljaCB5 b3Ugc2VlbSB0byBiZSBtaXNzaW5nLgo+Cj4gSSBndWVzcyB0aGF0IHlvdXIgUGkgMyB3aWxsIG5v dCBsb2FkIGFueSBkdGIgZmlsZS4KPgo+IE15IGN1cnJlbnQgYnV0IG5vdCB3b3JraW5nIFUtQm9v dCBoYXMgYSBkaWZmZXJlbnQgaGFzaC4KPgo+IEJ5ZQo+Cj4gU3RlZmFu --b1_5HABJfyaou58gqCi73cerfyIiLgpouHzGr8O9mqjCiA Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 SGkgU3RlZmFuITxicj48YnI+SSdsbCBjaGVjayBhbmQgcG9zdCB0aGUgY29uZmlnIGhlcmUgYnV0 IEkgZG9uJ3QgaGF2ZSBSYXNwYmVycnkgUGkgY3VycmVudGx5IHdpdGggbWUuPGJyPjxicj48YnI+ LS0tLTxicj5QZXRyPGJyPjxicj48YnI+PGJyPi0tLS0tLS0tIE9yaWdpbmFsIE1lc3NhZ2UgLS0t LS0tLS08YnI+T24gU2VwIDIsIDIwMjIsIDE6NTUgQU0sIFN0ZWZhbiA8IHN0ZWZhbi1ndWl4QHZv ZGFmb25lbWFpbC5kZT4gd3JvdGU6PGJsb2NrcXVvdGUgY2xhc3M9InByb3Rvbm1haWxfcXVvdGUi Pjxicj48cCBkaXI9Imx0ciI+SGkgUGV0ciE8L3A+DQo8cCBkaXI9Imx0ciI+VGhlIGZpcm13YXJl IEkmIzgyMTc7bSB1c2luZyBpcyB0aGUgc2FtZSwgYnV0IGFsbCBkdGIgZmlsZXMgZGlmZmVyLjwv cD4NCjxwIGRpcj0ibHRyIj5EaWQgeW91IHVzZSB0aGUgc2FtZSBzZXQgb2YgZHRiIGZpbGVzIG9u IG91ciBQaSAzPyBFc3BlY2lhbGx5IEkgaGF2ZSBhIC9ib290L2VmaS9iY20yNzEwLXJwaS0zLWIu ZHRiICYjODIxMTsgd2hpY2ggaXMgbG9hZGVkIGF0IGJvb3QgZHVlIHRvIHRoZSB1cHN0cmVhbV9r ZXJuZWw9MCBzZXR0aW5nIGluIGR0Yi50eHQgJiM4MjExOywgd2hpY2ggeW91IHNlZW0gdG8gYmUg bWlzc2luZy48L3A+DQo8cCBkaXI9Imx0ciI+SSBndWVzcyB0aGF0IHlvdXIgUGkgMyB3aWxsIG5v dCBsb2FkIGFueSBkdGIgZmlsZS48L3A+DQo8cCBkaXI9Imx0ciI+TXkgY3VycmVudCBidXQgbm90 IHdvcmtpbmcgVS1Cb290IGhhcyBhIGRpZmZlcmVudCBoYXNoLjxicj48L3A+DQo8cCBkaXI9Imx0 ciI+QnllPC9wPg0KPHAgZGlyPSJsdHIiPlN0ZWZhbjxicj48L3A+DQo8L2Rpdj4= --b1_5HABJfyaou58gqCi73cerfyIiLgpouHzGr8O9mqjCiA-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 04 14:42:06 2022 Received: (at 48314) by debbugs.gnu.org; 4 Sep 2022 18:42:06 +0000 Received: from localhost ([127.0.0.1]:45704 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oUuZJ-0002o5-T7 for submit@debbugs.gnu.org; Sun, 04 Sep 2022 14:42:06 -0400 Received: from mr3.vodafonemail.de ([145.253.228.163]:38138) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oUuZH-0002na-21 for 48314@debbugs.gnu.org; Sun, 04 Sep 2022 14:42:04 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr3.vodafonemail.de (Postfix) with ESMTPS id 4MLL910dQ1z1ymJ; Sun, 4 Sep 2022 18:41:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1662316917; bh=CwJbUW9iOmLd8DUT12SoOZBwkAAJ4qUB7BX7ixdS1rI=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=UbppBo0RmAnFC9NukVR8Pu8ezCssFAUBq6JY4v6g65aH9567szN5K+tiPClxbgFHF +zo6E4/++L850G+sGuf7WpHFt/AQ+QotutSqUoHqxqex8w59mSOPWfory1zFKwlOcu A8NOv0oJEVui1w4WTwU/+OqSK/bpQsU9wakX0QSM= Received: from macbook-pro.kuh-wiese.my-router.de (aftr-62-216-210-241.dynamic.mnet-online.de [62.216.210.241]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4MLL8w38V1zMkry; Sun, 4 Sep 2022 18:41:49 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v3] Install guix system on Raspberry Pi From: Stefan In-Reply-To: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> Date: Sun, 4 Sep 2022 20:41:48 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> To: phodina X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate: clean X-purgate-size: 974 X-purgate-ID: 155817::1662316916-99A8B332-46EFBC9F/0/0 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Petr! > I'll check and post the config here but I don't have Raspberry Pi = currently with me. Thanks, for the offer, but it isn=E2=80=99t necessary any more, I found = the reason. Actually I=E2=80=99m net-booting my Raspberry Pi 3b over network. But = due to a known bug in the ROM code, I still have a microSD card inserted = with only the bootcode.bin file. If I boot the Pi with that card inserted, then GRUB has a problem: error: variable `root' isn't set. Entering rescue mode... grub rescue> If I remove the microSD card, then GRUB has no problem with its root = variable, and Guix System is started. Interestingly this does not happen, if I use the older U-Boot version = 2020.10. The current U-Boot version 2022.04 prints an error message =E2=80=93 = with and without the mircoSD card inserted: libfdt fdt_check_header(): FDT_ERR_BADMAGIC But I=E2=80=99m not sure, if this error message is related. Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Sep 22 12:19:24 2022 Received: (at 48314) by debbugs.gnu.org; 22 Sep 2022 16:19:24 +0000 Received: from localhost ([127.0.0.1]:38322 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1obOv6-0002mS-KS for submit@debbugs.gnu.org; Thu, 22 Sep 2022 12:19:24 -0400 Received: from mr6.vodafonemail.de ([145.253.228.166]:42056) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1obOv4-0002mF-WB for 48314@debbugs.gnu.org; Thu, 22 Sep 2022 12:19:23 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr6.vodafonemail.de (Postfix) with ESMTPS id 4MYL846dgKz1xyb; Thu, 22 Sep 2022 16:19:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1663863557; bh=X/j2nqwhGe2ikHqBDcW6dH8/THTL56rDrWyiBFyqVng=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=l4rYGVRDnrj8hw2tn0EXWnIfwP9y5eXMeou0mDTSbqr0/F3qpEEjbV2Nl2R6BKFzS BRHum+/IuVePeyRRqrFP0AvJqR6DWw/MdNwAZVEFO6P2QqjLq+uP1i7La/3DP+xgv8 lScLAhVqOsVSgV+/QhNN1Lyxpl12HTrMV9g2aCJc= Received: from macbook-pro.kuh-wiese.my-router.de (aftr-62-216-207-171.dynamic.mnet-online.de [62.216.207.171]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4MYL7q6cTDz9rx7; Thu, 22 Sep 2022 16:19:00 +0000 (UTC) Content-Type: multipart/mixed; boundary="Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3" Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v5] Install guix system on Raspberry Pi From: Stefan In-Reply-To: Date: Thu, 22 Sep 2022 18:18:59 +0200 Message-Id: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> To: 48314@debbugs.gnu.org, Vagrant Cascadian , phodina , Danny Milosavljevic X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate: clean X-purgate-size: 144738 X-purgate-ID: 155817::1663863556-E9FFA4F8-A7967074/0/0 X-Debbugs-Envelope-To: 48314 Cc: =?utf-8?Q?Ludovic_Court=C3=A8s?= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hi! I did a rebase onto commit 2e8b4f9bfa00489fd3acff305837a79af236e183. Vagrant, there was a comment left about removing "CONFIG_BOOTDELAY=3D1" = for the u-boot, this is now done. I think all review comments have been = applied. There is a new u-boot-rockpro64-rk3399 which I adapted as well to use = the #:configs keyword argument. The function modify-defconfig in guix/build/kconfig.scm no longer = interprets "CONFIG_XY=3D" like "# CONFIG_XY is not set". Bye Stefan --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=01-gnu-linux-fix-extra-version.patch Content-Type: application/octet-stream; name="01-gnu-linux-fix-extra-version.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20Fix=20the=20extra-version=20parameter=20in=20= make-linux-libre*.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(make-linux-libre*)=20= ['set-environment]:=20Make=0Athe=20Makefile=20accept=20EXTRAVERSION=20= from=20the=20environment.=20Fix=20the=20usage=20of=0Aan=20empty=20= extra-version=20string.=20Split=20this=20new=20phase=20out=20of=20and=20= adding=0Aif=20before=20=E2=80=A6=0A['configure]:=20=E2=80=A6=20to=20make=20= the=20phases=20more=20hackable.=0A---=0A=20gnu/packages/linux.scm=20|=20=20= =2018=20+++++++++++-------=0A=201=20file=20changed,=2011=20= insertions(+),=207=20deletions(-)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= 306c18e398..1a35e857c3=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-64,6=20+64,7=20@@=0A=20;;;=20Copyright=20= =C2=A9=202022=20Artyom=20V.=20Poptsov=20=0A=20= ;;;=20Copyright=20=C2=A9=202022=20Rene=20Saavedra=20= =0A=20;;;=20Copyright=20=C2=A9=202022=20muradm=20= =0A+;;;=20Copyright=20=C2=A9=202022=20Stefan=20= =0A=20=0A=20;;;=0A=20;;;=20This=20file=20is=20= part=20of=20GNU=20Guix.=0A@@=20-824,8=20+825,8=20@@=20for=20ARCH=20and=20= optionally=20VARIANT,=20or=20#f=20if=20there=20is=20no=20such=20= configuration."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda=20_=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (substitute*=20(find-files=20"."=20"^Makefile(\\.include)?$")=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("/bin/pwd")=20= "pwd"))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20target=20#:allow-other-keys)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(add-before=20'configure=20= 'set-environment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20target=20#:allow-other-keys)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20Avoid=20introducing=20= timestamps.=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"KCONFIG_NOTIMESTAMP"=20"1")=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(setenv=20"KBUILD_BUILD_TIMESTAMP"=0A@@=20= -847,13=20+848,16=20@@=20for=20ARCH=20and=20optionally=20VARIANT,=20or=20= #f=20if=20there=20is=20no=20such=20configuration."=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "CROSS_COMPILE"=20(string-append=20target=20"-"))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(format=20#t=20= "`CROSS_COMPILE'=20set=20to=20`~a'~%"=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(getenv=20= "CROSS_COMPILE"))))=0A-=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20Allow=20EXTRAVERSION=20to=20be=20set=20via=20the=20= environment.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (substitute*=20"Makefile"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(("^=20*EXTRAVERSION[[:blank:]]*=3D")=20"EXTRAVERSION=20= ?=3D"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"EXTRAVERSION"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#$(and=20extra-version=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(string-append=20"-"=20extra-version)))=0A-=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(not=20(string-null?=20extra-version))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(string-append=20"-"=20extra-version)))))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(replace=20'configure=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20inputs=20= #:allow-other-keys)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(let=20((config=20(assoc-ref=20inputs=20"kconfig")))=0A-=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Use=20a=20= custom=20kernel=20configuration=20file=20or=20a=20default=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20configuration=20= file.=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20config=0A@@=20-871,7=20+875,7=20@@=20for=20ARCH=20and=20optionally=20= VARIANT,=20or=20#f=20if=20there=20is=20no=20such=20configuration."=0A=20=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"oldconfig"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(replace=20'install=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(lambda*=20(#:key=20inputs=20native-inputs=20= #:allow-other-keys)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (lambda*=20(#:key=20inputs=20#:allow-other-keys)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(let=20((moddir=20(string-append=20= #$output=20"/lib/modules"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(dtbdir=20(string-append=20#$output=20= "/lib/dtbs")))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20Install=20kernel=20image,=20kernel=20configuration=20and=20= link=20map.=0A= --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=02-gnu-bootloader-rework-chaining.patch Content-Type: application/octet-stream; name="02-gnu-bootloader-rework-chaining.patch" Content-Transfer-Encoding: quoted-printable gnu:=20bootloader:=20Rework=20chaining,=20add=20= grub-efi-netboot-removable-bootloader.=0A=0AFrom:=20Stefan=20= =0A=0A*=20doc/guix.texi=20(Bootloader=20= Configuration):=20Describe=20the=20new=0A= =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99.=20=20Mention=20= used=20sub-directories=20and=0Athat=20the=20UEFI=20Boot=20Manager=20is=20= not=20modified.=20=20Advice=20to=20disable=20write-access=0Aover=20TFTP.=0A= *=20gnu/bootloader.scm=20(efi-bootloader-profile):=20Allow=20a=20list=20= of=20packages=20and=0Acollect=20everything=20directly=20in=20the=20= profile,=20avoiding=20a=20separate=20collection=0Adirectory.=20=20= Renamed=20the=20profile=20from=20"bootloader-profile"=20to=0A= "efi-bootloader-profile".=0A[bootloader-collection]:=20Renamed=20to=20= =E2=80=A6=0A[efi-bootloader-profile-hook]:=20=E2=80=A6=20this=20and=20= removed=20unused=20modules=20and=20the=0Acreation=20of=20the=20now=20= unneeded=20collection=20directory.=0A(efi-bootloader-chain):=20Added=20= packages=20and=20disk-image-installer=20arguments.=0ARemoved=20handling=20= of=20the=20collection=20directory,=20now=20only=20calling=20the=20given=0A= installer=20procedure.=0A*=20gnu/bootloader/grub.scm=20= (make-grub-efi-netboot-installer):=20New=20helper.=0A= (make-grub-configuration):=20New=20helper=20based=20on=20= (grub-configuration-file).=0AAdding=20grub=20argument,=20fixed=20= indentation,=20removend=20code=20to=20get=20grub.=0A= (grub-configuration-file):=20Now=20using=20(make-grub-configuration).=0A= (grub-efi-configuration-file):=20New=20function=20using=20= (make-grub-configuration).=0AInstead=20of=20getting=20the=20grub-efi=20= package=20from=20the=20bootloader-configuration=0Athis=20function=20= refers=20to=20the=20grub-efi=20package=20directly.=0A(grub-cfg):=20New=20= variable=20to=20replace=20"/boot/grub/grub.cfg".=0A= (install-grub-efi-netboot):=20Removed,=20the=20functionality=20got=20= moved.=0A(make-grub-efi-netboot-installer):=20New=20helper=20function=20= to=20return=20a=20customized=0Ainstaller=20for=20a=20certain=20= efi-sub-directory.=20=20The=20installer=20basically=20copies=0Aa=20= pre-installed=20efi-bootloader-profile,=20and=20adds=20needed=20symlinks=20= for=20booting=0Aover=20network,=20or=20=E2=80=93=20on=20an=20ESP=20=E2=80=93= =20an=20intermediate=20grub-cfg=20to=20load=20the=20final=0Agrub-cfg=20= file.=0A(grub-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=0A= (grub-efi-bootloader):=20Now=20using=20the=20grub-cfg=20variable.=20=20= Removed=20inheritance,=0Agiving=20complete=20set=20of=20fields.=0A= (make-grub-efi-netboot-bootloader):=20New=20helper=20function.=0A= (grub-efi-netboot-bootloader):=20Now=20using=20the=20helper.=0A= (grub-efi-netboot-removable-bootloader):=20New=20bootloader=20using=20= the=20helper.=0AIt=20uses=20the=20efi-sub-directory=20"efi/boot"=20for=20= removable=20media.=0A*=20gnu/packages/bootloaders.scm=20= (make-grub-efi-netboot):=20New=20function=20to=20return=0Aa=20grub-efi=20= package=20pre-installed=20via=20grub-mknetdir,=20customized=20for=20an=0A= efi-sub-directory=20and=20able=20to=20boot=20via=20network=20and=20local=20= storage.=0A=0AThe=20rework=20allows=20to=20use=20an=20= (efi-bootloader-chain)=20like=20this,=20which=20is=20able=0Ato=20boot=20= over=20network=20or=20local=20storage,=20depending=20on=20the=20= symlink-support=20at=0Athe=20bootloader-target:=0A=0A(operating-system=0A= =20(bootloader=0A=20=20=20(bootloader-configuration=0A=20=20=20=20=20= (bootloader=0A=20=20=20=20=20=20=20(efi-bootloader-chain=0A=20=20=20=20=20= =20=20=20=20grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20= =20=20#:packages=20(list=20my-firmware-package=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20my-u-boot-package)=0A= =20=20=20=20=20=20=20=20=20#:files=20(list=20(plain-file=20"config.txt"=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"kernel=3Du-boot.bin"))=0A=20=20=20=20=20=20= =20=20=20#:hooks=20my-special-bootloader-profile-manipulator))=0A=20=20=20= =20=20(target=20"/booti/efi")=0A=20=20=20=20=20=E2=80=A6))=0A=20=E2=80=A6)= =0A)=0A---=0A=20doc/guix.texi=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=2058=20++++++++---=0A=20gnu/bootloader.scm=20=20=20=20=20=20=20= =20=20=20=20|=20=20104=20++++++++++----------=0A=20= gnu/bootloader/grub.scm=20=20=20=20=20=20|=20=20215=20= ++++++++++++++++++++++++++----------------=0A=20= gnu/packages/bootloaders.scm=20|=20=20=2090=20++++++++++++++++++=0A=204=20= files=20changed,=20318=20insertions(+),=20149=20deletions(-)=0A=0Adiff=20= --git=20a/doc/guix.texi=20b/doc/guix.texi=0Aindex=20= eb12efa85e..17f5ffb431=20100644=0A---=20a/doc/guix.texi=0A+++=20= b/doc/guix.texi=0A@@=20-37308,8=20+37308,9=20@@=20The=20type=20of=20a=20= bootloader=20configuration=20declaration.=0A=20@cindex=20BIOS,=20= bootloader=0A=20The=20bootloader=20to=20use,=20as=20a=20= @code{bootloader}=20object.=20=20For=20now=0A=20@code{grub-bootloader},=20= @code{grub-efi-bootloader},=0A-@code{grub-efi-netboot-bootloader},=20= @code{grub-efi-removable-bootloader},=0A-@code{extlinux-bootloader}=20= and=20@code{u-boot-bootloader}=20are=20supported.=0A= +@code{grub-efi-removable-bootloader},=20= @code{grub-efi-netboot-bootloader},=0A= +@code{grub-efi-netboot-removable-bootloader},=20= @code{extlinux-bootloader}=0A+and=20@code{u-boot-bootloader}=20are=20= supported.=0A=20=0A=20@cindex=20ARM,=20bootloaders=0A=20@cindex=20= AArch64,=20bootloaders=0A@@=20-37318,15=20+37319,29=20@@=20modules.=20=20= In=20particular,=20@code{(gnu=20bootloader=20u-boot)}=20contains=20= definitions=0A=20of=20bootloaders=20for=20a=20wide=20range=20of=20ARM=20= and=20AArch64=20systems,=20using=20the=0A=20= @uref{https://www.denx.de/wiki/U-Boot/,=20U-Boot=20bootloader}.=0A=20=0A= +@vindex=20grub-bootloader=0A+@code{grub-bootloader}=20allows=20you=20to=20= boot=20in=20particular=20Intel-based=20machines=0A+in=20``legacy''=20= BIOS=20mode.=0A+=0A=20@vindex=20grub-efi-bootloader=0A=20= @code{grub-efi-bootloader}=20allows=20to=20boot=20on=20modern=20systems=20= using=20the=0A=20@dfn{Unified=20Extensible=20Firmware=20Interface}=20= (UEFI).=20=20This=20is=20what=20you=20should=0A=20use=20if=20the=20= installation=20image=20contains=20a=20@file{/sys/firmware/efi}=20= directory=0A=20when=20you=20boot=20it=20on=20your=20system.=0A=20=0A= -@vindex=20grub-bootloader=0A-@code{grub-bootloader}=20allows=20you=20to=20= boot=20in=20particular=20Intel-based=20machines=0A-in=20``legacy''=20= BIOS=20mode.=0A+@vindex=20grub-efi-removable-bootloader=0A= +@code{grub-efi-removable-bootloader}=20allows=20you=20to=20boot=20your=20= system=20from=0A+removable=20media=20by=20writing=20the=20GRUB=20file=20= to=20the=20UEFI-specification=20location=20of=0A= +@file{/EFI/BOOT/BOOTX64.efi}=20of=20the=20boot=20directory,=20usually=20= @file{/boot/efi}.=0A+This=20is=20also=20useful=20for=20some=20UEFI=20= firmwares=20that=20``forget''=20their=20configuration=0A+from=20their=20= non-volatile=20storage.=20Like=20@code{grub-efi-bootloader},=20this=20= can=20only=0A+be=20used=20if=20the=20@file{/sys/firmware/efi}=20= directory=20is=20available.=0A+=0A+@quotation=20Note=0A+This=20= @emph{will}=20overwrite=20the=20GRUB=20file=20from=20any=20other=20= operating=20systems=20that=0A+also=20place=20their=20GRUB=20file=20in=20= the=20UEFI-specification=20location;=20making=20them=0A+unbootable.=0A= +@end=20quotation=0A=20=0A=20@vindex=20grub-efi-netboot-bootloader=0A=20= @code{grub-efi-netboot-bootloader}=20allows=20you=20to=20boot=20your=20= system=20over=20network=0A@@=20-37335,9=20+37350,10=20@@=20build=20a=20= diskless=20Guix=20system.=0A=20=0A=20The=20installation=20of=20the=20= @code{grub-efi-netboot-bootloader}=20generates=20the=0A=20content=20of=20= the=20TFTP=20root=20directory=20at=20@code{targets}=20(@pxref{Bootloader=0A= -Configuration,=20@code{targets}}),=20to=20be=20served=20by=20a=20TFTP=20= server.=20=20You=20may=0A-want=20to=20mount=20your=20TFTP=20server=20= directories=20onto=20the=20@code{targets}=20to=0A-move=20the=20required=20= files=20to=20the=20TFTP=20server=20automatically.=0A+Configuration,=20= @code{targets}})=20below=20the=20sub-directory=20@file{efi/Guix},=20to=20= be=0A+served=20by=20a=20TFTP=20server.=20=20You=20may=20want=20to=20= mount=20your=20TFTP=20server=20directories=0A+onto=20the=20= @code{targets}=20to=20move=20the=20required=20files=20to=20the=20TFTP=20= server=0A+automatically=20during=20installation.=0A=20=0A=20If=20you=20= plan=20to=20use=20an=20NFS=20root=20file=20system=20as=20well=20= (actually=20if=20you=20mount=20the=0A=20store=20from=20an=20NFS=20= share),=20then=20the=20TFTP=20server=20needs=20to=20serve=20the=20file=0A= @@=20-37366,25=20+37382,33=20@@=20this=20constellation=20the=20symlinks=20= will=20work.=0A=20For=20other=20constellations=20you=20will=20have=20to=20= program=20your=20own=20bootloader=0A=20installer,=20which=20then=20takes=20= care=20to=20make=20necessary=20files=20from=20the=20store=0A=20= accessible=20through=20TFTP,=20for=20example=20by=20copying=20them=20= into=20the=20TFTP=20root=0A-directory=20to=20your=20@code{targets}.=0A= +directory=20for=20your=20@code{targets}.=0A=20=0A=20It=20is=20important=20= to=20note=20that=20symlinks=20pointing=20outside=20the=20TFTP=20root=20= directory=0A=20may=20need=20to=20be=20allowed=20in=20the=20configuration=20= of=20your=20TFTP=20server.=20=20Further=20the=0A=20store=20link=20= exposes=20the=20whole=20store=20through=20TFTP@.=20=20Both=20points=20= need=20to=20be=0A-considered=20carefully=20for=20security=20aspects.=0A= +considered=20carefully=20for=20security=20aspects.=20=20It=20is=20= advised=20to=20disable=20any=20TFTP=0A+write=20access!=0A+=0A+Please=20= note,=20that=20this=20bootloader=20will=20not=20modify=20the=20=E2=80=98UE= FI=20Boot=20Manager=E2=80=99=20of=0A+the=20system.=0A=20=0A=20Beside=20= the=20@code{grub-efi-netboot-bootloader},=20the=20already=20mentioned=20= TFTP=20and=0A=20NFS=20servers,=20you=20also=20need=20a=20properly=20= configured=20DHCP=20server=20to=20make=20the=20booting=0A=20over=20= netboot=20possible.=20=20For=20all=20this=20we=20can=20currently=20only=20= recommend=20you=20to=20look=0A=20for=20instructions=20about=20= @acronym{PXE,=20Preboot=20eXecution=20Environment}.=0A=20=0A-@vindex=20= grub-efi-removable-bootloader=0A-@code{grub-efi-removable-bootloader}=20= allows=20you=20to=20boot=20your=20system=20from=0A-removable=20media=20= by=20writing=20the=20GRUB=20file=20to=20the=20UEFI-specification=20= location=20of=0A-@file{/EFI/BOOT/BOOTX64.efi}=20of=20the=20boot=20= directory,=20usually=20@file{/boot/efi}.=0A-This=20is=20also=20useful=20= for=20some=20UEFI=20firmwares=20that=20``forget''=20their=20= configuration=0A-from=20their=20non-volatile=20storage.=20Like=20= @code{grub-efi-bootloader},=20this=20can=20only=0A-be=20used=20if=20the=20= @file{/sys/firmware/efi}=20directory=20is=20available.=0A+If=20a=20local=20= EFI=20System=20Partition=20(ESP)=20or=20a=20similar=20partition=20with=20= a=20FAT=20file=0A+system=20is=20mounted=20in=20@code{targets},=20then=20= symlinks=20cannot=20be=20created.=20=20In=20this=0A+case=20everything=20= will=20be=20prepared=20for=20booting=20from=20local=20storage,=20= simialar=20as=20if=0A+using=20@code{grub-efi-bootloader},=20with=20the=20= difference=20that=20all=20GRUB=20binaries=0A+reside=20on=20= @code{targets},=20too,=20like=20needed=20for=20booting=20over=20network.=0A= +=0A+@vindex=20grub-efi-netboot-removable-bootloader=0A= +@code{grub-efi-netboot-removable-bootloader}=20is=20identical=20to=0A= +@code{grub-efi-netboot-bootloader}=20with=20the=20exception=20that=20= the=20sub-directory=0A+@file{efi/boot}=20will=20be=20used=20instead=20of=20= @file{efi/Guix}=20to=20comply=20to=20the=20UEFI=0A+specification=20for=20= removable=20media.=0A=20=0A=20@quotation=20Note=0A=20This=20@emph{will}=20= overwrite=20the=20GRUB=20file=20from=20any=20other=20operating=20systems=20= that=0Adiff=20--git=20a/gnu/bootloader.scm=20b/gnu/bootloader.scm=0A= index=20da65b9d5d5..40c7ea6e8a=20100644=0A---=20a/gnu/bootloader.scm=0A= +++=20b/gnu/bootloader.scm=0A@@=20-322,26=20+322,22=20@@=20instead~%")))=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20(force=20%bootloaders))=0A=20=20=20= =20=20=20=20(leave=20(G_=20"~a:=20no=20such=20bootloader~%")=20name)))=0A= =20=0A-(define=20(efi-bootloader-profile=20files=20bootloader-package=20= hooks)=0A-=20=20"Creates=20a=20profile=20with=20BOOTLOADER-PACKAGE=20and=20= a=20directory=20collection/=20with=0A-links=20to=20additional=20FILES=20= from=20the=20store.=20=20This=20collection=20is=20meant=20to=20be=20used=0A= -by=20the=20bootloader=20installer.=0A+(define=20(efi-bootloader-profile=20= packages=20files=20hooks)=0A+=20=20"Creates=20a=20profile=20from=20the=20= lists=20of=20PACKAGES=20and=20FILES=20from=20the=20store.=0A+This=20= profile=20is=20meant=20to=20be=20used=20by=20the=20bootloader-installer.=0A= =20=0A=20FILES=20is=20a=20list=20of=20file=20or=20directory=20names=20= from=20the=20store,=20which=20will=20be=0A-symlinked=20into=20the=20= collection/=20directory.=20=20If=20a=20directory=20name=20ends=20with=20= '/',=0A-then=20the=20directory=20content=20instead=20of=20the=20= directory=20itself=20will=20be=20symlinked=0A-into=20the=20collection/=20= directory.=0A+symlinked=20into=20the=20profile.=20=20If=20a=20directory=20= name=20ends=20with=20'/',=20then=20the=0A+directory=20content=20instead=20= of=20the=20directory=20itself=20will=20be=20symlinked=20into=20the=0A= +profile.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A+FILES=20may=20contain=20= file=20like=20objects=20produced=20by=20procedures=20like=20plain-file,=0A= =20local-file,=20etc.,=20or=20package=20contents=20produced=20with=20= file-append.=0A=20=0A=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A-=20=20(define=20(bootloader-collection=20= manifest)=0A+=20=20(define=20(efi-bootloader-profile-hook=20manifest)=0A=20= =20=20=20=20(define=20build=0A-=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(ice-9=20ftw)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(srfi=20srfi-26))=0A+=20=20=20=20=20=20=20=20= (with-imported-modules=20'((guix=20build=20utils))=0A=20=20=20=20=20=20=20= =20=20=20=20#~(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= (use-modules=20((guix=20build=20utils)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:select=20(mkdir-p=20= strip-store-file-name))=0A@@=20-365,7=20+361,7=20@@=20HOOKS=20lists=20= additional=20hook=20functions=20to=20modify=20the=20profile."=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20(define=20(name-is-store-entry?=20name)=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"Return=20#t=20if=20NAME=20is=20= a=20direct=20store=20entry=20and=20nothing=20inside."=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(not=20(string-index=20(strip-store-file-name=20= name)=20#\/)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20(let*=20= ((collection=20(string-append=20#$output=20"/collection"))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(let*=20((output=20#$output)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20'#$files)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(directories=20(filter=20= name-ends-with-/?=20files))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(names-from-directories=0A@@=20-374,11=20+370,11=20@@=20= HOOKS=20lists=20additional=20hook=20functions=20to=20modify=20the=20= profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20directories))=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(names=20(append=20= names-from-directories=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20= name-ends-with-/?=20files))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20collection)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20output)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (every=20file-exists?=20names)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(for-each=20(lambda=20(name)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-to=20name=20collection=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(symlink-to=20name=20= output=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (name-is-store-entry?=20name)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20strip-store-file-name=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20basename)))=0A@@=20= -386,57=20+382,63=20@@=20HOOKS=20lists=20additional=20hook=20functions=20= to=20modify=20the=20profile."=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20#t)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#f)))))=0A=20=0A-=20=20=20=20(gexp->derivation=20= "bootloader-collection"=0A+=20=20=20=20(gexp->derivation=20= "efi-bootloader-profile"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20build=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:local-build?=20#t=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:substitutable?=20#f=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:properties=0A= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= `((type=20.=20profile-hook)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hook=20.=20bootloader-collection))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (hook=20.=20efi-bootloader-profile-hook))))=0A=20=0A-=20=20(profile=20= (content=20(packages->manifest=20(list=20bootloader-package)))=0A-=20=20=20= =20=20=20=20=20=20=20=20(name=20"bootloader-profile")=0A-=20=20=20=20=20=20= =20=20=20=20=20(hooks=20(append=20(list=20bootloader-collection)=20= hooks))=0A+=20=20(profile=20(content=20(packages->manifest=20packages))=0A= +=20=20=20=20=20=20=20=20=20=20=20(name=20"efi-bootloader-profile")=0A+=20= =20=20=20=20=20=20=20=20=20=20(hooks=20(cons=20= efi-bootloader-profile-hook=20hooks))=0A=20=20=20=20=20=20=20=20=20=20=20= =20(locales?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (allow-collisions?=20#f)=0A=20=20=20=20=20=20=20=20=20=20=20=20= (relative-symlinks?=20#f)))=0A=20=0A-(define*=20(efi-bootloader-chain=20= files=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20final-bootloader=0A+(define*=20= (efi-bootloader-chain=20final-bootloader=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:key=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(packages=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(files=20= '())=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(hooks=20'())=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= installer)=0A-=20=20"Define=20a=20bootloader=20chain=20with=20= FINAL-BOOTLOADER=20as=20the=20final=20bootloader=20and=0A-certain=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20installer=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= disk-image-installer)=0A+=20=20"Define=20a=20chain=20of=20bootloaders=20= with=20the=20FINAL-BOOTLOADER,=20optional=20PACKAGES,=0A+and=20optional=20= directories=20and=20files=20from=20the=20store=20given=20in=20the=20list=20= of=20FILES.=0A=20=0A-FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20functions=20like=20plain-file,=0A-local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=20=20They=20= will=20be=0A-collected=20inside=20a=20directory=20collection/=20inside=20= a=20generated=20bootloader=20profile,=0A-which=20will=20be=20passed=20to=20= the=20INSTALLER.=0A+The=20package=20of=20the=20FINAL-BOOTLOADER=20and=20= all=20PACKAGES=20and=20FILES=20will=20be=20placed=0A+in=20an=20= efi-bootloader-profile,=20which=20will=20be=20passed=20to=20the=20= INSTALLER.=0A+=0A+FILES=20may=20contain=20file=20like=20objects=20= produced=20by=20procedures=20like=20plain-file,=0A+local-file,=20etc.,=20= or=20package=20contents=20produced=20with=20file-append.=0A=20=0A=20If=20= a=20directory=20name=20in=20FILES=20ends=20with=20'/',=20then=20the=20= directory=20content=20instead=0A-of=20the=20directory=20itself=20will=20= be=20symlinked=20into=20the=20collection/=20directory.=0A+of=20the=20= directory=20itself=20will=20be=20symlinked=20into=20the=20= efi-bootloader-profile.=0A=20=0A=20The=20procedures=20in=20the=20HOOKS=20= list=20can=20be=20used=20to=20further=20modify=20the=20bootloader=0A=20= profile.=20=20It=20is=20possible=20to=20pass=20a=20single=20function=20= instead=20of=20a=20list.=0A=20=0A-If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20function=20will=20be=20called=20to=20install=0A= -the=20bootloader.=20=20Otherwise=20the=20installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A-=20=20(let*=20= ((final-installer=20(or=20installer=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A-=20=20=20=20=20=20=20=20=20= (profile=20(efi-bootloader-profile=20files=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(bootloader-package=20final-bootloader)=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20hooks=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20= hooks)))))=0A-=20=20=20=20(bootloader=0A-=20=20=20=20=20(inherit=20= final-bootloader)=0A-=20=20=20=20=20(package=20profile)=0A-=20=20=20=20=20= (installer=0A-=20=20=20=20=20=20#~(lambda=20(bootloader=20target=20= mount-point)=0A-=20=20=20=20=20=20=20=20=20=20(#$final-installer=20= bootloader=20target=20mount-point)=0A-=20=20=20=20=20=20=20=20=20=20= (copy-recursively=0A-=20=20=20=20=20=20=20=20=20=20=20(string-append=20= bootloader=20"/collection")=0A-=20=20=20=20=20=20=20=20=20=20=20= (string-append=20mount-point=20target)=0A-=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A-=20=20=20=20=20=20=20=20=20=20=20#:log=20= (%make-void-port=20"w")))))))=0A+If=20the=20INSTALLER=20argument=20is=20= used,=20then=20this=20gexp=20procedure=20will=20be=20called=20to=0A= +install=20the=20efi-bootloader-profile.=20=20Otherwise=20the=20= installer=20of=20the=0A+FINAL-BOOTLOADER=20will=20be=20called.=0A+=0A+If=20= the=20DISK-IMAGE-INSTALLER=20is=20used,=20then=20this=20gexp=20procedure=20= will=20be=20called=0A+to=20install=20the=20efi-bootloader-profile=20into=20= a=20disk-image.=20=20Otherwise=20the=0A+disk-image-installer=20of=20the=20= FINAL-BOOTLOADER=20will=20be=20called."=0A+=20=20(bootloader=0A+=20=20=20= =20(inherit=20final-bootloader)=0A+=20=20=20=20(name=20= "efi-bootloader-chain")=0A+=20=20=20=20(package=0A+=20=20=20=20=20= (efi-bootloader-profile=20(cons=20(bootloader-package=20= final-bootloader)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20packages)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20files=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(if=20(list?=20hooks)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= hooks=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(list=20hooks))))=0A+=20=20=20=20= (installer=0A+=20=20=20=20=20(or=20installer=0A+=20=20=20=20=20=20=20=20=20= (bootloader-installer=20final-bootloader)))=0A+=20=20=20=20= (disk-image-installer=0A+=20=20=20=20=20(or=20disk-image-installer=0A+=20= =20=20=20=20=20=20=20=20(bootloader-disk-image-installer=20= final-bootloader)))))=0Adiff=20--git=20a/gnu/bootloader/grub.scm=20= b/gnu/bootloader/grub.scm=0Aindex=207283257354..817dd9552b=20100644=0A= ---=20a/gnu/bootloader/grub.scm=0A+++=20b/gnu/bootloader/grub.scm=0A@@=20= -53,13=20+53,14=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-theme-gfxmode=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-removable=0A-=20=20=20=20=20=20=20=20=20=20=20=20= install-grub-efi-netboot=0A+=20=20=20=20=20=20=20=20=20=20=20=20= make-grub-efi-netboot-installer=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi32-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20=20= grub-efi-netboot-removable-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20grub-mkrescue-bootloader=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= grub-minimal-bootloader=0A=20=0A@@=20-353,7=20+354,7=20@@=20code."=0A=20=20= =20=20=20=20=20=20=20((or=20#f=20(?=20string?))=0A=20=20=20=20=20=20=20=20= =20=20#~(format=20#f=20"search=20--file=20--set=20~a"=20#$file)))))=0A=20= =0A-(define*=20(grub-configuration-file=20config=20entries=0A+(define*=20= (make-grub-configuration=20grub=20config=20entries=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20#:key=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale=20#f)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(system=20(%current-system))=0A@@=20-453,9=20+454,7=20= @@=20menuentry=20~s=20{=0A=20=20=20(define=20locale-config=0A=20=20=20=20= =20(let*=20((entry=20(first=20all-entries))=0A=20=20=20=20=20=20=20=20=20= =20=20=20(device=20(menu-entry-device=20entry))=0A-=20=20=20=20=20=20=20=20= =20=20=20(mount-point=20(menu-entry-device-mount-point=20entry))=0A-=20=20= =20=20=20=20=20=20=20=20=20(bootloader=20= (bootloader-configuration-bootloader=20config))=0A-=20=20=20=20=20=20=20=20= =20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20=20=20=20= =20=20=20=20=20(mount-point=20(menu-entry-device-mount-point=20entry)))=0A= =20=20=20=20=20=20=20#~(let=20((locale=20#$(and=20locale=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (locale-definition-source=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(locale-name->definition=20= locale))))=0A@@=20-481,8=20+480,6=20@@=20set=20lang=3D~a~%"=0A=20=0A=20=20= =20(define=20keyboard-layout-config=0A=20=20=20=20=20(let*=20((layout=20= (bootloader-configuration-keyboard-layout=20config))=0A-=20=20=20=20=20=20= =20=20=20=20=20(grub=20=20=20(bootloader-package=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= (bootloader-configuration-bootloader=20config)))=0A=20=20=20=20=20=20=20=20= =20=20=20=20(keymap*=20(and=20layout=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(keyboard-layout-file=20layout=20= #:grub=20grub)))=0A=20=20=20=20=20=20=20=20=20=20=20=20(entry=20(first=20= all-entries))=0A@@=20-533,6=20+530,16=20@@=20fi~%"))))=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#:options=20'(#:local-build?=20#t=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#:substitutable?=20#f)))=0A=20=0A+(define=20= (grub-configuration-file=20config=20.=20args)=0A+=20=20(let*=20= ((bootloader=20(bootloader-configuration-bootloader=20config))=0A+=20=20=20= =20=20=20=20=20=20(grub=20(bootloader-package=20bootloader)))=0A+=20=20=20= =20(apply=20make-grub-configuration=20grub=20config=20args)))=0A+=0A= +(define=20(grub-efi-configuration-file=20.=20args)=0A+=20=20(apply=20= make-grub-configuration=20grub-efi=20args))=0A+=0A+(define=20grub-cfg=20= "/boot/grub/grub.cfg")=0A+=0A=20=0C=0A=20=0A=20;;;=0A@@=20-674,42=20= +681,31=20@@=20fi~%"))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((target-arm?)=20= "--target=3Darm-efi"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"--efi-directory"=20target-esp)))))=0A=20=0A= -(define=20(install-grub-efi-netboot=20subdir)=0A-=20=20"Define=20a=20= grub-efi-netboot=20bootloader=20installer=20for=20installation=20in=20= SUBDIR,=0A-which=20is=20usually=20efi/Guix=20or=20efi/boot."=0A-=20=20= (let*=20((system=20(string-split=20(nix-system->gnu-triplet=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(or=20(%current-target-system)=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(%current-system)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A-=20=20=20=20=20=20=20= =20=20(arch=20(first=20system))=0A-=20=20=20=20=20=20=20=20=20= (boot-efi-link=20(match=20system=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20the=20= supportend=20systems=20and=20the=20names=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20defined=20by=20the=20= UEFI=20standard=20for=20removable=20media.=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("i686"=20_=20...)=20= =20=20=20=20=20=20=20"/bootia32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20= =20=20=20"/bootx64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("arm"=20_=20...)=20=20=20=20=20=20=20=20= =20"/bootarm.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("riscv"=20_=20...)=20=20=20=20=20=20=20= "/bootriscv32.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Other=20systems=20are=20not=20supported,=20= although=20defined.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20(("ia64"=20_=20...)=20=20=20=20=20= "/bootia64.efi")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A-=20=20=20=20=20=20=20=20=20(core-efi=20(string-append=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20This=20is=20= the=20arch=20dependent=20file=20name=20of=20GRUB,=20e.g.=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20i368-efi/core.efi=20or=20= arm64-efi/core.efi.=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(match=20arch=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20("i686"=20=20=20=20"i386")=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20("riscv"=20=20=20= "riscv32")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(_=20=20=20=20=20=20=20=20=20arch))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"-efi/core.efi")))=0A-=20=20=20=20= (with-imported-modules=0A-=20=20=20=20=20'((guix=20build=20union))=0A-=20= =20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A-=20=20=20=20= =20=20=20=20=20"Install=20the=20BOOTLOADER,=20which=20must=20be=20the=20= package=20grub,=20as=20e.g.=0A-bootx64.efi=20or=20bootaa64.efi=20into=20= SUBDIR,=20which=20is=20usually=20efi/Guix=20or=20efi/boot,=0A-below=20= the=20directory=20TARGET=20for=20the=20system=20whose=20root=20is=20= mounted=20at=20MOUNT-POINT.=0A+(define*=20= (make-grub-efi-netboot-installer=20grub-efi=20grub-cfg=20subdir)=0A+=20=20= "Make=20a=20bootloader-installer=20for=20a=20grub-efi-netboot=20= bootloader,=20which=20expects=0A+its=20files=20in=20SUBDIR=20and=20its=20= configuration=20file=20in=20GRUB-CFG.=0A+=0A+As=20a=20grub-efi-netboot=20= package=20is=20already=20preinstalled=20by=20'grub-mknetdir',=20the=0A= +installer=20basically=20copies=20all=20files=20from=20the=20= bootloader-package=20(or=20profile)=0A+into=20the=20bootloader-target=20= directory.=0A+=0A+Additionally=20for=20network=20booting=20over=20TFTP,=20= two=20relative=20symlinks=20to=20the=20store=0A+and=20to=20the=20= GRUB-CFG=20file=20are=20necessary.=20=20Due=20to=20this=20a=20TFTP=20= root=20directory=20must=0A+not=20be=20located=20on=20a=20FAT=20= file-system.=0A+=0A+If=20the=20bootloader-target=20does=20not=20support=20= symlinks,=20then=20it=20is=20assumed=20to=20be=20a=0A+kind=20of=20EFI=20= System=20Partition=20(ESP).=20=20In=20this=20case=20an=20intermediate=20= configuration=0A+file=20is=20created=20with=20the=20help=20of=20GRUB-EFI=20= to=20load=20the=20GRUB-CFG.=0A+=0A+The=20installer=20is=20usable=20for=20= any=20efi-bootloader-chain,=20which=20prepares=20the=0A= +bootloader-profile=20in=20a=20way=20ready=20for=20copying.=0A+=0A+The=20= installer=20does=20not=20manipulate=20the=20system's=20'UEFI=20Boot=20= Manager'."=0A+=20=20(with-imported-modules=20'((guix=20build=20union))=0A= +=20=20=20=20#~(lambda=20(bootloader=20target=20mount-point)=0A+=20=20=20= =20=20=20=20=20"Copy=20the=20BOOTLOADER,=20which=20must=20be=20a=20= preinstalled=20grub-efi-netboot=0A+package=20with=20a=20SUBDIR=20like=20= efi/boot=20or=20efi/Guix,=20below=20the=20directory=0A+TARGET=20for=20= the=20system=20whose=20root=20is=20mounted=20at=20MOUNT-POINT.=0A=20=0A=20= MOUNT-POINT=20is=20the=20last=20argument=20in=20'guix=20system=20init=20= /etc/config.scm=20mnt/point'=0A=20or=20'/'=20for=20other=20'guix=20= system'=20commands.=0A@@=20-719,17=20+715,18=20@@=20= bootloader-configuration=20in:=0A=20=0A=20(operating-system=0A=20=20= (bootloader=20(bootloader-configuration=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(targets=20'(\"/boot\"))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(targets=20'(\"/boot/efi\"))=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=E2=80=A6))=0A=20=20=E2=80=A6)=0A=20=0A=20TARGET=20is=20= required=20to=20be=20an=20absolute=20directory=20name,=20usually=20= mounted=20via=20NFS,=0A=20and=20finally=20needs=20to=20be=20provided=20= by=20a=20TFTP=20server=20as=20the=20TFTP=20root=20directory.=0A=20=0A= +Usually=20the=20installer=20will=20be=20used=20to=20prepare=20network=20= booting=20over=20TFTP.=20=20Then=0A=20GRUB=20will=20load=20= tftp://server/SUBDIR/grub.cfg=20and=20this=20file=20will=20instruct=20it=20= to=0A=20load=20more=20files=20from=20the=20store=20like=20= tftp://server/gnu/store/=E2=80=A6-linux=E2=80=A6/Image.=0A=20=0A-To=20= make=20this=20possible=20two=20symlinks=20will=20be=20created.=20The=20= first=20symlink=20points=0A+To=20make=20this=20possible=20two=20symlinks=20= will=20be=20created.=20=20The=20first=20symlink=20points=0A=20relatively=20= form=20MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20to=0A=20= MOUNT-POINT/boot/grub/grub.cfg,=20and=20the=20second=20symlink=20points=20= relatively=20from=0A=20MOUNT-POINT/TARGET/%store-prefix=20to=20= MOUNT-POINT/%store-prefix.=0A@@=20-739,34=20+736,78=20@@=20paths=20on=20= the=20TFTP=20server=20side=20are=20unknown.=0A=20=0A=20It=20is=20also=20= important=20to=20note=20that=20both=20symlinks=20will=20point=20outside=20= the=20TFTP=20root=0A=20directory=20and=20that=20the=20= TARGET/%store-prefix=20symlink=20makes=20the=20whole=20store=0A= -accessible=20via=20TFTP.=20Possibly=20the=20TFTP=20server=20must=20be=20= configured=0A-to=20allow=20accesses=20outside=20its=20TFTP=20root=20= directory.=20This=20may=20need=20to=20be=0A-considered=20for=20security=20= aspects."=0A-=20=20=20=20=20=20=20=20=20(use-modules=20((guix=20build=20= union)=20#:select=20(symlink-relative)))=0A-=20=20=20=20=20=20=20=20=20= (let*=20((net-dir=20(string-append=20mount-point=20target=20"/"))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20(string-append=20= net-dir=20#$subdir=20"/"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(store=20(string-append=20mount-point=20(%store-prefix)))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= net-dir=20(%store-prefix)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(grub-cfg=20(string-append=20mount-point=20"/boot/grub/grub.cfg"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(grub-cfg-link=20= (string-append=20sub-dir=20(basename=20grub-cfg)))=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(boot-efi-link=20(string-append=20sub-dir=20= #$boot-efi-link)))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20store-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20store-link))=0A-=20=20=20=20=20=20=20= =20=20=20=20(symlink-relative=20store=20store-link)=0A-=20=20=20=20=20=20= =20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg,=20= which=20points=20into=20the=20store.=0A-=20=20=20=20=20=20=20=20=20=20=20= (mkdir-p=20(dirname=20grub-cfg-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A-=20=20=20=20=20=20= =20=20=20=20=20(symlink-relative=20grub-cfg=20grub-cfg-link)=0A-=20=20=20= =20=20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= encrypted=20partitions,=0A-=20=20=20=20=20=20=20=20=20=20=20(setenv=20= "GRUB_ENABLE_CRYPTODISK"=20"y")=0A-=20=20=20=20=20=20=20=20=20=20=20= (invoke/quiet=20(string-append=20bootloader=20"/bin/grub-mknetdir")=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"--net-directory=3D"=20net-dir)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= "--subdir=3D"=20#$subdir))=0A-=20=20=20=20=20=20=20=20=20=20=20;;=20= Prepare=20the=20bootloader=20symlink,=20which=20points=20to=20core.efi=20= of=20GRUB.=0A-=20=20=20=20=20=20=20=20=20=20=20(false-if-exception=20= (delete-file=20boot-efi-link))=0A-=20=20=20=20=20=20=20=20=20=20=20= (symlink=20#$core-efi=20boot-efi-link))))))=0A+accessible=20via=20TFTP.=20= =20Possibly=20the=20TFTP=20server=20must=20be=20configured=20to=20allow=0A= +accesses=20outside=20its=20TFTP=20root=20directory.=20=20This=20all=20= may=20need=20to=20be=20considered=0A+for=20security=20aspects.=20=20It=20= is=20advised=20to=20disable=20any=20TFTP=20write=20access!=0A+=0A+The=20= installer=20can=20also=20be=20used=20to=20prepare=20booting=20from=20= local=20storages,=20if=20the=0A+underlying=20file-system,=20like=20FAT=20= on=20an=20EFI=20System=20Partition=20(ESP),=20does=20not=0A+support=20= symlinks.=20=20In=20this=20case=20the=20= MOUNT-POINT/TARGET/SUBDIR/grub.cfg=20will=20be=0A+created=20with=20the=20= help=20of=20GRUB-EFI=20to=20load=20the=20/boot/grub/grub.cfg=20file.=20=20= A=0A+symlink=20to=20the=20store=20is=20not=20needed=20in=20this=20case."=0A= +=20=20=20=20=20=20=20=20;;=20In=20context=20of=20a=20disk=20image=20= creation=20TARGET=20will=20be=20#f=20and=20an=0A+=20=20=20=20=20=20=20=20= ;;=20installer=20is=20expected=20to=20do=20necessary=20installations=20= on=20MOUNT-POINT,=0A+=20=20=20=20=20=20=20=20;;=20which=20will=20become=20= the=20root=20file=20system.=0A+=20=20=20=20=20=20=20=20;;=20If=20TARGET=20= is=20#f,=20this=20installer=20has=20nothing=20to=20do,=20as=20it=20only=20= cares=0A+=20=20=20=20=20=20=20=20;;=20about=20the=20EFI=20System=20= Partition=20(ESP).=0A+=20=20=20=20=20=20=20=20(when=20target=0A+=20=20=20= =20=20=20=20=20=20=20(use-modules=20((guix=20build=20union)=20#:select=20= (symlink-relative))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(ice-9=20popen)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(ice-9=20rdelim))=0A+=20=20=20=20=20=20=20= =20=20=20(let*=20((mount-point/target=20(string-append=20mount-point=20= target=20"/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= When=20installing=20Guix,=20it=20is=20common=20to=20mount=20TARGET=20= below=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= MOUNT-POINT=20rather=20than=20the=20root=20directory.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(bootloader-target=20(if=20= (file-exists?=20mount-point/target)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mount-point/target=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20target))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20= (string-append=20mount-point=20(%store-prefix)))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(store-link=20(string-append=20= bootloader-target=20(%store-prefix)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(grub-cfg=20(string-append=20mount-point=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (grub-cfg-link=20(string-append=20bootloader-target=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$subdir=20"/"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(basename=20= grub-cfg))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Copy=20the=20= bootloader=20into=20the=20bootloader-target=20directory.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Should=20we=20beforehand=20recursively=20= delete=20any=20existing=20file?=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (copy-recursively=20bootloader=20bootloader-target=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #:follow-symlinks?=20#t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20#:log=20(%make-void-port=20= "w"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20For=20TFTP=20we=20need=20= to=20install=20additional=20relative=20symlinks.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20If=20we=20install=20on=20an=20EFI=20System=20= Partition=20(ESP)=20or=20some=20other=20FAT=0A+=20=20=20=20=20=20=20=20=20= =20=20=20;;=20file-system,=20then=20symlinks=20cannot=20be=20created=20= and=20are=20not=20needed.=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Therefore=20we=20ignore=20exceptions=20when=20trying.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Prepare=20the=20symlink=20to=20the=20grub.cfg.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(mkdir-p=20(dirname=20= grub-cfg-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (false-if-exception=20(delete-file=20grub-cfg-link))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(if=20(unspecified?=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(false-if-exception=20(symlink-relative=20grub-cfg=20= grub-cfg-link)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Symlinks=20are=20supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Prepare=20= the=20symlink=20to=20the=20store.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(mkdir-p=20(dirname=20store-link))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20= store-link))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (symlink-relative=20store=20store-link))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Creating=20symlinks=20does=20not=20seem=20to=20be=20= supported.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Probably=20= an=20ESP=20is=20used.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Instead=20we=20can=20script=20to=20search=20and=20load=20the=20actual=20= grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((probe=20= #$(file-append=20grub-efi=20"/sbin/grub-probe"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(port=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(open-pipe*=20OPEN_READ=20= probe=20"--target=3Dfs_uuid"=20grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(search-root=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20(read-line=20port)=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((?=20eof-object?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20There=20is=20no=20UUID=20= available.=20As=20a=20fallback=20search=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20everywhere=20for=20= the=20grub.cfg.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(string-append=20"search=20--file=20--set=20"=20= #$grub-cfg))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(fs-uuid=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20UUID=20to=20load=20the=20= grub.cfg=20from=20is=20known.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"search=20= --fs-uuid=20--set=20"=20fs-uuid))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(load-grub-cfg=20(string-append=20"configfile=20= "=20#$grub-cfg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (close-pipe=20port)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (with-output-to-file=20grub-cfg-link=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(lambda=20()=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(display=20(string-join=20(list=20search-root=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= load-grub-cfg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "\n")))))))))))=0A=20=0A=20=0C=0A=20=0A@@=20-784,7=20+825,7=20@@=20= considered=20for=20security=20aspects."=0A=20=20=20=20(package=20grub)=0A= =20=20=20=20(installer=20install-grub)=0A=20=20=20=20= (disk-image-installer=20install-grub-disk-image)=0A-=20=20=20= (configuration-file=20"/boot/grub/grub.cfg")=0A+=20=20=20= (configuration-file=20grub-cfg)=0A=20=20=20=20= (configuration-file-generator=20grub-configuration-file)))=0A=20=0A=20= (define=20grub-minimal-bootloader=0A@@=20-794,11=20+835,12=20@@=20= considered=20for=20security=20aspects."=0A=20=0A=20(define=20= grub-efi-bootloader=0A=20=20=20(bootloader=0A-=20=20=20(inherit=20= grub-bootloader)=0A+=20=20=20(name=20'grub-efi)=0A+=20=20=20(package=20= grub-efi)=0A=20=20=20=20(installer=20install-grub-efi)=0A=20=20=20=20= (disk-image-installer=20#f)=0A-=20=20=20(name=20'grub-efi)=0A-=20=20=20= (package=20grub-efi)))=0A+=20=20=20(configuration-file=20grub-cfg)=0A+=20= =20=20(configuration-file-generator=20grub-configuration-file)))=0A=20=0A= =20(define=20grub-efi-removable-bootloader=0A=20=20=20(bootloader=0A@@=20= -813,11=20+855,22=20@@=20considered=20for=20security=20aspects."=0A=20=20= =20=20(name=20'grub-efi32)=0A=20=20=20=20(package=20grub-efi32)))=0A=20=0A= -(define=20grub-efi-netboot-bootloader=0A+(define=20= (make-grub-efi-netboot-bootloader=20name=20subdir)=0A=20=20=20= (bootloader=0A-=20=20=20(inherit=20grub-efi-bootloader)=0A-=20=20=20= (name=20'grub-efi-netboot-bootloader)=0A-=20=20=20(installer=20= (install-grub-efi-netboot=20"efi/Guix"))))=0A+=20=20=20(name=20name)=0A+=20= =20=20(package=20(make-grub-efi-netboot=20(symbol->string=20name)=20= subdir))=0A+=20=20=20(installer=20(make-grub-efi-netboot-installer=20= grub-efi=20grub-cfg=20subdir))=0A+=20=20=20(disk-image-installer=20#f)=0A= +=20=20=20(configuration-file=20grub-cfg)=0A+=20=20=20= (configuration-file-generator=20grub-efi-configuration-file)))=0A+=0A= +(define=20grub-efi-netboot-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20'grub-efi-netboot-bootloader=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"efi/Guix"))=0A+=0A+(define=20= grub-efi-netboot-removable-bootloader=0A+=20=20= (make-grub-efi-netboot-bootloader=20= 'grub-efi-netboot-removable-bootloader=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "efi/boot"))=0A=20=0A=20(define=20grub-mkrescue-bootloader=0A=20=20=20= (bootloader=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=20210bc30536..658de5a808=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-16,6=20+16,7=20@@=0A=20;;;=20= Copyright=20=C2=A9=202021=20Vincent=20Legoll=20= =0A=20;;;=20Copyright=20=C2=A9=202021=20Brice=20= Waegeneire=20=0A=20;;;=20Copyright=20=C2=A9=202022=20= Denis=20'GNUtoo'=20Carikli=20=0A+;;;=20= Copyright=20=C2=A9=202021=20Stefan=20=0A=20= ;;;=0A=20;;;=20This=20file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20= -67,13=20+68,17=20@@=0A=20=20=20#:use-module=20(gnu=20packages=20= virtualization)=0A=20=20=20#:use-module=20(gnu=20packages=20xorg)=0A=20=20= =20#:use-module=20(guix=20build-system=20gnu)=0A+=20=20#:use-module=20= (guix=20build-system=20trivial)=0A=20=20=20#:use-module=20(guix=20= download)=0A+=20=20#:use-module=20(guix=20gexp)=0A=20=20=20#:use-module=20= (guix=20git-download)=0A=20=20=20#:use-module=20((guix=20licenses)=20= #:prefix=20license:)=0A=20=20=20#:use-module=20(guix=20packages)=0A=20=20= =20#:use-module=20(guix=20utils)=0A=20=20=20#:use-module=20(srfi=20= srfi-1)=0A=20=20=20#:use-module=20(srfi=20srfi-26)=0A+=20=20#:use-module=20= (ice-9=20match)=0A+=20=20#:use-module=20(ice-9=20optargs)=0A=20=20=20= #:use-module=20(ice-9=20regex))=0A=20=0A=20(define=20unifont=0A@@=20= -392,6=20+397,91=20@@=20menu=20to=20select=20one=20of=20the=20installed=20= operating=20systems.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(scandir=20input-dir))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20#t)))))))))=0A=20=0A+(define-public=20= (make-grub-efi-netboot=20name=20subdir)=0A+=20=20"Make=20a=20= grub-efi-netboot=20package=20named=20NAME,=20which=20will=20be=20able=20= to=20boot=20over=0A+network=20via=20TFTP=20by=20accessing=20its=20files=20= in=20the=20SUBDIR=20of=20a=20TFTP=20root=20directory.=0A+This=20package=20= is=20also=20able=20to=20boot=20from=20local=20storage=20devices.=0A+=0A= +A=20bootloader-installer=20basically=20needs=20to=20copy=20the=20= package=20content=20into=20the=0A+bootloader-target=20directory,=20which=20= will=20usually=20be=20the=20TFTP=20root,=20as=0A+'grub-mknetdir'=20will=20= be=20invoked=20already=20during=20the=20package=20creation.=0A+=0A= +Alternatively=20the=20bootloader-target=20directory=20can=20be=20a=20= mounted=20EFI=20System=0A+Partition=20(ESP),=20or=20a=20similar=20= partition=20with=20a=20FAT=20file=20system,=20for=20booting=0A+from=20= local=20storage=20devices.=0A+=0A+The=20name=20of=20the=20GRUB=20EFI=20= binary=20will=20conform=20to=20the=20UEFI=20specification=20for=0A= +removable=20media.=20=20Depending=20on=20the=20system=20it=20will=20be=20= e.g.=20bootx64.efi=20or=0A+bootaa64.efi=20below=20SUBDIR.=0A+=0A+The=20= SUBDIR=20argument=20needs=20to=20be=20set=20to=20\"efi/boot\"=20to=20= create=20a=20package=20which=0A+conforms=20to=20the=20UEFI=20= specification=20for=20removable=20media.=0A+=0A+The=20SUBDIR=20argument=20= defaults=20to=20\"efi/Guix\",=20as=20it=20is=20also=20the=20case=20for=0A= +'grub-efi-bootloader'."=0A+=20=20(package=0A+=20=20=20=20(name=20name)=0A= +=20=20=20=20(version=20(package-version=20grub-efi))=0A+=20=20=20=20;;=20= Source=20is=20not=20needed,=20but=20it=20cannot=20be=20omitted.=0A+=20=20= =20=20(source=20#f)=0A+=20=20=20=20(build-system=20trivial-build-system)=0A= +=20=20=20=20(arguments=0A+=20=20=20=20=20(let*=20((system=20= (string-split=20(nix-system->gnu-triplet=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (or=20(%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (%current-system)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#\-))=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(arch=20(first=20system))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(boot-efi=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= system=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20These=20are=20= the=20supportend=20systems=20and=20the=20names=20defined=20by=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20the=20UEFI=20standard=20for=20= removable=20media.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("i686"=20_=20...)=20=20=20=20=20=20=20=20"/bootia32.efi")=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(("x86_64"=20_=20...)=20=20=20=20=20=20= "/bootx64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(("arm"=20= _=20...)=20=20=20=20=20=20=20=20=20"/bootarm.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(("aarch64"=20_=20...)=20=20=20=20=20= "/bootaa64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("riscv"=20_=20...)=20=20=20=20=20=20=20"/bootriscv32.efi")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(("riscv64"=20_=20...)=20=20=20=20=20= "/bootriscv64.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Other=20systems=20are=20not=20supported,=20although=20defined.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20;;=20(("riscv128"=20_=20...)=20= "/bootriscv128.efi")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= (("ia64"=20_=20...)=20=20=20=20=20"/bootia64.efi")=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20((_=20...)=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(core-efi=20= (string-append=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20This=20is=20the=20arch=20dependent=20file=20name=20of=20= GRUB,=20e.g.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20i368-efi/core.efi=20or=20arm64-efi/core.efi.=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(match=20= arch=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20("i686"=20=20=20=20"i386")=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20("aarch64"=20"arm64")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ("riscv"=20=20=20"riscv32")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20arch))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "-efi/core.efi")))=0A+=20=20=20=20=20=20=20`(#:modules=20((guix=20build=20= utils))=0A+=20=20=20=20=20=20=20=20=20#:builder=0A+=20=20=20=20=20=20=20=20= =20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20(use-modules=20(guix=20= build=20utils))=0A+=20=20=20=20=20=20=20=20=20=20=20(let*=20((bootloader=20= (assoc-ref=20%build-inputs=20"grub-efi"))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(net-dir=20(assoc-ref=20%outputs=20"out"))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sub-dir=20= (string-append=20net-dir=20"/"=20,subdir=20"/"))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(boot-efi=20(string-append=20sub-dir=20= ,boot-efi))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (core-efi=20(string-append=20sub-dir=20,core-efi)))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Install=20GRUB,=20which=20refers=20to=20the=20= grub.cfg,=20with=20support=20for=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20encrypted=20partitions,=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (setenv=20"GRUB_ENABLE_CRYPTODISK"=20"y")=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20(invoke/quiet=20(string-append=20bootloader=20= "/bin/grub-mknetdir")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--net-directory=3D"=20= net-dir)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(string-append=20"--subdir=3D"=20,subdir)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= These=20modules=20must=20be=20preloaded=20to=20allow=20booting=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20from=20an=20ESP=20or=20a=20similar=20partition=20with=20a=20FAT=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20file=20system.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(string-append=20"--modules=3Dpart_msdos=20= part_gpt=20fat"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Move=20= GRUB's=20core.efi=20to=20the=20removable=20media=20name.=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(false-if-exception=20(delete-file=20boot-efi))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20(rename-file=20core-efi=20= boot-efi))))))=0A+=20=20=20=20(inputs=20`(("grub-efi"=20,grub-efi)))=0A+=20= =20=20=20(synopsis=20(package-synopsis=20grub-efi))=0A+=20=20=20=20= (description=20(package-description=20grub-efi))=0A+=20=20=20=20= (home-page=20(package-home-page=20grub-efi))=0A+=20=20=20=20(license=20= (package-license=20grub-efi))))=0A+=0A=20(define-public=20syslinux=0A=20=20= =20(let=20((commit=20"bb41e935cc83c6242de24d2271e067d76af3585c"))=0A=20=20= =20=20=20(package=0A= --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=03-build-kconfig-add-new-module.patch Content-Type: application/octet-stream; name="03-build-kconfig-add-new-module.patch" Content-Transfer-Encoding: quoted-printable build:=20kconfig:=20Add=20new=20module=20to=20modify=20defconfig=20= files.=0A=0AFrom:=20Stefan=20=0A=0A*=20= guix/build/kconfig.scm=20(config-string->pair,=20(pair->config-string,=0A= defconfig->alist,=20modify-defconfig,=20verify-config):=20New=20file=20= with=0Afunctions=20for=20handling=20of=20defconfig=20and=20.config=20= files.=0A*=20gnu/packages/bootloaders.scm=20(make-u-boot-package,=0A= make-u-boot-sunxi64-package):=20Adding=20new=20keyword=20arguments=20to=20= pass=20and/=0Aor=20modify=20a=20defconfig=20file.=0A= (u-boot-{am335x-boneblack,pinebook,u-boot-novena,rockpro64-rk3399}):=0A= Simplify=20packages=20by=20using=20the=20new=20keyword=20arguments=20of=20= the=20former=0Afunctions.=0A*=20Makefile.am:=20Adding=20= guix/build/kconfig.scm=20to=20MODULES.=0A---=0A=20Makefile.am=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=20=201=20=0A=20= gnu/packages/bootloaders.scm=20|=20=20111=20+++++++++++--------------=0A=20= guix/build/kconfig.scm=20=20=20=20=20=20=20|=20=20185=20= ++++++++++++++++++++++++++++++++++++++++++=0A=203=20files=20changed,=20= 234=20insertions(+),=2063=20deletions(-)=0A=20create=20mode=20100644=20= guix/build/kconfig.scm=0A=0Adiff=20--git=20a/Makefile.am=20b/Makefile.am=0A= index=2022dcc43f99..92ba939ab4=20100644=0A---=20a/Makefile.am=0A+++=20= b/Makefile.am=0A@@=20-235,6=20+235,7=20@@=20MODULES=20=3D=09=09=09=09=09= \=0A=20=20=20guix/build/waf-build-system.scm=09=09\=0A=20=20=20= guix/build/haskell-build-system.scm=09=09\=0A=20=20=20= guix/build/julia-build-system.scm=09=09\=0A+=20=20guix/build/kconfig.scm=09= =09=09\=0A=20=20=20guix/build/linux-module-build-system.scm=09\=0A=20=20=20= guix/build/store-copy.scm=09=09=09\=0A=20=20=20guix/build/json.scm=09=09=09= =09\=0Adiff=20--git=20a/gnu/packages/bootloaders.scm=20= b/gnu/packages/bootloaders.scm=0Aindex=20658de5a808..1f00c9a041=20100644=0A= ---=20a/gnu/packages/bootloaders.scm=0A+++=20= b/gnu/packages/bootloaders.scm=0A@@=20-778,8=20+778,9=20@@=20def=20= test_ctrl_c"))=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=20=20= This=20package=20provides=20its=0A=20board-independent=20tools.")))=0A=20= =0A-(define-public=20(make-u-boot-package=20board=20triplet)=0A-=20=20= "Returns=20a=20u-boot=20package=20for=20BOARD=20cross-compiled=20for=20= TRIPLET."=0A+(define*-public=20(make-u-boot-package=20board=20triplet=20= #:key=20defconfig=20configs)=0A+=20=20"Returns=20a=20u-boot=20package=20= for=20BOARD=20cross-compiled=20for=20TRIPLET=20with=20the=0A+optional=20= DEFCONFIG=20file=20and=20optional=20configuration=20changes=20from=20= CONFIGS."=0A=20=20=20(let=20((same-arch?=20(lambda=20()=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string=3D?=20= (%current-system)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gnu-triplet->nix-system=20= triplet)))))=0A@@=20-797,8=20+798,11=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20(arguments=0A=20=20=20=20=20=20=20=20= `(#:modules=20((ice-9=20ftw)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(srfi=20srfi-1)=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(guix=20build=20utils)=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20= gnu-build-system))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(guix=20build=20gnu-build-system)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20utils))=0A= +=20=20=20=20=20=20=20=20=20#:imported-modules=20= (,@%gnu-build-system-modules=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(guix=20build=20kconfig))=0A= =20=20=20=20=20=20=20=20=20=20#:test-target=20"test"=0A=20=20=20=20=20=20= =20=20=20=20#:make-flags=0A=20=20=20=20=20=20=20=20=20=20(list=20= "HOSTCC=3Dgcc"=0A@@=20-809,9=20+813,19=20@@=20board-independent=20= tools.")))=0A=20=20=20=20=20=20=20=20=20=20(modify-phases=20= %standard-phases=0A=20=20=20=20=20=20=20=20=20=20=20=20(replace=20= 'configure=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20= outputs=20make-flags=20#:allow-other-keys)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((config-name=20(string-append=20,board=20= "_defconfig")))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (if=20(file-exists?=20(string-append=20"configs/"=20config-name))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(apply=20invoke=20= "make"=20`(,@make-flags=20,config-name))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let*=20((config-name=20(string-append=20,board=20= "_defconfig"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(config-file=20(string-append=20"configs/"=20config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (defconfig=20,defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(configs=20',configs))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(when=20defconfig=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20;;=20Replace=20the=20board-specific=20= defconfig=20with=20the=20given=20one.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(copy-file=20defconfig=20config-file))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(file-exists?=20= config-file)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(when=20configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20config-file=20= configs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(apply=20invoke=20"make"=20`(,@make-flags=20,config-name))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (verify-config=20".config"=20config-file))=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(begin=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(display=20"Invalid=20board=20= name.=20Valid=20board=20names=20are:"=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (current-error-port))=0A@@=20-865,7=20+879,11=20@@=20board-independent=20= tools.")))=0A=20=20=20(make-u-boot-package=20"malta"=20= "mips64el-linux-gnuabi64"))=0A=20=0A=20(define-public=20= u-boot-am335x-boneblack=0A-=20=20(let=20((base=20(make-u-boot-package=20= "am335x_evm"=20"arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"am335x_evm"=20"arm-linux-gnueabihf"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20device=20= trees=20to=20build=20image=20small=20enough=20to=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20fit=20within=20typical=20partitioning=20= schemes=20where=20the=20first=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20partition=20begins=20at=20sector=202048.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#:configs=20'("CONFIG_OF_LIST=3D\"am335x-evm=20= am335x-boneblack\""))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(name=20= "u-boot-am335x-boneblack")=0A@@=20-874,25=20+892,13=20@@=20also=20= initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20U-Boot=20is=20= built=20for=20the=20BeagleBone=20Black,=20which=20was=20removed=20= upstream,=0A=20adjusted=20from=20the=20am335x_evm=20build=20with=20= several=20device=20trees=20removed=20so=20that=0A-it=20fits=20within=20= common=20partitioning=20schemes.")=0A-=20=20=20=20=20=20(arguments=0A-=20= =20=20=20=20=20=20(substitute-keyword-arguments=20(package-arguments=20= base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20= =20=20=20=20=20`(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20(add-after=20'unpack=20'patch-defconfig=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20;;=20Patch=20out=20other=20devicetrees=20to=20= build=20image=20small=20enough=20to=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20;;=20fit=20within=20typical=20partitioning=20schemes=20where=20= the=20first=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition=20begins=20at=20sector=202048.=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(substitute*=20"configs/am335x_evm_defconfig"=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(("CONFIG_OF_LIST=3D.*$")=20= "CONFIG_OF_LIST=3D\"am335x-evm=20am335x-boneblack\"\n"))=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+it=20fits=20within=20= common=20partitioning=20schemes."))))=0A=20=0A=20(define-public=20= u-boot-am335x-evm=0A=20=20=20(make-u-boot-package=20"am335x_evm"=20= "arm-linux-gnueabihf"))=0A=20=0A-(define-public=20= (make-u-boot-sunxi64-package=20board=20triplet)=0A-=20=20(let=20((base=20= (make-u-boot-package=20board=20triplet)))=0A+(define*-public=20= (make-u-boot-sunxi64-package=20board=20triplet=20#:key=20defconfig=20= configs)=0A+=20=20(let=20((base=20(make-u-boot-package=20board=20triplet=20= #:defconfig=20defconfig=20#:configs=20configs)))=0A=20=20=20=20=20= (package=0A=20=20=20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20= (arguments=0A@@=20-922,20=20+928,10=20@@=20it=20fits=20within=20common=20= partitioning=20schemes.")=0A=20=20=20(make-u-boot-sunxi64-package=20= "pine64-lts"=20"aarch64-linux-gnu"))=0A=20=0A=20(define-public=20= u-boot-pinebook=0A-=20=20(let=20((base=20(make-u-boot-sunxi64-package=20= "pinebook"=20"aarch64-linux-gnu")))=0A-=20=20=20=20(package=0A-=20=20=20=20= =20=20(inherit=20base)=0A-=20=20=20=20=20=20(arguments=0A-=20=20=20=20=20= =20=20(substitute-keyword-arguments=20(package-arguments=20base)=0A-=20=20= =20=20=20=20=20=20=20((#:phases=20phases)=0A-=20=20=20=20=20=20=20=20=20=20= `(modify-phases=20,phases=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-after=20'unpack=20'patch-pinebook-config=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Fix=20regression=20with=20LCD=20video=20output=20= introduced=20in=202020.01=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20https://patchwork.ozlabs.org/patch/1225130/=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(substitute*=20"configs/pinebook_defconfig"=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy")=20= "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=3Dy\nCONFIG_VIDEO_BPP32=3Dy"))=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+=20=20= (make-u-boot-sunxi64-package=20"pinebook"=20"aarch64-linux-gnu"=0A+=20=20= =20;;=20Fix=20regression=20with=20LCD=20video=20output=20introduced=20in=20= 2020.01=0A+=20=20=20;;=20https://patchwork.ozlabs.org/patch/1225130/=0A+=20= =20=20#:configs=20'("CONFIG_VIDEO_BPP32=3Dy")))=0A=20=0A=20= (define-public=20u-boot-bananapi-m2-ultra=0A=20=20=20= (make-u-boot-package=20"Bananapi_M2_Ultra"=20"arm-linux-gnueabihf"))=0A= @@=20-986,25=20+982,17=20@@=20device=20while=20it's=20being=20turned=20= on=20(and=20a=20while=20longer).")=0A=20=20=20(make-u-boot-package=20= "mx6cuboxi"=20"arm-linux-gnueabihf"))=0A=20=0A=20(define-public=20= u-boot-novena=0A-=20=20(let=20((base=20(make-u-boot-package=20"novena"=20= "arm-linux-gnueabihf")))=0A+=20=20(let=20((base=20(make-u-boot-package=20= "novena"=20"arm-linux-gnueabihf"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20= from=20FAT=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= partition,=20allowing=20it=20to=20be=20installed=20at=20a=20device=20= offset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20'("#=20= CONFIG_SPL_FS_FAT=20is=20not=20set"))))=0A=20=20=20=20=20(package=0A=20=20= =20=20=20=20=20(inherit=20base)=0A=20=20=20=20=20=20=20(description=20= "U-Boot=20is=20a=20bootloader=20used=20mostly=20for=20ARM=20boards.=20=20= It=0A=20also=20initializes=20the=20boards=20(RAM=20etc).=0A=20=0A=20This=20= U-Boot=20is=20built=20for=20Novena.=20=20Be=20advised=20that=20this=20= version,=20contrary=0A-to=20Novena=20upstream,=20does=20not=20load=20= u-boot.img=20from=20the=20first=20partition.")=0A-=20=20=20=20=20=20= (arguments=0A-=20=20=20=20=20=20=20(substitute-keyword-arguments=20= (package-arguments=20base)=0A-=20=20=20=20=20=20=20=20=20((#:phases=20= phases)=0A-=20=20=20=20=20=20=20=20=20=20`(modify-phases=20,phases=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20(add-after=20'unpack=20= 'patch-novena-defconfig=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ;;=20Patch=20configuration=20to=20disable=20loading=20u-boot.img=20from=20= FAT=20partition,=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= allowing=20it=20to=20be=20installed=20at=20a=20device=20offset.=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(substitute*=20"configs/novena_defconfig"=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("CONFIG_SPL_FS_FAT=3Dy")=20"#=20CONFIG_SPL_FS_FAT=20is=20not=20set"))=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#t)))))))))=0A+to=20= Novena=20upstream,=20does=20not=20load=20u-boot.img=20from=20the=20first=20= partition."))))=0A=20=0A=20(define-public=20u-boot-cubieboard=0A=20=20=20= (make-u-boot-package=20"Cubieboard"=20"arm-linux-gnueabihf"))=0A@@=20= -1092,7=20+1080,15=20@@=20to=20Novena=20upstream,=20does=20not=20load=20= u-boot.img=20from=20the=20first=20partition.")=0A=20=20=20=20=20=20=20=20= =20=20,@(package-native-inputs=20base))))))=0A=20=0A=20(define-public=20= u-boot-rockpro64-rk3399=0A-=20=20(let=20((base=20(make-u-boot-package=20= "rockpro64-rk3399"=20"aarch64-linux-gnu")))=0A+=20=20(let=20((base=20= (make-u-boot-package=20"rockpro64-rk3399"=20"aarch64-linux-gnu"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20#:configs=20'("CONFIG_USB=3Dy"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"CONFIG_AHCI=3Dy"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20"CONFIG_AHCI_PCI=3Dy"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "CONFIG_SATA=3Dy"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"CONFIG_SATA_SIL=3Dy"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "CONFIG_SCSI=3Dy"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20"CONFIG_SCSI_AHCI=3Dy"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "CONFIG_DM_SCSI=3Dy"))))=0A=20=20=20=20=20(package=0A=20=20=20=20=20=20=20= (inherit=20base)=0A=20=20=20=20=20=20=20(arguments=0A@@=20-1103,19=20= +1099,8=20@@=20to=20Novena=20upstream,=20does=20not=20load=20u-boot.img=20= from=20the=20first=20partition.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(lambda*=20(#:key=20inputs=20#:allow-other-keys)=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setenv=20"BL31"=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (search-input-file=20inputs=20"/bl31.elf"))))=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(add-after=20'unpack=20'patch-config=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(add-after=20'unpack=20'patch-header=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda=20_=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(substitute*=20= "configs/rockpro64-rk3399_defconfig"=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(("CONFIG_USB=3Dy")=20"\=0A-CONFIG_USB=3Dy=0A= -CONFIG_AHCI=3Dy=0A-CONFIG_AHCI_PCI=3Dy=0A-CONFIG_SATA=3Dy=0A= -CONFIG_SATA_SIL=3Dy=0A-CONFIG_SCSI=3Dy=0A-CONFIG_SCSI_AHCI=3Dy=0A= -CONFIG_DM_SCSI=3Dy=0A-"))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(substitute*=20"include/config_distro_bootcmd.h"=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (("\"scsi_need_init=3Dfalse")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"\"setenv=20scsi_need_init=20false")=0Adiff=20= --git=20a/guix/build/kconfig.scm=20b/guix/build/kconfig.scm=0Anew=20file=20= mode=20100644=0Aindex=200000000000..0cfaffe056=0A---=20/dev/null=0A+++=20= b/guix/build/kconfig.scm=0A@@=20-0,0=20+1,185=20@@=0A+;;;=20GNU=20Guix=20= ---=20Functional=20package=20management=20for=20GNU=0A+;;;=20Copyright=20= =C2=A9=202020=20Stefan=20=0A+;;;=0A+;;;=20= This=20file=20is=20part=20of=20GNU=20Guix.=0A+;;;=0A+;;;=20GNU=20Guix=20= is=20free=20software;=20you=20can=20redistribute=20it=20and/or=20modify=20= it=0A+;;;=20under=20the=20terms=20of=20the=20GNU=20General=20Public=20= License=20as=20published=20by=0A+;;;=20the=20Free=20Software=20= Foundation;=20either=20version=203=20of=20the=20License,=20or=20(at=0A= +;;;=20your=20option)=20any=20later=20version.=0A+;;;=0A+;;;=20GNU=20= Guix=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=20but=0A+;;;=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+;;;=20MERCHANTABILITY=20or=20FITNESS=20FOR=20= A=20PARTICULAR=20PURPOSE.=20=20See=20the=0A+;;;=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+;;;=0A+;;;=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+;;;=20= along=20with=20GNU=20Guix.=20=20If=20not,=20see=20= .=0A+=0A+(define-module=20(guix=20build=20= kconfig)=0A+=20=20#:use-module=20=20(ice-9=20rdelim)=0A+=20=20= #:use-module=20=20(ice-9=20regex)=0A+=20=20#:use-module=20=20(srfi=20= srfi-1)=0A+=20=20#:use-module=20=20(srfi=20srfi-26)=0A+=20=20#:export=20= (modify-defconfig=0A+=20=20=20=20=20=20=20=20=20=20=20=20verify-config))=0A= +=0A+;;=20Commentary:=0A+;;=0A+;;=20Builder-side=20code=20to=20modify=20= configurations=20for=20the=20Kconfig=20build=20system=20as=0A+;;=20used=20= by=20Linux=20and=20U-Boot.=0A+;;=0A+;;=20Code:=0A+=0A+(define=20= (config-string->pair=20config-string)=0A+=20=20"Parse=20a=20= configuration=20string=20like=20\"CONFIG_EXAMPLE=3Dm\"=20into=20a=20= key-value=20pair.=0A+An=20error=20is=20thrown=20for=20invalid=20= configurations.=0A+=0A+\"CONFIG_A=3Dy\"=20=20=20=20=20=20=20=20=20=20=20=20= ->=20'(\"CONFIG_A\"=20.=20\"y\")=0A+\"CONFIG_B=3D\\\"\\\"\"=20=20=20=20=20= =20=20=20=20->=20'(\"CONFIG_B\"=20.=20\"\\\"\\\"\")=0A+\"CONFIG_C=3D\"=20= =20=20=20=20=20=20=20=20=20=20=20=20->=20'(\"CONFIG_C\"=20.=20\"\")=0A= +\"#=20CONFIG_E=20is=20not=20set\"=20->=20'(\"CONFIG_E\"=20.=20#f)=0A= +\"CONFIG_D\"=20=20=20=20=20=20=20=20=20=20=20=20=20=20->=20= '(\"CONFIG_D\"=20.=20#f)=0A+\"#=20Any=20comment\"=20=20=20=20=20=20=20=20= =20->=20'(#f=20.=20\"#=20Any=20comment\")=0A+\"\"=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20->=20'(#f=20.=20\"\")=0A+\"#=20= CONFIG_E=3Dy\"=20=20=20=20=20=20=20=20=20=20->=20(error=20\"Invalid=20= configuration\")=0A+\"CONFIG_E=20is=20not=20set\"=20=20=20->=20(error=20= \"Invalid=20configuration\")=0A+\"Anything=20else\"=20=20=20=20=20=20=20=20= =20->=20(error=20\"Invalid=20configuration\")"=0A+=20=20(define=20= config-regexp=0A+=20=20=20=20(make-regexp=0A+=20=20=20=20=20;;=20= (match:substring=20(string-match=20"=3D(.*)"=20"=3D")=201)=20returns=20= "",=20but=20the=0A+=20=20=20=20=20;;=20pattern=20"=3D(.+)?"=20makes=20it=20= return=20#f=20instead.=20=20=46rom=20a=20"CONFIG_A=3D"=20we=20like=0A+=20= =20=20=20=20;;=20to=20get=20"",=20which=20later=20emits=20"CONFIG_A=3D"=20= again.=0A+=20=20=20=20=20"^=20*(#[\\t=20]*)?(CONFIG_[a-zA-Z0-9_]+)([\\t=20= ]*=3D[\\t=20]*(.*)|([\\t=20]+is[\\t=20]+not[\\t=20]+set))?$"))=0A+=0A+=20= =20(define=20config-comment-regexp=0A+=20=20=20=20(make-regexp=20"^([\\t=20= ]*(#.*)?)$"))=0A+=0A+=20=20(let=20((match=20(regexp-exec=20config-regexp=20= (string-trim-right=20config-string))))=0A+=20=20=20=20(if=20match=0A+=20=20= =20=20=20=20=20=20(let*=20((comment=20(match:substring=20match=201))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(key=20(match:substring=20= match=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(unset=20= (match:substring=20match=205))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(value=20(and=20(not=20comment)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20unset)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (match:substring=20match=204))))=0A+=20=20=20=20=20=20=20=20=20=20(if=20= (eq?=20(not=20comment)=20(not=20unset))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20The=20key=20is=20uncommented=20and=20set=20or=20= commented=20and=20unset.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20key=20value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20= The=20key=20is=20set=20or=20unset=20ambigiously.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(error=20(format=20#f=20"Invalid=20configuration,=20= did=20you=20mean=20\"~a\"?"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(pair->config-string=20= (cons=20key=20#f)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20config-string)))=0A+=20=20=20=20=20=20=20=20;;=20This=20is=20= not=20a=20valid=20or=20ambigious=20config-string,=20but=20mayby=20a=20= comment.=0A+=20=20=20=20=20=20=20=20(if=20(regexp-exec=20= config-comment-regexp=20config-string)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20;;=20We=20keep=20valid=20comments.=0A+=20=20=20=20=20=20=20=20=20=20=20= =20(cons=20#f=20config-string)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (error=20"Invalid=20configuration"=20config-string)))))=0A+=0A+(define=20= (pair->config-string=20pair)=0A+=20=20"Convert=20a=20PAIR=20back=20to=20= a=20config-string."=0A+=20=20(let*=20((key=20(first=20pair))=0A+=20=20=20= =20=20=20=20=20=20(value=20(cdr=20pair)))=0A+=20=20=20=20(if=20(string?=20= key)=0A+=20=20=20=20=20=20=20=20(if=20(string?=20value)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(string-append=20key=20"=3D"=20value)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20(string-append=20"#=20"=20key=20"=20is=20not=20= set"))=0A+=20=20=20=20=20=20=20=20value)))=0A+=0A+(define=20= (defconfig->alist=20defconfig)=0A+=20=20"Convert=20the=20content=20of=20= a=20DEFCONFIG=20(or=20.config)=20file=20into=20an=20alist."=0A+=20=20= (with-input-from-file=20defconfig=0A+=20=20=20=20(lambda=20()=0A+=20=20=20= =20=20=20(let=20loop=20((alist=20'())=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(line=20(read-line)))=0A+=20=20=20=20=20=20=20=20(if=20= (eof-object?=20line)=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20= Building=20the=20alist=20is=20done,=20now=20check=20for=20duplicates.=0A= +=20=20=20=20=20=20=20=20=20=20=20=20(let=20loop=20((keys=20(map=20first=20= (filter=20first=20alist)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(duplicates=20'()))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(if=20(null?=20keys)=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20The=20search=20for=20duplicates=20is=20done.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Return=20the=20= alist=20or=20throw=20an=20error=20on=20duplicates.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(if=20(null?=20duplicates)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20alist=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(error=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(format=20#f=20= "Duplicate=20configurations=20in=20~a"=20defconfig)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20duplicates))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Continue=20the=20= search=20for=20duplicates.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(loop=20(cdr=20keys)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(if=20(member=20(first=20keys)=20(cdr=20= keys)=20equal?)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(cons=20(first=20keys)=20duplicates)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20duplicates))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20;;=20Build=20= the=20alist.=0A+=20=20=20=20=20=20=20=20=20=20=20=20(loop=20(cons=20= (config-string->pair=20line)=20alist)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(read-line)))))))=0A+=0A+(define=20= (modify-defconfig=20defconfig=20configs)=0A+=20=20"This=20function=20can=20= modify=20a=20given=20DEFCONFIG=20(or=20.config)=20file=20by=20adding,=0A= +changing=20or=20removing=20the=20list=20of=20strings=20in=20CONFIGS.=20=20= This=20allows=20customization=0A+of=20Kconfig=20based=20projects=20like=20= the=20kernel=20Linux=20or=20the=20bootloader=20'Das=20U-Boot'.=0A+=0A= +These=20are=20examples=20for=20CONFIGS=20to=20add,=20change=20or=20= remove=20configurations=20to/from=0A+DEFCONFIG:=0A+=0A= +'(\"CONFIG_A=3D\\\"a\\\"\"=0A+=20=20\"CONFIG_B=3D0\"=0A+=20=20= \"CONFIG_C=3Dy\"=0A+=20=20\"CONFIG_D=3Dm\"=0A+=20=20\"CONFIG_E=3D\"=0A+=20= =20\"#=20CONFIG_G=20is=20not=20set\"=0A+=20=20;;=20For=20convinience=20= this=20abbrevation=20can=20be=20used=20for=20not=20set=20configurations.=0A= +=20=20\"CONFIG_F\")=0A+=0A+Instead=20of=20a=20list,=20CONFGIS=20can=20= be=20a=20string=20with=20one=20configuration=20per=20line."=0A+=20=20= (let*=20(;;=20Split=20the=20configs=20into=20a=20list=20of=20single=20= configuations.=0A+=20=20=20=20=20=20=20=20=20;;=20To=20minimize=20= mistakes,=20we=20support=20a=20string=20and=20a=20list=20of=20strings,=0A= +=20=20=20=20=20=20=20=20=20;;=20each=20with=20newlines=20to=20separate=20= configurations.=0A+=20=20=20=20=20=20=20=20=20(config-pairs=20(map=20= config-string->pair=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(append-map=20(cut=20string-split=20<>=20= =20#\newline)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (string?=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(list=20configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20configs))))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20a=20= blocklist=20from=20all=20valid=20keys=20in=20config-pairs.=0A+=20=20=20=20= =20=20=20=20=20(blocklist=20(delete=20#f=20(map=20first=20= config-pairs)))=0A+=20=20=20=20=20=20=20=20=20;;=20Generate=20an=20alist=20= from=20the=20defconifg=20without=20the=20keys=20in=20blocklist.=0A+=20=20= =20=20=20=20=20=20=20(filtered-defconfig-pairs=20(remove=20(lambda=20= (pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (member=20(first=20pair)=20blocklist))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(defconfig->alist=20defconfig))))=0A+=20=20=20=20= (with-output-to-file=20defconfig=0A+=20=20=20=20=20=20(lambda=20()=0A+=20= =20=20=20=20=20=20=20(for-each=0A+=20=20=20=20=20=20=20=20=20=20=20= (lambda=20(pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(display=20= (pair->config-string=20pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (newline))=0A+=20=20=20=20=20=20=20=20=20=20=20(append=20= filtered-defconfig-pairs=20config-pairs))))))=0A+=0A+(define=20= (verify-config=20config=20defconfig)=0A+=20=20"Verify=20that=20the=20= CONFIG=20file=20contains=20all=20configurations=20from=20the=20DEFCONFIG=0A= +file=20and=20return=20#t=20in=20this=20case.=20Otherwise=20throw=20an=20= error=20with=20the=20mismatching=0A+keys=20and=20their=20values."=0A+=20=20= (let*=20((config-pairs=20(defconfig->alist=20config))=0A+=20=20=20=20=20=20= =20=20=20(defconfig-pairs=20(defconfig->alist=20defconfig))=0A+=20=20=20=20= =20=20=20=20=20(mismatching-pairs=0A+=20=20=20=20=20=20=20=20=20=20= (remove=20(lambda=20(pair)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Remove=20all=20configurations,=20whose=20values=20= are=20#f=20and=20whose=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20keys=20are=20not=20in=20config-pairs,=20as=20not=20in=20= config-pairs=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20;;=20means=20unset,=20=E2=80=A6=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(and=20(not=20(cdr=20pair))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20= (assoc-ref=20config-pairs=20(first=20pair)))))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20;;=20=E2=80=A6=20from=20the=20= defconfig-pairs=20different=20to=20config-pairs.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(lset-difference=20equal?=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Remove=20comments=20by=20filtering=20with=20= first.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(filter=20first=20= defconfig-pairs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20config-pairs))))=0A+=20= =20=20=20(if=20(null?=20mismatching-pairs)=0A+=20=20=20=20=20=20=20=20#t=0A= +=20=20=20=20=20=20=20=20(error=20(format=20#f=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"Mismatching=20= configurations=20in=20~a=20and=20~a"=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20config=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20defconfig)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(map=20(lambda=20(mismatching-pair)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((key=20= (first=20mismatching-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(defconfig-value=20(cdr=20= mismatching-pair))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(config-value=20(assoc-ref=20= config-pairs=20key)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(cons=20key=20(list=20(list=20config-value=20= defconfig-value)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20mismatching-pairs)))))=0A= --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=04-gnu-bootloader-add-u-boot.patch Content-Type: application/octet-stream; name="04-gnu-bootloader-add-u-boot.patch" Content-Transfer-Encoding: 7bit gnu: bootloader: Add U-Boot packages for Raspberry Pi models. From: Stefan * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword parameters 'name-suffix' and 'append-description'. (make-u-boot-bin-package): New function to make minimal packages. (%u-boot-rpi-efi-configs): New helper list with config strings. (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): New helper strings. (u-boot-rpi-2{,-efi,-bin,-efi-bin}, u-boot-rpi-3-32b{,-efi,-bin,-efi-bin}, u-boot-rpi-4-32b{,-efi,-bin,-efi-bin}, u-boot-rpi-arm64{,-efi,-bin,-efi-bin}): New packages. (u-boot-tools): Reuse the description of u-boot. (u-boot-{am335x-boneblack,am335x-evm,nintendo-nes-classic-edition, novena}): Make use of new keyword parameters of make-u-boot-package. --- gnu/packages/bootloaders.scm | 201 +++++++++++++++++++++++++++++++++--------- 1 file changed, 157 insertions(+), 44 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 1f00c9a041..5a35d3cb04 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -635,7 +635,7 @@ tree binary files. These are board description files used by Linux and BSD.") (name "u-boot") (version "2022.04") (source (origin - (patches + (patches (list %u-boot-rockchip-inno-usb-patch %u-boot-allow-disabling-openssl-patch %u-boot-sifive-prevent-relocating-initrd-fdt @@ -774,13 +774,21 @@ def test_ctrl_c")) (setenv "PAGER" "cat") (apply invoke "make" test-target make-flags)))) '())))) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). This package provides its -board-independent tools."))) - -(define*-public (make-u-boot-package board triplet #:key defconfig configs) - "Returns a u-boot package for BOARD cross-compiled for TRIPLET with the -optional DEFCONFIG file and optional configuration changes from CONFIGS." + (description (string-append (package-description u-boot) + " This package provides board-independent +tools of U-Boot.")))) + +(define*-public (make-u-boot-package board + triplet + #:key + defconfig + configs + name-suffix + append-description) + "Returns a U-Boot package for BOARD cross-compiled for TRIPLET with the +optional DEFCONFIG file and optional configuration changes from CONFIGS. +A NAME-SUFFIX will be appended to the package name. An APPEND-DESCRIPTION +string will be appended to the package description." (let ((same-arch? (lambda () (string=? (%current-system) (gnu-triplet->nix-system triplet))))) @@ -788,7 +796,12 @@ optional DEFCONFIG file and optional configuration changes from CONFIGS." (inherit u-boot) (name (string-append "u-boot-" (string-replace-substring (string-downcase board) - "_" "-"))) + "_" "-") + (or name-suffix ""))) + (description (if append-description + (string-append (package-description u-boot) + "\n\n" append-description) + (package-description u-boot))) (native-inputs `(,@(if (not (same-arch?)) `(("cross-gcc" ,(cross-gcc triplet)) @@ -879,20 +892,15 @@ optional DEFCONFIG file and optional configuration changes from CONFIGS." (make-u-boot-package "malta" "mips64el-linux-gnuabi64")) (define-public u-boot-am335x-boneblack - (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf" - ;; Patch out other device trees to build image small enough to - ;; fit within typical partitioning schemes where the first - ;; partition begins at sector 2048. - #:configs '("CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"")))) - (package - (inherit base) - (name "u-boot-am335x-boneblack") - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This U-Boot is built for the BeagleBone Black, which was removed upstream, -adjusted from the am335x_evm build with several device trees removed so that -it fits within common partitioning schemes.")))) + (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf" + ;; Patch out other device trees to build an image small enough to fit within + ;; typical partitioning schemes where the first partition begins at sector + ;; 2048. + #:configs '("CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"") + #:name-suffix "-boneblack" + #:append-description "This U-Boot is built for the BeagleBone Black, which +was removed upstream, adjusted from the am335x_evm build with several device +trees removed so that it fits within common partitioning schemes.")) (define-public u-boot-am335x-evm (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf")) @@ -947,7 +955,14 @@ it fits within common partitioning schemes.")))) (define-public u-boot-nintendo-nes-classic-edition (let ((base (make-u-boot-package "Nintendo_NES_Classic_Edition" - "arm-linux-gnueabihf"))) + "arm-linux-gnueabihf" + #:append-description "This version is for +the Nintendo NES Classic Edition. It is assumed that you have added a serial +port to pins PB0 and PB1 as described on +@url{https://linux-sunxi.org/Nintendo_NES_Classic_Edition}. + +In order to use FEL mode on the device, hold the Reset button on the +device while it's being turned on (and a while longer)."))) (package (inherit base) ;; Starting with 2019.01, FEL doesn't work anymore on A33. @@ -962,15 +977,6 @@ it fits within common partitioning schemes.")))) "0znkwljfwwn4y7j20pzz4ilqw8znphrfxns0x1lwdzh3xbr96z3k")) (patches (search-patches "u-boot-nintendo-nes-serial.patch")))) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This version is for the Nintendo NES Classic Edition. It is assumed that -you have added a serial port to pins PB0 and PB1 as described on -@url{https://linux-sunxi.org/Nintendo_NES_Classic_Edition}. - -In order to use FEL mode on the device, hold the Reset button on the -device while it's being turned on (and a while longer).") (native-inputs `(("python" ,python-2) ,@(package-native-inputs base)))))) @@ -982,17 +988,13 @@ device while it's being turned on (and a while longer).") (make-u-boot-package "mx6cuboxi" "arm-linux-gnueabihf")) (define-public u-boot-novena - (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf" - ;; Patch configuration to disable loading u-boot.img from FAT - ;; partition, allowing it to be installed at a device offset. - #:configs '("# CONFIG_SPL_FS_FAT is not set")))) - (package - (inherit base) - (description "U-Boot is a bootloader used mostly for ARM boards. It -also initializes the boards (RAM etc). - -This U-Boot is built for Novena. Be advised that this version, contrary -to Novena upstream, does not load u-boot.img from the first partition.")))) + (make-u-boot-package "novena" "arm-linux-gnueabihf" + ;; Patch configuration to disable loading u-boot.img from FAT partition, + ;; allowing it to be installed at a device offset. + #:configs '("# CONFIG_SPL_FS_FAT is not set") + #:append-description "This U-Boot is built for Novena. Be advised that this +version, contrary to Novena upstream, does not load u-boot.img from the first +partition.")) (define-public u-boot-cubieboard (make-u-boot-package "Cubieboard" "arm-linux-gnueabihf")) @@ -1145,6 +1147,117 @@ BOOT_TARGET_NVME(func) \\ `(("firmware" ,arm-trusted-firmware-rk3399) ,@(package-native-inputs base)))))) +(define*-public (make-u-boot-bin-package u-boot-package + #:key + (u-boot-bin "u-boot.bin")) + "Return a package with a single U-BOOT-BIN file from the U-BOOT-PACKAGE. +The package name will be that of the U-BOOT package suffixed with \"-bin\"." + (package + (name (string-append (package-name u-boot-package) "-bin")) + (version (package-version u-boot-package)) + (source #f) + (build-system trivial-build-system) + (arguments + `(#:builder + (begin + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink (string-append (assoc-ref %build-inputs "u-boot") + "/libexec/" + ,u-boot-bin) + (string-append out "/" ,u-boot-bin)))))) + (inputs `(("u-boot" ,u-boot-package))) + (home-page (package-home-page u-boot-package)) + (synopsis (package-synopsis u-boot-package)) + (description (string-append + (package-description u-boot-package) + "\n\n" + (format #f + "This package only contains the file ~a." + u-boot-bin))) + (license (package-license u-boot-package)))) + +(define-public %u-boot-rpi-efi-configs + '("CONFIG_OF_EMBED" + "CONFIG_OF_BOARD=y")) + +(define %u-boot-rpi-description-32-bit + "This is a 32-bit build of U-Boot.") + +(define %u-boot-rpi-description-64-bit + "This is a common 64-bit build of U-Boot for all 64-bit capable Raspberry Pi +variants.") + +(define %u-boot-rpi-efi-description + "It allows network booting and uses the device-tree from the firmware, +allowing the usage of overlays. It can act as an EFI firmware for the +grub-efi-netboot-removable-bootloader.") + +(define %u-boot-rpi-efi-description-32-bit + (string-append %u-boot-rpi-efi-description " " + %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-2 + (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-3-32b + (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-4-32b + (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" + #:append-description %u-boot-rpi-description-32-bit)) + +(define-public u-boot-rpi-arm64 + (make-u-boot-package "rpi_arm64" "aarch64-linux-gnu" + #:append-description %u-boot-rpi-description-64-bit)) + +(define-public u-boot-rpi-2-efi + (make-u-boot-package "rpi_2" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-3-32b-efi + (make-u-boot-package "rpi_3_32b" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-4-32b-efi + (make-u-boot-package "rpi_4_32b" "arm-linux-gnueabihf" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description %u-boot-rpi-efi-description-32-bit)) + +(define-public u-boot-rpi-arm64-efi + (make-u-boot-package "rpi_arm64""aarch64-linux-gnu" + #:name-suffix "-efi" + #:configs %u-boot-rpi-efi-configs + #:append-description (string-append + %u-boot-rpi-efi-description " " + %u-boot-rpi-description-64-bit))) + +(define-public u-boot-rpi-2-bin (make-u-boot-bin-package u-boot-rpi-2)) + +(define-public u-boot-rpi-3_32b-bin (make-u-boot-bin-package u-boot-rpi-3-32b)) + +(define-public u-boot-rpi-4_32b-bin (make-u-boot-bin-package u-boot-rpi-4-32b)) + +(define-public u-boot-rpi-arm64-bin (make-u-boot-bin-package u-boot-rpi-arm64)) + +(define-public u-boot-rpi-2-efi-bin (make-u-boot-bin-package u-boot-rpi-2-efi)) + +(define-public u-boot-rpi-3-32b-efi-bin + (make-u-boot-bin-package u-boot-rpi-3-32b-efi)) + +(define-public u-boot-rpi-4-32b-efi-bin + (make-u-boot-bin-package u-boot-rpi-4-32b-efi)) + +(define-public u-boot-rpi-arm64-efi-bin + (make-u-boot-bin-package u-boot-rpi-arm64-efi)) + (define-public vboot-utils (package (name "vboot-utils") --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=05-gnu-linux-new-function-to.patch Content-Type: application/octet-stream; name="05-gnu-linux-new-function-to.patch" Content-Transfer-Encoding: quoted-printable gnu:=20linux:=20New=20function=20to=20modify=20the=20configuration=20of=20= a=20Linux=20kernel.=0A=0AFrom:=20Stefan=20=0A= =0A*=20gnu/packages/linux.scm=20(system->linux-srcarch):=20New=20= function=20to=20return=20the=0Arelevent=20folder=20name=20below=20arch/=20= in=20the=20Linux=20source=20code.=0A(modify-linux):=20New=20function=20= to=20make=20a=20customized=20Linux=20package=20inherited=0Afrom=20= another=20Linux=20package,=20which=20will=20be=20build=20with=20an=20own=20= defconfig=20or=0Aconfiguration=20changes.=0A(make-defconfig):=20Function=20= to=20get=20a=20defconfig=20from=20an=20uri.=0A---=0A=20= gnu/packages/linux.scm=20|=20=20123=20= ++++++++++++++++++++++++++++++++++++++++++++++++=0A=201=20file=20= changed,=20123=20insertions(+)=0A=0Adiff=20--git=20= a/gnu/packages/linux.scm=20b/gnu/packages/linux.scm=0Aindex=20= 1a35e857c3..33bc168074=20100644=0A---=20a/gnu/packages/linux.scm=0A+++=20= b/gnu/packages/linux.scm=0A@@=20-186,8=20+186,27=20@@=0A=20=20=20= #:use-module=20(srfi=20srfi-2)=0A=20=20=20#:use-module=20(srfi=20= srfi-26)=0A=20=20=20#:use-module=20(ice-9=20match)=0A+=20=20#:use-module=20= (ice-9=20optargs)=0A=20=20=20#:use-module=20(ice-9=20regex))=0A=20=0A= +(define-public=20(linux-srcarch)=0A+=20=20"Return=20the=20linux=20= SRCARCH=20name,=20which=20is=20set=20in=20the=20toplevel=20Makefile=20of=0A= +Linux=20and=20denotes=20the=20architecture=20specific=20directory=20= name=20below=20arch/=20in=20its=0A+source=20code.=20=20Some=20few=20= architectures=20share=20a=20common=20folder.=20=20It=20resembles=20the=0A= +definition=20of=20SRCARCH=20based=20on=20ARCH=20in=20the=20Makefile=20= and=20may=20be=20used=20to=20place=20a=0A+defconfig=20file=20in=20the=20= proper=20path."=0A+=20=20(let=20((linux-arch=20= (platform-linux-architecture=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(lookup-platform-by-target-or-system=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20= (%current-target-system)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(%current-system))))))=0A+=20=20=20= =20(match=20linux-arch=0A+=20=20=20=20=20=20("i386"=20=20=20=20"x86")=0A= +=20=20=20=20=20=20("x86_64"=20=20"x86")=0A+=20=20=20=20=20=20("sparc32"=20= "sparc")=0A+=20=20=20=20=20=20("sparc64"=20"sparc")=0A+=20=20=20=20=20=20= ("sh64"=20=20=20=20"sh")=0A+=20=20=20=20=20=20(_=20=20=20=20=20=20=20=20=20= linux-arch))))=0A+=0A=20(define-public=20(system->defconfig=20system)=0A=20= =20=20"Some=20systems=20(notably=20powerpc-linux)=20require=20a=20= special=20target=20for=20kernel=0A=20defconfig.=20=20Return=20the=20= appropriate=20make=20target=20if=20applicable,=20otherwise=20return=0A@@=20= -1179,6=20+1198,110=20@@=20It=20has=20been=20modified=20to=20remove=20= all=20non-free=20binary=20blobs.")=0A=20=20=20=20=20=20=20(inputs=20= (modify-inputs=20(package-inputs=20base-linux-libre)=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(prepend=20cpio))))))=0A=20=0A+=0C=0A= +;;;=0A+;;;=20Linux=20kernel=20customization=20functions.=0A+;;;=0A+=0A= +(define*-public=20(modify-linux=20#:key=20name=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(linux=20linux-libre)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= source=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20defconfig=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(configs=20"")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= extra-version)=0A+=20=20"Make=20a=20Linux=20package=20NAME=20as=20a=20= modification=20of=20another=20LINUX=20package.=0A+=0A+If=20NAME=20is=20= not=20given,=20then=20it=20defaults=20to=20the=20same=20name=20as=20the=20= LINUX=20package.=0A+=0A+Unless=20SOURCE=20is=20given=20the=20source=20of=20= LINUX=20is=20used.=0A+=0A+A=20DEFCONFIG=20file=20to=20be=20used=20can=20= be=20given=20as=20an=20origin,=20as=20a=20file=20like=20object=0A= +(file-append,=20local-file=20etc.),=20or=20as=20a=20string=20with=20the=20= name=20of=20a=20defconfig=20file=0A+available=20in=20the=20Linux=20= sources.=20=20If=20DEFCONFIG=20is=20not=20given,=20then=20a=20defconfig=0A= +file=20will=20be=20saved=20from=20the=20LINUX=20package=20= configuration.=0A+=0A+Additional=20CONFIGS=20will=20be=20used=20to=20= modify=20the=20given=20or=20saved=20defconfig,=20which=0A+will=20finally=20= be=20used=20to=20build=20Linux.=0A+=0A+CONFIGS=20can=20be=20a=20list=20= of=20strings,=20with=20one=20configuration=20per=20line.=20=20The=20= usual=0A+defconfig=20syntax=20has=20to=20be=20used,=20but=20there=20is=20= a=20special=20extension=20to=20ease=20the=0A+removal=20of=20= configurations.=20=20Comment=20lines=20are=20supported=20as=20well.=0A+=0A= +Here=20is=20an=20explaining=20usage=20example:=0A+=0A+=20=20'(;;=20This=20= string=20defines=20the=20version=20tail=20in=20'uname=20-r'.=0A+=20=20=20= =20\"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\"=0A+=20=20=20=20;;=20This=20= '#=20CONFIG_=E2=80=A6=20is=20not=20set'=20syntax=20has=20to=20match=20= exactly!=0A+=20=20=20=20\"#=20CONFIG_BOOT_CONFIG=20is=20not=20set\"=0A+=20= =20=20=20\"CONFIG_NFS_SWAP=3Dy\"=0A+=20=20=20=20;;=20This=20is=20a=20= multiline=20configuration:=0A+=20=20=20=20\"CONFIG_E1000=3Dy=0A+#=20This=20= is=20a=20comment,=20below=20follows=20an=20extension=20to=20unset=20a=20= configuration:=0A+CONFIG_CMDLINE_EXTEND\")=0A+=0A+A=20string=20of=20= configurations=20instead=20of=20a=20list=20of=20configuration=20strings=20= is=20also=0A+possible.=0A+=0A+EXTRA-VERSION=20can=20be=20a=20string=20= overwriting=20the=20EXTRAVERSION=20setting=20of=20the=20LINUX=0A= +package,=20after=20being=20prepended=20by=20a=20hyphen.=20=20It=20will=20= be=20visible=20in=20the=20output=0A+of=20'uname=20-r'=20behind=20the=20= Linux=20version=20numbers."=0A+=20=20(package=0A+=20=20=20=20(inherit=20= linux)=0A+=20=20=20=20(name=20(or=20name=20(package-name=20linux)))=0A+=20= =20=20=20(source=20(or=20source=20(package-source=20linux)))=0A+=20=20=20= =20(arguments=0A+=20=20=20=20=20(substitute-keyword-arguments=0A+=20=20=20= =20=20=20=20=20=20(package-arguments=20linux)=0A+=20=20=20=20=20=20=20= ((#:imported-modules=20imported-modules=20%gnu-build-system-modules)=0A+=20= =20=20=20=20=20=20=20`((guix=20build=20kconfig)=20,@imported-modules))=0A= +=20=20=20=20=20=20=20((#:modules=20modules)=0A+=20=20=20=20=20=20=20=20= `((guix=20build=20kconfig)=20,@modules))=0A+=20=20=20=20=20=20=20= ((#:phases=20phases)=0A+=20=20=20=20=20=20=20=20#~(modify-phases=20= #$phases=0A+=20=20=20=20=20=20=20=20=20=20=20=20(replace=20'configure=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20(lambda*=20(#:key=20inputs=20= #:allow-other-keys=20#:rest=20arguments)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(setenv=20"EXTRAVERSION"=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#$(and=20extra-version=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(not=20(string-null?=20extra-version))=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (string-append=20"-"=20extra-version)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let*=20((configs=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(string-append=20"arch/"=20= #$(linux-srcarch)=20"/configs/"))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(guix_defconfig=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(string-append=20= configs=20"guix_defconfig")))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20#$(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20((not=20defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20#~(begin=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Call=20the=20original=20= 'configure=20phase.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(apply=20(assoc-ref=20#$phases=20'configure)=20= arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Save=20a=20defconfig=20file.=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(invoke=20"make"=20= "savedefconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20;;=20Move=20the=20saved=20defconfig=20to=20the=20= proper=20location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(rename-file=20"defconfig"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20((string?=20defconfig)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Use=20another=20= existing=20defconfig=20from=20the=20Linux=20sources.=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#~(rename-file=20= (string-append=20configs=20#$defconfig)=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20guix_defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(else=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Copy=20the=20defconfig=20input=20to=20the=20proper=20= location.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20#~(copy-file=20(assoc-ref=20inputs=20"guix_defconfig")=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20guix_defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(chmod=20guix_defconfig=20#o644)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(modify-defconfig=20guix_defconfig=20= '#$configs)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (invoke=20"make"=20"guix_defconfig")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(verify-config=20".config"=20guix_defconfig))))))))=0A= +=20=20=20=20(native-inputs=0A+=20=20=20=20=20(append=20(if=20(or=20(not=20= defconfig)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(string?=20defconfig))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20'()=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20The=20= defconfig=20should=20be=20an=20origin=20or=20file-like=20object.=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`(("guix_defconfig"=20= ,defconfig)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= (package-native-inputs=20linux)))))=0A+=0A+(define-public=20= (make-defconfig=20uri=20sha256-as-base32)=0A+=20=20(origin=20(method=20= url-fetch)=0A+=20=20=20=20=20=20=20=20=20=20(uri=20uri)=0A+=20=20=20=20=20= =20=20=20=20=20(sha256=20(base32=20sha256-as-base32))))=0A=20=0A=20=0C=0A= =20;;;=0A= --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=06-gnu-raspberry-pi-add-defconfig.patch Content-Type: application/octet-stream; name="06-gnu-raspberry-pi-add-defconfig.patch" Content-Transfer-Encoding: quoted-printable gnu:=20raspberry-pi:=20Add=20defconfig=20objects=20to=20build=20= customized=20Linux=20kernels.=0A=0AFrom:=20Stefan=20= =0A=0Agnu/packages/raspberry-pi.scm=20= (make-raspi-defconig):=20New=20function=20to=20make=0Adownloaded=20= defconfig=20objects=20from=20the=20Linux=20repository=20of=20the=20= Raspberry=20Pi=0AFoundation.=0A(%bcm2709-defconfig,=20= %bcm2711-defconfig,=20%bcm2711-defconfig-64,=0A%bcmrpi3-defconfig):=20= New=20variables=20containing=20defconfig=20objects=20to=20build=0ALinux=20= kernels=20customized=20for=20Raspberry=20Pi=20single=20board=20= computers.=0A---=0A=20gnu/packages/raspberry-pi.scm=20|=20=20=2037=20= ++++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2036=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/gnu/packages/raspberry-pi.scm=20b/gnu/packages/raspberry-pi.scm=0A= index=20bb38b8b218..8949d2237a=20100644=0A---=20= a/gnu/packages/raspberry-pi.scm=0A+++=20b/gnu/packages/raspberry-pi.scm=0A= @@=20-1,5=20+1,6=20@@=0A=20;;;=20GNU=20Guix=20---=20Functional=20package=20= management=20for=20GNU=0A=20;;;=20Copyright=20=C2=A9=202020=20Danny=20= Milosavljevic=20=0A+;;;=20Copyright=20=C2=A9=20= 2021=20Stefan=20=0A=20;;;=0A=20;;;=20This=20= file=20is=20part=20of=20GNU=20Guix.=0A=20;;;=0A@@=20-25,9=20+26,10=20@@=0A= =20=20=20#:use-module=20(gnu=20packages=20commencement)=0A=20=20=20= #:use-module=20(gnu=20packages=20cross-base)=0A=20=20=20#:use-module=20= (gnu=20packages=20documentation)=0A+=20=20#:use-module=20(gnu=20packages=20= embedded)=0A=20=20=20#:use-module=20(gnu=20packages=20file)=0A=20=20=20= #:use-module=20(gnu=20packages=20gcc)=0A-=20=20#:use-module=20(gnu=20= packages=20embedded)=0A+=20=20#:use-module=20(gnu=20packages=20linux)=0A=20= =20=20#:use-module=20(guix=20build-system=20gnu)=0A=20=20=20#:use-module=20= (guix=20download)=0A=20=20=20#:use-module=20(guix=20git-download)=0A@@=20= -235,3=20+237,36=20@@=20Raspberry=20Pi.=20=20Note:=20It=20does=20not=20= work=20on=20Raspberry=20Pi=201.")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(install-file=20"arm64.bin"=20libexec)=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20#t))))))))=0A=20=20=20=20=20(supported-systems=20= '("aarch64-linux"))))=0A+=0A+(define=20(make-raspi-defconfig=20arch=20= defconfig=20sha256-as-base32)=0A+=20=20"Make=20for=20the=20architecture=20= ARCH=20a=20file-like=20object=20from=20the=20DEFCONFIG=20file=0A+with=20= the=20hash=20SHA256-AS-BASE32.=20=20This=20object=20can=20be=20used=20as=20= the=20#:defconfig=0A+argument=20of=20the=20function=20(modify-linux)."=0A= +=20=20(make-defconfig=0A+=20=20=20(string-append=0A+=20=20=20=20;;=20= This=20is=20from=20commit=207838840=20on=20branch=20rpi-5.18.y,=0A+=20=20= =20=20;;=20see=20https://github.com/raspberrypi/linux/tree/rpi-5.18.y/=0A= +=20=20=20=20;;=20and=20= https://github.com/raspberrypi/linux/commit/7838840b5606a2051b31da4c598466= df7b1c3005=0A+=20=20=20=20= "https://raw.githubusercontent.com/raspberrypi/linux/7838840b5606a2051b31d= a4c598466df7b1c3005/arch/"=0A+=20=20=20=20arch=20"/configs/"=20= defconfig)=0A+=20=20=20sha256-as-base32))=0A+=0A+(define-public=20= %bcm2709-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20=20=20"arm"=20= "bcm2709_defconfig"=0A+=20=20=20= "1hcxmsr131f92ay3bfglrggds8ajy904yj3vw7c42i4c66256a79"))=0A+=0A= +(define-public=20%bcm2711-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm"=20"bcm2711_defconfig"=0A+=20=20=20= "1n7g5yq0hdp8lh0x6bfxph2ff8yn8zisdj3qg0gbn83j4v8i1zbd"))=0A+=0A= +(define-public=20%bcm2711-defconfig-64=0A+=20=20(make-raspi-defconfig=0A= +=20=20=20"arm64"=20"bcm2711_defconfig"=0A+=20=20=20= "0k9q7qvw826v2hrp49xnxnw93pnnkicwx869chvlf7i57461n4i7"))=0A+=0A= +(define-public=20%bcmrpi3-defconfig=0A+=20=20(make-raspi-defconfig=0A+=20= =20=20"arm64"=20"bcmrpi3_defconfig"=0A+=20=20=20= "1bfnl4p0ddx3200dg91kmh2pln36w95y05x1asc312kixv0jgd81"))=0A= --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=07-gnu-raspberry-pi-add-helpers.patch Content-Type: application/octet-stream; name="07-gnu-raspberry-pi-add-helpers.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add helpers for config.txt file generation. From: Stefan * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): New functions. (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt %raspi-u-boot-bootloader-txt): New variables. --- gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 8949d2237a..12a919d5c6 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -238,6 +238,59 @@ Raspberry Pi. Note: It does not work on Raspberry Pi 1.") #t)))))))) (supported-systems '("aarch64-linux")))) +(define-public (raspi-config-file name content) + "Make a configuration file like config.txt for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (plain-file + name + (if (list? content) + (string-join content "\n" 'suffix) + content))) + +(define-public %raspi-config-txt + ;; A config.txt file to start the ARM cores up in 64-bit mode if necessary + ;; and to include a dtb.txt, bootloader.txt, and a custom.txt, each with + ;; separated configurations for the Raspberry Pi firmware. + (raspi-config-file + "config.txt" + `("# See https://www.raspberrypi.org/documentation/configuration/config-txt/README.md for details." + "" + ,(string-append "arm_64bit=" (if (target-aarch64?) "1" "0")) + "include dtb.txt" + "include bootloader.txt" + "include custom.txt"))) + +(define-public %raspi-bcm27-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; downstream device tree files bcm27*.dtb will be used. + (raspi-config-file + "dtb.txt" + "upstream_kernel=0")) + +(define-public %raspi-bcm28-dtb-txt + ;; A dtb.txt file to be included by the config.txt to ensure that the + ;; upstream device tree files bcm28*.dtb will be used. + ;; This also implies the use of the dtoverlay=upstream. + (raspi-config-file + "dtb.txt" + "upstream_kernel=1")) + +(define-public %raspi-u-boot-bootloader-txt + ;; A bootloader.txt file to be included by the config.txt to load the + ;; U-Boot bootloader. + (raspi-config-file + "bootloader.txt" + '("dtoverlay=upstream" + "enable_uart=1" + "kernel=u-boot.bin"))) + +(define-public (raspi-custom-txt content) + "Make a custom.txt file for the Raspberry Pi firmware. +CONTENT can be a list of strings, which are concatenated with a newline +character. Alternatively CONTENT can be a string with the full file content." + (raspi-config-file "custom.txt" content)) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=08-gnu-raspberry-pi-new-function.patch Content-Type: application/octet-stream; name="08-gnu-raspberry-pi-new-function.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: New function to make a package with device-tree files. From: Stefan * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to make a package with device-tree files for Raspberry Pi models from the kernel given as argument. --- gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 12a919d5c6..92f5d22677 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages file) #:use-module (gnu packages gcc) #:use-module (gnu packages linux) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concatenated with a newline character. Alternatively CONTENT can be a string with the full file content." (raspi-config-file "custom.txt" content)) +(define-public (make-raspi-bcm28-dtbs linux) + "Make a package with the device-tree files for Raspberry Pi models from the +kernel LINUX." + (package + (inherit linux) + (name "raspi-bcm28-dtbs") + (source #f) + (build-system copy-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'unpack)) + #:install-plan + (list (list (string-append (assoc-ref %build-inputs "linux") + "/lib/dtbs/broadcom/") + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) + (inputs `(("linux" ,linux))) + (synopsis "Device-tree files for a Raspberry Pi") + (description + (simple-format #f "The device-tree files for Raspberry Pi models from ~a." + (package-name linux))))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3 Content-Disposition: attachment; filename=09-gnu-raspberry-pi-add-a.patch Content-Type: application/octet-stream; name="09-gnu-raspberry-pi-add-a.patch" Content-Transfer-Encoding: 7bit gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. From: Stefan * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. --- gnu/packages/raspberry-pi.scm | 19 +++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 74 ++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 78 +++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 92f5d22677..3d62b028ba 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -312,6 +315,22 @@ kernel LINUX." (simple-format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. + ;; It neither installs firmware nor device-tree files for the Raspberry Pi. + ;; It just assumes them to be existing in boot/efi in the same way that some + ;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + ;; It creates firmware configuration files and a bootloader-chain with U-Boot + ;; to provide an EFI API for the final GRUB bootloader. + ;; It also serves as a blue-print to create an own bootloader-chain with + ;; firmwre and device-tree packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-arm64-efi-bin) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 0000000000..c635f8e323 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,74 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (targets (list "/boot/efi")) + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices (list (swap-space + (target "/run/swapfile")))) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 0000000000..dd933252c5 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,78 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (targets (list "/boot/efi")) + (theme (grub-theme (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (modify-linux #:linux linux-libre-arm64-generic + #| It is possible to use a specific defconfig file, + for example the "bcmrpi3_defconfig" with the + variable shown below. Unfortunately the kernel + build from the linux-libre sources with this + defconfig file does not boot. + #:extra-version "gnu-bcmrpi3" + #:defconfig %bcmrpi3-defconfig + |#)) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices (list (swap-space + (target "/run/swapfile")))) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 --Apple-Mail=_399177BD-9940-46EF-A69B-140091BA80A3-- From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 05 09:03:06 2022 Received: (at 48314) by debbugs.gnu.org; 5 Oct 2022 13:03:06 +0000 Received: from localhost ([127.0.0.1]:56212 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1og43G-0005hr-3S for submit@debbugs.gnu.org; Wed, 05 Oct 2022 09:03:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35110) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1og43E-0005hO-1O for 48314@debbugs.gnu.org; Wed, 05 Oct 2022 09:03:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53142) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1og437-0006Lj-9s; Wed, 05 Oct 2022 09:02:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To: From; bh=+1khudM9k/NsvofHzeLmeaLJQNzsjIDtCuBTMh7+dEg=; b=qKrRS/qEgjJiW0r6fFdF uEl48+fEMG62aPhYe4Ubxbg8N1BDl1gQZNELudThrl5w+VODAP0tLzhPvn9JDe06Q+MinNljHVN8X mjybkWDmGYwTFiUzWklwS0hbhByk1yDh6nY+zz+6nEFT0vQeQv9NVHIzvitWcNrK/F25DG4IGciP7 Nl+qAz9qE2TBZRZRvzvoZ4gNTU0bFoMghw4gq/A0lSqrd5X5buDlMvABvStN6cXD+MsH9bphj31he h9xnoE5QaX2Vj0wW+SlHyMk1mEFmbYE4g+x0NH+CYRILK0NGCZBSKwqHzTwAlFA/8aMX4njotiggH KsqlV8dA2bonbQ==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:64821 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1og435-0003nt-Gz; Wed, 05 Oct 2022 09:02:56 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Stefan Subject: Re: [PATCH v5] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: Quartidi 14 =?utf-8?Q?Vend=C3=A9miaire?= an 231 de la =?utf-8?Q?R=C3=A9volution=2C?= jour du =?utf-8?B?UsOpc8OpZGE=?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Wed, 05 Oct 2022 15:02:53 +0200 In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") Message-ID: <87ilkyqv7m.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, Vagrant, Danny: could you take a look at these patches? They seem to have fallen through the cracks. TIA. :-) Ludo=E2=80=99. Stefan skribis: > Hi! > > I did a rebase onto commit 2e8b4f9bfa00489fd3acff305837a79af236e183. > > Vagrant, there was a comment left about removing "CONFIG_BOOTDELAY=3D1" f= or the u-boot, this is now done. I think all review comments have been appl= ied. > > There is a new u-boot-rockpro64-rk3399 which I adapted as well to use the= #:configs keyword argument. > > The function modify-defconfig in guix/build/kconfig.scm no longer interpr= ets "CONFIG_XY=3D" like "# CONFIG_XY is not set". > > > Bye > > Stefan From debbugs-submit-bounces@debbugs.gnu.org Sat Oct 08 12:22:18 2022 Received: (at 48314) by debbugs.gnu.org; 8 Oct 2022 16:22:18 +0000 Received: from localhost ([127.0.0.1]:41304 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohCaf-0007w5-73 for submit@debbugs.gnu.org; Sat, 08 Oct 2022 12:22:18 -0400 Received: from cascadia.aikidev.net ([173.255.214.101]:50718) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohCac-0007vq-Iy for 48314@debbugs.gnu.org; Sat, 08 Oct 2022 12:22:16 -0400 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 495FC1ABDE; Sat, 8 Oct 2022 09:22:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1665246128; bh=XFprZ6nPvxCPLZKRe4zbOI6tF/Fzs1ma+2PhUH0IP6k=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=JphYEn36/rp6NwHF9GhhC4+MiKY0bGJZlyBeMvmC9ngKIm0SUXfb/hKiszHVzfv9r ZB2hnmrBD0AzgG9/7JCcDj7iHKhGmkIIBuNQy/cmswcEPcF9i0i8XVU30MQCTuXTdG Siy/EfhrH+v6larlrxJfn9hbLxbzNfzRxS9V/13fN81GxFnwq0DP6TcfOj/1jN9GT3 1lKujoaGZAYdDb8s7EQ49yQVJ7gR1PhnTmFwqOZ0kgqp0I2dNUsbqZVUnL/yuFoQtk Aim/d68R2lMfWADSSeJbZTPEx80p8WhvjbhCL4k6SOnatBeR1J6Q3Qfh13OscVKpfx l1q5JW/lyMkLA== From: Vagrant Cascadian To: Stefan , 48314@debbugs.gnu.org, phodina , Danny Milosavljevic Subject: Re: [PATCH v5] Install guix system on Raspberry Pi In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> Date: Sat, 08 Oct 2022 09:22:02 -0700 Message-ID: <87y1tq8evp.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Ludovic =?utf-8?Q?Court=C3=A8s?= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2022-09-22, Stefan wrote: > I did a rebase onto commit 2e8b4f9bfa00489fd3acff305837a79af236e183. Thanks! It definitely looks like great progress. > Vagrant, there was a comment left about removing "CONFIG_BOOTDELAY=3D1" > for the u-boot, this is now done. I think all review comments have > been applied. Great! > There is a new u-boot-rockpro64-rk3399 which I adapted as well to use > the #:configs keyword argument. I like how that works. > The function modify-defconfig in guix/build/kconfig.scm no longer > interprets "CONFIG_XY=3D" like "# CONFIG_XY is not set". Nervous about how that actually works, but hopefully it plays out correctly. This whole patch series is large and overwhelming and at least a bit beyond my abilities to wrap my head around (which has certainly caused me to wait a bit to review)... so I cannot possibly comment on weather the series as a whole is "good", through no fault of the patch author(s)! I will try and comment where I can, but really need help to review it in any meaningful way. Also from what I recall on earlier iterations of this patch series, different reviewers seemed to have differing style recommendations around weather to split patches into smaller commits or merge patches into combined commits, which can surely be frustrating. I don't *want* to be frustrating, but I lean towards splitting patches into as small a commit as possible to wrap my head around the distinct ideas. I also like to refactor out anything that can be applied directly to master as soon as possible (e.g. the description-appending patches look promising for that) with the hope to get the remaining patch series smaller and smaller with each iteration. Some people may want to do an all-or-nothing merge. I don't know what's "right" for the guix community... With all that out of the way... here goes my attempt to review! > gnu: linux: Fix the extra-version parameter in make-linux-libre*. > > From: Stefan > > * gnu/packages/linux.scm (make-linux-libre*) ['set-environment]: Make > the Makefile accept EXTRAVERSION from the environment. Fix the usage of > an empty extra-version string. Split this new phase out of and adding > if before =E2=80=A6 > ['configure]: =E2=80=A6 to make the phases more hackable. Overall, this looks good, to me, though have one question... > diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm > index 306c18e398..1a35e857c3 100644 > --- a/gnu/packages/linux.scm > +++ b/gnu/packages/linux.scm ... > @@ -824,8 +825,8 @@ for ARCH and optionally VARIANT, or #f if there is no= such configuration." > (lambda _ > (substitute* (find-files "." "^Makefile(\\.include)?$= ") > (("/bin/pwd") "pwd")))) > - (replace 'configure > - (lambda* (#:key inputs target #:allow-other-keys) > + (add-before 'configure 'set-environment > + (lambda* (#:key target #:allow-other-keys) > ;; Avoid introducing timestamps. > (setenv "KCONFIG_NOTIMESTAMP" "1") > (setenv "KBUILD_BUILD_TIMESTAMP" > @@ -847,13 +848,16 @@ for ARCH and optionally VARIANT, or #f if there is = no such configuration." > (setenv "CROSS_COMPILE" (string-append target "-"= )) > (format #t "`CROSS_COMPILE' set to `~a'~%" > (getenv "CROSS_COMPILE")))) > - > + ;; Allow EXTRAVERSION to be set via the environment. > + (substitute* "Makefile" > + (("^ *EXTRAVERSION[[:blank:]]*=3D") "EXTRAVERSION ?= =3D")) > (setenv "EXTRAVERSION" > #$(and extra-version > - (string-append "-" extra-version))) > - > + (not (string-null? extra-version)) > + (string-append "-" extra-version))))) > + (replace 'configure > + (lambda* (#:key inputs #:allow-other-keys) > (let ((config (assoc-ref inputs "kconfig"))) > - > ;; Use a custom kernel configuration file or a defa= ult > ;; configuration file. > (if config > @@ -871,7 +875,7 @@ for ARCH and optionally VARIANT, or #f if there is no= such configuration." >=20=20 > (invoke "make" "oldconfig")))) > (replace 'install > - (lambda* (#:key inputs native-inputs #:allow-other-keys) > + (lambda* (#:key inputs #:allow-other-keys) > (let ((moddir (string-append #$output "/lib/modules")) > (dtbdir (string-append #$output "/lib/dtbs"))) > ;; Install kernel image, kernel configuration and l= ink map. Why is native-inputs removed from the 'install phase? Is it no longer needed? Was it not actually needed before? I see no mention of this change in the comment. > gnu: bootloader: Rework chaining, add grub-efi-netboot-removable-bootload= er. > > From: Stefan > > * doc/guix.texi (Bootloader Configuration): Describe the new > =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99. Mention used su= b-directories and > that the UEFI Boot Manager is not modified. Advice to disable write-acce= ss > over TFTP. > * gnu/bootloader.scm (efi-bootloader-profile): Allow a list of packages a= nd > collect everything directly in the profile, avoiding a separate collection > directory. Renamed the profile from "bootloader-profile" to > "efi-bootloader-profile". > [bootloader-collection]: Renamed to =E2=80=A6 > [efi-bootloader-profile-hook]: =E2=80=A6 this and removed unused modules = and the > creation of the now unneeded collection directory. > (efi-bootloader-chain): Added packages and disk-image-installer arguments. > Removed handling of the collection directory, now only calling the given > installer procedure. > * gnu/bootloader/grub.scm (make-grub-efi-netboot-installer): New helper. > (make-grub-configuration): New helper based on (grub-configuration-file). > Adding grub argument, fixed indentation, removend code to get grub. > (grub-configuration-file): Now using (make-grub-configuration). > (grub-efi-configuration-file): New function using (make-grub-configuratio= n). > Instead of getting the grub-efi package from the bootloader-configuration > this function refers to the grub-efi package directly. > (grub-cfg): New variable to replace "/boot/grub/grub.cfg". > (install-grub-efi-netboot): Removed, the functionality got moved. > (make-grub-efi-netboot-installer): New helper function to return a custom= ized > installer for a certain efi-sub-directory. The installer basically copies > a pre-installed efi-bootloader-profile, and adds needed symlinks for boot= ing > over network, or =E2=80=93 on an ESP =E2=80=93 an intermediate grub-cfg t= o load the final > grub-cfg file. > (grub-bootloader): Now using the grub-cfg variable. > (grub-efi-bootloader): Now using the grub-cfg variable. Removed inherita= nce, > giving complete set of fields. > (make-grub-efi-netboot-bootloader): New helper function. > (grub-efi-netboot-bootloader): Now using the helper. > (grub-efi-netboot-removable-bootloader): New bootloader using the helper. > It uses the efi-sub-directory "efi/boot" for removable media. > * gnu/packages/bootloaders.scm (make-grub-efi-netboot): New function to r= eturn > a grub-efi package pre-installed via grub-mknetdir, customized for an > efi-sub-directory and able to boot via network and local storage. > > The rework allows to use an (efi-bootloader-chain) like this, which is ab= le > to boot over network or local storage, depending on the symlink-support at > the bootloader-target: > > (operating-system > (bootloader > (bootloader-configuration > (bootloader > (efi-bootloader-chain > grub-efi-netboot-removable-bootloader > #:packages (list my-firmware-package > my-u-boot-package) > #:files (list (plain-file "config.txt" > "kernel=3Du-boot.bin")) > #:hooks my-special-bootloader-profile-manipulator)) > (target "/booti/efi") > =E2=80=A6)) > =E2=80=A6) > ) > --- > doc/guix.texi | 58 ++++++++--- > gnu/bootloader.scm | 104 ++++++++++---------- > gnu/bootloader/grub.scm | 215 ++++++++++++++++++++++++++----------= ------ > gnu/packages/bootloaders.scm | 90 ++++++++++++++++++ > 4 files changed, 318 insertions(+), 149 deletions(-) There is too much going on here for me to follow, but it is perhaps just doing a lot of big changes... help? :) > build: kconfig: Add new module to modify defconfig files. > > From: Stefan > > * guix/build/kconfig.scm (config-string->pair, (pair->config-string, > defconfig->alist, modify-defconfig, verify-config): New file with > functions for handling of defconfig and .config files. > * gnu/packages/bootloaders.scm (make-u-boot-package, > make-u-boot-sunxi64-package): Adding new keyword arguments to pass and/ > or modify a defconfig file. > (u-boot-{am335x-boneblack,pinebook,u-boot-novena,rockpro64-rk3399}): > Simplify packages by using the new keyword arguments of the former > functions. > * Makefile.am: Adding guix/build/kconfig.scm to MODULES. > --- > Makefile.am | 1=20 > gnu/packages/bootloaders.scm | 111 +++++++++++-------------- > guix/build/kconfig.scm | 185 ++++++++++++++++++++++++++++++++++++= ++++++ > 3 files changed, 234 insertions(+), 63 deletions(-) > create mode 100644 guix/build/kconfig.scm I like how this simplifies the various u-boot-* package definitions! > gnu: bootloader: Add U-Boot packages for Raspberry Pi models. > > From: Stefan > > * gnu/packages/bootloader.scm (make-u-boot-package): Add keyword > parameters 'name-suffix' and 'append-description'. This seems good to me. > (make-u-boot-bin-package): New function to make minimal packages. > (%u-boot-rpi-efi-configs): New helper list with config strings. > (%u-boot-rpi-description-32-bit, %u-boot-rpi-description-64-bit, > %u-boot-rpi-efi-description, %u-boot-rpi-efi-description-32-bit): > New helper strings. > (u-boot-rpi-2{,-efi,-bin,-efi-bin}, > u-boot-rpi-3-32b{,-efi,-bin,-efi-bin}, > u-boot-rpi-4-32b{,-efi,-bin,-efi-bin}, > u-boot-rpi-arm64{,-efi,-bin,-efi-bin}): New packages. > (u-boot-tools): Reuse the description of u-boot. > (u-boot-{am335x-boneblack,am335x-evm,nintendo-nes-classic-edition, > novena}): Make use of new keyword parameters of make-u-boot-package. It would be nice to first switch the existing u-boot-* packages to use the new append-description feature one commit (I think this could even be applied directly to master?), and then add the new functionality (e.g. make-u-boot-bin-package, *u-boot-rpi-*, etc.) in another commit or a couple commits. At least, that would make it a little easier for me to read. > gnu: linux: New function to modify the configuration of a Linux kernel. > > From: Stefan > > * gnu/packages/linux.scm (system->linux-srcarch): New function to return = the > relevent folder name below arch/ in the Linux source code. > (modify-linux): New function to make a customized Linux package inherited > from another Linux package, which will be build with an own defconfig or > configuration changes. > (make-defconfig): Function to get a defconfig from an uri. > --- > gnu/packages/linux.scm | 123 ++++++++++++++++++++++++++++++++++++++++++= ++++++ > 1 file changed, 123 insertions(+) Looks ok to me, though to say I fully understand it would be a stretch. :) > gnu: raspberry-pi: Add defconfig objects to build customized Linux kernel= s. > > From: Stefan > > gnu/packages/raspberry-pi.scm (make-raspi-defconig): New function to make > downloaded defconfig objects from the Linux repository of the Raspberry Pi > Foundation. > (%bcm2709-defconfig, %bcm2711-defconfig, %bcm2711-defconfig-64, > %bcmrpi3-defconfig): New variables containing defconfig objects to build > Linux kernels customized for Raspberry Pi single board computers. > --- > gnu/packages/raspberry-pi.scm | 37 +++++++++++++++++++++++++++++++++++= +- > 1 file changed, 36 insertions(+), 1 deletion(-) Seems good. I think I even understand this one! > gnu: raspberry-pi: Add helpers for config.txt file generation. > > From: Stefan > > * gnu/packages/raspberry-pi.scm (raspi-config-file, raspi-custom-txt): > New functions. > (%raspi-config-txt, %raspi-bcm27-dtb-txt, %raspi-bcm28-dtb-txt > %raspi-u-boot-bootloader-txt): New variables. > --- > gnu/packages/raspberry-pi.scm | 53 +++++++++++++++++++++++++++++++++++= ++++++ > 1 file changed, 53 insertions(+) Seems good. > From: Stefan > > * gnu/packages/raspberry-pi.scm (make-raspi-bcm28-dtbs): New function to = make > a package with device-tree files for Raspberry Pi models from the kernel = given > as argument. > --- > gnu/packages/raspberry-pi.scm | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm > index 12a919d5c6..92f5d22677 100644 > --- a/gnu/packages/raspberry-pi.scm > +++ b/gnu/packages/raspberry-pi.scm > @@ -30,6 +30,7 @@ > #:use-module (gnu packages file) > #:use-module (gnu packages gcc) > #:use-module (gnu packages linux) > + #:use-module (guix build-system copy) > #:use-module (guix build-system gnu) > #:use-module (guix download) > #:use-module (guix git-download) > @@ -291,6 +292,26 @@ CONTENT can be a list of strings, which are concaten= ated with a newline > character. Alternatively CONTENT can be a string with the full file con= tent." > (raspi-config-file "custom.txt" content)) >=20=20 > +(define-public (make-raspi-bcm28-dtbs linux) > + "Make a package with the device-tree files for Raspberry Pi models fro= m the > +kernel LINUX." > + (package > + (inherit linux) > + (name "raspi-bcm28-dtbs") > + (source #f) > + (build-system copy-build-system) > + (arguments > + `(#:phases (modify-phases %standard-phases (delete 'unpack)) > + #:install-plan > + (list (list (string-append (assoc-ref %build-inputs "linux") > + "/lib/dtbs/broadcom/") > + "." #:include-regexp '("/bcm....-rpi.*\\.dtb"))))) > + (inputs `(("linux" ,linux))) > + (synopsis "Device-tree files for a Raspberry Pi") > + (description > + (simple-format #f "The device-tree files for Raspberry Pi models fr= om ~a." > + (package-name linux))))) > + > (define (make-raspi-defconfig arch defconfig sha256-as-base32) > "Make for the architecture ARCH a file-like object from the DEFCONFIG = file > with the hash SHA256-AS-BASE32. This object can be used as the #:defcon= fig > gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os exa= mples. > > From: Stefan > > * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New > bootloader variable, capable to boot a Raspberry Pi over network or from a > local storage. > * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. > * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system > example for booting over network. I'd split this into two commits, one adding grub-efi-bootloader-chain-raspi-64, and one adding examples using it, but that is really a judgement call. live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCY0GjqwAKCRDcUY/If5cW qvhSAP9D4fPjWcae59IdwSlD3HusZ0keuSL2IvANfZ/hcoKL5QD/cgvvptvvamM8 5hXISg2f0nJY1dt8VU/GVZVLltMy0QY= =mNpv -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 09 09:41:48 2022 Received: (at 48314) by debbugs.gnu.org; 9 Oct 2022 13:41:48 +0000 Received: from localhost ([127.0.0.1]:42332 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohWYt-0004rg-Ny for submit@debbugs.gnu.org; Sun, 09 Oct 2022 09:41:48 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:37200) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohWYq-0004rR-9a for 48314@debbugs.gnu.org; Sun, 09 Oct 2022 09:41:45 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4MljrL5Dcwz1y6R; Sun, 9 Oct 2022 13:41:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1665322898; bh=KT56GhuvAg5wRbZqjbEErxm3G8Oey6At33o4jnplOuM=; h=Content-Type:Subject:From:In-Reply-To:Date:Message-Id:References: To:X-Mailer:From; b=ObSIdlZPBKS7ygFBSelO9bWdpafSPDTsWl5GmgyCdjyKWqe/ho4gQ7IhF5/kByt9J tHmqfXCsTORXmo0i6buFvupx0Aj35wQf0ohTYs23Daw15GZmRhkMNqD8bUpVYHZFRI 3nuuGTnwm2fjp0BVnyJ63hkEQUKNIfe+UK/zkic4= Received: from macbook-pro.kuh-wiese.my-router.de (aftr-62-216-210-253.dynamic.mnet-online.de [62.216.210.253]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4Mljr42Z4fz9t3n; Sun, 9 Oct 2022 13:41:21 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: [PATCH v5] Install guix system on Raspberry Pi From: Stefan In-Reply-To: <87y1tq8evp.fsf@contorta> Date: Sun, 9 Oct 2022 15:41:08 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <4B0EE79B-F91F-4963-8E69-7328583BF790@vodafonemail.de> References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> <87y1tq8evp.fsf@contorta> To: Vagrant Cascadian X-Mailer: Apple Mail (2.3124) X-purgate-type: clean X-purgate: clean X-purgate-size: 8604 X-purgate-ID: 155817::1665322897-167FB4DE-5C51EA64/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Vagrant! >> The function modify-defconfig in guix/build/kconfig.scm no longer >> interprets "CONFIG_XY=3D" like "# CONFIG_XY is not set". >=20 > Nervous about how that actually works, but hopefully it plays out = correctly. This is described in the doc-string of config-string->pair in the module = (guix build kconfig), which contains a regular expression for the = parsing. Basically any =E2=80=9C# CONFIG_X is not set=E2=80=9D or =E2=80=9CCONFIG_X= =E2=80=9D is treated as unset and produces a ("CONFIG_X" . #f). The = latter is just for convenience, as the first one is hard to remember and = easy to get wrong. Any =E2=80=9CCONFIG=3D=E2=80=A6=E2=80=9D is treated = as set and produces a ("CONFIG_X" . "=E2=80=A6"). Anything else except comments with =E2=80=9C#=E2=80=A6=E2=80=9D or empty = lines will throw an error. In a previous patch =E2=80=9CCONFIG_X=3D=E2=80=9C was also treated as = unset, which was confusing, as this is actually a valid makefile = assignment. The function pair->config-string produces a =E2=80=9C# CONFIG_X is not = set=E2=80=9D for any #f value, or a proper assignment otherwise. > This whole patch series is large and overwhelming and at least a bit > beyond my abilities to wrap my head around (which has certainly caused > me to wait a bit to review)... so I cannot possibly comment on weather > the series as a whole is "good", through no fault of the patch > author(s)! I will try and comment where I can, but really need help to > review it in any meaningful way. I=E2=80=99ll try to help. > Also from what I recall on earlier iterations of this patch series, > different reviewers seemed to have differing style recommendations > around weather to split patches into smaller commits or merge patches > into combined commits, which can surely be frustrating. I don't *want* > to be frustrating, but I lean towards splitting patches into as small = a > commit as possible to wrap my head around the distinct ideas. >=20 > I also like to refactor out anything that can be applied directly to > master as soon as possible (e.g. the description-appending patches = look > promising for that) with the hope to get the remaining patch series > smaller and smaller with each iteration. Some people may want to do an > all-or-nothing merge. I don't know what's "right" for the guix > community=E2=80=A6 The single patch files can be applied separately, they don=E2=80=99t = break anything. Some reordering is also possible. In particular, = 02-gnu-bootloader-rework-chaining.patch (the monster) can be applied = later but before 09-gnu-raspberry-pi-add-a.patch. > With all that out of the way... here goes my attempt to review! >=20 >=20 >> gnu: linux: Fix the extra-version parameter in make-linux-libre*. > Overall, this looks good, to me, though have one question=E2=80=A6 Great! :-) > Why is native-inputs removed from the 'install phase? Is it no longer > needed? Was it not actually needed before? I see no mention of this > change in the comment. Exactly, it was even not needed before, an obsolete argument, which I = removed. I figured this out by chance when selecting the needed = arguments for the 'set-environment phase. >> gnu: bootloader: Rework chaining, add = grub-efi-netboot-removable-bootloader. > There is too much going on here for me to follow, but it is perhaps = just > doing a lot of big changes=E2=80=A6 help? :) As noted, this patch can be delayed before = 09-gnu-raspberry-pi-add-a.patch is to be applied. Before this patch, the bootloader-installer of efi-bootloader-chain = called grub-mknetdir (actually the installer of = grub-efi-netboot-bootloader) and copied the content of a special = collection folder of the bootloader-profile. That collection folder was = very special and did not fit well to the bootloader-profile idea. Well, = actually the grub-efi package with all its tools being part of the = profile was the problem, making the collection folder necessary.=20 With this patch the packages of grub-efi-netboot-bootloader and = grub-efi-netboot-removable-bootloader are already pre-installed =E2=80=93 = grub-mknetdir is already called during package creation. Their installer = just copies the whole package/profile into the target directory. The = efi-bootloader-chain only creates a profile with the bootloader (e.g. = grub-efi-netboot-bootloader) and additional packages or files. The = collection folder is not needed any more. Most complexity got moved from = the bootloader installation time to the package build time. Other patches generate more =E2=80=9Cpre-installed=E2=80=9C files like = u-boot.bin, config.txt, device-tree files, etc., which now all fit much = bettor to the bootloader-profile idea, to just be copied to a target = directory. This patch is also inspired by older comments. Maybe take a look at the = comments below and = especially at I don=E2=80=99t think splitting this into smaller parts is possible = without a breakage. =20 >> build: kconfig: Add new module to modify defconfig files. > I like how this simplifies the various u-boot-* package definitions! Great! :-) >> gnu: bootloader: Add U-Boot packages for Raspberry Pi models. > This seems good to me. Great! :-) > It would be nice to first switch the existing u-boot-* packages to use > the new append-description feature one commit (I think this could even > be applied directly to master?), and then add the new functionality > (e.g. make-u-boot-bin-package, *u-boot-rpi-*, etc.) in another commit = or > a couple commits. At least, that would make it a little easier for me = to > read. Splitting is possible. >> gnu: linux: New function to modify the configuration of a Linux = kernel. > Looks ok to me, though to say I fully understand it would be a = stretch. :) The idea here is very similar to the use for u-boot: Take some Linux, = pretend some defconfig being used, do simple modifications to it, and = verify the result. The defconfig can be provided via #:defconfig (any file-like-object or a = file-name) or will otherwise be generated with =E2=80=9Cmake = savedefconfig=E2=80=9D. The function (make-defconfig) is a helper to use a defconfig file from = some url.=20 The function system->linux-srcarch is needed to locate existing = defconfig files in the Linux sources like = arch/arm/configs/bcm2835_defconfig, so that you can just pass the = filename =E2=80=9Cbcm2835_defconfig=E2=80=9D to #:defconfig. This = enables the use of defconfig files existing in the Linux sources. As = Kbuild expects defconfig files at a certain location, this function is = also needed to copy an own defconfig file there.=20 There was once a blog post about a custom Linux kernel stating = =E2=80=9CSuggestions and contributions toward working toward a = satisfactory custom initrd and kernel are welcome!=E2=80=9D, see = . This is my take including a verification for the = kernel. :-) >> gnu: raspberry-pi: Add defconfig objects to build customized Linux = kernels. > Seems good. I think I even understand this one! Great! :-) >> gnu: raspberry-pi: Add helpers for config.txt file generation. > Seems good. Great! :-) >> gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os = examples. > I'd split this into two commits, one adding > grub-efi-bootloader-chain-raspi-64, and one adding examples using it, > but that is really a judgement call. True. Combining the example with the new function was my choice. If you = don't mind, I'd keep it this way. Thanks a lot for the review, Vagrant! How to proceed from here?=20 I'd suggest to postpone 02-gnu-bootloader-rework-chaining.patch and = 09-gnu-raspberry-pi-add-a.patch, until all others got merged. To me it seems possible to commit these patches as they are in this = order: 01-gnu-linux-fix-extra-version.patch 03-build-kconfig-add-new-module.patch 05-gnu-linux-new-function-to.patch 06-gnu-raspberry-pi-add-defconfig.patch 07-gnu-raspberry-pi-add-helpers.patch 08-gnu-raspberry-pi-new-function.patch Then I could send a reduced patch-series with: splitted 04-gnu-bootloader-add-u-boot.patch 02-gnu-bootloader-rework-chaining.patch 09-gnu-raspberry-pi-add-a.patch What do you think? Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 30 08:39:27 2022 Received: (at 48314) by debbugs.gnu.org; 30 Oct 2022 12:39:27 +0000 Received: from localhost ([127.0.0.1]:37491 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1op7b4-0007h3-OU for submit@debbugs.gnu.org; Sun, 30 Oct 2022 08:39:27 -0400 Received: from mail-40133.protonmail.ch ([185.70.40.133]:20755) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1op7b2-0007gp-HF for 48314@debbugs.gnu.org; Sun, 30 Oct 2022 08:39:25 -0400 Date: Sun, 30 Oct 2022 12:39:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1667133558; x=1667392758; bh=zCGagDATimWv9tw2y65sNo31Ysg4RgK8ItM0fl4Q33Y=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=arLCXftimkYpIUzTjA/2uJn+pe5H+UpgZO9mH8Iae5D0VQEfKxkt2BsoxAIn5NKY7 ll+RbFF+nVd8hD57Ap4BMjuzHDdGDC0o3Uk+wvzH5iYmp5gJubTutm2ZgeNk+4j21B Zykp8uLQVmOY4vUvJT08kSUaMcdIlGsVRP9KQBPCEmHV/zjn36iBsyS1WPKIGuU6qo ZXZQnlceFm3bDMSquagPDiJOgAKl7RfcPWrqLFW4DJdKoiMm1hAB1I5iIjYGzHYr2I uhMhZ+DrzVa1MogI2ty5z1Wf2avqPiE8LU9FRo+KN7u4f4f51MkITttZ/vKGlYZg/Z J+ARG2wev0j/Q== To: Stefan From: phodina Subject: Re: [PATCH v5] Install guix system on Raspberry Pi Message-ID: In-Reply-To: <4B0EE79B-F91F-4963-8E69-7328583BF790@vodafonemail.de> References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> <87y1tq8evp.fsf@contorta> <4B0EE79B-F91F-4963-8E69-7328583BF790@vodafonemail.de> Feedback-ID: 14143818:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan, I've recently encoutered an issue on Raspberry Pi 4 when attaching USB Hard= drive. I formatted it with fat32 and ext4. Ran `guix system init config.scm /init`= . I selected `(initrd-modules (list "xhci_pci" "pcie_brcmstb"))` in the confi= g and rebooted. Unfortunately I get error about missing file: ``` error: file /gnu/store/xxx-raw-initrd/initrd.cpio.gz not found Press any key to continue ... ``` After that I get kernel panic. Shoudn't the initrd be placed in the EFI partition? That way you get the mo= dules in order to mount the rootfs. Should I copy it and modify the Grub entry? The goal here is to run completly from USB then there won't be any need for= SD card. ---- Petr From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 30 13:08:53 2022 Received: (at 48314) by debbugs.gnu.org; 30 Oct 2022 17:08:53 +0000 Received: from localhost ([127.0.0.1]:38938 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opBnp-0002Hm-4v for submit@debbugs.gnu.org; Sun, 30 Oct 2022 13:08:53 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:34002) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opBnZ-0002HH-2A for 48314@debbugs.gnu.org; Sun, 30 Oct 2022 13:08:52 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4N0jRL6tKLz1yH6; Sun, 30 Oct 2022 17:08:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1667149711; bh=7B+Gq7aMI5+7V9dbD2nHy4mqh4VxImc9ySxiENDXVIA=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=fjVnP+htuaikVXQ334tZkhwkkdmCFIuRTUuFOUx64y+FROZnPoqPj+wEOQyWR3Z44 ulfZmBr50SmaXVTXf2b/rRROyaVQYr3Mf8YnFEaNCB0aXjlBJ2H1D5vrnJgXiFLraA PuH9NjniaG6kBYj92WztLHXYJzKFtOhER0qlRF2o= Received: from smtpclient.apple (aftr-62-216-210-42.dynamic.mnet-online.de [62.216.210.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4N0jR36fFKz9s8h; Sun, 30 Oct 2022 17:08:12 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v5] Install guix system on Raspberry Pi Date: Sun, 30 Oct 2022 18:08:01 +0100 Message-Id: <4F035BC4-4316-44AE-BD67-DDA808C0F2DA@vodafonemail.de> References: In-Reply-To: To: phodina X-Mailer: iPhone Mail (20A392) X-purgate-type: clean X-purgate: clean X-purgate-size: 1819 X-purgate-ID: 155817::1667149708-D57F94DE-D71758B3/0/0 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Petr! > Shoudn't the initrd be placed in the EFI partition? No. As on a PC, the /boot/grub/grub.cfg lists the location of the initrd in t= he store, as it does for the kernel as well. Grub is able to read from most f= ile-systems and load the initrd. > Should I copy it and modify the Grub entry? No. > Unfortunately I get error about missing file: >=20 > ``` > error: file /gnu/store/xxx-raw-initrd/initrd.cpio.gz not found > Press any key to continue ... > ``` Is this error from GRUB? Is that file actually existing? > I formatted it with fat32 and ext4. Ran `guix system init config.scm /init= `. >=20 > I selected `(initrd-modules (list "xhci_pci" "pcie_brcmstb"))` in the conf= ig and rebooted. Was there maybe some error message about missing kernel-modules? Was the GRUB screen as usual with a background graphic? Because that is load= ed from the store as well. If not, then GRUB is not able to access the store. Check the content of /boo= t/efi/efi/boot/grub.cfg. It contains two lines: one to search for the right f= ile-system containing the /boot/grub/grub.cfg, and another to load it. The search line is usually referring to an fs-uuid determined during the boo= tloader installation with the help of the grub-probe command. However, there= is the risk grub-probe does not find an fs-uuid. In that case as a fallback= the search command will look for a /boot/grub/grub.cfg on any readable file= -system. Maybe it found one on a wrong file-system? > The goal here is to run completly from USB then there won't be any need fo= r SD card. =46rom what you wrote, U-Boot is able to boot from USB and load GRUB. I=E2=80= =99m just not absolutely sure, if GRUB is able to boot from USB on the RPi 4= , but I would think so. Bye Stefan= From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 30 13:32:19 2022 Received: (at 48314) by debbugs.gnu.org; 30 Oct 2022 17:32:19 +0000 Received: from localhost ([127.0.0.1]:38977 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCAV-0002tH-1z for submit@debbugs.gnu.org; Sun, 30 Oct 2022 13:32:19 -0400 Received: from mr5.vodafonemail.de ([145.253.228.165]:50284) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCAT-0002t4-AN for 48314@debbugs.gnu.org; Sun, 30 Oct 2022 13:32:17 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr5.vodafonemail.de (Postfix) with ESMTPS id 4N0jyg5s7Tz1y96; Sun, 30 Oct 2022 17:32:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1667151131; bh=zxTialXGVSgQHG9fRfgvqNsmH/XlGTddrB/7zMlpF5Q=; h=Content-Type:From:Subject:Date:Message-Id:References:In-Reply-To: To:X-Mailer:From; b=UgD6X9HLnnIUfJ6od4Mhs1D2q6vvdkn+obGfEtouLD4AO/gyfQF2qq8q2vT1wP8Aj c42OEIoJ63L+6u0BNVjkiPKfsTfnnUHrZuf+9fpSu2D/+0pnz095PpZARBYQHlW0rV Xw6alNgyr3DeJe0hN0o1aqdv27OMRtpFXv8LN1/s= Received: from smtpclient.apple (aftr-62-216-210-42.dynamic.mnet-online.de [62.216.210.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4N0jyQ2LQnz9tpF; Sun, 30 Oct 2022 17:31:55 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v5] Install guix system on Raspberry Pi Date: Sun, 30 Oct 2022 18:31:43 +0100 Message-Id: <1E2EC116-2128-4A15-88E7-431C85246E7D@vodafonemail.de> References: <4F035BC4-4316-44AE-BD67-DDA808C0F2DA@vodafonemail.de> In-Reply-To: <4F035BC4-4316-44AE-BD67-DDA808C0F2DA@vodafonemail.de> To: phodina X-Mailer: iPhone Mail (20A392) X-purgate-type: clean X-purgate: clean X-purgate-size: 2373 X-purgate-ID: 155817::1667151130-397F9404-C0138EE8/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Hi Petr! It must be that your initrd is missing in the store. The /boot/grub/grub.cfg is the only file referring to the initrd and GRUB is= the only program reading it. So an error message referring to the initrd mu= st be from GRUB and then GRUB was able to access your root-file-system, whic= h should contain /boot and /gnu/store. Bye Stefan > Am 30.10.2022 um 18:08 schrieb Stefan : >=20 > =EF=BB=BFHi Petr! >=20 >> Shoudn't the initrd be placed in the EFI partition? >=20 > No. As on a PC, the /boot/grub/grub.cfg lists the location of the initrd i= n the store, as it does for the kernel as well. Grub is able to read from mo= st file-systems and load the initrd. >=20 >> Should I copy it and modify the Grub entry? >=20 > No. >=20 >> Unfortunately I get error about missing file: >>=20 >> ``` >> error: file /gnu/store/xxx-raw-initrd/initrd.cpio.gz not found >> Press any key to continue ... >> ``` >=20 > Is this error from GRUB? Is that file actually existing? >=20 >> I formatted it with fat32 and ext4. Ran `guix system init config.scm /ini= t`. >>=20 >> I selected `(initrd-modules (list "xhci_pci" "pcie_brcmstb"))` in the con= fig and rebooted. >=20 > Was there maybe some error message about missing kernel-modules? >=20 > Was the GRUB screen as usual with a background graphic? Because that is lo= aded from the store as well. >=20 > If not, then GRUB is not able to access the store. Check the content of /b= oot/efi/efi/boot/grub.cfg. It contains two lines: one to search for the righ= t file-system containing the /boot/grub/grub.cfg, and another to load it. >=20 > The search line is usually referring to an fs-uuid determined during the b= ootloader installation with the help of the grub-probe command. However, the= re is the risk grub-probe does not find an fs-uuid. In that case as a fallba= ck the search command will look for a /boot/grub/grub.cfg on any readable fi= le-system. Maybe it found one on a wrong file-system? >=20 >> The goal here is to run completly from USB then there won't be any need f= or SD card. >=20 >=20 > =46rom what you wrote, U-Boot is able to boot from USB and load GRUB. I=E2= =80=99m just not absolutely sure, if GRUB is able to boot from USB on the RP= i 4, but I would think so. >=20 >=20 > Bye >=20 > Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 30 13:33:53 2022 Received: (at 48314) by debbugs.gnu.org; 30 Oct 2022 17:33:53 +0000 Received: from localhost ([127.0.0.1]:38981 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCC1-0002vZ-K7 for submit@debbugs.gnu.org; Sun, 30 Oct 2022 13:33:53 -0400 Received: from mr4.vodafonemail.de ([145.253.228.164]:50024) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCBz-0002vK-Gv for 48314@debbugs.gnu.org; Sun, 30 Oct 2022 13:33:51 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr4.vodafonemail.de (Postfix) with ESMTPS id 4N0k0T6HNWz1y1T; Sun, 30 Oct 2022 17:33:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1667151225; bh=oLSTmvUD9f0O6jDn1V91bLplvHArT1L5UTnQfAOUff4=; h=Content-Type:From:Subject:Message-Id:Date:To:X-Mailer:From; b=CBvCFJC/x6pvv9u85KYKQomQgW9tVIF5gXUdx3b7BLHm//9EpAWwk+NtfXsB6N71i jOk0tce6svlqnx5yw4FPN/GNuHuatpMPnyqObul5D0Lnh60qRhl0qTXBL78jAxgo7N bnIAEgquTbGBA2ddjLv2khGwuKmJ7b3wsxpqax3g= Received: from smtpclient.apple (aftr-62-216-210-42.dynamic.mnet-online.de [62.216.210.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4N0k0F0zXZzHrM2; Sun, 30 Oct 2022 17:33:27 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable From: Stefan Mime-Version: 1.0 (1.0) Subject: [PATCH v5] Install guix system on Raspberry Pi Message-Id: <6FEE8FEC-2B6A-4E2D-ABB5-E3E49B1DE776@vodafonemail.de> Date: Sun, 30 Oct 2022 18:32:59 +0100 To: phodina X-Mailer: iPhone Mail (20A392) X-purgate-type: clean X-purgate: clean X-purgate-size: 384 X-purgate-ID: 155817::1667151225-9AFF44F5-B44939C1/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) =EF=BB=BF =EF=BB=BFHi Petr! It must be that your initrd is missing in the store. The /boot/grub/grub.cfg is the only file referring to the initrd and GRUB is= the only program reading it. So an error message referring to the initrd mu= st be from GRUB and then GRUB was able to access your root-file-system, whic= h should contain /boot and /gnu/store. Bye Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 30 13:34:08 2022 Received: (at 48314) by debbugs.gnu.org; 30 Oct 2022 17:34:08 +0000 Received: from localhost ([127.0.0.1]:38985 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCCF-0002wO-UA for submit@debbugs.gnu.org; Sun, 30 Oct 2022 13:34:08 -0400 Received: from mr4.vodafonemail.de ([145.253.228.164]:50344) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1opCCE-0002vs-Vs for 48314@debbugs.gnu.org; Sun, 30 Oct 2022 13:34:07 -0400 Received: from smtp.vodafone.de (unknown [10.0.0.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by mr4.vodafonemail.de (Postfix) with ESMTPS id 4N0k0n47ymz1y0r; Sun, 30 Oct 2022 17:34:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vodafonemail.de; s=vfde-mb-mr2-21dec; t=1667151241; bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=; h=Content-Type:From:Subject:Message-Id:Date:To:X-Mailer:From; b=q87JkQeM8KA+OJoYBdNdtbMY5fp8H05mEbcrKrPIHd1hK7ZSbcdAQDybQN7uuJMAS 8YqDpcd1H4qNDzAVSonMzasbWmzCscdaGWU8f3v6rTatPy6PMW+VMqLOX8dEzXG9Ao OSiXyd7vCgviGySnZ60wSqciLLt/M72qklaNfl6U= Received: from smtpclient.apple (aftr-62-216-210-42.dynamic.mnet-online.de [62.216.210.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp.vodafone.de (Postfix) with ESMTPSA id 4N0k0Y2DGHzHnJ1; Sun, 30 Oct 2022 17:33:46 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit From: Stefan Mime-Version: 1.0 (1.0) Subject: [PATCH v5] Install guix system on Raspberry Pi Message-Id: <37B855D1-9039-44C0-9763-27839592F4AD@vodafonemail.de> Date: Sun, 30 Oct 2022 18:33:18 +0100 To: phodina X-Mailer: iPhone Mail (20A392) X-purgate-type: clean X-purgate: clean X-purgate-size: 2 X-purgate-ID: 155817::1667151241-9AFF44F5-CB1051FE/0/0 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , =?utf-8?Q?Ludovic_Court=C3=A8s?= , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 01 09:25:41 2022 Received: (at 48314) by debbugs.gnu.org; 1 Dec 2022 14:25:41 +0000 Received: from localhost ([127.0.0.1]:40004 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0kVQ-000891-5F for submit@debbugs.gnu.org; Thu, 01 Dec 2022 09:25:41 -0500 Received: from mail-qk1-f177.google.com ([209.85.222.177]:46598) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0kVN-00088u-8e for 48314@debbugs.gnu.org; Thu, 01 Dec 2022 09:25:38 -0500 Received: by mail-qk1-f177.google.com with SMTP id d8so1230763qki.13 for <48314@debbugs.gnu.org>; Thu, 01 Dec 2022 06:25:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WFP/HPGbpxnksa9Z1ET0mu1uAsqG1Ns5+lcNgF1RAyg=; b=ZfY4fJRKJW0y3dXcrmzuccaDf10FW5SkTrXfY9+Irnf0seHcjpe0Kpoh5vb5ySOEpj ksFmzWm0u0laYr9L75OC1tEeJQJ+xVgtKR26sqDc1Aq/N+/zDDxsPzyYN3O1Y/AlIlDP KNY1UyAYZM0bgTx2+YSHixMIdqjkcuMfCRXld9fMSvYzFQu3R4mwW7JJbB0XSAFid/BP Ph7hiXbKfHnhEWEoFeEMlrLseP62QojNuokJ1hDnfpe1/6mgQcR5QNVaWsGguKuwVkpD pzT37FZR71yiYisH7wh66+y6/flltkS5tFzIwj+4T/8B8ZbXM4tcK4Ybh1XXeE1AHIcF Smfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WFP/HPGbpxnksa9Z1ET0mu1uAsqG1Ns5+lcNgF1RAyg=; b=NpFVs+LrZJMeMhogDA+XEfjK6xniKAn4pKDi+JKB6sFAwaqGwex4rbwfIk9DTNUCr3 H7EQnwJC87vBuc1J1QoMU+u1b7uaoxNyKnxQ3ALl/9rTHOge2rdIzKGVIRyNhqniYbAz Ow1j3d7S6R09+qzMiuNW87Kfe+by5rcjD0YYaSHu2tecrSBPHUq9JAI8uzsotZzuM4wR HcD/1Y2bhekClmamo/ZpTY8TU+PJDsT7hfVgEWUJsAz3ZG5YWzLSN8qpbRkPKUBlKlah an92yCqkVNoB4DMd1u4UoZB7xn7X+4SfI7CAnipWzOhfQZigO4txv14oMbww1/gqlODy qm2g== X-Gm-Message-State: ANoB5pntZXyNrjRDusRx1/Mbg0FwTdX2CSXrd7KxCh0u70h7diZn6VId K4bJdoEBUp9VcMISptqn9w8= X-Google-Smtp-Source: AA0mqf7vYtf7Ib8lcIuxRkAESxEd+hziF5z00d61bu2YWQg2pjdJ6cgiI7iFLRhAyfsFxAf2BvAd9Q== X-Received: by 2002:a05:620a:3cc:b0:6fa:3204:330b with SMTP id r12-20020a05620a03cc00b006fa3204330bmr44401777qkm.114.1669904731491; Thu, 01 Dec 2022 06:25:31 -0800 (PST) Received: from hurd ([2607:fad8:4:3::1001]) by smtp.gmail.com with ESMTPSA id bl21-20020a05620a1a9500b006ce9e880c6fsm3483883qkb.111.2022.12.01.06.25.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 06:25:31 -0800 (PST) From: Maxim Cournoyer To: Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Date: Thu, 01 Dec 2022 09:25:29 -0500 Message-ID: <87tu2fi4km.fsf_-_@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Stefan! Some comments/question for this proposed change. Stefan writes: [...] > gnu: linux: Fix the extra-version parameter in make-linux-libre*. This first commit LGTM. I'll push it shortly. [...] > gnu: bootloader: Rework chaining, add grub-efi-netboot-removable-bootload= er. > > From: Stefan > > * doc/guix.texi (Bootloader Configuration): Describe the new > =E2=80=98grub-efi-netboot-removable-bootloader=E2=80=99. Mention used su= b-directories and > that the UEFI Boot Manager is not modified. Advice to disable write-acce= ss > over TFTP. > * gnu/bootloader.scm (efi-bootloader-profile): Allow a list of packages a= nd > collect everything directly in the profile, avoiding a separate collection > directory. Renamed the profile from "bootloader-profile" to > "efi-bootloader-profile". > [bootloader-collection]: Renamed to =E2=80=A6 > [efi-bootloader-profile-hook]: =E2=80=A6 this and removed unused modules = and the > creation of the now unneeded collection directory. > (efi-bootloader-chain): Added packages and disk-image-installer arguments. > Removed handling of the collection directory, now only calling the given > installer procedure. > * gnu/bootloader/grub.scm (make-grub-efi-netboot-installer): New helper. > (make-grub-configuration): New helper based on (grub-configuration-file). > Adding grub argument, fixed indentation, removend code to get grub. > (grub-configuration-file): Now using (make-grub-configuration). > (grub-efi-configuration-file): New function using (make-grub-configuratio= n). > Instead of getting the grub-efi package from the bootloader-configuration > this function refers to the grub-efi package directly. > (grub-cfg): New variable to replace "/boot/grub/grub.cfg". > (install-grub-efi-netboot): Removed, the functionality got moved. > (make-grub-efi-netboot-installer): New helper function to return a custom= ized > installer for a certain efi-sub-directory. The installer basically copies > a pre-installed efi-bootloader-profile, and adds needed symlinks for boot= ing > over network, or =E2=80=93 on an ESP =E2=80=93 an intermediate grub-cfg t= o load the final > grub-cfg file. > (grub-bootloader): Now using the grub-cfg variable. > (grub-efi-bootloader): Now using the grub-cfg variable. Removed inherita= nce, > giving complete set of fields. > (make-grub-efi-netboot-bootloader): New helper function. > (grub-efi-netboot-bootloader): Now using the helper. > (grub-efi-netboot-removable-bootloader): New bootloader using the helper. > It uses the efi-sub-directory "efi/boot" for removable media. > * gnu/packages/bootloaders.scm (make-grub-efi-netboot): New function to r= eturn > a grub-efi package pre-installed via grub-mknetdir, customized for an > efi-sub-directory and able to boot via network and local storage. > > The rework allows to use an (efi-bootloader-chain) like this, which is ab= le > to boot over network or local storage, depending on the symlink-support at > the bootloader-target: > > (operating-system > (bootloader > (bootloader-configuration > (bootloader > (efi-bootloader-chain > grub-efi-netboot-removable-bootloader > #:packages (list my-firmware-package > my-u-boot-package) > #:files (list (plain-file "config.txt" > "kernel=3Du-boot.bin")) > #:hooks my-special-bootloader-profile-manipulator)) > (target "/booti/efi") > =E2=80=A6)) > =E2=80=A6) > ) That's *a lot* of text :-). For the future, some of the things there are improvements rather than necessary changes it seems, so could have been split into something different, smaller & easier to review. I've standardized to use the imperative tense in the change log message (Added -> Add for example). [...] > +(define (grub-configuration-file config . args) > + (let* ((bootloader (bootloader-configuration-bootloader config)) > + (grub (bootloader-package bootloader))) > + (apply make-grub-configuration grub config args))) > + > +(define (grub-efi-configuration-file . args) > + (apply make-grub-configuration grub-efi args)) > + > +(define grub-cfg "/boot/grub/grub.cfg") In GRUB-EFI-CONFIGURATION-FILE above, why do we hard-code grub-efi instead of retrieving it from config the same as for GRUB-CONFIGURATION-FILE? It seems that'd be preferable, as otherwise someone cannot override GRUB-EFI with their own variant, no? > >=20=20 > ;;; > @@ -674,42 +681,31 @@ fi~%")))) > ((target-arm?) "--target=3Darm-efi")) > "--efi-directory" target-esp))))) >=20=20 > -(define (install-grub-efi-netboot subdir) > - "Define a grub-efi-netboot bootloader installer for installation in SU= BDIR, > -which is usually efi/Guix or efi/boot." > - (let* ((system (string-split (nix-system->gnu-triplet > - (or (%current-target-system) > - (%current-system))) > - #\-)) > - (arch (first system)) > - (boot-efi-link (match system > - ;; These are the supportend systems and the na= mes > - ;; defined by the UEFI standard for removable = media. > - (("i686" _ ...) "/bootia32.efi") > - (("x86_64" _ ...) "/bootx64.efi") > - (("arm" _ ...) "/bootarm.efi") > - (("aarch64" _ ...) "/bootaa64.efi") > - (("riscv" _ ...) "/bootriscv32.efi") > - (("riscv64" _ ...) "/bootriscv64.efi") > - ;; Other systems are not supported, although d= efined. > - ;; (("riscv128" _ ...) "/bootriscv128.efi") > - ;; (("ia64" _ ...) "/bootia64.efi") > - ((_ ...) #f))) > - (core-efi (string-append > - ;; This is the arch dependent file name of GRUB, e.g. > - ;; i368-efi/core.efi or arm64-efi/core.efi. > - (match arch > - ("i686" "i386") > - ("aarch64" "arm64") > - ("riscv" "riscv32") > - (_ arch)) > - "-efi/core.efi"))) > - (with-imported-modules > - '((guix build union)) > - #~(lambda (bootloader target mount-point) > - "Install the BOOTLOADER, which must be the package grub, as e.g. > -bootx64.efi or bootaa64.efi into SUBDIR, which is usually efi/Guix or ef= i/boot, > -below the directory TARGET for the system whose root is mounted at MOUNT= -POINT. > +(define* (make-grub-efi-netboot-installer grub-efi grub-cfg subdir) > + "Make a bootloader-installer for a grub-efi-netboot bootloader, which = expects > +its files in SUBDIR and its configuration file in GRUB-CFG. > + > +As a grub-efi-netboot package is already preinstalled by 'grub-mknetdir'= , the > +installer basically copies all files from the bootloader-package (or pro= file) > +into the bootloader-target directory. > + > +Additionally for network booting over TFTP, two relative symlinks to the= store > +and to the GRUB-CFG file are necessary. Due to this a TFTP root directo= ry must > +not be located on a FAT file-system. > + > +If the bootloader-target does not support symlinks, then it is assumed t= o be a > +kind of EFI System Partition (ESP). In this case an intermediate config= uration > +file is created with the help of GRUB-EFI to load the GRUB-CFG. > + > +The installer is usable for any efi-bootloader-chain, which prepares the > +bootloader-profile in a way ready for copying. > + > +The installer does not manipulate the system's 'UEFI Boot Manager'." > + (with-imported-modules '((guix build union)) > + #~(lambda (bootloader target mount-point) > + "Copy the BOOTLOADER, which must be a preinstalled grub-efi-netb= oot > +package with a SUBDIR like efi/boot or efi/Guix, below the directory > +TARGET for the system whose root is mounted at MOUNT-POINT. >=20=20 > MOUNT-POINT is the last argument in 'guix system init /etc/config.scm mn= t/point' > or '/' for other 'guix system' commands. > @@ -719,17 +715,18 @@ bootloader-configuration in: I've unified the above docstring as one; otherwise it was mangled with Scheme and it wouldn't have appeared as a whole in the online documentation system of Guile. I've improved the writing a bit (I think!), use gexps in some places, and other smallish changes that amount to: --8<---------------cut here---------------start------------->8--- 4 files changed, 80 insertions(+), 76 deletions(-) doc/guix.texi | 17 +++++++++-------- gnu/bootloader.scm | 11 +++++------ gnu/bootloader/grub.scm | 77 ++++++++++++++++++++++++++++++++++++++++-= ------------------------------------ gnu/packages/bootloaders.scm | 51 ++++++++++++++++++++++++++---------------= ---------- modified doc/guix.texi @@ -38083,17 +38083,18 @@ NFS servers, you also need a properly configured = DHCP server to make the booting over netboot possible. For all this we can currently only recommend you t= o look for instructions about @acronym{PXE, Preboot eXecution Environment}. =20 -If a local EFI System Partition (ESP) or a similar partition with a FAT fi= le -system is mounted in @code{targets}, then symlinks cannot be created. In = this -case everything will be prepared for booting from local storage, simialar = as if -using @code{grub-efi-bootloader}, with the difference that all GRUB binari= es -reside on @code{targets}, too, like needed for booting over network. +If a local EFI System Partition (ESP) or a similar partition with a FAT +file system is mounted in @code{targets}, then symlinks cannot be +created. In this case everything will be prepared for booting from +local storage, matching the behavior of @code{grub-efi-bootloader}, with +the difference that all GRUB binaries are copied to @code{targets}, +necessary for booting over the network. =20 @vindex grub-efi-netboot-removable-bootloader @code{grub-efi-netboot-removable-bootloader} is identical to -@code{grub-efi-netboot-bootloader} with the exception that the sub-directo= ry -@file{efi/boot} will be used instead of @file{efi/Guix} to comply to the U= EFI -specification for removable media. +@code{grub-efi-netboot-bootloader} with the exception that the +sub-directory @file{efi/boot} will be used instead of @file{efi/Guix} to +comply with the UEFI specification for removable media. =20 @quotation Note This @emph{will} overwrite the GRUB file from any other operating systems = that modified gnu/bootloader.scm @@ -361,8 +361,7 @@ (define name-ends-with-/? (cut string-suffix? "/" <>)) (define (name-is-store-entry? name) "Return #t if NAME is a direct store entry and nothing insid= e." (not (string-index (strip-store-file-name name) #\/))) - (let* ((output #$output) - (files '#$files) + (let* ((files '#$files) (directories (filter name-ends-with-/? files)) (names-from-directories (append-map (lambda (directory) @@ -370,11 +369,11 @@ (define (name-is-store-entry? name) directories)) (names (append names-from-directories (remove name-ends-with-/? files)))) - (mkdir-p output) + (mkdir-p #$output) (if (every file-exists? names) (begin (for-each (lambda (name) - (symlink-to name output + (symlink-to name #$output (if (name-is-store-entry? name) strip-store-file-name basename))) @@ -410,7 +409,7 @@ (define* (efi-bootloader-chain final-bootloader The package of the FINAL-BOOTLOADER and all PACKAGES and FILES will be pla= ced in an efi-bootloader-profile, which will be passed to the INSTALLER. =20 -FILES may contain file like objects produced by procedures like plain-file, +FILES may contain file-like objects produced by procedures like plain-file, local-file, etc., or package contents produced with file-append. =20 If a directory name in FILES ends with '/', then the directory content ins= tead @@ -424,7 +423,7 @@ (define* (efi-bootloader-chain final-bootloader FINAL-BOOTLOADER will be called. =20 If the DISK-IMAGE-INSTALLER is used, then this gexp procedure will be call= ed -to install the efi-bootloader-profile into a disk-image. Otherwise the +to install the efi-bootloader-profile into a disk image. Otherwise the disk-image-installer of the FINAL-BOOTLOADER will be called." (bootloader (inherit final-bootloader) modified gnu/bootloader/grub.scm @@ -685,7 +685,7 @@ (define* (make-grub-efi-netboot-installer grub-efi grub= -cfg subdir) "Make a bootloader-installer for a grub-efi-netboot bootloader, which ex= pects its files in SUBDIR and its configuration file in GRUB-CFG. =20 -As a grub-efi-netboot package is already preinstalled by 'grub-mknetdir', = the +As a grub-efi-netboot package is already pre-installed by 'grub-mknetdir',= the installer basically copies all files from the bootloader-package (or profi= le) into the bootloader-target directory. =20 @@ -700,12 +700,12 @@ (define* (make-grub-efi-netboot-installer grub-efi gr= ub-cfg subdir) The installer is usable for any efi-bootloader-chain, which prepares the bootloader-profile in a way ready for copying. =20 -The installer does not manipulate the system's 'UEFI Boot Manager'." - (with-imported-modules '((guix build union)) - #~(lambda (bootloader target mount-point) - "Copy the BOOTLOADER, which must be a preinstalled grub-efi-netboot -package with a SUBDIR like efi/boot or efi/Guix, below the directory -TARGET for the system whose root is mounted at MOUNT-POINT. +The installer does not manipulate the system's 'UEFI Boot Manager'. + +The returned installer accepts the BOOTLOADER, TARGET and MOUNT-POINT +arguments. Its job is to copy the BOOTLOADER, which must be a pre-install= ed +grub-efi-netboot package with a SUBDIR like efi/boot or efi/Guix, below the +directory TARGET for the system whose root is mounted at MOUNT-POINT. =20 MOUNT-POINT is the last argument in 'guix system init /etc/config.scm mnt/= point' or '/' for other 'guix system' commands. @@ -720,13 +720,14 @@ (define* (make-grub-efi-netboot-installer grub-efi gr= ub-cfg subdir) =E2=80=A6) =20 TARGET is required to be an absolute directory name, usually mounted via N= FS, -and finally needs to be provided by a TFTP server as the TFTP root directo= ry. +and finally needs to be provided by a TFTP server as +the TFTP root directory. =20 Usually the installer will be used to prepare network booting over TFTP. = Then GRUB will load tftp://server/SUBDIR/grub.cfg and this file will instruct i= t to load more files from the store like tftp://server/gnu/store/=E2=80=A6-linu= x=E2=80=A6/Image. =20 -To make this possible two symlinks will be created. The first symlink poi= nts +To make this possible two symlinks are created. The first symlink points relatively form MOUNT-POINT/TARGET/SUBDIR/grub.cfg to MOUNT-POINT/boot/grub/grub.cfg, and the second symlink points relatively f= rom MOUNT-POINT/TARGET/%store-prefix to MOUNT-POINT/%store-prefix. @@ -740,16 +741,18 @@ (define* (make-grub-efi-netboot-installer grub-efi gr= ub-cfg subdir) accesses outside its TFTP root directory. This all may need to be conside= red for security aspects. It is advised to disable any TFTP write access! =20 -The installer can also be used to prepare booting from local storages, if = the +The installer can also be used to prepare booting from local storage, if t= he underlying file-system, like FAT on an EFI System Partition (ESP), does not support symlinks. In this case the MOUNT-POINT/TARGET/SUBDIR/grub.cfg wil= l be created with the help of GRUB-EFI to load the /boot/grub/grub.cfg file. A symlink to the store is not needed in this case." + (with-imported-modules '((guix build union)) + #~(lambda (bootloader target mount-point) ;; In context of a disk image creation TARGET will be #f and an ;; installer is expected to do necessary installations on MOUNT-PO= INT, - ;; which will become the root file system. - ;; If TARGET is #f, this installer has nothing to do, as it only c= ares - ;; about the EFI System Partition (ESP). + ;; which will become the root file system. If TARGET is #f, this + ;; installer has nothing to do, as it only cares about the EFI Sys= tem + ;; Partition (ESP). (when target (use-modules ((guix build union) #:select (symlink-relative)) (ice-9 popen) @@ -779,35 +782,35 @@ (define* (make-grub-efi-netboot-installer grub-efi gr= ub-cfg subdir) (mkdir-p (dirname grub-cfg-link)) (false-if-exception (delete-file grub-cfg-link)) (if (unspecified? - (false-if-exception (symlink-relative grub-cfg grub-cfg-li= nk))) - ;; Symlinks are supported. - (begin - ;; Prepare the symlink to the store. - (mkdir-p (dirname store-link)) - (false-if-exception (delete-file store-link)) - (symlink-relative store store-link)) - ;; Creating symlinks does not seem to be supported. - ;; Probably an ESP is used. - ;; Instead we can script to search and load the actual grub.= cfg. - (let* ((probe #$(file-append grub-efi "/sbin/grub-probe")) - (port - (open-pipe* OPEN_READ probe "--target=3Dfs_uuid" gr= ub-cfg)) - (search-root - (match (read-line port) - ((? eof-object?) + (false-if-exception (symlink-relative grub-cfg grub-cfg-l= ink))) + ;; Symlinks are supported. + (begin + ;; Prepare the symlink to the store. + (mkdir-p (dirname store-link)) + (false-if-exception (delete-file store-link)) + (symlink-relative store store-link)) + ;; Creating symlinks does not seem to be supported. Proba= bly + ;; an ESP is used. Add a script to search and load the ac= tual + ;; grub.cfg. + (let* ((probe #$(file-append grub-efi "/sbin/grub-probe")) + (port (open-pipe* OPEN_READ probe "--target=3Dfs_uu= id" + grub-cfg)) + (search-root + (match (read-line port) + ((? eof-object?) ;; There is no UUID available. As a fallback se= arch ;; everywhere for the grub.cfg. (string-append "search --file --set " #$grub-cf= g)) - (fs-uuid + (fs-uuid ;; The UUID to load the grub.cfg from is known. (string-append "search --fs-uuid --set " fs-uui= d)))) - (load-grub-cfg (string-append "configfile " #$grub-cf= g))) - (close-pipe port) - (with-output-to-file grub-cfg-link - (lambda () - (display (string-join (list search-root - load-grub-cfg) - "\n"))))))))))) + (load-grub-cfg (string-append "configfile " #$grub-= cfg))) + (close-pipe port) + (with-output-to-file grub-cfg-link + (lambda () + (display (string-join (list search-root + load-grub-cfg) + "\n"))))))))))) =20 =20 modified gnu/packages/bootloaders.scm @@ -427,8 +427,8 @@ (define-public (make-grub-efi-netboot name subdir) (build-system trivial-build-system) (arguments (let* ((system (string-split (nix-system->gnu-triplet - (or (%current-target-system) - (%current-system))) + (or (%current-target-system) + (%current-system))) #\-)) (arch (first system)) (boot-efi @@ -454,29 +454,30 @@ (define-public (make-grub-efi-netboot name subdir) ("riscv" "riscv32") (_ arch)) "-efi/core.efi"))) - `(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils)) - (let* ((bootloader (assoc-ref %build-inputs "grub-efi")) - (net-dir (assoc-ref %outputs "out")) - (sub-dir (string-append net-dir "/" ,subdir "/")) - (boot-efi (string-append sub-dir ,boot-efi)) - (core-efi (string-append sub-dir ,core-efi))) - ;; Install GRUB, which refers to the grub.cfg, with support f= or - ;; encrypted partitions, - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - (invoke/quiet (string-append bootloader "/bin/grub-mknetdir") - (string-append "--net-directory=3D" net-dir) - (string-append "--subdir=3D" ,subdir) - ;; These modules must be preloaded to allow boo= ting - ;; from an ESP or a similar partition with a FAT - ;; file system. - (string-append "--modules=3Dpart_msdos part_gpt= fat")) - ;; Move GRUB's core.efi to the removable media name. - (false-if-exception (delete-file boot-efi)) - (rename-file core-efi boot-efi)))))) - (inputs `(("grub-efi" ,grub-efi))) + (list + #:modules ((guix build utils)) + #:builder + #~(begin + (use-modules (guix build utils)) + (let* ((bootloader #$(this-package-input "grub-efi")) + (net-dir #$output) + (sub-dir (string-append net-dir "/" #$subdir "/")) + (boot-efi (string-append sub-dir #$boot-efi)) + (core-efi (string-append sub-dir #$core-efi))) + ;; Install GRUB, which refers to the grub.cfg, with support = for + ;; encrypted partitions, + (setenv "GRUB_ENABLE_CRYPTODISK" "y") + (invoke/quiet (string-append bootloader "/bin/grub-mknetdir") + (string-append "--net-directory=3D" net-dir) + (string-append "--subdir=3D" #$subdir) + ;; These modules must be pre-loaded to allow b= ooting + ;; from an ESP or a similar partition with a F= AT + ;; file system. + (string-append "--modules=3Dpart_msdos part_gp= t fat")) + ;; Move GRUB's core.efi to the removable media name. + (false-if-exception (delete-file boot-efi)) + (rename-file core-efi boot-efi)))))) + (inputs (list grub-efi)) (synopsis (package-synopsis grub-efi)) (description (package-description grub-efi)) (home-page (package-home-page grub-efi)) --8<---------------cut here---------------end--------------->8--- It's a pity we do not have tests for that, but I'll try to test it manually and if it works I can push it shortly. I'd still like feedback on my question above. --=20 Thanks, Maxim From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 01 10:32:49 2022 Received: (at 48314) by debbugs.gnu.org; 1 Dec 2022 15:32:49 +0000 Received: from localhost ([127.0.0.1]:40320 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0lYP-0000Ir-2L for submit@debbugs.gnu.org; Thu, 01 Dec 2022 10:32:49 -0500 Received: from mail-qk1-f175.google.com ([209.85.222.175]:33703) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0lYK-0000Il-5Y for 48314@debbugs.gnu.org; Thu, 01 Dec 2022 10:32:48 -0500 Received: by mail-qk1-f175.google.com with SMTP id x21so1458181qkj.0 for <48314@debbugs.gnu.org>; Thu, 01 Dec 2022 07:32:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=v50dQYD2bTE7w0O3S2Wn/rC1LE6HXFXQ8G1/qjp3TJQ=; b=VfgJ4oDGLYUPSL4p23EyF8Sce7/CXdmAY49o7Kd5dOKxcYZJ+6byd4O/7LG2oS9E1y 780mltr/C6nCQe8zRBbvjxylT206TACnKxnE6BhcViMbr6zDTcSvjFvZAa1daLa5Lm5l AZm5zrSakmsW2oYQPnGZpu1RJCGGYZxCzc0OY/Q6ebNMfgnu9ou9wBzrp4l35An0MLBp cUOwMNrkqMJtYUaGIn1qFVAoylnAhdxwBVcVlQJJMcekV0H+05Y2GrlzhmoWQ8CM0qtO QibKhGg3GzSrMB7GvqhxPKi/eHYUWEEOm+ZZni7lvX2Jld2JvCAtxlDhhS6r2TR+Dfnq 7QTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=v50dQYD2bTE7w0O3S2Wn/rC1LE6HXFXQ8G1/qjp3TJQ=; b=7GSUu/ZCCxf7y9tGC85Se36MdRl5EoUzyzhPGrGJha4xdexhIFsLo6DQr2XB2+sSiq VnesRLm3kRkSbvNoNWNqT9WG8Aszx6GEIXEnofDm+eGkoSUAgXLI5IkuwKFpMui06KNB V+8sJ/olB1lhy4Lo+N1FfN0KRn2fuBJX/ytMqJFpOGZhgPEGHbF19oYJv2ZOuTYBP8tH Kp8M2QEadUZYme1VdXTGroX+L+FUpMmx2rVc1QHcxHmBTI9RnsAWAiIqs4se235157sN jCKD4bAOuJ2hi+rsjaRTJPmUFEfBE6Ld98YjfQgi9U5jsc8zKRmGTcvpCphtTFwbSqGP xOgQ== X-Gm-Message-State: ANoB5pkuzs8NZadVvL/w067IpbSVuX78pGRL9Ggu8TwvQSVCbwGZxrHr sImNqDxgZvXA326cTGQRpTw= X-Google-Smtp-Source: AA0mqf5d3jH+eJQVzY2OWjy6j5oAy1ULu164QFX9cay3jeOAoyjUGNBK2VMhS9gSIS+UGaJ9ErjOtw== X-Received: by 2002:a05:620a:2157:b0:6fa:19e6:3411 with SMTP id m23-20020a05620a215700b006fa19e63411mr44939034qkm.549.1669908758580; Thu, 01 Dec 2022 07:32:38 -0800 (PST) Received: from hurd ([2607:fad8:4:3::1001]) by smtp.gmail.com with ESMTPSA id de4-20020a05620a370400b006fae7e6204bsm3670391qkb.108.2022.12.01.07.32.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 07:32:38 -0800 (PST) From: Maxim Cournoyer To: Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> Date: Thu, 01 Dec 2022 10:32:37 -0500 In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") Message-ID: <87pmd3i1gq.fsf_-_@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi again, Stefan writes: [...] > +(define (grub-configuration-file config . args) > + (let* ((bootloader (bootloader-configuration-bootloader config)) > + (grub (bootloader-package bootloader))) > + (apply make-grub-configuration grub config args))) > + > +(define (grub-efi-configuration-file . args) > + (apply make-grub-configuration grub-efi args)) Another question regarding that same piece of code: why isn't grub-efi-configuration-file used in the definition of the grub-efi-bootloader definition? It's still using grub-configuration-file. -- Thanks, Maxim From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 01 11:22:56 2022 Received: (at 48314) by debbugs.gnu.org; 1 Dec 2022 16:22:56 +0000 Received: from localhost ([127.0.0.1]:40634 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0mKp-00038P-T3 for submit@debbugs.gnu.org; Thu, 01 Dec 2022 11:22:56 -0500 Received: from mail-qt1-f178.google.com ([209.85.160.178]:37661) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0mKn-00038J-7c for 48314@debbugs.gnu.org; Thu, 01 Dec 2022 11:22:50 -0500 Received: by mail-qt1-f178.google.com with SMTP id l15so1354308qtv.4 for <48314@debbugs.gnu.org>; Thu, 01 Dec 2022 08:22:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=Meb1brOkqH1oNakSC7Tp5yDy2MM5N78GhTVXFVCJBJU=; b=ljWHLkiQx1VgGhl3VofawiBicuRRE5QmEHMOAhFlpYMFMKBi+Cu5kcARfzHD6ASONi Aun9vXiouFUW9m/6d4irnpejql831NUKLMr3U8MuHyQrZjVw5j53tW8QI2Ljq1Z9U7v+ N1CAmqa2RSX8IjTuL39B/ms49v52GbJiOc4WzuUDgO0IoRR2sbuojQH4SDTAvzQK2pco 1sx3HoA4r57SGnVhSTubR1ZrR0+cM6844V031Xkb5LWybe6xuLNjfanbTM3tnTqlcC1h gMv1ntVYYXDzv5agxlg44JlcpqjF140cquMh9MH5EqIMGc5S9nZl4hOtow2s8xlSgQVy l8ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Meb1brOkqH1oNakSC7Tp5yDy2MM5N78GhTVXFVCJBJU=; b=qdDrTSzpO3BRigT/zCYmzy3FFZINwQct4OXL7d1nJ0kdRMto9h1rtO3/PLYFXwDCe/ bx/Ej5Vz3X50RnnyxvSej1JQXssgNc8oWotGpc7lh1kpdUlpdyy69yT0g0HU3ePjFdVR iXuBPfnbIfLw9/YaCM0a3rDm8Ked9sPXzIp64bM5LYwtauCV0pPDcPmL/z5PUliuLJyo UhMP4jB9gt8lBLnpH5lOmjlpOwtyeTuaa8GcW7q/r2DN8JRhjhkH2Gz39V3kHo2Ly2Oo m/UlUgC6GJhZt/1CP/vKZyRwdiD0+o6Mdxu14iHWySPY9UPXb3GRiuFS7CXQWlsPHrDc 5TTQ== X-Gm-Message-State: ANoB5pmSaN7rKE0q9a3cRfAdLfMDu87kPjh5QJAaM+ZVMSUGZvWJf8Uz G+1x6xMwLwoPO2OCfjaUWCM= X-Google-Smtp-Source: AA0mqf5OjoaeluJ9Kr9RArBn7/kmjHmol5ELAdUo4Sxk96mDT0tvYyf4RQzlFBd8Sp7Rxly+15m4PA== X-Received: by 2002:ac8:5355:0:b0:3a5:4074:4753 with SMTP id d21-20020ac85355000000b003a540744753mr43786787qto.605.1669911763191; Thu, 01 Dec 2022 08:22:43 -0800 (PST) Received: from hurd ([2607:fad8:4:3::1001]) by smtp.gmail.com with ESMTPSA id x9-20020ac81209000000b003a6934255dasm1102043qti.46.2022.12.01.08.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:22:42 -0800 (PST) From: Maxim Cournoyer To: Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> Date: Thu, 01 Dec 2022 11:22:41 -0500 In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") Message-ID: <87ilivhz5a.fsf_-_@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi, Stefan writes: [...] > new file mode 100644 > index 0000000000..0cfaffe056 > --- /dev/null > +++ b/guix/build/kconfig.scm [...] > +(define-module (guix build kconfig) > + #:use-module (ice-9 rdelim) > + #:use-module (ice-9 regex) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (modify-defconfig > + verify-config)) > + > +;; Commentary: > +;; > +;; Builder-side code to modify configurations for the Kconfig build syst= em as > +;; used by Linux and U-Boot. > +;; > +;; Code: > + > +(define (config-string->pair config-string) > + "Parse a configuration string like \"CONFIG_EXAMPLE=3Dm\" into a key-v= alue pair. > +An error is thrown for invalid configurations. > + > +\"CONFIG_A=3Dy\" -> '(\"CONFIG_A\" . \"y\") > +\"CONFIG_B=3D\\\"\\\"\" -> '(\"CONFIG_B\" . \"\\\"\\\"\") > +\"CONFIG_C=3D\" -> '(\"CONFIG_C\" . \"\") > +\"# CONFIG_E is not set\" -> '(\"CONFIG_E\" . #f) > +\"CONFIG_D\" -> '(\"CONFIG_D\" . #f) > +\"# Any comment\" -> '(#f . \"# Any comment\") > +\"\" -> '(#f . \"\") > +\"# CONFIG_E=3Dy\" -> (error \"Invalid configuration\") > +\"CONFIG_E is not set\" -> (error \"Invalid configuration\") > +\"Anything else\" -> (error \"Invalid configuration\")" > + (define config-regexp > + (make-regexp > + ;; (match:substring (string-match "=3D(.*)" "=3D") 1) returns "", b= ut the > + ;; pattern "=3D(.+)?" makes it return #f instead. From a "CONFIG_A= =3D" we like > + ;; to get "", which later emits "CONFIG_A=3D" again. > + "^ *(#[\\t ]*)?(CONFIG_[a-zA-Z0-9_]+)([\\t ]*=3D[\\t ]*(.*)|([\\t ]= +is[\\t ]+not[\\t ]+set))?$")) > + > + (define config-comment-regexp > + (make-regexp "^([\\t ]*(#.*)?)$")) > + > + (let ((match (regexp-exec config-regexp (string-trim-right config-stri= ng)))) > + (if match > + (let* ((comment (match:substring match 1)) > + (key (match:substring match 2)) > + (unset (match:substring match 5)) > + (value (and (not comment) > + (not unset) > + (match:substring match 4)))) > + (if (eq? (not comment) (not unset)) > + ;; The key is uncommented and set or commented and unset. > + (cons key value) > + ;; The key is set or unset ambigiously. > + (error (format #f "Invalid configuration, did you mean \"~= a\"?" > + (pair->config-string (cons key #f))) > + config-string))) > + ;; This is not a valid or ambigious config-string, but mayby a c= omment. > + (if (regexp-exec config-comment-regexp config-string) > + ;; We keep valid comments. > + (cons #f config-string) > + (error "Invalid configuration" config-string))))) > + > +(define (pair->config-string pair) > + "Convert a PAIR back to a config-string." > + (let* ((key (first pair)) > + (value (cdr pair))) > + (if (string? key) > + (if (string? value) > + (string-append key "=3D" value) > + (string-append "# " key " is not set")) > + value))) > + > +(define (defconfig->alist defconfig) > + "Convert the content of a DEFCONFIG (or .config) file into an alist." > + (with-input-from-file defconfig > + (lambda () > + (let loop ((alist '()) > + (line (read-line))) > + (if (eof-object? line) > + ;; Building the alist is done, now check for duplicates. > + (let loop ((keys (map first (filter first alist))) ^ What is this filter used for here? EDIT: saw later, it's used to filter out comments. [...] > +(define (verify-config config defconfig) > + "Verify that the CONFIG file contains all configurations from the DEFC= ONFIG > +file and return #t in this case. Otherwise throw an error with the misma= tching > +keys and their values." > + (let* ((config-pairs (defconfig->alist config)) > + (defconfig-pairs (defconfig->alist defconfig)) > + (mismatching-pairs > + (remove (lambda (pair) > + ;; Remove all configurations, whose values are #f an= d whose > + ;; keys are not in config-pairs, as not in config-pa= irs > + ;; means unset, =E2=80=A6 > + (and (not (cdr pair)) > + (not (assoc-ref config-pairs (first pair))))) > + ;; =E2=80=A6 from the defconfig-pairs different to con= fig-pairs. So, it finds mismatched configurations that exist in both CONFIG and DEFCONFIG, but it doesn't error when there are configs that exist in DEFCONFIG but missing from CONFIG, right? Should it? > + (lset-difference equal? > + ;; Remove comments by filtering with = first. > + (filter first defconfig-pairs) > + config-pairs)))) > + (if (null? mismatching-pairs) > + #t > + (error (format #f > + "Mismatching configurations in ~a and ~a" > + config > + defconfig) > + (map (lambda (mismatching-pair) > + (let* ((key (first mismatching-pair)) > + (defconfig-value (cdr mismatching-pair)) > + (config-value (assoc-ref config-pairs key))) > + (cons key (list (list config-value defconfig-val= ue))))) > + mismatching-pairs))))) > > I've made the following mostly cosmetic changes: --8<---------------cut here---------------start------------->8--- 2 files changed, 43 insertions(+), 45 deletions(-) gnu/packages/bootloaders.scm | 18 +++++++++--------- guix/build/kconfig.scm | 70 ++++++++++++++++++++++++++++++++++-------= ----------------------------- modified gnu/packages/bootloaders.scm @@ -792,9 +792,9 @@ (define*-public (make-u-boot-package board triplet #:ke= y defconfig configs) "_" "-"))) (native-inputs `(,@(if (not (same-arch?)) - `(("cross-gcc" ,(cross-gcc triplet)) - ("cross-binutils" ,(cross-binutils triplet))) - `()) + `(("cross-gcc" ,(cross-gcc triplet)) + ("cross-binutils" ,(cross-binutils triplet))) + `()) ,@(package-native-inputs u-boot))) (arguments `(#:modules ((ice-9 ftw) @@ -808,8 +808,8 @@ (define*-public (make-u-boot-package board triplet #:ke= y defconfig configs) #:make-flags (list "HOSTCC=3Dgcc" ,@(if (not (same-arch?)) - `((string-append "CROSS_COMPILE=3D" ,triplet "-")) - '())) + `((string-append "CROSS_COMPILE=3D" ,triplet "-")) + '())) #:phases (modify-phases %standard-phases (replace 'configure @@ -828,7 +828,7 @@ (define*-public (make-u-boot-package board triplet #:ke= y defconfig configs) (apply invoke "make" `(,@make-flags ,config-name)) (verify-config ".config" config-file)) (begin - (display "Invalid board name. Valid board names are= :" + (display "invalid board name; valid board names are= :" (current-error-port)) (let ((suffix-len (string-length "_defconfig")) (entries (scandir "configs"))) @@ -839,7 +839,7 @@ (define*-public (make-u-boot-package board triplet #:ke= y defconfig configs) (string-drop-right file-name suffix-l= en)))) (sort entries string-ci<))) - (error "Invalid boardname ~s." ,board)))))) + (error "invalid boardname ~s" ,board)))))) (add-after 'configure 'disable-tools-libcrypto ;; Disable libcrypto due to GPL and OpenSSL license ;; incompatibilities @@ -881,8 +881,8 @@ (define-public u-boot-malta (define-public u-boot-am335x-boneblack (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf" - ;; Patch out other device trees to build image small enough= to - ;; fit within typical partitioning schemes where the first + ;; Patch out other device trees to build an image small eno= ugh + ;; to fit within typical partitioning schemes where the fir= st ;; partition begins at sector 2048. #:configs '("CONFIG_OF_LIST=3D\"am335x-evm am335x-boneblack= \"")))) (package modified guix/build/kconfig.scm @@ -50,7 +50,8 @@ (define config-regexp ;; (match:substring (string-match "=3D(.*)" "=3D") 1) returns "", but= the ;; pattern "=3D(.+)?" makes it return #f instead. From a "CONFIG_A= =3D" we like ;; to get "", which later emits "CONFIG_A=3D" again. - "^ *(#[\\t ]*)?(CONFIG_[a-zA-Z0-9_]+)([\\t ]*=3D[\\t ]*(.*)|([\\t ]+i= s[\\t ]+not[\\t ]+set))?$")) + (string-append "^ *(#[\\t ]*)?(CONFIG_[a-zA-Z0-9_]+)([\\t ]*=3D" + "[\\t ]*(.*)|([\\t ]+is[\\t ]+not[\\t ]+set))?$"))) (define config-comment-regexp (make-regexp "^([\\t ]*(#.*)?)$")) @@ -67,13 +68,13 @@ (define config-comment-regexp ;; The key is uncommented and set or commented and unset. (cons key value) ;; The key is set or unset ambigiously. - (error (format #f "Invalid configuration, did you mean \"~a\= "?" + (error (format #f "invalid configuration, did you mean \"~a\= "?" (pair->config-string (cons key #f))) config-string))) - ;; This is not a valid or ambigious config-string, but mayby a com= ment. + ;; This is not a valid or ambigious config-string, but maybe a + ;; comment. (if (regexp-exec config-comment-regexp config-string) - ;; We keep valid comments. - (cons #f config-string) + (cons #f config-string) ;keep valid comments (error "Invalid configuration" config-string))))) (define (pair->config-string pair) @@ -94,6 +95,7 @@ (define (defconfig->alist defconfig) (line (read-line))) (if (eof-object? line) ;; Building the alist is done, now check for duplicates. + ;; Note: the filter invocation is used to remove comments. (let loop ((keys (map first (filter first alist))) (duplicates '())) (if (null? keys) @@ -102,11 +104,11 @@ (define (defconfig->alist defconfig) (if (null? duplicates) alist (error - (format #f "Duplicate configurations in ~a" defconf= ig) + (format #f "duplicate configurations in ~a" defconf= ig) duplicates)) ;; Continue the search for duplicates. (loop (cdr keys) - (if (member (first keys) (cdr keys) equal?) + (if (member (first keys) (cdr keys)) (cons (first keys) duplicates) duplicates)))) ;; Build the alist. @@ -127,13 +129,13 @@ (define (modify-defconfig defconfig configs) \"CONFIG_D=3Dm\" \"CONFIG_E=3D\" \"# CONFIG_G is not set\" - ;; For convinience this abbrevation can be used for not set configuratio= ns. + ;; For convenience this abbrevation can be used for not set configuratio= ns. \"CONFIG_F\") -Instead of a list, CONFGIS can be a string with one configuration per line= ." - (let* (;; Split the configs into a list of single configuations. - ;; To minimize mistakes, we support a string and a list of string= s, - ;; each with newlines to separate configurations. +Instead of a list, CONFIGS can be a string with one configuration per line= ." + (let* (;; Split the configs into a list of single configurations. Both a + ;; string and or a list of strings is supported, each with newlin= es + ;; to separate configurations. (config-pairs (map config-string->pair (append-map (cut string-split <> #\newline) (if (string? configs) @@ -141,45 +143,41 @@ (define (modify-defconfig defconfig configs) configs)))) ;; Generate a blocklist from all valid keys in config-pairs. (blocklist (delete #f (map first config-pairs))) - ;; Generate an alist from the defconifg without the keys in block= list. + ;; Generate an alist from the defconfig without the keys in block= list. (filtered-defconfig-pairs (remove (lambda (pair) (member (first pair) blocklis= t)) (defconfig->alist defconfig)))) (with-output-to-file defconfig (lambda () - (for-each - (lambda (pair) - (display (pair->config-string pair)) - (newline)) - (append filtered-defconfig-pairs config-pairs)))))) + (for-each (lambda (pair) + (display (pair->config-string pair)) + (newline)) + (append filtered-defconfig-pairs config-pairs)))))) (define (verify-config config defconfig) "Verify that the CONFIG file contains all configurations from the DEFCON= FIG -file and return #t in this case. Otherwise throw an error with the mismatc= hing -keys and their values." +file. When the verification fails, raise an error with the mismatching ke= ys +and their values." (let* ((config-pairs (defconfig->alist config)) (defconfig-pairs (defconfig->alist defconfig)) (mismatching-pairs (remove (lambda (pair) - ;; Remove all configurations, whose values are #f and = whose - ;; keys are not in config-pairs, as not in config-pairs - ;; means unset, =E2=80=A6 + ;; Remove all configurations, whose values are #f and + ;; whose keys are not in config-pairs, as not in + ;; config-pairs means unset, ... (and (not (cdr pair)) (not (assoc-ref config-pairs (first pair))))) - ;; =E2=80=A6 from the defconfig-pairs different to confi= g-pairs. + ;; ... from the defconfig-pairs different to config-pair= s. (lset-difference equal? ;; Remove comments by filtering with fi= rst. (filter first defconfig-pairs) config-pairs)))) - (if (null? mismatching-pairs) - #t - (error (format #f - "Mismatching configurations in ~a and ~a" - config - defconfig) - (map (lambda (mismatching-pair) - (let* ((key (first mismatching-pair)) - (defconfig-value (cdr mismatching-pair)) - (config-value (assoc-ref config-pairs key))) - (cons key (list (list config-value defconfig-value= ))))) - mismatching-pairs))))) + (unless (null? mismatching-pairs) + (error (format #f "Mismatching configurations in ~a and ~a" + config defconfig) + (map (lambda (mismatching-pair) + (let* ((key (first mismatching-pair)) + (defconfig-value (cdr mismatching-pair)) + (config-value (assoc-ref config-pairs key))) + (cons key (list (list config-value defconfig-value))= ))) + mismatching-pairs))))) --8<---------------cut here---------------end--------------->8--- And streamlined the commit messages as: --8<---------------cut here---------------start------------->8--- build: kconfig: Add new module to modify defconfig files. * guix/build/kconfig.scm: New file. * Makefile.am: Register it. * gnu/packages/bootloaders.scm (make-u-boot-package) (make-u-boot-sunxi64-package): Add DEFCONFIGS and CONFIGS arguments. (u-boot-am335x-boneblack, u-boot-pinebook) (u-boot-novena,u-boot-rockpro64-rk3399): Simplify packages by using the new keyword arguments. --8<---------------cut here---------------end--------------->8--- Explanations don't go in the GNU ChangeLog, they go ideally in comments in the code or *before* the GNU ChangeLog, if some rationale helps understanding the change, so you can keep things dry there. I'll push this change shortly. --=20 Thanks, Maxim From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 01 13:01:48 2022 Received: (at 48314) by debbugs.gnu.org; 1 Dec 2022 18:01:48 +0000 Received: from localhost ([127.0.0.1]:41107 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0nsZ-0000An-GL for submit@debbugs.gnu.org; Thu, 01 Dec 2022 13:01:47 -0500 Received: from mail-qv1-f51.google.com ([209.85.219.51]:41567) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0nsW-0000Ae-RR for 48314@debbugs.gnu.org; Thu, 01 Dec 2022 13:01:45 -0500 Received: by mail-qv1-f51.google.com with SMTP id d13so1847417qvj.8 for <48314@debbugs.gnu.org>; Thu, 01 Dec 2022 10:01:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=wCf3/Lkjz2SrBOnIe03NATRnl2NkNtvOep2TnJ1WuaM=; b=U4f9aOoqTzCVJEF/41nv7/u4IMdJAQ8D0NPHAlA3I9p//35LkY9UqDCM3dtBGbuMAc fh/obwdgRLGnNve2fK5DWcKePE9Hg0ipwO3sUwu46TeTqxWB6XEb2AdHqUA/CEECQN8m PGqfBSC5TWacHY/XBnNid+YtvszcR0nHfOyncA76oiWIwq2vGZOE22TVARTXxmDd8mDG kq4KArVDbpefq0jLTUqHE2q6p0pAjA/WeKlkUaygbryc2+iD0gEhpXP2dLyaYAz6v/sM Od+3KDuB1F2Y2tdk3hQUSXNGcEjH7CjJZgAE1oEFGEri7s1Nlf92SOw2HpsxKloUUevx hWPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wCf3/Lkjz2SrBOnIe03NATRnl2NkNtvOep2TnJ1WuaM=; b=fhQ+IQbbpx5kqxmjfk13BUXXdvhbG1tbqzE4a36p6UQsRCG+517hw52jokUS+KbdlS Jzh52V6i0XM4hOZXyu/HbCHDtC9mYFN3AfIjGSB3uzpoFpZUWmZ/go7qHcOt794XCMH7 p8T+iK4qpCfztNT0lOlr6J2WmHrjpYE6NZiBBH3dMyJ5wu5WSAjMfGiTwfnlSgTGIgfX 279GYrb0bTG5bZ8Mfp5vXuhZeAw2yN72CJqvwZAFzRN3C93dGQoAb0c64tVzImm40Zv9 q2hTkPJiy4LXXeAHqCHv7FiFvwalf3cIUBPjVYgAZheedwhVTxmJrI1tl3pn8GZZMmxc CGeg== X-Gm-Message-State: ANoB5pn4gyj9d4t0x+KKPk0b/CQkDgmzh25VoO59pQVmh03JTUqGQKS1 R0R8d6DeCWEhkiM0MGdBPds= X-Google-Smtp-Source: AA0mqf40pRJIj0aUJ9l9Hz6dwVyJmPHIrsL55B40Pd91u/Xux86Ezie6DZXQYB4aypqPC0Oy+7nhzA== X-Received: by 2002:a05:6214:3513:b0:4bb:ddaf:b9e5 with SMTP id nk19-20020a056214351300b004bbddafb9e5mr43366907qvb.52.1669917698801; Thu, 01 Dec 2022 10:01:38 -0800 (PST) Received: from hurd ([2607:fad8:4:3::1001]) by smtp.gmail.com with ESMTPSA id bs42-20020a05620a472a00b006b61b2cb1d2sm3918893qkb.46.2022.12.01.10.01.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 10:01:37 -0800 (PST) From: Maxim Cournoyer To: Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> Date: Thu, 01 Dec 2022 13:01:36 -0500 In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") Message-ID: <87edtjhukf.fsf_-_@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Vagrant Cascadian , Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi, > gnu: linux: New function to modify the configuration of a Linux kernel. > > From: Stefan > > * gnu/packages/linux.scm (system->linux-srcarch): New function to return = the > relevent folder name below arch/ in the Linux source code. > (modify-linux): New function to make a customized Linux package inherited > from another Linux package, which will be build with an own defconfig or > configuration changes. > (make-defconfig): Function to get a defconfig from an uri. I've renamed it to customize-linux, and streamlined the commit message like so: --8<---------------cut here---------------start------------->8--- gnu: linux: Add a 'customize-linux' procedure. * gnu/packages/linux.scm (linux-srcarch): New procedure. (customize-linux): Likewise. (make-defconfig): Procedure to retrieve a defconfig from an URI. Signed-off-by: Maxim Cournoyer Modified-by: Maxim Cournoyer --8<---------------cut here---------------end--------------->8--- Otherwise, I've made the following changes (exporting procedures explicitly from the modules): --8<---------------cut here---------------start------------->8--- 1 file changed, 25 insertions(+), 25 deletions(-) gnu/packages/linux.scm | 50 +++++++++++++++++++++++++----------------------= --- modified gnu/packages/linux.scm @@ -190,19 +190,19 @@ (define-module (gnu packages linux) #:use-module (srfi srfi-2) #:use-module (srfi srfi-26) #:use-module (ice-9 match) - #:use-module (ice-9 optargs) - #:use-module (ice-9 regex)) + #:use-module (ice-9 regex) + #:export (customize-linux)) =20 -(define-public (linux-srcarch) +(define (linux-srcarch) "Return the linux SRCARCH name, which is set in the toplevel Makefile of -Linux and denotes the architecture specific directory name below arch/ in = its +Linux and denotes the architecture-specific directory name below arch/ in = its source code. Some few architectures share a common folder. It resembles = the definition of SRCARCH based on ARCH in the Makefile and may be used to pla= ce a defconfig file in the proper path." (let ((linux-arch (platform-linux-architecture - (lookup-platform-by-target-or-system - (or (%current-target-system) - (%current-system)))))) + (lookup-platform-by-target-or-system + (or (%current-target-system) + (%current-system)))))) (match linux-arch ("i386" "x86") ("x86_64" "x86") @@ -213,7 +213,7 @@ (define-public (linux-srcarch) =20 (define-public (system->defconfig system) "Some systems (notably powerpc-linux) require a special target for kernel -defconfig. Return the appropriate make target if applicable, otherwise re= turn +defconfig. Return the appropriate Make target if applicable, otherwise re= turn \"defconfig\"." (cond ((string-prefix? "powerpc-" system) "pmac32_defconfig") ((string-prefix? "powerpc64-" system) "ppc64_defconfig") @@ -1271,19 +1271,19 @@ (define-public linux-libre-with-bpf ;;; Linux kernel customization functions. ;;; =20 -(define*-public (modify-linux #:key name - (linux linux-libre) - source - defconfig - (configs "") - extra-version) - "Make a Linux package NAME as a modification of another LINUX package. +(define* (customize-linux #:key name + (linux linux-libre) + source + defconfig + (configs "") + extra-version) + "Make a customized Linux package NAME derived from the LINUX package. =20 If NAME is not given, then it defaults to the same name as the LINUX packa= ge. =20 Unless SOURCE is given the source of LINUX is used. =20 -A DEFCONFIG file to be used can be given as an origin, as a file like obje= ct +A DEFCONFIG file to be used can be given as an origin, as a file-like obje= ct (file-append, local-file etc.), or as a string with the name of a defconfi= g file available in the Linux sources. If DEFCONFIG is not given, then a defconf= ig file will be saved from the LINUX package configuration. @@ -1295,11 +1295,11 @@ (define*-public (modify-linux #:key name defconfig syntax has to be used, but there is a special extension to ease = the removal of configurations. Comment lines are supported as well. =20 -Here is an explaining usage example: +Here is an example: =20 '(;; This string defines the version tail in 'uname -r'. \"CONFIG_LOCALVERSION=3D\\\"-handcrafted\\\" - ;; This '# CONFIG_=E2=80=A6 is not set' syntax has to match exactly! + ;; This '# CONFIG_... is not set' syntax has to match exactly! \"# CONFIG_BOOT_CONFIG is not set\" \"CONFIG_NFS_SWAP=3Dy\" ;; This is a multiline configuration: @@ -1339,13 +1339,13 @@ (define*-public (modify-linux #:key name #$(cond ((not defconfig) #~(begin - ;; Call the original 'configure phase. - (apply (assoc-ref #$phases 'configure) arguments) - ;; Save a defconfig file. - (invoke "make" "savedefconfig") - ;; Move the saved defconfig to the proper locatio= n. - (rename-file "defconfig" - guix_defconfig))) + ;; Call the original 'configure phase. + (apply (assoc-ref #$phases 'configure) arguments) + ;; Save a defconfig file. + (invoke "make" "savedefconfig") + ;; Move the saved defconfig to the proper locati= on. + (rename-file "defconfig" + guix_defconfig))) ((string? defconfig) ;; Use another existing defconfig from the Linux sou= rces. #~(rename-file (string-append configs #$defconfig) --8<---------------cut here---------------end--------------->8--- I'll push it shortly. --=20 Thanks, Maxim From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 01 14:33:37 2022 Received: (at 48314-done) by debbugs.gnu.org; 1 Dec 2022 19:33:37 +0000 Received: from localhost ([127.0.0.1]:41517 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0pJR-00010I-Ay for submit@debbugs.gnu.org; Thu, 01 Dec 2022 14:33:37 -0500 Received: from mail-qt1-f177.google.com ([209.85.160.177]:37851) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0pJL-00010C-Qj for 48314-done@debbugs.gnu.org; Thu, 01 Dec 2022 14:33:35 -0500 Received: by mail-qt1-f177.google.com with SMTP id l15so2213009qtv.4 for <48314-done@debbugs.gnu.org>; Thu, 01 Dec 2022 11:33:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=6dKIW6UqIOwBJEhAwpg3R3NumwBbzxl7FqLSb/KSo18=; b=Uv7VyBP+W4tCtP1/XyX1b1qGaCFtsftZrvIff7IX/C1CSak6Vdx47nbNvOTBrw5IeZ n9VUibFtf100eIhXzK8FjyEKcjOW+n9RESmPqzlj7+Cw0069TcoDRBN293x+pPRlJIAV vDyP1uHJtXla45YS1EyQXhT30mAOGpOnPQjehm9RWGCDIjZUMmdTfm8kLThqUKCJd9az Qq+08paBpwtN4Lmn56sc/soeb4KS8+TztK5HVdWSGvqmh2EsutuyozflTlvr2WOUPYbC /2lMEkP3cXDWfA+jwfYmevLD7cMwAC0C6TIw8EOinOZT6/ifHx1sWjc9XHOJ3b3CMGB3 TVsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6dKIW6UqIOwBJEhAwpg3R3NumwBbzxl7FqLSb/KSo18=; b=EOw/1ce6Ja302yjYqm4QxY5zdvuu1j4pdWFrsh8lEjvtQ2wAo3ta3G0MMN5/gNWUJ+ f+1AYkNgcDk+b1kUxu+ondvw3aIjGkRWF1OXvzM9ZKpTGC87L0/9P08gr1jDiMofs5dL sLyMqNIGFRU1tdK/UbuSWh0EczGejYNRSiWCdqJN0/oRC9k0bCOXC5o8wgnfqUSUVLFh x/1PGJgIzjcnfo3cz2j5+yesOeG39AaGs87uXFdgH0811reYevZbBBAMqONo0RZg46nS ljtuA8sdMXvzYiIcJ8G0wMe8mt4T9s+qZVy+eiVO2MLUqp0B85CCzBN1QZTp2t8co6pi Gopw== X-Gm-Message-State: ANoB5plGMFoFgU3gMSOgropJUkSjS5/7S/dhSM+6rkrtnn+ZDJ/x/aPz StEpOJ7rwv23eB6c+PcqOhg= X-Google-Smtp-Source: AA0mqf7Ar56KTILjCSYW5C0KxV2GbwwHNNxyrluA+bcxLEi2nEdmMfLXRykdGPoP+FBQdsYzynLj8w== X-Received: by 2002:ac8:44cb:0:b0:3a5:259f:bacb with SMTP id b11-20020ac844cb000000b003a5259fbacbmr62563734qto.569.1669923206204; Thu, 01 Dec 2022 11:33:26 -0800 (PST) Received: from hurd ([2607:fad8:4:3::1001]) by smtp.gmail.com with ESMTPSA id v23-20020ac873d7000000b003a606428a59sm2971581qtp.91.2022.12.01.11.33.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 11:33:25 -0800 (PST) From: Maxim Cournoyer To: Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> Date: Thu, 01 Dec 2022 14:33:24 -0500 In-Reply-To: <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> (Stefan's message of "Thu, 22 Sep 2022 18:18:59 +0200") Message-ID: <87wn7ahqbf.fsf_-_@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314-done Cc: Vagrant Cascadian , 48314-done@debbugs.gnu.org, Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , Danny Milosavljevic X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi, Stefan writes: > gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. > > From: Stefan > > * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New > bootloader variable, capable to boot a Raspberry Pi over network or from a > local storage. > * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. > * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system Neat! I've registered the new files in Makefile.am (and adjusted the commit message), fixed their indentation and pushed! This whole series is now in Guix. I'll try to test it with actual devices in the coming days and see if anything needs adjusting. Thanks to you and to everyone else who contributed to the review. Maxim From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 03 00:53:46 2022 Received: (at 48314) by debbugs.gnu.org; 3 Dec 2022 05:53:46 +0000 Received: from localhost ([127.0.0.1]:51164 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1LT7-0004op-Lr for submit@debbugs.gnu.org; Sat, 03 Dec 2022 00:53:45 -0500 Received: from cascadia.aikidev.net ([173.255.214.101]:37404) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1LT5-0004oj-78 for 48314@debbugs.gnu.org; Sat, 03 Dec 2022 00:53:44 -0500 Received: from localhost (unknown [IPv6:2600:3c01:e000:21:7:77:0:20]) (Authenticated sender: vagrant@cascadia.debian.net) by cascadia.aikidev.net (Postfix) with ESMTPSA id 1A2F51AACB; Fri, 2 Dec 2022 21:53:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=debian.org; s=1.vagrant.user; t=1670046817; bh=20JD/2Xl+poZ6o4f7p6mf3LYbW7Clzd4sDfPILH/z8g=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=WvTHDy3idwbnXdewLw92pPzr2cU6x+p5wyfuFolSzkqcTgIvibWfzAv1G40C6+t1J Xrh0Nz+uDyRJEfcbXnrX0ixtvOgGDmXv/d6JpGziRUi9innMEiFRVF7/NXANqy7nuy Moh4YZnDbgdIBRBmBOGsElI1gQ2O91AfmruE9FhOqjdmPFAgVcyK1ciet/M7hbJR0R D4L6+9wfmciu2IClhn2X4jGm/IFqtA1pebApNT1zzCQU9ACd4vOC+614V+tOzLVf+W cPz9177Mzcj8DHDIRnJq85nMOGXHWuesF7A+KHkbrWC2lOamj0CU9Ik+pLsg8KwzPx kMNxHS4GDZfEA== From: Vagrant Cascadian To: Maxim Cournoyer , Stefan Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi In-Reply-To: <87wn7ahqbf.fsf_-_@gmail.com> References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> <87wn7ahqbf.fsf_-_@gmail.com> Date: Fri, 02 Dec 2022 21:53:32 -0800 Message-ID: <87lenpm3s3.fsf@contorta> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain On 2022-12-01, Maxim Cournoyer wrote: > Stefan writes: > >> gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. >> >> From: Stefan >> >> * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New >> bootloader variable, capable to boot a Raspberry Pi over network or from a >> local storage. >> * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. >> * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system This does cause a test suite failure with tests/guix-system.sh: + guix system -n disk-image gnu/system/examples/raspberry-pi-64-nfs-root.tmpl accepted connection from pid 31196, user vagrant guix system: warning: 'disk-image' is deprecated: use 'image' instead guix system: error: canonicalize-path: No such file or directory: "/home/vagrant/.ssh/id_ecdsa.pub" + rm -f t-guix-system-30549 t-guix-system-error-30549 /tmp/t-guix-system-30549/config.scm /tmp/t-guix-system-30549/my-torrc + rmdir /tmp/t-guix-system-30549 FAIL tests/guix-system.sh (exit status: 1) gnu/system/examples/raspberry-pi-64-nfs-root.tmpl (define %my-public-key (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) Seems like using local-file for should be removed or at least commented out in the example. Or include the full text of an example key in the .tmpl file instead of using local-file... live well, vagrant --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCY4rkXAAKCRDcUY/If5cW quFUAPwK6t+uHzbXGuXvQHKGRioSm3IJhcBY6YXuX1tdtMfuMAEA8PaNVa33hbC/ g3bMFJHcXC413hkWp67768iNNOF/jAM= =Whac -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 04 01:28:12 2022 Received: (at 48314) by debbugs.gnu.org; 4 Dec 2022 06:28:12 +0000 Received: from localhost ([127.0.0.1]:55609 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1iTz-0007Ec-Rh for submit@debbugs.gnu.org; Sun, 04 Dec 2022 01:28:12 -0500 Received: from mail-qt1-f182.google.com ([209.85.160.182]:46615) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p1iTx-0007EV-W5 for 48314@debbugs.gnu.org; Sun, 04 Dec 2022 01:28:10 -0500 Received: by mail-qt1-f182.google.com with SMTP id x28so8377879qtv.13 for <48314@debbugs.gnu.org>; Sat, 03 Dec 2022 22:28:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=famXJETGoCFPE+iz6WO349pKmY7ZvRK7c6ACYevWVQk=; b=AwXdT7NIgFq8w71I5ts0uDVmVEvnbnlZilceg2Nu6+XhwRrMHVHRobfnN77Un6CsTw mJJj8WKQh9DeoiJH90k8Yc/IfeCmYzIjngD48fpqRuLYSprHZd1J7PLYg8J6sWbgf1nJ DTJarYgxrkqCeiCIH8Ty6Fy68y2j83pOXEe1qDAFQoP02nY6uV26vdgUh6b/HZWwoCUh yHKCeKKz60AHzLLb9BeHXRB+7f7u+1ZWXZdNJm2d+g1ghI6kO7uvxh9JF3JwFIioeiX2 hvZu0rtvDQiVE5WFf+vMLZXn5BSsD/1Ui2Ih1bZTNjl5TDLHkkOROXjI0SFUfeiqg6+7 mupw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=famXJETGoCFPE+iz6WO349pKmY7ZvRK7c6ACYevWVQk=; b=Ul4u3foQMgWGxCBk7H1mvNQt72K9j6wBOSx4UD8txXGNFfPU2ZDzSbBV9YE1R5eDEU zY1PvTUSzEtiXcjA0/9boecPxJLv+838gT1bA2D/RPaQd0YEawnd4c9pHzFg7i+1Bjb7 6hBAYgbWTiWsm51Z7KTTxfTT9Y2dm1bIusvpem4DNhgxP+YVF17IWUC56Hlw7T7zV8vG eV36KQireEi18bHRb2EAa1cbzmXHJc4NMKDKaPDEwmpPliPf63VDkfNlXYY9PxL30HFM NfM8H+UJVDuiHde/23z9lVwakLLMXMD4DNdwxJgN0tPorsg5MINtlnqyjCIeyI962eod nm1A== X-Gm-Message-State: ANoB5pnuJ6sWw67dOae74FVZ9YPpIcfEiOeLfTqkLCeOXininReCm7wi NApR4v35sL72wfcQYS8fildiQ8VntgY= X-Google-Smtp-Source: AA0mqf7bUaRjnKYtu09pZ+U0dBlzPkDL/FWlFBNyNuCxO/9LUaBR0y+UTjgrjOQZwjyp7vw/Aiy/3g== X-Received: by 2002:ac8:7599:0:b0:3a5:460f:79c8 with SMTP id s25-20020ac87599000000b003a5460f79c8mr53945400qtq.501.1670135284348; Sat, 03 Dec 2022 22:28:04 -0800 (PST) Received: from hurd (dsl-157-235.b2b2c.ca. [66.158.157.235]) by smtp.gmail.com with ESMTPSA id o14-20020ac8698e000000b003a580cd979asm7589483qtq.58.2022.12.03.22.28.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Dec 2022 22:28:03 -0800 (PST) From: Maxim Cournoyer To: Vagrant Cascadian Subject: Re: bug#48314: [PATCH] Install guix system on Raspberry Pi References: <2IN6BsQe0_wSC9iwf7LHT5LUk7wXLVXytkDtcg7RIYByyYFTsuC9BZPR_wdv4eDMncsZfy17h7z9jIRRSC6kfV2odXkt0hp4Lilq5sGYdVo=@protonmail.com> <204332DD-AA02-4A31-9B48-FB3FAB9BD8F3@vodafonemail.de> <87wn7ahqbf.fsf_-_@gmail.com> <87lenpm3s3.fsf@contorta> Date: Sun, 04 Dec 2022 01:28:03 -0500 In-Reply-To: <87lenpm3s3.fsf@contorta> (Vagrant Cascadian's message of "Fri, 02 Dec 2022 21:53:32 -0800") Message-ID: <87359v7kek.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 48314 Cc: Stefan , Danny Milosavljevic , Ludovic =?utf-8?Q?Court=C3=A8s?= , phodina , 48314@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Vagrant Cascadian writes: > On 2022-12-01, Maxim Cournoyer wrote: >> Stefan writes: >> >>> gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. >>> >>> From: Stefan >>> >>> * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New >>> bootloader variable, capable to boot a Raspberry Pi over network or from a >>> local storage. >>> * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. >>> * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system > > This does cause a test suite failure with tests/guix-system.sh: > > + guix system -n disk-image gnu/system/examples/raspberry-pi-64-nfs-root.tmpl > accepted connection from pid 31196, user vagrant > guix system: warning: 'disk-image' is deprecated: use 'image' instead > guix system: error: canonicalize-path: No such file or directory: "/home/vagrant/.ssh/id_ecdsa.pub" > + rm -f t-guix-system-30549 t-guix-system-error-30549 /tmp/t-guix-system-30549/config.scm /tmp/t-guix-system-30549/my-torrc > + rmdir /tmp/t-guix-system-30549 > FAIL tests/guix-system.sh (exit status: 1) > > gnu/system/examples/raspberry-pi-64-nfs-root.tmpl > > (define %my-public-key > (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) > Thanks for the heads-up! I've removed key usage from the templates in 08dc9f2ca2e96476aa51c906c8ba01ca5d033568. I also had to mark the templates to be built for aarch64-linux in 93309efdce72ac5028944d5c1f7b081a7f62b84a. -- Thanks, Maxim From unknown Sat Jun 14 19:00:42 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 01 Jan 2023 12:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator