build rpm
This commit is contained in:
@@ -16,72 +16,15 @@ TOP_DIR="$PROJECT_ROOT/rpmbuild"
|
||||
# 3. 定义其他重要目录的绝对路径
|
||||
SOURCES_DIR="$TOP_DIR/SOURCES"
|
||||
SPECS_DIR="$TOP_DIR/SPECS"
|
||||
SPEC_FILE="$SPECS_DIR/smarttms.spec" # SPEC 文件的绝对路径
|
||||
SPEC_FILE="$SPECS_DIR/smarttms-mysql.spec" # SPEC 文件的绝对路径
|
||||
# 应用程序源代码的实际目录,它位于 SOURCES_DIR 下面
|
||||
SOURCE_CODE_ORIGINAL_DIR="$SOURCES_DIR/smarttms"
|
||||
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"
|
||||
echo "原始源代码目录 (待打包): $SOURCE_CODE_ORIGINAL_DIR"
|
||||
|
||||
|
||||
# 4. 检查原始源代码目录是否存在
|
||||
if [ ! -d "$SOURCE_CODE_ORIGINAL_DIR" ]; then
|
||||
echo "错误:找不到应用程序原始源代码目录 '$SOURCE_CODE_ORIGINAL_DIR'。"
|
||||
echo "请确保你的 'smarttms/' 目录位于 '$SOURCES_DIR' 下。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. 确保 SOURCES 目录存在
|
||||
mkdir -p "$SOURCES_DIR"
|
||||
|
||||
# 6. 从 SPEC 文件中提取 Name 和 Version
|
||||
# rpmbuild 期望 Source0 的格式为 %{name}-%{version}.tar.gz
|
||||
# 因此,我们需要确保生成的 tarball 名称和其内部的顶层目录名匹配这个约定。
|
||||
SPEC_NAME=$(grep "^Name:" "$SPEC_FILE" | awk '{print $2}')
|
||||
SPEC_VERSION=$(grep "^Version:" "$SPEC_FILE" | awk '{print $2}')
|
||||
|
||||
if [ -z "$SPEC_NAME" ] || [ -z "$SPEC_VERSION" ]; then
|
||||
echo "错误:无法从 '$SPEC_FILE' 中提取 Name 或 Version。"
|
||||
echo "请确保 SPEC 文件中包含 'Name: <package_name>' 和 'Version: <package_version>'。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# rpmbuild 期望的解压后的顶层目录名 (例如 smarttms-1.0)
|
||||
EXPECTED_UNPACK_DIR_NAME="${SPEC_NAME}-${SPEC_VERSION}"
|
||||
# 最终生成的 tarball 文件名 (例如 smarttms-1.0.tar.gz),与 Source0 匹配
|
||||
TARBALL_NAME="${EXPECTED_UNPACK_DIR_NAME}.tar.gz"
|
||||
TARBALL_PATH="$SOURCES_DIR/$TARBALL_NAME"
|
||||
|
||||
echo "从SPEC文件获取到: Name=$SPEC_NAME, Version=$SPEC_VERSION"
|
||||
echo "rpmbuild预期的解压目录名: $EXPECTED_UNPACK_DIR_NAME"
|
||||
echo "最终的tarball名称 (应与SPEC文件中的Source0匹配): $TARBALL_NAME"
|
||||
|
||||
|
||||
# 7. 清理旧的 tarball
|
||||
echo "清理旧的 tarball: $TARBALL_PATH"
|
||||
rm -f "$TARBALL_PATH"
|
||||
|
||||
# 8. 创建新的 tarball,使其解压后为期望的目录名 (例如 smarttms-1.0)
|
||||
echo "创建新的 tarball: $TARBALL_PATH"
|
||||
|
||||
# 创建一个临时目录作为打包的暂存区
|
||||
STAGING_TEMP_DIR=$(mktemp -d)
|
||||
# 确保脚本退出时清理临时目录
|
||||
trap "rm -rf '$STAGING_TEMP_DIR'" EXIT
|
||||
|
||||
# 将原始源代码复制到暂存区,并重命名为 rpmbuild 期望的目录名
|
||||
echo "将原始源代码 '$SOURCE_CODE_ORIGINAL_DIR' 复制到临时暂存区并重命名为 '$EXPECTED_UNPACK_DIR_NAME'"
|
||||
cp -r "$SOURCE_CODE_ORIGINAL_DIR" "$STAGING_TEMP_DIR/$EXPECTED_UNPACK_DIR_NAME"
|
||||
|
||||
# 在暂存区内执行 tar 命令,压缩重命名后的目录
|
||||
# 这样生成的 tarball 解压后就会得到 EXPECTED_UNPACK_DIR_NAME/ 目录
|
||||
(cd "$STAGING_TEMP_DIR" && tar -czvf "$TARBALL_PATH" "$EXPECTED_UNPACK_DIR_NAME")
|
||||
|
||||
echo "Tarball '$TARBALL_PATH' 已创建,其内容解压后将为顶层目录 '$EXPECTED_UNPACK_DIR_NAME/'。"
|
||||
|
||||
# 9. 执行 rpmbuild
|
||||
echo "执行 rpmbuild 命令..."
|
||||
|
||||
Reference in New Issue
Block a user