update test

This commit is contained in:
smart
2025-12-05 22:03:35 +08:00
parent c14259e233
commit fbc2e60bed
4 changed files with 0 additions and 0 deletions

93
build-smarttms-rpm.sh Normal file
View File

@@ -0,0 +1,93 @@
#!/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.spec" # SPEC 文件的绝对路径
# 应用程序源代码的实际目录,它位于 SOURCES_DIR 下面
SOURCE_CODE_ORIGINAL_DIR="$SOURCES_DIR/smarttms"
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 命令..."
# 使用 --define _topdir 明确告诉 rpmbuild 它的顶层目录
rpmbuild --define "_topdir $TOP_DIR" -ba "$SPEC_FILE"
echo "--- RPM 包构建完成! ---"
echo "生成的 RPM 包在: $TOP_DIR/RPMS/"
echo "生成的 SRPM 包在: $TOP_DIR/SRPMS/"