diff options
author | Leo Famulari <leo@famulari.name> | 2016-10-30 19:19:21 -0400 |
---|---|---|
committer | Leo Famulari <leo@famulari.name> | 2016-10-30 19:19:21 -0400 |
commit | 205f0107bb894745ee740227c090ff90ee599915 (patch) | |
tree | 08b2ddba47ce404468d6aba31b768e013dfb1fa3 | |
parent | a8dd960ac0c68957dac281812f0d16f1295a6eaa (diff) | |
parent | b89cbf5832fd920ef85002041bc690204b0174a3 (diff) | |
download | guix-205f0107bb894745ee740227c090ff90ee599915.tar guix-205f0107bb894745ee740227c090ff90ee599915.tar.gz |
Merge branch 'master' into core-updates
-rw-r--r-- | doc/guix.texi | 27 | ||||
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/emacs.scm | 4 | ||||
-rw-r--r-- | gnu/packages/image.scm | 19 | ||||
-rw-r--r-- | gnu/packages/libusb.scm | 11 | ||||
-rw-r--r-- | gnu/packages/networking.scm | 34 | ||||
-rw-r--r-- | gnu/packages/package-management.scm | 22 | ||||
-rw-r--r-- | gnu/packages/patches/libtiff-CVE-2016-5652.patch | 47 | ||||
-rw-r--r-- | gnu/packages/python.scm | 29 | ||||
-rw-r--r-- | gnu/packages/samba.scm | 8 | ||||
-rw-r--r-- | gnu/packages/version-control.scm | 6 | ||||
-rw-r--r-- | gnu/system.scm | 59 | ||||
-rw-r--r-- | gnu/system/grub.scm | 85 | ||||
-rw-r--r-- | guix/profiles.scm | 6 | ||||
-rw-r--r-- | guix/scripts/system.scm | 3 |
15 files changed, 286 insertions, 75 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 9df49185ad..70dbc0ac92 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -11920,6 +11920,17 @@ The Linux kernel image to boot, for example: (file-append linux-libre "/bzImage") @end example +It is also possible to specify a device explicitly in the file path +using GRUB's device naming convention (@pxref{Naming convention,,, grub, +GNU GRUB manual}), for example: + +@example +"(hd0,msdos1)/boot/vmlinuz" +@end example + +If the device is specified explicitly as above, then the @code{device} +field is ignored entirely. + @item @code{linux-arguments} (default: @code{()}) The list of extra Linux kernel command-line arguments---e.g., @code{("console=ttyS0")}. @@ -11928,6 +11939,22 @@ The list of extra Linux kernel command-line arguments---e.g., A G-Expression or string denoting the file name of the initial RAM disk to use (@pxref{G-Expressions}). +@item @code{device} (default: @code{#f}) +The device where the kernel and initrd are to be found---i.e., the GRUB +@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}). + +This may be a file system label (a string), a file system UUID (a +bytevector, @pxref{File Systems}), or @code{#f}, in which case GRUB will +search the device containing the file specified by the @code{linux} +field (@pxref{search,,, grub, GNU GRUB manual}). It must @emph{not} be +an OS device name such as @file{/dev/sda1}. + +@item @code{device-mount-point} (default: @code{"/"}) +The mount point of the above device on the system. You probably do not +need to change the default value. GuixSD uses it to strip the prefix of +store file names for systems where @file{/gnu} or @file{/gnu/store} is +on a separate partition. + @end table @end deftp diff --git a/gnu/local.mk b/gnu/local.mk index 39950b0de9..7937809c3c 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -657,6 +657,7 @@ dist_patch_DATA = \ %D%/packages/patches/libtiff-CVE-2016-5314.patch \ %D%/packages/patches/libtiff-CVE-2016-5321.patch \ %D%/packages/patches/libtiff-CVE-2016-5323.patch \ + %D%/packages/patches/libtiff-CVE-2016-5652.patch \ %D%/packages/patches/libtiff-oob-accesses-in-decode.patch \ %D%/packages/patches/libtiff-oob-write-in-nextdecode.patch \ %D%/packages/patches/libtool-skip-tests2.patch \ diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 7c147845fd..2c76b46e54 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -1652,14 +1652,14 @@ source code using IPython.") (define-public emacs-debbugs (package (name "emacs-debbugs") - (version "0.9") + (version "0.11") (source (origin (method url-fetch) (uri (string-append "https://elpa.gnu.org/packages/debbugs-" version ".tar")) (sha256 (base32 - "1wc6kw7hihqqdx8qyl01akygycnan44x400hwrcf54m3hb4isa0k")))) + "10v9s7ayvfzd6j6hqfc9zihxgmsc2j0xhxrgy3ah30qkqn6z8w6n")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async))) diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 43e8622c76..6cfc6e5be1 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -186,6 +186,7 @@ extracting icontainer icon files.") (define-public libtiff (package (name "libtiff") + (replacement libtiff/fixed) (version "4.0.6") (source (origin (method url-fetch) @@ -225,6 +226,24 @@ collection of tools for doing simple manipulations of TIFF images.") "See COPYRIGHT in the distribution.")) (home-page "http://www.remotesensing.org/libtiff/"))) +(define libtiff/fixed + (package + (inherit libtiff) + (source (origin + (inherit (package-source libtiff)) + (patches (search-patches + "libtiff-oob-accesses-in-decode.patch" + "libtiff-oob-write-in-nextdecode.patch" + "libtiff-CVE-2015-8665+CVE-2015-8683.patch" + "libtiff-CVE-2016-3623.patch" + "libtiff-CVE-2016-3945.patch" + "libtiff-CVE-2016-3990.patch" + "libtiff-CVE-2016-3991.patch" + "libtiff-CVE-2016-5314.patch" + "libtiff-CVE-2016-5321.patch" + "libtiff-CVE-2016-5323.patch" + "libtiff-CVE-2016-5652.patch")))))) + (define-public libwmf (package (name "libwmf") diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm index fe1bed1768..2c66eca372 100644 --- a/gnu/packages/libusb.scm +++ b/gnu/packages/libusb.scm @@ -105,7 +105,8 @@ version of libusb to run with newer libusb.") (build-system python-build-system) (arguments `(#:tests? #f ;no tests - #:modules ((srfi srfi-26) + #:modules ((srfi srfi-1) + (srfi srfi-26) (guix build utils) (guix build python-build-system)) #:phases @@ -116,11 +117,9 @@ version of libusb to run with newer libusb.") (("lib = locate_library\\(candidates, find_library\\)") (string-append "lib = \"" - (car (find-files (assoc-ref inputs "libusb") - (lambda (file stat) - (and ((file-name-predicate - "^libusb-.*\\.so\\..*") file stat) - (not (symbolic-link? file)))))) + (find (negate symbolic-link?) + (find-files (assoc-ref inputs "libusb") + "^libusb-.*\\.so\\..*")) "\""))) #t))))) (inputs diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index a348d07609..1bcdecf22a 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -991,3 +991,37 @@ the bandwidth, loss, and other parameters.") license:ncsa ; src/{units,iperf_locale,tcp_window_size}.c license:expat ; src/{cjson,net}.[ch] license:public-domain)))) ; src/portable_endian.h + +(define-public nethogs + (package + (name "nethogs") + (version "0.8.5") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/raboof/nethogs/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "1k4x8r7s4dgcb6n2rjn28h2yyij92mwm69phncl3597cdxr954va")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system gnu-build-system) + (inputs + `(("libpcap" ,libpcap) + ("ncurses" ,ncurses))) + (arguments + `(#:make-flags `("CC=gcc" + ,(string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (delete 'configure)))) ; No ./configure script. + (home-page "https://github.com/raboof/nethogs") + (synopsis "Per-process bandwidth monitor") + (description "NetHogs is a small 'net top' tool for Linux. Instead of +breaking the traffic down per protocol or per subnet, like most tools do, it +groups bandwidth by process. + +NetHogs does not rely on a special kernel module to be loaded. If there's +suddenly a lot of network traffic, you can fire up NetHogs and immediately see +which PID is causing this. This makes it easy to identify programs that have +gone wild and are suddenly taking up your bandwidth.") + (license license:gpl2+))) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 591f60307e..7c1ba846c9 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -159,7 +159,17 @@ #t)))))) (native-inputs `(("pkg-config" ,pkg-config) - ("emacs" ,emacs-minimal))) ;for guix.el + ("emacs" ,emacs-minimal) ;for guix.el + + ;; XXX: Keep the development inputs here even though + ;; they're unnecessary, just so that 'guix environment + ;; guix' always contains them. + ("autoconf" ,(autoconf-wrapper)) + ("automake" ,automake) + ("gettext" ,gnu-gettext) + ("texinfo" ,texinfo) + ("graphviz" ,graphviz) + ("help2man" ,help2man))) (inputs (let ((boot-guile (lambda (arch hash) (origin @@ -243,15 +253,7 @@ the Nix package manager.") (chmod po #o666)) (find-files "." "\\.po$")) - (zero? (system* "sh" "bootstrap")))))))) - (native-inputs - `(("autoconf" ,(autoconf-wrapper)) - ("automake" ,automake) - ("gettext" ,gettext-minimal) - ("texinfo" ,texinfo) - ("graphviz" ,graphviz) - ("help2man" ,help2man) - ,@(package-native-inputs guix-0.11.0)))))) + (zero? (system* "sh" "bootstrap"))))))))))) (define-public guix guix-devel) diff --git a/gnu/packages/patches/libtiff-CVE-2016-5652.patch b/gnu/packages/patches/libtiff-CVE-2016-5652.patch new file mode 100644 index 0000000000..54b87d0185 --- /dev/null +++ b/gnu/packages/patches/libtiff-CVE-2016-5652.patch @@ -0,0 +1,47 @@ +Fix CVE-2016-5652 (buffer overflow in t2p_readwrite_pdf_image_tile()). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5652 + +Patches exfiltrated from upstream CVS repo with: +cvs diff -u -r 1.92 -r 1.94 tools/tiff2pdf.c + +Index: tools/tiff2pdf.c +=================================================================== +RCS file: /cvs/maptools/cvsroot/libtiff/tools/tiff2pdf.c,v +retrieving revision 1.92 +retrieving revision 1.94 +diff -u -r1.92 -r1.94 +--- a/tools/tiff2pdf.c 23 Sep 2016 22:12:18 -0000 1.92 ++++ b/tools/tiff2pdf.c 9 Oct 2016 11:03:36 -0000 1.94 +@@ -2887,21 +2887,24 @@ + return(0); + } + if(TIFFGetField(input, TIFFTAG_JPEGTABLES, &count, &jpt) != 0) { +- if (count > 0) { +- _TIFFmemcpy(buffer, jpt, count); ++ if (count >= 4) { ++ /* Ignore EOI marker of JpegTables */ ++ _TIFFmemcpy(buffer, jpt, count - 2); + bufferoffset += count - 2; ++ /* Store last 2 bytes of the JpegTables */ + table_end[0] = buffer[bufferoffset-2]; + table_end[1] = buffer[bufferoffset-1]; +- } +- if (count > 0) { + xuint32 = bufferoffset; ++ bufferoffset -= 2; + bufferoffset += TIFFReadRawTile( + input, + tile, +- (tdata_t) &(((unsigned char*)buffer)[bufferoffset-2]), ++ (tdata_t) &(((unsigned char*)buffer)[bufferoffset]), + -1); +- buffer[xuint32-2]=table_end[0]; +- buffer[xuint32-1]=table_end[1]; ++ /* Overwrite SOI marker of image scan with previously */ ++ /* saved end of JpegTables */ ++ buffer[xuint32-2]=table_end[0]; ++ buffer[xuint32-1]=table_end[1]; + } else { + bufferoffset += TIFFReadRawTile( + input, diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 9c7320f41e..5df774fd10 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -5307,7 +5307,7 @@ connection to each user.") (version "1.9.5") (source (origin (method url-fetch) - (uri (string-append "http://waf.io/" + (uri (string-append "https://waf.io/" "waf-" version ".tar.bz2")) (sha256 (base32 @@ -11569,3 +11569,30 @@ useful as a validator for JSON data.") (define-public python2-pyev (package-with-python2 python-pyev)) + +(define-public python-imagesize + (package + (name "python-imagesize") + (version "0.7.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "imagesize" version)) + (sha256 + (base32 + "0qk07k0z4241lkzzjji7z4da04pcvg7bfc4xz1934zlqhwmwdcha")))) + (build-system python-build-system) + (home-page "https://github.com/shibukawa/imagesize_py") + (synopsis "Gets image size of files in variaous formats in Python") + (description + "This package allows determination of image size from +PNG, JPEG, JPEG2000 and GIF files in pure Python.") + (license license:expat) + (properties `((python2-variant . ,(delay python2-imagesize)))))) + +(define-public python2-imagesize + (let ((base (package-with-python2 (strip-python2-variant python-imagesize)))) + (package + (inherit base) + (native-inputs `(("python2-setuptools" ,python2-setuptools) + ,@(package-native-inputs base)))))) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 45fa47b3c8..1706ec3030 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -98,14 +98,14 @@ anywhere.") (define-public samba (package (name "samba") - (version "4.5.0") + (version "4.5.1") (source (origin (method url-fetch) - (uri (string-append "https://download.samba.org/pub/samba/stable/samba-" - version ".tar.gz")) + (uri (string-append "https://download.samba.org/pub/samba/stable/" + "samba-" version ".tar.gz")) (sha256 (base32 - "11mmyqag2i4yy6dikcggw776n0laxxr0rxhry72x5pa6nwws9afk")))) + "11ghsfvqxzfv8gnl62jfnpil9cwd04gak8sx5qcg6zv7d7h079xh")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 4ca5a97311..1f7d60148c 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -112,14 +112,14 @@ as well as the classic centralized workflow.") (define-public git (package (name "git") - (version "2.10.1") + (version "2.10.2") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "1ijd1b6szvfw0dmqa3dz1m5g5hbkl9xkb86a9qcjrz0w0vwjvhx9")))) + "0wc64dzcxrzgi6kwcljz6y3cwm3ajdgf6aws7g58azbhvl1jk04l")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -132,7 +132,7 @@ as well as the classic centralized workflow.") version ".tar.xz")) (sha256 (base32 - "049n4ashc1i0rzg19zw1h4hf1qhv1vhpjr5c3jqdcljj4yp7mzw9")))))) + "0vxaz23vf3ki0q5zgn6mxr9x1hjryqn1hsmgyrgdk6h3yqbs7c43")))))) (inputs `(("curl" ,curl) ("expat" ,expat) diff --git a/gnu/system.scm b/gnu/system.scm index 43117b1714..5cb09b7880 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com> +;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -99,6 +100,8 @@ boot-parameters? boot-parameters-label boot-parameters-root-device + boot-parameters-store-device + boot-parameters-store-mount-point boot-parameters-kernel boot-parameters-kernel-arguments boot-parameters-initrd @@ -728,6 +731,12 @@ listed in OS. The C library expects to find it under (file-system-device root-fs))) (entries -> (list (menu-entry (label label) + + ;; The device where the kernel and initrd live. + (device (file-system-device store-fs)) + (device-mount-point + (file-system-mount-point store-fs)) + (linux kernel) (linux-arguments (cons* (string-append "--root=" root-device) @@ -736,8 +745,7 @@ listed in OS. The C library expects to find it under "/boot") (operating-system-kernel-arguments os))) (initrd initrd))))) - (grub-configuration-file (operating-system-bootloader os) - store-fs entries + (grub-configuration-file (operating-system-bootloader os) entries #:old-entries old-entries))) (define (operating-system-parameters-file os) @@ -745,16 +753,24 @@ listed in OS. The C library expects to find it under this file is the reconstruction of GRUB menu entries for old configurations." (mlet %store-monad ((initrd (operating-system-initrd-file os)) (root -> (operating-system-root-file-system os)) + (store -> (operating-system-store-file-system os)) (label -> (kernel->grub-label (operating-system-kernel os)))) (gexp->file "parameters" - #~(boot-parameters (version 0) - (label #$label) - (root-device #$(file-system-device root)) - (kernel #$(operating-system-kernel-file os)) - (kernel-arguments - #$(operating-system-kernel-arguments os)) - (initrd #$initrd)) + #~(boot-parameters + (version 0) + (label #$label) + (root-device #$(file-system-device root)) + (kernel #$(operating-system-kernel-file os)) + (kernel-arguments + #$(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))) + (mount-point #$(file-system-mount-point store)))) #:set-load-path? #f))) @@ -765,7 +781,16 @@ this file is the reconstruction of GRUB menu entries for old configurations." (define-record-type* <boot-parameters> boot-parameters make-boot-parameters boot-parameters? (label boot-parameters-label) + ;; Because we will use the 'store-device' to create the GRUB search command, + ;; the 'store-device' has slightly different semantics than 'root-device'. + ;; The 'store-device' can be a file system uuid, a file system label, or #f, + ;; but it cannot be a device path such as "/dev/sda3", since GRUB would not + ;; understand that. The 'root-device', on the other hand, corresponds + ;; exactly to the device field of the <file-system> object representing the + ;; OS's root file system, so it might be a device path like "/dev/sda3". (root-device boot-parameters-root-device) + (store-device boot-parameters-store-device) + (store-mount-point boot-parameters-store-mount-point) (kernel boot-parameters-kernel) (kernel-arguments boot-parameters-kernel-arguments) (initrd boot-parameters-initrd)) @@ -799,7 +824,21 @@ this file is the reconstruction of GRUB menu entries for old configurations." (('initrd ('string-append directory file)) ;the old format (string-append directory file)) (('initrd (? string? file)) - file))))) + file))) + + (store-device + (match (assq 'store rest) + (('store ('device device) _ ...) + device) + (_ ;the old format + root))) + + (store-mount-point + (match (assq 'store rest) + (('store ('device _) ('mount-point mount-point) _ ...) + mount-point) + (_ ;the old format + "/"))))) (x ;unsupported format (warning (_ "unrecognized boot parameters for '~a'~%") system) diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index 249b415ab4..5c9d0f15a1 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,6 +33,7 @@ #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) + #:use-module (rnrs bytevectors) #:export (grub-image grub-image? grub-image-aspect-ratio @@ -61,16 +63,15 @@ ;;; ;;; Code: -(define (strip-mount-point fs file) - "Strip the mount point of FS from FILE, which is a gexp or other lowerable -object denoting a file name." - (let ((mount-point (file-system-mount-point fs))) - (if (string=? mount-point "/") - file - #~(let ((file #$file)) - (if (string-prefix? #$mount-point file) - (substring #$file #$(string-length mount-point)) - file))))) +(define (strip-mount-point mount-point file) + "Strip MOUNT-POINT from FILE, which is a gexp or other lowerable object +denoting a file name." + (if (string=? mount-point "/") + file + #~(let ((file #$file)) + (if (string-prefix? #$mount-point file) + (substring #$file #$(string-length mount-point)) + file)))) (define-record-type* <grub-image> grub-image make-grub-image @@ -121,6 +122,10 @@ object denoting a file name." menu-entry make-menu-entry menu-entry? (label menu-entry-label) + (device menu-entry-device ; file system uuid, label, or #f + (default #f)) + (device-mount-point menu-entry-device-mount-point + (default "/")) (linux menu-entry-linux) (linux-arguments menu-entry-linux-arguments (default '())) ; list of string-valued gexps @@ -162,12 +167,14 @@ WIDTH/HEIGHT, or #f if none was found." (with-monad %store-monad (return #f))))) -(define (eye-candy config root-fs system port) +(define* (eye-candy config store-device store-mount-point + #:key system port) "Return in %STORE-MONAD a gexp that writes to PORT (a port-valued gexp) the 'grub.cfg' part concerned with graphics mode, background images, colors, and -all that. ROOT-FS is a file-system object denoting the root file system where -the store is. SYSTEM must be the target system string---e.g., -\"x86_64-linux\"." +all that. STORE-DEVICE designates the device holding the store, and +STORE-MOUNT-POINT is its mount point; these are used to determine where the +background image and fonts must be searched for. SYSTEM must be the target +system string---e.g., \"x86_64-linux\"." (define setup-gfxterm-body ;; Intel systems need to be switched into graphics mode, whereas most ;; other modern architectures have no other mode and therefore don't need @@ -191,7 +198,7 @@ the store is. SYSTEM must be the target system string---e.g., (symbol->string (assoc-ref colors 'bg))))) (define font-file - (strip-mount-point root-fs + (strip-mount-point store-mount-point (file-append grub "/share/grub/unicode.pf2"))) (mlet* %store-monad ((image (grub-background-image config))) @@ -215,10 +222,10 @@ else set menu_color_highlight=white/blue fi~%" #$setup-gfxterm-body - #$(grub-root-search root-fs font-file) + #$(grub-root-search store-device font-file) #$font-file - #$(strip-mount-point root-fs image) + #$(strip-mount-point store-mount-point image) #$(theme-colors grub-theme-color-normal) #$(theme-colors grub-theme-color-highlight)))))) @@ -227,8 +234,8 @@ fi~%" ;;; Configuration file. ;;; -(define (grub-root-search root-fs file) - "Return the GRUB 'search' command to look for ROOT-FS, which contains FILE, +(define (grub-root-search device file) + "Return the GRUB 'search' command to look for DEVICE, which contains FILE, a gexp. The result is a gexp that can be inserted in the grub.cfg-generation code." ;; Usually FILE is a file name gexp like "/gnu/store/…-linux/vmlinuz", but @@ -236,20 +243,18 @@ code." ;; custom menu entries. In the latter case, don't emit a 'search' command. (if (and (string? file) (not (string-prefix? "/" file))) "" - (case (file-system-title root-fs) - ;; Preferably refer to ROOT-FS by its UUID or label. This is more + (match device + ;; Preferably refer to DEVICE by its UUID or label. This is more ;; efficient and less ambiguous, see <>. - ((uuid) + ((? bytevector? uuid) (format #f "search --fs-uuid --set ~a" - (uuid->string (file-system-device root-fs)))) - ((label) - (format #f "search --label --set ~a" - (file-system-device root-fs))) - (else - ;; As a last resort, look for any device containing FILE. + (uuid->string device))) + ((? string? label) + (format #f "search --label --set ~a" label)) + (#f #~(format #f "search --file --set ~a" #$file))))) -(define* (grub-configuration-file config store-fs entries +(define* (grub-configuration-file config entries #:key (system (%current-system)) (old-entries '())) @@ -262,22 +267,30 @@ corresponding to old generations of the system." (define entry->gexp (match-lambda - (($ <menu-entry> label linux arguments initrd) - ;; Use the right file names for LINUX and STORE-FS in case STORE-FS is - ;; not the "/" file system. - (let ((linux (strip-mount-point store-fs linux)) - (initrd (strip-mount-point store-fs initrd))) + (($ <menu-entry> label device device-mount-point + linux arguments initrd) + ;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point. + ;; Use the right file names for LINUX and INITRD in case + ;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a + ;; separate partition. + (let ((linux (strip-mount-point device-mount-point linux)) + (initrd (strip-mount-point device-mount-point initrd))) #~(format port "menuentry ~s { ~a linux ~a ~a initrd ~a }~%" #$label - #$(grub-root-search store-fs linux) + #$(grub-root-search device linux) #$linux (string-join (list #$@arguments)) #$initrd))))) - (mlet %store-monad ((sugar (eye-candy config store-fs system #~port))) + (mlet %store-monad ((sugar (eye-candy config + (menu-entry-device (first entries)) + (menu-entry-device-mount-point + (first entries)) + #:system system + #:port #~port))) (define builder #~(call-with-output-file #$output (lambda (port) diff --git a/guix/profiles.scm b/guix/profiles.scm index d162f6241b..6a9e570a3f 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -490,12 +490,12 @@ if not found." inputs)) (define (find-among-store-items items) (find (lambda (item) - (let-values (((pkg-name pkg-version) + (let-values (((name* version*) (package-name->name+version (store-path-package-name item)))) - (and (equal? name pkg-name) + (and (string=? name name*) (if version - (string-prefix? version pkg-version) + (string-prefix? version version*) #t)))) items)) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 0519ab8c0b..e548be649d 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Alex Kost <alezost@gmail.com> +;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -384,6 +385,8 @@ it atomically, and then run OS's activation script." (label (string-append label " (#" (number->string number) ", " (seconds->string time) ")")) + (device (boot-parameters-store-device params)) + (device-mount-point (boot-parameters-store-mount-point params)) (linux kernel) (linux-arguments (cons* (string-append "--root=" root-device) |