From 363c44887280612ec95995e05709bda3e3f4910a Mon Sep 17 00:00:00 2001 From: zj <1052308357@qq.com> Date: Wed, 11 Feb 2026 15:13:21 +0800 Subject: [PATCH] 1 --- __pycache__/backend.cpython-39.pyc | Bin 40438 -> 41382 bytes backend.py | 65 +++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/__pycache__/backend.cpython-39.pyc b/__pycache__/backend.cpython-39.pyc index 3da93ce97a6e51dd9b5ef27524aa212b321d9268..2319b42bac4dd01e2a30bfa6f87e3e06762a5765 100644 GIT binary patch delta 2325 zcmZuyYj6`)6yCF&Y&U6MO-ciWLJAZbXj5KRk;e#vVs)I36vYVCmfOYxP30zWEbI~( zrsZLQ;B6KA7#l=Dgo5t)T>*PU2El5HF=tcA>S6zL=fXMxbUvnm4<3-h( z5NTo5PNrqF%Y~>&rt>-Oui&E!r1B*JcRit+Fk0Xs#Jz$lVgPs4q`FBJDI>N$5^m(- zXZ&w?k=Fh@JWpUbf^Mvh+QaJ^>`D!FrFSNNIn$MXYis(=x3i`LCsT>TseLD} zb{`D{0`JJ1yj8IXt%@|ZgsVa{);O!OB^-%1Y}l}A^u31G^=sS0%`Kr#MR!@^=#z7~ z2dgsY;rYJ+g?B4Qw#JI^JU(A~*SXZrQ@%%^TCv!d$^1cIU2GKEe(GmgH6Hq-_v4v^ z$7W~BaCInoHPM-R<7j#}o_IGFAhr8VtihGDo$3B#|3x(*Q>O-oPxf5fu_yi7sSF&J z#&4$A5tIJR#SJcQa`77qzZ8_(W3538ZEC5>R!gjGkBvoJ>ddF9ogdzfmCM$!Upc)e z{rX^9@A+>o?A&S!9yW8$w(6jjzl-`88=@~nf|lmCSeVo|gxiCboSI(7U_m=(kV&9^ zZ7X5#uPKLK_Whc5_bDZ9thRoXqY!a( zOdDpA`pxmk1-!L3emn8v+mU8@Y98M4`I>?hQ;-1`gJOBAB?)wImTpQCG^;8NimEk< zo`_&om6030ajz;RAo69@LL6C=IgQbZh_GEmqOL&?7uTuG`+OjN+ki6VpiDU^wBYvI zXg(?6+ru^_kDJek2dT6HSA_<&jf~2S144FPWQ=wU2&+UbU*n!$RTx3W)o9h$Cy+5@ zOnlIx<|hG7rmS;ub{tE_6&iq~1X(&>m9R+w{f>+ei)4akj{-3fGoH#$d?7O_B?__Z zkyc5XS#xNzYQ~1*#*3q<5}#RTEUirur)Kz z5M~Hr1rsXg5%6{U@pZdZ_cDCn3pLNkX^5%Eu>i+{|!2*R*`RFZr(a4W-WZASWq833|)g*Fnz5 z8C7(-sSaQid#<^7!qa$h=^`#dC@v|D4UwjBLu(UVz;$_Sb8`th*gPHz+2_skYl2n| zJ;JcuJVPr5$y9Inns^v9ilAap4-Iq`;sx`Xnp^5g3#D#W8d@~dY{Ku-ZZrt83z@}v z<^b#8HqivgHqj*+Otf&$+3>Lf+ZHMYne~U3L6M#c-7tZdUEDA{MdShTD~6mv0_{n$DH>)DoY2l#YTTboT*xIUk?Z+;h?dYSsC1mjrg)&beV^)~j! zR=;fLQ>%V+>mifZg>!!~_mTsJe@11vQovve(nEA+B`1A Ijt|uQ19Moje*gdg delta 1376 zcmYjRTTC2P7(V~Z&g|@cfrW)Fl-mjnt`#VPD6MV9RtfPzsKrWcfdj~57kWCHs?@AcW0ekzNU5`xiuIhgXUp>3KDpg0sv} zs8^6MWa_h}Y7!I1r4-gdpPx7P?uAu8(pxaPYRc?S!$|`oF5xva8no$WwUfjPXl2{^ z8qL|1X|iR9Z0W+P&?P0ENeyFjO|m^cT6w0nNNAXbGj7wl0(j!s%FW-B1vD}mvJ28( zcw2?0{1QQmuhGJUM2nIx1E_;4NZmzu4=A*lYSeXE?vj&A(w$UI1!HgGI3=b#<5{`e z+8g&_OF~Omq@>3Xmf!TOKuTf{Vsx2k{z{qQ%>>Xp3Q4cwpyfu;^v1Ks1xx$!9V3Z) z2Qji!(#!Qgl0Hm{;H^gQKHy{I8A9(#`p)|j?oC-kYDhxE7WPUE;8I+Lq~G+nkQ4ip zf$d?aY6ftaDl;H@#i+hBlWNZ-u{JDGy?HFSrld1%^j_Sgm{s4`1J*bFbD+A#IykN2 z=R2S@hc)3EuwDVz1vCqIM8G})D*t=1NPSwU2YFt+41&BV-W+AJsNq03t_`pkdrtPA zrmPF2jywDM2T#&L#)AA-{9y49GA{i&JRoXN7VD^iAKd?XB?q`6DDm2%2sn7#(BlxY zW`}-pKrVlMWTOJ96DA2bfT?;GyNQD32}f8!zJLOrI+KPPzK2b~ZtEj9>{Xq@@8X z#cxdRttu9FiGaU^vs7qh0?HBAq~W18xsNfXaMx6k=YLGC+NpN|E?VDB-v)?T?_F+H z0Qj$0rls2oALIQ{Yi;oJphd8Z4%jR)TMas2n0+4#dCS~UoZzjw`=H+XaxMno<-fgo z4qx}gd;a|-+Km&Iy-0yop)Q~qXtK2%UupmJ>Ut4?|yODzzn z!>Ab*nLi;0spFrd4?z>Zla4Cl bool: timeout=300 ) + # 即使 yum 报告"已安装",也要检查实际命令是否存在 + # CentOS/RHEL 的命令可能在 /usr/sbin/ 下,需要确保 PATH 包含该路径 if success: - log_success(f"✓ GRUB 包安装成功") - return True + log_info("包安装命令执行完成,检查命令是否可用...") + + # 尝试查找 grub 相关命令的实际路径 + grub_paths = [ + "/usr/sbin/grub2-install", + "/usr/sbin/grub2-mkconfig", + "/usr/sbin/grub-install", + "/usr/sbin/grub-mkconfig", + "/sbin/grub2-install", + "/sbin/grub2-mkconfig", + ] + + found_any = False + for grub_path in grub_paths: + full_path = mount_point + grub_path + if os.path.exists(full_path): + log_info(f" 找到 GRUB 命令: {grub_path}") + found_any = True + + if found_any: + log_success(f"✓ GRUB 包已安装") + return True + else: + log_warning("包管理器报告成功,但未找到 GRUB 命令") + log_info("尝试重新安装...") + + # 强制重新安装 + if distro_type in ["centos", "rhel", "fedora", "rocky", "almalinux"]: + reinstall_cmd = chroot_cmd_prefix + ["yum", "reinstall", "-y"] + packages + run_command(reinstall_cmd, "强制重新安装 GRUB 包", timeout=300) + + # 再次检查 + for grub_path in grub_paths: + full_path = mount_point + grub_path + if os.path.exists(full_path): + log_info(f" 找到 GRUB 命令: {grub_path}") + return True + + log_error("仍无法找到 GRUB 命令") + return False else: log_error(f"✗ GRUB 包安装失败: {stderr}") return False @@ -994,7 +1034,7 @@ def check_chroot_environment(mount_point: str, distro_type: str = "unknown") -> """ log_step("检查 chroot 环境", f"挂载点: {mount_point}") - # 检查关键命令是否存在 + # 检查关键命令是否存在(在 PATH 中) critical_commands = ["grub-install", "grub-mkconfig", "update-grub", "grub2-install", "grub2-mkconfig"] found_commands = [] @@ -1007,6 +1047,25 @@ def check_chroot_environment(mount_point: str, distro_type: str = "unknown") -> else: log_debug(f" ✗ 未找到命令: {cmd}") + # 如果在 PATH 中未找到,检查常见的sbin路径(某些发行版sbin不在默认PATH中) + if not found_commands: + log_info("在 PATH 中未找到命令,检查 sbin 目录...") + sbin_paths = [ + "/usr/sbin/grub2-install", + "/usr/sbin/grub2-mkconfig", + "/usr/sbin/grub-install", + "/usr/sbin/grub-mkconfig", + "/sbin/grub2-install", + "/sbin/grub2-mkconfig", + ] + + for sbin_path in sbin_paths: + full_path = mount_point + sbin_path + if os.path.exists(full_path): + cmd_name = os.path.basename(sbin_path) + found_commands.append(cmd_name) + log_info(f" ✓ 找到命令: {sbin_path}") + if not found_commands: log_warning(f"chroot 环境中未找到关键的 GRUB 命令") log_info(f"尝试自动安装 GRUB 包...")