From mboxrd@z Thu Jan 1 00:00:00 1970 From: cmmarusich@gmail.com Subject: [PATCH] system: Avoid using device paths in device field. Date: Thu, 3 Nov 2016 06:10:28 -0700 Message-ID: <20161103131028.7984-2-cmmarusich@gmail.com> References: <20161103001936.GA24164@jasmine> <20161103131028.7984-1-cmmarusich@gmail.com> Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:43118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c2Hn7-0002yU-Fi for guix-devel@gnu.org; Thu, 03 Nov 2016 09:10:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c2Hn6-0001ep-Fu for guix-devel@gnu.org; Thu, 03 Nov 2016 09:10:49 -0400 In-Reply-To: <20161103131028.7984-1-cmmarusich@gmail.com> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org From: Chris Marusich This fixes a regression introduced by 1ef8b72a7f87afe7cffe52393d99e1b14e4770e1, in which we would incorrectly use a device path in a label-based grub root search command, e.g. 'search --label --set /dev/sda4'. * gnu/system.scm (grub-device): New procedure. (operating-system-grub.cfg, operating-system-parameters-file): Use it. (read-boot-parameters): Handle device paths correctly. --- gnu/system.scm | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/gnu/system.scm b/gnu/system.scm index 259875d..bbda2c2 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -60,6 +60,7 @@ #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) + #:use-module (rnrs bytevectors) #:export (operating-system operating-system? @@ -738,7 +739,7 @@ listed in OS. The C library expects to find it under (label label) ;; The device where the kernel and initrd live. - (device (file-system-device store-fs)) + (device (grub-device store-fs)) (device-mount-point (file-system-mount-point store-fs)) @@ -753,6 +754,14 @@ listed in OS. The C library expects to find it under (grub-configuration-file (operating-system-bootloader os) entries #:old-entries old-entries))) +(define (grub-device fs) + "Given FS, a object, return a value suitable for use as the +device in a ." + (case (file-system-title fs) + ((uuid) (file-system-device fs)) + ((label) (file-system-device fs)) + (else #f))) + (define (operating-system-parameters-file os) "Return a file that describes the boot parameters of OS. The primary use of this file is the reconstruction of GRUB menu entries for old configurations." @@ -771,10 +780,7 @@ this file is the reconstruction of GRUB menu entries for old configurations." #$(operating-system-kernel-arguments os)) (initrd #$initrd) (store - (device #$(case (file-system-title store) - ((uuid) (file-system-device store)) - ((label) (file-system-device store)) - (else #f))) + (device #$(grub-device store)) (mount-point #$(file-system-mount-point store)))) #:set-load-path? #f))) @@ -836,7 +842,10 @@ this file is the reconstruction of GRUB menu entries for old configurations." (('store ('device device) _ ...) device) (_ ;the old format - root))) + ;; Root might be a device path like "/dev/sda1". + (if (string-prefix? "/" root) + #f + root)))) (store-mount-point (match (assq 'store rest) -- 2.10.2