* gnu/bootloader/grub.scm (strip-mount-point): Remove procedure. (normalize-file): Add procedure. (grub-configuration-file): New BTRFS-SUBVOLUME-FILE-NAME parameter. When defined, prepend its value to the kernel and initrd file names, using the NORMALIZE-FILE procedure. Adjust the call to EYE-CANDY to pass the BTRFS-SUBVOLUME-FILE-NAME argument. Normalize the KEYMAP file as well. (eye-candy): Add a BTRFS-SUBVOLUME-FILE-NAME parameter, and use it, along with the NORMALIZE-FILE procedure, to normalize the FONT-FILE and IMAGE nested variables. Adjust doc. * gnu/bootloader/depthcharge.scm (depthcharge-configuration-file): Adapt. * gnu/bootloader/extlinux.scm (extlinux-configuration-file): Likewise. * gnu/system/file-systems.scm (btrfs-subvolume?) (btrfs-store-subvolume-file-name): New procedures. * gnu/system.scm (operating-system-bootcfg): Specify the Btrfs subvolume file name the store resides on to the `operating-system-bootcfg' procedure, using the new BTRFS-SUBVOLUME-FILE-NAME argument. * doc/guix.texi (File Systems): Add a Btrfs subsection to document the use of subvolumes. * gnu/tests/install.scm (%btrfs-root-on-subvolume-os) (%btrfs-root-on-subvolume-os-source) (%btrfs-root-on-subvolume-installation-script) (%test-btrfs-root-on-subvolume-os): New variables.
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| ;;; GNU Guix --- Functional package management for GNU
 | |
| ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 | |
| ;;;
 | |
| ;;; This file is part of GNU Guix.
 | |
| ;;;
 | |
| ;;; GNU Guix is free software; you can redistribute it and/or modify it
 | |
| ;;; under the terms of the GNU General Public License as published by
 | |
| ;;; the Free Software Foundation; either version 3 of the License, or (at
 | |
| ;;; your option) any later version.
 | |
| ;;;
 | |
| ;;; GNU Guix is distributed in the hope that it will be useful, but
 | |
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| ;;; GNU General Public License for more details.
 | |
| ;;;
 | |
| ;;; You should have received a copy of the GNU General Public License
 | |
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| (define-module (gnu bootloader depthcharge)
 | |
|   #:use-module (gnu bootloader extlinux)
 | |
|   #:use-module (gnu bootloader)
 | |
|   #:use-module (gnu packages bootloaders)
 | |
|   #:use-module (guix gexp)
 | |
|   #:use-module (guix utils)
 | |
|   #:use-module (ice-9 match)
 | |
|   #:export (depthcharge-bootloader))
 | |
| 
 | |
| (define (signed-kernel kernel kernel-arguments initrd)
 | |
|   (define builder
 | |
|     (with-imported-modules '((guix build utils))
 | |
|       #~(begin
 | |
|           (use-modules (guix build utils)
 | |
|                        (ice-9 binary-ports)
 | |
|                        (rnrs bytevectors))
 | |
|           (set-path-environment-variable "PATH" '("bin") (list #$dtc))
 | |
| 
 | |
|           ;; TODO: These files have to be writable, so we copy them.
 | |
|           ;; This can probably be fixed by using a ".its" file, just
 | |
|           ;; be careful not to break initrd loading.
 | |
|           (copy-file #$kernel "zImage")
 | |
|           (chmod "zImage" #o755)
 | |
|           (copy-file (string-append (dirname #$kernel) "/lib/dtbs/"
 | |
|                                     "rk3288-veyron-speedy.dtb")
 | |
|                      "rk3288-veyron-speedy.dtb")
 | |
|           (chmod "rk3288-veyron-speedy.dtb" #o644)
 | |
|           (copy-file #$initrd "initrd")
 | |
|           (chmod "initrd" #o644)
 | |
| 
 | |
|           (invoke (string-append #$u-boot-tools "/bin/mkimage")
 | |
|                   "-D" "-I dts -O dtb -p 2048"
 | |
| 		  "-f" "auto"
 | |
|                   "-A" "arm"
 | |
|                   "-O" "linux"
 | |
|                   "-T" "kernel"
 | |
|                   "-C" "None"
 | |
|                   "-d" "zImage"
 | |
|                   "-a" "0"
 | |
|                   "-b" "rk3288-veyron-speedy.dtb"
 | |
|                   "-i" "initrd"
 | |
| 	          "image.itb")
 | |
|           (call-with-output-file "bootloader.bin"
 | |
|             (lambda (port)
 | |
|               (put-bytevector port (make-bytevector 512 0))))
 | |
|           (with-output-to-file "kernel-arguments"
 | |
| 	    (lambda ()
 | |
| 	      (display (string-join (list #$@kernel-arguments)))))
 | |
|           (invoke (string-append #$vboot-utils "/bin/vbutil_kernel")
 | |
|                   "--pack" #$output
 | |
|                   "--version" "1"
 | |
|                   "--vmlinuz" "image.itb"
 | |
| 		  "--arch" "arm"
 | |
| 		  "--keyblock" (string-append #$vboot-utils
 | |
|                                               "/share/vboot-utils/devkeys/"
 | |
|                                               "kernel.keyblock")
 | |
| 		  "--signprivate" (string-append #$vboot-utils
 | |
|                                                  "/share/vboot-utils/devkeys/"
 | |
|                                                  "kernel_data_key.vbprivk")
 | |
|                   "--config" "kernel-arguments"
 | |
|                   "--bootloader" "bootloader.bin"))))
 | |
|   (computed-file "vmlinux.kpart" builder))
 | |
| 
 | |
| (define* (depthcharge-configuration-file config entries
 | |
|                                          #:key
 | |
|                                          (system (%current-system))
 | |
|                                          (old-entries '())
 | |
|                                          #:allow-other-keys)
 | |
|   (match entries
 | |
|     ((entry)
 | |
|      (let ((kernel (menu-entry-linux entry))
 | |
|            (kernel-arguments (menu-entry-linux-arguments entry))
 | |
|            (initrd (menu-entry-initrd entry)))
 | |
|        ;; XXX: Make this a symlink.
 | |
|        (signed-kernel kernel kernel-arguments initrd)))
 | |
|     (_ (error "Too many bootloader menu entries!"))))
 | |
| 
 | |
| (define install-depthcharge
 | |
|   #~(lambda (bootloader device mount-point)
 | |
|       (let ((kpart (string-append mount-point
 | |
|                                   "/boot/depthcharge/vmlinux.kpart")))
 | |
|         (write-file-on-device kpart (stat:size (stat kpart)) device 0))))
 | |
| 
 | |
| (define depthcharge-bootloader
 | |
|   (bootloader
 | |
|    (name 'depthcharge)
 | |
|    (package #f)
 | |
|    (installer install-depthcharge)
 | |
|    (configuration-file "/boot/depthcharge/vmlinux.kpart")
 | |
|    (configuration-file-generator depthcharge-configuration-file)))
 |