152 lines
4.9 KiB
Bash
Executable File
152 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
set -euo pipefail
|
||
|
||
# 颜色定义(便于输出提示)
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 支持的 Ubuntu 版本列表
|
||
SUPPORTED_VERSIONS=("20.04" "22.04" "24.04")
|
||
|
||
# 检查是否为 root/有 sudo 权限
|
||
check_sudo() {
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
echo -e "${YELLOW}提示:需要 sudo 权限,即将请求管理员密码...${NC}"
|
||
if ! sudo -v; then
|
||
echo -e "${RED}错误:无 sudo 权限,无法继续安装${NC}"
|
||
exit 1
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# 检测 Ubuntu 版本并验证是否支持
|
||
detect_ubuntu_version() {
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
if [ "$ID" != "ubuntu" ]; then
|
||
echo -e "${RED}错误:仅支持 Ubuntu 系统,当前系统为 $ID${NC}"
|
||
exit 1
|
||
fi
|
||
UBUNTU_VERSION=$VERSION_ID
|
||
echo -e "${GREEN}检测到 Ubuntu 版本:$UBUNTU_VERSION${NC}"
|
||
|
||
# 验证版本是否支持
|
||
if ! [[ " ${SUPPORTED_VERSIONS[@]} " =~ " $UBUNTU_VERSION " ]]; then
|
||
echo -e "${RED}错误:仅支持 Ubuntu ${SUPPORTED_VERSIONS[*]},当前版本为 $UBUNTU_VERSION,不支持安装${NC}"
|
||
exit 1
|
||
fi
|
||
else
|
||
echo -e "${RED}错误:无法检测系统版本${NC}"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# 通用工具安装(20.04/22.04/24.04 共用)
|
||
install_common_packages() {
|
||
echo -e "${GREEN}===== 安装通用编译工具 =====${NC}"
|
||
sudo apt update -y
|
||
sudo apt install -y \
|
||
cmake mtools scons curl flex bison gperf build-essential zip \
|
||
device-tree-compiler libsdl2-dev libpng-dev libcurl4-openssl-dev libssl-dev \
|
||
gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib \
|
||
g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev ccache \
|
||
libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool gdb u-boot-tools git \
|
||
python3 python3-pip python-is-python3 lib32z-dev fakeroot mtd-utils \
|
||
android-sdk-libsparse-utils cpio
|
||
|
||
# 修复可能的依赖问题
|
||
sudo apt -f install -y
|
||
}
|
||
|
||
# Ubuntu 20.04 专属安装
|
||
install_ubuntu_2004() {
|
||
echo -e "${GREEN}===== 安装 Ubuntu 20.04 专属依赖 =====${NC}"
|
||
# 安装 ncurses 相关
|
||
sudo apt install -y libncurses5 lib32ncurses-dev
|
||
# 安装 xlrd 1.2.0(突破系统环境限制)
|
||
echo -e "${YELLOW}安装 xlrd 1.2.0...${NC}"
|
||
pip3 install xlrd==1.2.0 --break-system-packages
|
||
}
|
||
|
||
# Ubuntu 22.04 专属安装(适配逻辑同 20.04,ncurses 兼容 + xlrd 1.2.0)
|
||
install_ubuntu_2204() {
|
||
echo -e "${GREEN}===== 安装 Ubuntu 22.04 专属依赖 =====${NC}"
|
||
# 22.04 兼容 20.04 的 ncurses 依赖,同时支持 xlrd 1.2.0
|
||
sudo apt install -y libncurses5 lib32ncurses-dev
|
||
# 安装 xlrd 1.2.0(突破系统环境限制)
|
||
echo -e "${YELLOW}安装 xlrd 1.2.0...${NC}"
|
||
pip3 install xlrd==1.2.0
|
||
}
|
||
|
||
# Ubuntu 24.04 专属安装
|
||
install_ubuntu_2404() { echo -e "${GREEN}===== 安装 Ubuntu 24.04 专属依赖 =====${NC}"
|
||
# 添加 i386 架构
|
||
sudo dpkg --add-architecture i386
|
||
sudo apt update -y
|
||
# 安装 ncurses 相关
|
||
sudo apt install -y libncurses6 libncurses6:i386 libncurses-dev libncurses-dev:i386
|
||
# 安装 openpyxl
|
||
sudo apt install -y python3-openpyxl
|
||
}
|
||
|
||
# 验证安装结果
|
||
verify_installation() {
|
||
echo -e "${GREEN}===== 验证安装结果 =====${NC}"
|
||
# 检查核心工具
|
||
local tools=("cmake" "scons" "dtc" "python3" "pip3" "cpio" "fakeroot")
|
||
for tool in "${tools[@]}"; do
|
||
if command -v "$tool" &>/dev/null; then
|
||
echo -e "${GREEN}[✓] $tool 安装成功${NC}"
|
||
else
|
||
echo -e "${RED}[✗] $tool 安装失败${NC}"
|
||
fi
|
||
done
|
||
# 检查 Python 库
|
||
if [ "$UBUNTU_VERSION" = "20.04" ] || [ "$UBUNTU_VERSION" = "22.04" ]; then
|
||
if python3 -c "import xlrd; assert xlrd.__version__ == '1.2.0'" &>/dev/null; then
|
||
echo -e "${GREEN}[✓] xlrd 1.2.0 安装成功${NC}"
|
||
else
|
||
echo -e "${RED}[✗] xlrd 1.2.0 安装失败${NC}"
|
||
fi
|
||
elif [ "$UBUNTU_VERSION" = "24.04" ]; then
|
||
if python3 -c "import openpyxl" &>/dev/null; then
|
||
echo -e "${GREEN}[✓] openpyxl 安装成功${NC}"
|
||
else
|
||
echo -e "${RED}[✗] openpyxl 安装失败${NC}"
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# 主流程
|
||
main() {
|
||
echo -e "${GREEN}===== 开始搭建 XOS 编译环境 =====${NC}"
|
||
check_sudo
|
||
detect_ubuntu_version
|
||
install_common_packages
|
||
|
||
case "$UBUNTU_VERSION" in
|
||
20.04)
|
||
install_ubuntu_2004
|
||
;;
|
||
22.04)
|
||
install_ubuntu_2204
|
||
;;
|
||
24.04)
|
||
install_ubuntu_2404
|
||
;;
|
||
*)
|
||
# 理论上不会走到这里(已在 detect_ubuntu_version 验证)
|
||
echo -e "${RED}错误:不支持的 Ubuntu 版本${NC}"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
verify_installation
|
||
echo -e "${GREEN}===== XOS 编译环境搭建完成 =====${NC}"
|
||
}
|
||
|
||
# 执行主流程
|
||
main
|