diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 2f115f6bb3..52d92ba03a 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -21,6 +21,7 @@ ;;; Copyright © 2023-2024 Herman Rimm ;;; Copyright © 2023 Simon Tournier ;;; Copyright © 2024 Zheng Junjie <873216071@qq.com> +;;; Copyright © 2024 Lilah Tascheter ;;; ;;; This file is part of GNU Guix. ;;; @@ -48,6 +49,7 @@ (define-module (gnu packages bootloaders) #:use-module (gnu packages compression) #:use-module (gnu packages cross-base) #:use-module (gnu packages disk) + #:use-module (gnu packages efi) #:use-module (gnu packages firmware) #:use-module (gnu packages flex) #:use-module (gnu packages fontutils) @@ -76,11 +78,13 @@ (define-module (gnu packages bootloaders) #:use-module (gnu packages version-control) #:use-module (gnu packages virtualization) #:use-module (gnu packages xorg) + #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (guix build-system gnu) #:use-module (guix build-system meson) #:use-module (guix build-system pyproject) + #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (guix download) #:use-module (guix gexp) @@ -576,6 +580,59 @@ (define-public syslinux ;; Also contains: license:expat license:isc license:zlib))))) +(define %systemd-version "255") +(define systemd-source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/systemd/systemd") + (commit (string-append "v" %systemd-version)))) + (file-name (git-file-name "systemd" %systemd-version)) + (snippet #~(substitute* "src/ukify/ukify.py" + ;; Remove after python 3.11. + (("datetime\\.UTC") "datetime.timezone.utc"))) + (modules '((guix build utils))) + (sha256 + (base32 + "1qdyw9g3jgvsbc1aryr11gpc3075w5pg00mqv4pyf3hwixxkwaq6")))) + +(define-public ukify + (package + (name "ukify") + (version %systemd-version) + (source systemd-source) + (build-system python-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (define (get-tool tool) + (search-input-file inputs (string-append "bin/" tool))) + ;; Hardcode the tool paths. + (substitute* "src/ukify/ukify.py" + (("(find_tool\\(')(readelf|sbsign|pesign)'," _ ctx tool) + (string-append ctx (get-tool tool) "',")) + (("('name': ')(sbverify|pesign)'," _ ctx tool) + (string-append ctx (get-tool tool) "',"))))) + (delete 'check) + (replace 'install + (lambda* (#:key inputs #:allow-other-keys) + (let* ((bin (string-append #$output "/bin")) + (file (string-append bin "/ukify"))) + (mkdir-p bin) + (copy-file "src/ukify/ukify.py" file))))))) + (inputs + (list binutils pesign python-cryptography python-pefile sbsigntools)) + (home-page "https://systemd.io/") + (synopsis "Unified kernel image UEFI tool") + (description + "@command{ukify} joins together a UKI stub, linux kernel, initrd, +kernel arguments, and optional secure boot signatures into a single, +UEFI-bootable image.") + (license license:lgpl2.1+))) + (define-public dtc (package (name "dtc")