#!/usr/bin/env bash # 把 `make install` 装出来的目录打成 .rpm(用 rpmbuild,不需要 root) # 用法: build-rpm.sh <安装树> <版本> <输出目录> set -euo pipefail usage() { echo "用法: $0 <安装树> <版本> <输出目录>" >&2 exit 2 } [ $# -eq 4 ] || usage stage=$(cd "$1" && pwd) version=$2 arch=$3 mkdir -p "$4" out=$(cd "$4" && pwd) if [ ! -x "$stage/usr/bin/VoiletMark" ]; then echo "安装树里找不到 usr/bin/VoiletMark: $stage" >&2 exit 1 fi repo=$(cd "$(dirname "$0")/.." && pwd) work=$(mktemp -d) trap 'rm -rf "$work"' EXIT top=$work/rpmbuild mkdir -p "$top/BUILD" "$top/BUILDROOT" "$top/RPMS" "$top/SOURCES" "$top/SPECS" "$top/SRPMS" cp -a "$stage" "$top/SOURCES/root" find "$top/SOURCES/root" -type d -exec chmod 755 {} + install -Dm644 "$repo/README.md" "$top/SOURCES/root/usr/share/doc/voiletmark/README.md" cat > "$top/SPECS/voiletmark.spec" </dev/null cp "$top/RPMS/$arch"/*.rpm "$out/" echo "已生成 $(ls "$out"/*.rpm)"