#!/bin/bash set -e # 任何命令失败时立即退出 echo "--- 开始构建 RPM 包 ---" # 1. 获取脚本自身的绝对路径 # SCRIPT_PATH 是脚本的完整路径 (例如: /home/smart/smarttms-rpm-build/smarttms-rpm-build.sh) SCRIPT_PATH=$(readlink -f "${BASH_SOURCE[0]}") # PROJECT_ROOT 是脚本所在的目录,也是整个项目的根目录 (例如: /home/smart/smarttms-rpm-build) PROJECT_ROOT=$(dirname "$SCRIPT_PATH") # 2. 根据项目根目录确定 rpmbuild 的顶层目录 # TOP_DIR 是 rpmbuild 的根目录 (例如: /home/smart/smarttms-rpm-build/rpmbuild) TOP_DIR="$PROJECT_ROOT/rpmbuild" # 3. 定义其他重要目录的绝对路径 SOURCES_DIR="$TOP_DIR/SOURCES" SPECS_DIR="$TOP_DIR/SPECS" SPEC_FILE="$SPECS_DIR/smarttms-mysql.spec" # SPEC 文件的绝对路径 # 应用程序源代码的实际目录,它位于 SOURCES_DIR 下面 SOURCE_CODE_ORIGINAL_DIR="$SOURCES_DIR/smarttms-mysql" echo "脚本路径: $SCRIPT_PATH" echo "项目根目录: $PROJECT_ROOT" echo "RPM构建顶层目录 (_topdir): $TOP_DIR" echo "SOURCES目录: $SOURCES_DIR" echo "SPEC文件: $SPEC_FILE" # 9. 执行 rpmbuild echo "执行 rpmbuild 命令..." # 使用 --define _topdir 明确告诉 rpmbuild 它的顶层目录 rpmbuild --define "_topdir $TOP_DIR" -ba "$SPEC_FILE" echo "--- RPM 包构建完成! ---" echo "生成的 RPM 包在: $TOP_DIR/RPMS/" echo "生成的 SRPM 包在: $TOP_DIR/SRPMS/"