From a22c46c10262c7999c8ed4161608963fb100377a Mon Sep 17 00:00:00 2001 From: Alexander Evgin Date: Wed, 15 Jan 2025 19:30:30 +0400 Subject: [PATCH] Remove included EXTLINUX MBR file Read bootcode file from EXTLINUX locations instead, or use --mbr-file option. --- .../linux_vm/data/extlinux/mbr.bin | Bin 440 -> 0 bytes src/builders_v2/linux_vm/extlinux.rs | 51 ++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) delete mode 100644 src/builders_v2/linux_vm/data/extlinux/mbr.bin diff --git a/src/builders_v2/linux_vm/data/extlinux/mbr.bin b/src/builders_v2/linux_vm/data/extlinux/mbr.bin deleted file mode 100644 index 646a6848dc54986513bb0731e84d30b3db684ab5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmXp$@T>1e--SI4HJ#7c!ut;V{e-s4X04g_|GR2l8(_=J5StP(YgDfwY+~(imQtGWuo~ z7iZ?BE94iX7A2N|SjCmaC8@c3yj*DsX@-|}Gt{I7r3J7BXEA08bUsV_ZuX`6z!SEP zhaE>JeKY$}-EoZLq2mrlrY^Bx)n|o!Qv}iy55G9_f8V~^{rlK=DlmLrdN?hi^XYCN zhlRoLKyctU_J$H>ht7M=hXo#e_9%(2w2X}Ia%ZvOFJV)uw_z<+O6zv#Nb3$0Nn^Z_ zrg*88Ij!^1i#7j?m|txBpVsXr^J2k&kk&IGd&(GmOLIyx3vyBw5|c|Z%Tg5z5{pVQ zOEUBGia{RecHu~4c9Ti#bm4em@V`hstvinyXx{AN` z)4x5xs-xoBfBk>*LXN>7EjSc%@)J`OQj3c6i+~2lt=YoYWtYUVnf Option { + const CANDIDATES: &[&str] = &[ + "/usr/share/extlinux/mbr.bin", + "/usr/share/syslinux/mbr.bin", + "/usr/lib/extlinux/mbr/mbr.bin", + "/usr/lib/syslinux/mbr/mbr.bin", + "/usr/lib/extlinux/bios/mbr.bin", + "/usr/lib/syslinux/bios/mbr.bin", + ]; + CANDIDATES + .into_iter() + .map(PathBuf::from) + .find_map(|candidate| { + if candidate.exists() { + return Some(candidate); + } else { + return None; + } + }) + } + /// Install EXTLINUX. pub fn install>(directory: P, mountpoint: &Path) -> Result { let extlinux = Extlinux { @@ -96,12 +114,25 @@ impl Step for InstallExtlinux { let extlinux = Extlinux::install(DEFAULT_EXTLINUX_DIR, &mountpoint) .context("failed to install EXTLINUX")?; + let mbr_path = if let Some(mbr_path) = &ctx.opts().mbr_file { + mbr_path.clone() + } else if let Some(mbr_path) = Extlinux::mbr_bin_path() { + mbr_path + } else { + bail!("cannot install EXTLINUX: MBR bootcode file not found"); + }; + let mut bootcode = [0u8; Mbr::BOOTCODE_SIZE]; + fs::File::open(&mbr_path) + .context("failed to open MBR bootcode file")? + .read_exact(&mut bootcode) + .context("failed to read MBR bootcode file")?; + let mbr = ctx .get_mut::("mbr") .ok_or(anyhow!("cannot install EXTLINUX: MBR not found"))?; - debug!("writing MBR bootcode"); - mbr.write_bootcode(BOOTCODE.clone()) + debug!("writing MBR bootcode from {}", mbr_path.display()); + mbr.write_bootcode(bootcode) .context("failed to write MBR bootcode")?; ctx.set("extlinux", Box::new(extlinux));