;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019 Timothy Sample ;;; ;;; 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 . (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))) ccount> records. * gnu/services/configuration.scm (define-maybe-helper): Check against the 'unset symbol. (normalize-field-type+def): Adjust value to 'unset. (define-configuration-helper): Use 'unset as the default value thunk. * gnu/services/file-sharing.scm (serialize-maybe-string): Check against the 'unset symbol. (serialize-maybe-file-object): Likewise. * gnu/services/messaging.scm (define-all-configurations): Use 'unset as value. (raw-content?): Check against 'unset symbol. (prosody-configuration)[http-max-content-size]: Default to 'unset. [http-external-url]: Likewise. [mod-muc]: Likewise. [raw-content]: Likewise. * gnu/services/networking.scm (opendht-configuration): Adjust documentation. * gnu/services/telephony.scm (jami-shepherd-services): Replace *undefined* with the 'unset symbol. * tests/services/configuration.scm ("maybe type, no default"): Check against the 'unset symbol. * doc/guix.texi: Regenerate the opendht-configuration, openvpn-client-configuration and openvpn-server-configuration documentation. Maxim Cournoyer 2022-06-15services: configuration: Use *unspecified* instead of 'disabled....Use *unspecified* as a marker for field values that have not been set. Rationale: 'disabled may easily clash with user values for boolean fields, is confusing (i.e. its meaning is *not* boolean false, but unspecified) and it also passes silently through the symbol? predicate of a field of type symbol. * gnu/services/configuration.scm (configuration-missing-default-value): Renamed from configuration-no-default-value. (define-maybe-helper): Use *unspecified* instead of 'disabled, and make the default value optional. * gnu/home/services/desktop.scm (home-redshift-configuration): Change (maybe-xyz 'disabled) to maybe-xyz. * gnu/services/authentication.scm (nslcd-configuration): Likewise. * gnu/services/cgit.scm (repository-cgit-configuration): Likewise. * gnu/services/file-sharing.scm (serialize-maybe-string) (serialize-maybe-file-object): Use 'unspecified?' instead of (eq? val 'disabled). * gnu/services/messaging.scm (raw-content?): Likewise. (ssl-configuration): Change (maybe-xyz 'disabled) to maybe-xyz. (prosody-configuration): Likewise. * gnu/services/file-sharing.scm (transmission-daemon-configuration): Likewise. * gnu/services/messaging.scm (define-all-configurations): Use *unspecified* instead of 'disabled'. * gnu/services/networking.scm (opendht-configuration): Likewise. * gnu/services/pm.scm (tlp-configuration): Likewise. * gnu/services/telephony.scm (jami-account): Likewise. (jami-configuration): Likewise. * gnu/services/vpn.scm (openvpn-client-configuration): Likewise. * tests/services/configuration.scm ("maybe type, no default") ("maybe type, with default"): New tests. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Attila Lendvai