From f1c69e91f78f4a86539b77200b1f7111bfa6d9b8 Mon Sep 17 00:00:00 2001 From: zj <1052308357@qq.com> Date: Thu, 12 Feb 2026 02:49:48 +0800 Subject: [PATCH] 9 --- __pycache__/backend.cpython-39.pyc | Bin 55345 -> 55763 bytes backend.py | 34 ++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/__pycache__/backend.cpython-39.pyc b/__pycache__/backend.cpython-39.pyc index 0fb80e023d198f81b0d1d05b8afba59567058eb1..6b5029b275e0aa3a3e6f3ef35c6905bf1a252454 100644 GIT binary patch delta 1916 zcmZuvS!`5Q7{33#vv!$%Y3Yr?j1+ckYy7Ja>w1 zO$vc9^r#OK%#1AB2Nk?VLregTJXC8)O94|Jj3$`+V0=QNaXbHXu}zrC{pLU4`Tp-; z?p(ek-O?mWQ*LgSz(4bEo@niAyKK1~&G+#maxd~H@{uG6ia>yfRAjY@0_N=s!d`Z? ztE!utQYHlsiYbZeshQ-ar8I!hd3+Wx5DOJ2`ME5~o@A%;1!AReMmQ^`MKx=dGK;&4 z=sJrNh%Li)&n4}T5IQEgcwMH9nd;M!1bJA2R2Ifn!oC;wN@}*6qvq0Fep;kjs3nz6 zoEcqeR?%!~ne<9RXNo@q^+IL&9^5fxe_)k8gG0V$?#@)!kDLKe0d zy#jTm9BIKTs9wcMz2tGSh%7!S@fVS&=Bx9jiVD=7a*@I`@Wu;hUQ&`9GB;*gz&DDg zwN_F}3#L~Zaw$eqM(0hR>jh%oC2-X35_E!MNJ>XO06{f^5chHA5_T!J7?x_^#~Pr- zDF4d;>J0`tK!Qz*{2M>Wzau>4Fs`ett=-LP2Qqn2&(8i+haOQUFZc7YtM~ga zEntcGLwDTbpHo(TiwjuvwPA2G`;eQ})52}zy2DNFZR4guh(r#zDnYpidv@`jWjDfl zJeG49xAPK>=+_=@A_2LvmB@p5Nf3VGQ08OTd-K^Rbc;*Ailh$>Vi>h^V1LtRB1faqy*Uxwb;>M3x*?e=}y%T@36F5RP2E~$paqA1ulFz zieTZtCdh#WU;qOfQlF4?l8ybL`kY3T*hC8$M1yGKLb*y?lqk~a<(0fMwx#E&US5UK zNY9vFF30HO-ledP-RmuZ_3YnX4^%QwUlla6SNh(7&DxKBwOO!Td+L+~u!cRGOh66$ zG`Sqw*!?6e+=An7MR=W$yS+@5FW~IxEAL>5(_Uz2Z=XI6<*az1-cXJ7CYBf&gl(*p zZH3RZD9Z<^(@wo9nYl4Ldj)E>ZSVF=%j&sy5T=|kuM~|lP{yP2tTpYe5v4iYaj5)x z4c@B+c!^b=>&f1P+T93y*vPq2!v+jDvcdC=QAF^(1mPcSCV zdH@j8Okdy8!)NS=p%#c}o4!fFLR`PR7hwm&+_~g^oU@tPFW;Whb0X3y#&4#IT!8vqxs4nb(nNJFeXx sdmqaFU)|(BQ5`~vASejfq};_W+}UMl$FP)*n4HXhcL);f-rc(Y07tkM4gdfE delta 1445 zcmY*XT}%{L6rMA)47)q~2Q0f{L8M?SMX`~G#-f6VXh9?`wgyrI;)NBviVU+D_0F!S zYY1Y49PNu~WmO5mr=&Z!0mQQ;!NG^Z+9HJ<#`x^ApRB$;y;mdP=%+vD`TB~+&*MC;IKTTaEZCO zoKO+~(z9NsEqIrB9u8Nf_vM6aI+rn>%$tx&&FrQoJ{PxFO8a-2?xfDa-3b@~eWQ`W zeB4d?voRv4arcljA$3b4*v8$ab~K%(FY|2_KGy(rZXAGsFwuV>Lr_Gr~~qeA3-uxK{}Z&m<2rbDYHR56ZW47YHK3%;wN#g76+ThgVyAU zO#mwXcQPCEPGx!~MNlsS0bXHQW2Y3r3H}X!_H_Vnm^pag%yQ{tL}CI8gLo{Sg)c;F zFdp5sve6sTBP~s>ZS74R5#w0Im`gpyhhG{#ToucO)3`O3>sX-#AfWic zkI~qA#iQ8p<5+f@>Ia|f0aaFIA9z47vwn)@+SEo{MP1!qgmb6Wziq{$0G>ZLCNLRlZC0k@H-7Kpz>^O34>l*9U zjS7G|{PX4+t&+H}6TE>v!{4bDWNycXkr$!O>KVxgXvX2u^31t3+I34uhY{{Lz*_aD zcBWTZzmE21K)DsUlSonPN!g6q6Q#Z~GItQ1Nsfo1iIUs{bbpE9F*#evI!M3>s;u#e zPJkvXy4wq{Shw%~1rWAAoP3l5H?ikl2s*7_?nR-XoX8CXwFJ*jsW%GWV>@2>wm*9h zg-57T2|>Al!c_eZ*%eqa^``v09s8!%fo^?1RVssqf85{T?h>LxWr4-44by|NFWKER z$vz_3kJAsfzq4QC7em8ZKZ1(t) zwe&d2whvjyAB{rc)735Plh|Q`P6C~Pn$!*4Ia{wDCUY%L+cVIb{R+Zpe*f10w0)Yb diff --git a/backend.py b/backend.py index a1d1a32..efa6ae4 100644 --- a/backend.py +++ b/backend.py @@ -1272,11 +1272,12 @@ def _manual_install_efi_files(mount_point: str, efi_target: str, efi_grub_file: # 可能的源路径: source_paths = [] - # 1. 从 /boot/efi/EFI/centos 或 /boot/efi/EFI/redhat 复制 - for subdir in ["centos", "redhat", "fedora", "rocky", "almalinux", "boot"]: + # 1. 从 /boot/efi/EFI/ 复制 + for subdir in ["centos", "redhat", "fedora", "rocky", "almalinux", "BOOT", "boot"]: source_paths.append(os.path.join(efi_firmware_dir, subdir, efi_grub_file)) source_paths.append(os.path.join(efi_firmware_dir, subdir, "shimx64.efi")) source_paths.append(os.path.join(efi_firmware_dir, subdir, "shim.efi")) + source_paths.append(os.path.join(efi_firmware_dir, subdir, "grubx64.efi")) # 2. 从 /boot/efi/ 直接查找 source_paths.append(os.path.join(mount_point, "boot/efi", efi_grub_file)) @@ -1286,6 +1287,21 @@ def _manual_install_efi_files(mount_point: str, efi_target: str, efi_grub_file: grub_modules_dir = os.path.join(mount_point, f"usr/lib/grub/{efi_target}") source_paths.append(os.path.join(grub_modules_dir, "grubx64.efi")) + # 4. CentOS/RHEL 特定的路径 + source_paths.append(os.path.join(mount_point, "boot/efi/EFI/centos/grubx64.efi")) + source_paths.append(os.path.join(mount_point, "boot/efi/EFI/centos/shimx64.efi")) + source_paths.append(os.path.join(mount_point, "usr/share/grub2/grubx64.efi")) + + # 5. 尝试查找任何 .efi 文件 + try: + if os.path.exists(efi_firmware_dir): + for root, dirs, files in os.walk(efi_firmware_dir): + for f in files: + if f.endswith('.efi'): + source_paths.append(os.path.join(root, f)) + except: + pass + # 查找 shim 和 grub shim_source = None grub_source = None @@ -1320,17 +1336,17 @@ def _manual_install_efi_files(mount_point: str, efi_target: str, efi_grub_file: if not grub_source and not shim_source: log_warning("未找到现有 EFI 文件,尝试使用 grub-mkimage 生成...") - # 构建 grub.efi 路径 - grub_efi_output = os.path.join(target_dir, efi_grub_file) - # 获取模块列表(必需模块) modules = "part_gpt part_msdos fat ext2 xfs btrfs normal boot linux configfile search search_fs_uuid search_fs_file" + # 构建 chroot 内的输出路径 + chroot_output_path = f"/boot/efi/EFI/{efi_bootloader_id}/{efi_grub_file}" + # 尝试使用 grub-mkimage 生成 EFI 文件 chroot_cmd_prefix = ["sudo", "chroot", mount_point] mkimage_cmd = chroot_cmd_prefix + [ "grub2-mkimage", - "-o", grub_efi_output, + "-o", chroot_output_path, "-O", efi_target, "-p", "/boot/grub2", ] + modules.split() @@ -1341,8 +1357,10 @@ def _manual_install_efi_files(mount_point: str, efi_target: str, efi_grub_file: timeout=60 ) - if success and os.path.exists(grub_efi_output): - log_success(f"✓ 成功生成 EFI 文件: {grub_efi_output}") + # 检查主机路径上的文件是否生成成功 + host_output_path = os.path.join(mount_point, chroot_output_path.lstrip('/')) + if success and os.path.exists(host_output_path): + log_success(f"✓ 成功生成 EFI 文件: {host_output_path}") else: log_error(f"生成 EFI 文件失败: {stderr}") return False