From 3e7f5fa625946b14fbc445925c66456ff518e32a Mon Sep 17 00:00:00 2001 From: nikstur Date: Thu, 24 Nov 2022 11:10:19 +0100 Subject: [PATCH] lanzatool: implement copying sdboot to esp --- rust/lanzatool/bootspec.json | 1 + rust/lanzatool/src/bootspec.rs | 1 + rust/lanzatool/src/esp.rs | 10 ++++++++++ rust/lanzatool/src/install.rs | 33 ++++++++++++--------------------- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/rust/lanzatool/bootspec.json b/rust/lanzatool/bootspec.json index db25337..59c9620 100644 --- a/rust/lanzatool/bootspec.json +++ b/rust/lanzatool/bootspec.json @@ -17,6 +17,7 @@ "toplevel": "/run/current-system", "extension": { "esp": "esp", + "systemd": "/run/current-system/systemd", "bootctl": "/run/current-system/sw/bin/bootctl", "osRelease": "/etc/os-release" } diff --git a/rust/lanzatool/src/bootspec.rs b/rust/lanzatool/src/bootspec.rs index a2a0c15..79ae670 100644 --- a/rust/lanzatool/src/bootspec.rs +++ b/rust/lanzatool/src/bootspec.rs @@ -33,4 +33,5 @@ pub struct Extension { pub esp: String, pub bootctl: PathBuf, pub os_release: PathBuf, + pub systemd: PathBuf, } diff --git a/rust/lanzatool/src/esp.rs b/rust/lanzatool/src/esp.rs index f797caa..853cc6c 100644 --- a/rust/lanzatool/src/esp.rs +++ b/rust/lanzatool/src/esp.rs @@ -7,6 +7,10 @@ pub struct EspPaths { pub initrd: PathBuf, pub linux: PathBuf, pub lanzaboote_image: PathBuf, + pub efi_fallback_dir: PathBuf, + pub efi_fallback: PathBuf, + pub systemd: PathBuf, + pub systemd_boot: PathBuf, } impl EspPaths { @@ -14,6 +18,8 @@ impl EspPaths { let esp = Path::new(esp); let esp_nixos = esp.join("EFI/nixos"); let esp_linux = esp.join("EFI/Linux"); + let esp_systemd = esp.join("EFI/systemd"); + let esp_efi_fallback_dir = esp.join("EFI/BOOT"); Self { esp: esp.to_owned(), @@ -22,6 +28,10 @@ impl EspPaths { initrd: esp_nixos.join("initrd"), linux: esp_linux.clone(), lanzaboote_image: esp_linux.join("lanzaboote-image.efi"), + efi_fallback_dir: esp_efi_fallback_dir.clone(), + efi_fallback: esp_efi_fallback_dir.join("BOOTX64.EFI"), + systemd: esp_systemd.clone(), + systemd_boot: esp_systemd.join("systemd-bootx64.efi"), } } } diff --git a/rust/lanzatool/src/install.rs b/rust/lanzatool/src/install.rs index e17c95b..681ab4e 100644 --- a/rust/lanzatool/src/install.rs +++ b/rust/lanzatool/src/install.rs @@ -1,7 +1,6 @@ use std::fs; use std::path::Path; -use std::process::Command; use anyhow::Result; @@ -38,26 +37,18 @@ pub fn install( fs::create_dir_all(&esp_paths.linux)?; fs::copy(lanzaboote_image, esp_paths.lanzaboote_image)?; - // install_systemd_boot(bootctl, &esp)?; + + let systemd_boot = bootspec_doc + .v1 + .extension + .systemd + .join("lib/systemd/boot/efi/systemd-bootx64.efi"); + + fs::create_dir_all(esp_paths.efi_fallback_dir)?; + fs::copy(&systemd_boot, esp_paths.efi_fallback)?; + + fs::create_dir_all(&esp_paths.systemd)?; + fs::copy(&systemd_boot, esp_paths.systemd_boot)?; Ok(()) } - -fn _install_systemd_boot(bootctl: &Path, esp: &Path) -> Result<()> { - let args = vec![ - String::from("install"), - String::from("--path"), - esp.display().to_string(), - ]; - - let status = Command::new(&bootctl).args(&args).status()?; - if !status.success() { - return Err(anyhow::anyhow!( - "Failed success run `{}` with args `{:?}`", - &bootctl.display(), - &args - ) - .into()); - } - Ok(()) -}