Files
upstream-centrifugo/misc/scripts/package.sh
upstream-mirror b352a9a30d
Some checks failed
test / Lint (push) Failing after 3s
test / Test with Go 1.26.8 (push) Failing after 2s
snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:17:21 +05:00

208 lines
5.5 KiB
Bash
Executable File

#!/bin/sh
#
# Debian 7: lsb sysv
# Debian 8: systemd
# Ubuntu 14.04: upstart
# Ubuntu 16.04: systemd
# Centos 6: sysv
# Centos 7: systemd
#
if [ "$1" = "" ]
then
echo "Usage: $0 <version> <iteration>"
exit
fi
if [ "$2" = "" ]
then
echo "Usage: $0 <version> <iteration>"
exit
fi
VERSION=$1
ITERATION=$2
UNIX_NOW=$( date +%s )
INSTALL_DIR=/usr/bin
LOG_DIR=/var/log/centrifugo
CONFIG_DIR=/etc/centrifugo
LOGROTATE_DIR=/etc/logrotate.d
DATA_DIR=/var/lib/centrifugo
SCRIPT_DIR=/usr/lib/centrifugo
SAMPLE_CONFIGURATION=misc/packaging/config.json
INITD_SCRIPT=misc/packaging/initd.sh
INITD_EL6_SCRIPT=misc/packaging/initd.el6.sh
UPSTART_SCRIPT=misc/packaging/centrifugo.upstart
SYSTEMD_SCRIPT=misc/packaging/centrifugo.service
POSTINSTALL_SCRIPT=misc/packaging/post_install.sh
PREINSTALL_SCRIPT=misc/packaging/pre_install.sh
POSTUNINSTALL_SCRIPT=misc/packaging/post_uninstall.sh
LOGROTATE=misc/packaging/logrotate
TMP_WORK_DIR=`mktemp -d`
TMP_BINARIES_DIR=`mktemp -d`
ARCH=amd64
NAME=centrifugo
LICENSE=MIT
URL="https://github.com/centrifugal/centrifugo"
MAINTAINER="frvzmb@gmail.com"
VENDOR=centrifugo
DESCRIPTION="Real-time messaging server"
echo "Start packaging, version: $VERSION, iteration: $ITERATION, release time: $UNIX_NOW"
# cleanup_exit removes all resources created during the process and exits with
# the supplied returned code.
cleanup_exit() {
rm -r $TMP_WORK_DIR
rm -r $TMP_BINARIES_DIR
exit $1
}
# make_dir_tree creates the directory structure within the packages.
make_dir_tree() {
work_dir=$1
mkdir -p $work_dir/$INSTALL_DIR
if [ $? -ne 0 ]; then
echo "Failed to create install directory -- aborting."
cleanup_exit 1
fi
mkdir -p $work_dir/$SCRIPT_DIR/scripts
if [ $? -ne 0 ]; then
echo "Failed to create script directory -- aborting."
cleanup_exit 1
fi
mkdir -p $work_dir/$CONFIG_DIR
if [ $? -ne 0 ]; then
echo "Failed to create configuration directory -- aborting."
cleanup_exit 1
fi
mkdir -p $work_dir/$LOGROTATE_DIR
if [ $? -ne 0 ]; then
echo "Failed to create logrotate directory -- aborting."
cleanup_exit 1
fi
}
# do_build builds the code. The version and commit must be passed in.
do_build() {
echo "Start building binary"
if [ -z "$STATS_ENDPOINT" ]
then
echo "STATS_ENDPOINT not defined"
cleanup_exit 1
else
echo "STATS_ENDPOINT found"
fi
if [ -z "$STATS_TOKEN" ]
then
echo "STATS_TOKEN not defined"
cleanup_exit 1
else
echo "STATS_TOKEN found"
fi
CGO_ENABLED=0 GOOS="linux" GOARCH="amd64" go build -ldflags="-X github.com/centrifugal/centrifugo/v6/internal/build.Version=$VERSION -X github.com/centrifugal/centrifugo/v6/internal/build.UsageStatsEndpoint=$STATS_ENDPOINT -X github.com/centrifugal/centrifugo/v6/internal/build.UsageStatsToken=$STATS_TOKEN" -o "$TMP_BINARIES_DIR/centrifugo"
echo "Binary build completed successfully"
"$TMP_BINARIES_DIR"/centrifugo version
}
do_build $VERSION
make_dir_tree $TMP_WORK_DIR
cp $TMP_BINARIES_DIR/centrifugo $TMP_WORK_DIR/$INSTALL_DIR/
if [ $? -ne 0 ]; then
echo "Failed to copy binaries to packaging directory ($TMP_WORK_DIR/$INSTALL_DIR/) -- aborting."
cleanup_exit 1
fi
echo "centrifugo binary copied to $TMP_WORK_DIR/$INSTALL_DIR/"
cp $INITD_SCRIPT $TMP_WORK_DIR/$SCRIPT_DIR/scripts/initd.sh
if [ $? -ne 0 ]; then
echo "Failed to copy init.d script to packaging directory ($TMP_WORK_DIR/$SCRIPT_DIR/) -- aborting."
cleanup_exit 1
fi
echo "initd script copied to $TMP_WORK_DIR/$SCRIPT_DIR/scripts"
cp $INITD_EL6_SCRIPT $TMP_WORK_DIR/$SCRIPT_DIR/scripts/initd.el6.sh
if [ $? -ne 0 ]; then
echo "Failed to copy initd.el6.sh script to packaging directory ($TMP_WORK_DIR/$SCRIPT_DIR/) -- aborting."
cleanup_exit 1
fi
echo "initd.el6 script copied to $TMP_WORK_DIR/$SCRIPT_DIR/scripts"
cp $SYSTEMD_SCRIPT $TMP_WORK_DIR/$SCRIPT_DIR/scripts/centrifugo.service
if [ $? -ne 0 ]; then
echo "Failed to copy systemd script to packaging directory -- aborting."
cleanup_exit 1
fi
echo "systemd script copied to $TMP_WORK_DIR/$SCRIPT_DIR/scripts"
cp $UPSTART_SCRIPT $TMP_WORK_DIR/$SCRIPT_DIR/scripts/centrifugo.upstart
if [ $? -ne 0 ]; then
echo "Failed to copy upstart script to packaging directory -- aborting."
cleanup_exit 1
fi
echo "upstart script copied to $TMP_WORK_DIR/$SCRIPT_DIR/scripts"
install -m 644 $LOGROTATE $TMP_WORK_DIR/$LOGROTATE_DIR/centrifugo
if [ $? -ne 0 ]; then
echo "Failed to copy logrotate configuration to packaging directory -- aborting."
cleanup_exit 1
fi
echo "logrotate script copied to $TMP_WORK_DIR/$LOGROTATE_DIR/centrifugo"
COMMON_FPM_ARGS="\
-C $TMP_WORK_DIR \
--log error \
--version $VERSION \
--iteration $ITERATION \
--name $NAME \
--vendor $VENDOR \
--url $URL \
--category Network \
--license $LICENSE \
--maintainer $MAINTAINER \
--force \
--after-install $POSTINSTALL_SCRIPT \
--before-install $PREINSTALL_SCRIPT \
--after-remove $POSTUNINSTALL_SCRIPT \
--config-files $CONFIG_DIR \
--config-files $LOGROTATE_DIR "
echo "Start building rpm package"
rm -r ./PACKAGES
mkdir -p PACKAGES
fpm -s dir -t rpm $COMMON_FPM_ARGS --description "$DESCRIPTION" \
--rpm-os linux \
-p PACKAGES/ \
-a amd64 .
echo "Start building deb package"
fpm -s dir -t deb $COMMON_FPM_ARGS --description "$DESCRIPTION" \
-p PACKAGES/ \
-a amd64 .
cd PACKAGES
for f in *.deb; do sha256sum $f >> ${f}_checksum.txt; done
for f in *.rpm; do sha256sum $f >> ${f}_checksum.txt; done
cd ..
echo "Packaging complete!"
cleanup_exit 0