| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #!/bin/sh
- set -e
- if [ -z "$ROOT_DIR" ]; then
- pushd $(dirname $(readlink -f "$BASH_SOURCE")) > /dev/null
- ROOT_DIR=$(cd .. && pwd)
- popd > /dev/null
- fi
- SRC_BIN=$ROOT_DIR/_output/bin
- SRC_BUILD=$ROOT_DIR/build
- OUTPUT_DIR=$ROOT_DIR/_output/rpms
- PKG=$1
- BIN_PATH=${2:-/opt/yunion/bin}
- if [ -z "$PKG" ]; then
- echo "Usage: $0 <package>"
- exit 1
- fi
- BIN="$SRC_BIN/$PKG"
- ROOT="$SRC_BUILD/$PKG"
- if [ ! -x "$BIN" ]; then
- echo "$BIN not exists"
- exit 1
- fi
- if [ ! -x "$ROOT" ]; then
- echo "$ROOT not exists"
- exit 1
- fi
- . $ROOT/vars
- BUILDROOT=$(mktemp -d 2>/dev/null || mktemp -d -t 'yunion')
- function cleanup {
- rm -rf "$BUILDROOT"
- echo "Deleted temp working directory $BUILDROOT"
- }
- # register the cleanup function to be called on the EXIT signal
- trap cleanup EXIT
- echo "Build root ${BUILDROOT}"
- # BRANCH=$(git rev-parse --abbrev-ref HEAD)
- # TAG=$(git describe --exact-match --tags)
- if [ -z "$VERSION" ]; then
- TAG=$(git describe --abbrev=0 --tags || echo testing)
- VERSION=${TAG/\//-}
- if [[ "$VERSION" =~ ^v0. ]]; then
- VERSION=${VERSION/v0./}
- elif [[ "$VERSION" =~ ^v ]]; then
- VERSION=${VERSION/v/}
- fi
- VERSION=${VERSION//-/.}
- fi
- RELEASE=`date +"%y%m%d%H"`
- SPEC_DIR=$BUILDROOT/SPECS
- SPEC_FILE=$SPEC_DIR/${PKG}.spec
- RPM_DIR=$BUILDROOT/RPMS
- if [ -z "$OWNER" ]; then
- OWNER=yunion
- fi
- if [ -z "$SERVICE" ]; then
- SERVICE="0"
- fi
- mkdir -p $SPEC_DIR
- echo "# Yunion RPM spec
- %global owner $OWNER
- %global pkgname yunion-$PKG
- %global homedir /var/run/%{owner}
- %global use_systemd $SERVICE
- Name: %{pkgname}
- Version: $VERSION
- Release: $RELEASE
- Summary: %{pkgname}
- Group: Unspecified
- License: GPL
- URL: https://www.yunion.io/doc
- $(for req in "${REQUIRES[@]}"; do echo Requires: "$req"; done)
- %if %{use_systemd}
- Requires: systemd
- BuildRequires: systemd
- %endif
- %description
- $DESCRIPTION
- %prep
- %build
- %install
- install -D -m 0755 $BIN \$RPM_BUILD_ROOT$BIN_PATH/$PKG
- for bin in $EXTRA_BINS; do
- install -D -m 0755 $SRC_BIN/\$bin \$RPM_BUILD_ROOT$BIN_PATH/\$bin
- done
- if [ -d $ROOT/root ]; then
- rsync -a $ROOT/root/ \$RPM_BUILD_ROOT
- fi
- %pre" > $SPEC_FILE
- if [ -f $ROOT/preinst ]; then
- cat $ROOT/preinst >> $SPEC_FILE
- else
- echo "
- %if %{use_systemd}
- getent group %{owner} >/dev/null || /usr/sbin/groupadd -r %{owner}
- getent passwd %{owner} >/dev/null || /usr/sbin/useradd -r -s /sbin/nologin -d %{homedir} -M -g %{owner} %{owner}
- %endif
- " >> $SPEC_FILE
- fi
- echo "
- %post" >> $SPEC_FILE
- if [ -f $ROOT/postinst ]; then
- cat $ROOT/postinst >> $SPEC_FILE
- else
- echo "
- %if %{use_systemd}
- /usr/bin/systemctl preset %{pkgname}.service >/dev/null 2>&1 ||:
- %endif
- " >> $SPEC_FILE
- fi
- echo "
- %preun" >> $SPEC_FILE
- if [ -f $ROOT/prerm ]; then
- cat $ROOT/prerm >> $SPEC_FILE
- else
- echo "
- %if %{use_systemd}
- /usr/bin/systemctl --no-reload disable %{pkgname}.service >/dev/null 2>&1 || :
- /usr/bin/systemctl stop %{pkgname}.service >/dev/null 2>&1 ||:
- %endif
- " >> $SPEC_FILE
- fi
- echo "
- %postun" >> $SPEC_FILE
- if [ -f $ROOT/postrm ]; then
- cat $ROOT/postrm >> $SPEC_FILE
- else
- echo "
- %if %{use_systemd}
- /usr/bin/systemctl daemon-reload >/dev/null 2>&1 ||:
- %endif
- " >> $SPEC_FILE
- fi
- echo -n "
- %files
- %doc
- $BIN_PATH/$PKG
- " >> $SPEC_FILE
- for b in $EXTRA_BINS; do
- echo $BIN_PATH/$b >> $SPEC_FILE
- done
- if [ -d $ROOT/root/ ]; then
- find $ROOT/root/ -type f | sed -e "s:$ROOT/root::g" >> $SPEC_FILE
- fi
- TARGET=
- case "$GOARCH" in
- "arm64" | "aarch64" | "arm")
- TARGET="--target aarch64-redhat-linux"
- ;;
- "amd64" | "x86" | "i686" | "i386" | "x86_64")
- TARGET="--target x86_64-redhat-linux"
- ;;
- "riscv64")
- TARGET="--target riscv64-linux"
- ;;
- esac
- rpmbuild --define "_topdir $BUILDROOT" -bb $SPEC_FILE $TARGET
- find $RPM_DIR -type f | while read f; do
- d="$(dirname "$f")"
- d="$OUTPUT_DIR/${d#$RPM_DIR}"
- mkdir -p "$d"
- cp $f $d
- done
|