217 lines
5.3 KiB
Bash
Executable File
217 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Linux 存储管理器 - 跨平台构建脚本 (Tkinter 版本)
|
|
# 支持 Arch Linux 和 CentOS/RHEL 8
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 脚本目录
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
echo "========================================"
|
|
echo "Linux 存储管理器 - 跨平台构建 (Tkinter)"
|
|
echo "========================================"
|
|
|
|
# 检测操作系统
|
|
detect_os() {
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
OS=$NAME
|
|
VER=$VERSION_ID
|
|
elif type lsb_release >/dev/null 2>&1; then
|
|
OS=$(lsb_release -si)
|
|
VER=$(lsb_release -sr)
|
|
else
|
|
OS=$(uname -s)
|
|
VER=$(uname -r)
|
|
fi
|
|
echo -e "${GREEN}检测到系统: $OS $VER${NC}"
|
|
}
|
|
|
|
# 检查 Python 版本
|
|
check_python() {
|
|
if command -v python3 &> /dev/null; then
|
|
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
|
|
echo -e "${GREEN}Python版本: $PYTHON_VERSION${NC}"
|
|
|
|
# 检查 tkinter
|
|
if python3 -c "import tkinter" 2>/dev/null; then
|
|
echo -e "${GREEN}Tkinter 已安装${NC}"
|
|
else
|
|
echo -e "${RED}错误: 未找到 Tkinter${NC}"
|
|
echo -e "${YELLOW}请先安装 tkinter:${NC}"
|
|
echo " CentOS 8: sudo yum install python3-tkinter"
|
|
echo " Arch Linux: sudo pacman -S tk"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -e "${RED}错误: 未找到 Python3${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 安装依赖
|
|
install_deps() {
|
|
echo ""
|
|
echo "检查依赖..."
|
|
|
|
if [[ "$OS" == *"CentOS"* ]] || [[ "$OS" == *"Red Hat"* ]] || [[ "$OS" == *"RHEL"* ]]; then
|
|
echo -e "${YELLOW}为 CentOS/RHEL 安装依赖...${NC}"
|
|
|
|
# 检查是否为 root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
SUDO="sudo"
|
|
else
|
|
SUDO=""
|
|
fi
|
|
|
|
# 安装系统依赖
|
|
$SUDO yum install -y python3 python3-tkinter parted mdadm lvm2 || true
|
|
$SUDO yum install -y dosfstools e2fsprogs xfsprogs ntfs-3g || true
|
|
|
|
# 安装 Python 依赖
|
|
pip3 install pexpect --user || true
|
|
|
|
elif [[ "$OS" == *"Arch"* ]]; then
|
|
echo -e "${YELLOW}为 Arch Linux 安装依赖...${NC}"
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
SUDO="sudo"
|
|
else
|
|
SUDO=""
|
|
fi
|
|
|
|
# 安装系统依赖
|
|
$SUDO pacman -Sy --needed python tk parted mdadm lvm2 || true
|
|
$SUDO pacman -Sy --needed dosfstools e2fsprogs xfsprogs ntfs-3g || true
|
|
|
|
# 安装 Python 依赖
|
|
pip3 install pexpect --user || true
|
|
|
|
else
|
|
echo -e "${YELLOW}未知系统,尝试通用安装...${NC}"
|
|
pip3 install pexpect --user || true
|
|
fi
|
|
}
|
|
|
|
# 检查 PyInstaller
|
|
check_pyinstaller() {
|
|
if ! command -v pyinstaller &> /dev/null; then
|
|
echo -e "${YELLOW}安装 PyInstaller...${NC}"
|
|
pip3 install pyinstaller --user
|
|
fi
|
|
|
|
# 将用户 bin 目录添加到 PATH
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
}
|
|
|
|
# 测试运行
|
|
test_run() {
|
|
echo ""
|
|
echo "测试运行..."
|
|
python3 main.py --help 2>/dev/null || echo "测试跳过"
|
|
}
|
|
|
|
# 构建
|
|
build() {
|
|
echo ""
|
|
echo "========================================"
|
|
echo "开始构建..."
|
|
echo "========================================"
|
|
|
|
# 清理旧构建
|
|
rm -rf build dist
|
|
|
|
# 使用兼容的 spec 文件
|
|
if [ -f "disk-manager-compat.spec" ]; then
|
|
SPEC_FILE="disk-manager-compat.spec"
|
|
else
|
|
echo -e "${RED}错误: 找不到 disk-manager-compat.spec${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}使用 spec 文件: $SPEC_FILE${NC}"
|
|
|
|
# 执行构建
|
|
pyinstaller --clean -F "$SPEC_FILE"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}构建成功!${NC}"
|
|
echo -e "${GREEN}输出: dist/disk-manager${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
|
|
# 显示文件信息
|
|
if [ -f "dist/disk-manager" ]; then
|
|
ls -lh dist/disk-manager
|
|
fi
|
|
else
|
|
echo -e "${RED}构建失败!${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 创建启动脚本
|
|
create_launcher() {
|
|
echo ""
|
|
echo "创建启动脚本..."
|
|
|
|
cat > run.sh << 'EOF'
|
|
#!/bin/bash
|
|
# Linux 存储管理器启动脚本
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
if [ -f "$SCRIPT_DIR/dist/disk-manager" ]; then
|
|
# 打包版本
|
|
exec "$SCRIPT_DIR/dist/disk-manager" "$@"
|
|
elif [ -f "$SCRIPT_DIR/main.py" ]; then
|
|
# 源码版本
|
|
exec python3 "$SCRIPT_DIR/main.py" "$@"
|
|
else
|
|
echo "错误: 找不到 disk-manager 或 main.py"
|
|
exit 1
|
|
fi
|
|
EOF
|
|
chmod +x run.sh
|
|
echo -e "${GREEN}创建 run.sh 成功${NC}"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
detect_os
|
|
check_python
|
|
|
|
# 询问是否安装依赖
|
|
echo ""
|
|
read -p "是否安装系统依赖? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
install_deps
|
|
fi
|
|
|
|
check_pyinstaller
|
|
|
|
# 询问是否测试
|
|
echo ""
|
|
read -p "是否先测试运行? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
test_run
|
|
fi
|
|
|
|
# 构建
|
|
build
|
|
create_launcher
|
|
}
|
|
|
|
# 运行主函数
|
|
main
|