On Sat, Sep 10, 2016 at 12:03:38AM +0200, Ludovic Courtès wrote: >Good news! Good news indeed! > >ludo@gnu.org (Ludovic Courtès) skribis: > >> Tomáš Čech skribis: >> >>> Grub configuration interpretes `linux' as directory where is located >>> bzImage. If I enter file name instead, result configuration will be >>> wrong. >> >> The solution will be to not automatically append “/bzImage” (and >> likewise for the initrd.) >> >> We could change places where ‘menu-entry’ is instantiated to: >> >> #~(string-append #$kernel "/bzImage") >> >> However, there’s the problem that the image name appears in the >> ‘parameters’ file of the system (as seen in the output of ‘guix system >> build foo.scm’), where it is unevaluated. If we use ‘string-append’ as >> above, a raw (string-append …) sexp will appear in there, which is not >> nice. >> >> To address this, an idea is to add “expanders” for gexps: gexps already >> have “compilers”, and expanders would be similar except that they would >> produce something possibly different from just the derivation’s output >> file name. For instance, we could write: >> >> (file-append kernel "/bzImage") >> >> and that would expand directly to: >> >> "/gnu/store/…/bzImage" > >AFAICS this is finally fixed! > > expanders in commit ebdfd776f4504c456d383ee8afa59fc6fdfc6756 > ‘file-append’ in commit a9e5e92f940381e3a4ee828c6d8ff22a73067e17 > kernel file name in commit 44d5f54e31039d78f156bd9562dca293124eaa76 > >Please let me know how it goes! In particular, does it work for the >dual-boot scenario you were interested in? It is almost perfect. Configuration excerpt... (bootloader (grub-configuration (device "/dev/sda") (menu-entries (list (menu-entry (label "openSUSE") (linux "(hd0,msdos1)/vmlinuz") (linux-arguments (list "root=/dev/venom/opensuse" "init=/usr/lib/systemd/systemd")) (initrd "(hd0,msdos1)/initrd")))))) ...transforms into menuentry "openSUSE" { search --file --set (hd0,msdos1)/vmlinuz linux (hd0,msdos1)/vmlinuz root=/dev/venom/opensuse init=/usr/lib/systemd/systemd initrd (hd0,msdos1)/initrd } I think that if linux contains prefix '(.*)/', there should be no search for kernel. Thank you very much for fixing this bug (especially when I wasn't able). I believe that fixing this bug is big step in more friendly behavior to other OS. Best regards, S_W