Files
GKI-build/check_packages.py
2025-07-01 17:04:17 +08:00

78 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import subprocess
# 要检查和安装的软件包列表
packages = [
"bc", # 任意精度计算器,内核 Makefile 中常用于数学计算
"bison", # 语法分析器生成工具,用于构建内核或其他复杂项目
"build-essential", # 包含 gcc/g++/make 等构建 C/C++ 项目的基础工具
"cpio", # 用于生成 initramfs 等归档格式
"curl", # 命令行工具,用于通过 URL 下载数据(支持 HTTPS
"flex", # 词法分析器生成工具,常与 bison 搭配使用
"git", # 用于克隆源码仓库,如 Linux 内核、AOSP 等
"libncurses-dev", # 支持终端图形界面,如 `make menuconfig` 内核配置工具
"libssl-dev", # OpenSSL 的开发库,用于支持加密通信或模块
"libelf-dev", # 用于处理 ELF 格式的文件,如内核镜像、调试信息等
"lzop", # 快速压缩工具,用于内核镜像/initramfs 的压缩
"python3", # Python 解释器,许多构建/打包脚本使用 Python 编写
"unzip", # 用于解压 .zip 格式压缩包,常用于处理资源或模块
"xz-utils", # 支持 .xz 格式压缩/解压,常见于内核源码压缩包
"zstd", # 高效压缩工具,内核支持的现代压缩算法
"rsync", # 高效文件同步工具,常用于备份或同步构建产物
"ca-certificates", # 安全证书库,确保 curl/wget 能安全访问 HTTPS 资源
"wget", # 类似 curl 的命令行下载工具,适合简单文件下载
"pahole", # 用于生成 BTF/DWARF 信息优化内核结构体布局eBPF等
"dwarves", # 包含 pahole 工具,用于调试和结构体分析
"zip", # 用于创建 .zip 压缩包,如打包 AnyKernel3 项目等
]
def is_installed(pkg_name):
"""检查软件包是否已安装"""
try:
subprocess.run(
["dpkg", "-s", pkg_name],
check=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
return True
except subprocess.CalledProcessError:
return False
def main():
print("检查并安装缺失的软件包...")
missing_packages = []
for pkg in packages:
if is_installed(pkg):
print(f"✅ 已安装:{pkg}")
else:
print(f"❌ 未安装:{pkg}")
missing_packages.append(pkg)
if missing_packages:
print("\n🔄 正在执行 apt-get update ...")
try:
subprocess.run(["sudo", "apt-get", "update"], check=True)
except subprocess.CalledProcessError:
print("❌ apt-get update 失败,请检查网络连接或源设置。")
return
print("\n⬇️ 开始安装以下缺失的软件包:")
print(" ".join(missing_packages))
try:
subprocess.run(
["sudo", "apt-get", "install", "-y"] + missing_packages, check=True
)
except subprocess.CalledProcessError:
print("❌ 安装部分软件包失败,请手动检查。")
else:
print("\n✅ 所有软件包已安装,无需操作。")
print("✅ 所有软件包检查完毕。")
if __name__ == "__main__":
main()