nimbus-eth2/scripts/make_packages.sh

174 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2020-2021 Status Research & Development GmbH. Licensed under
# either of:
# - Apache License, version 2.0
# - MIT license
# at your option. This file may not be copied, modified, or distributed except
# according to those terms.
set -e
####################
# argument parsing #
####################
GETOPT_BINARY="getopt"
if uname | grep -qi darwin; then
# macOS
GETOPT_BINARY=$(find /opt/homebrew/opt/gnu-getopt/bin/getopt /usr/local/opt/gnu-getopt/bin/getopt 2> /dev/null || true)
[[ -f "$GETOPT_BINARY" ]] || { echo "GNU getopt not installed. Please run 'brew install gnu-getopt'. Aborting."; exit 1; }
fi
! ${GETOPT_BINARY} --test > /dev/null
if [ ${PIPESTATUS[0]} != 4 ]; then
echo '`getopt --test` failed in this environment.'
exit 1
fi
OPTS="hb:t:"
LONGOPTS="help,binary:,tarball:,install-fpm"
# default values
BINARY=""
TARBALL=""
PKG_ARCH=""
print_help() {
cat <<EOF
Usage: $(basename "$0") --tarball dist/nimbus-eth2_Linux_amd64_1.5.4_382be3fd.tar.gz
-h, --help this help message
-b, --binary which binary to package (nimbus_beacon_node, nimbus_validator_client, ...)
-t, --tarball tarball produced by "make dist-..."
--install-fpm install the appropriate fpm version with "gem'
EOF
}
! PARSED=$(${GETOPT_BINARY} --options=${OPTS} --longoptions=${LONGOPTS} --name "$0" -- "$@")
if [ ${PIPESTATUS[0]} != 0 ]; then
# getopt has complained about wrong arguments to stdout
exit 1
fi
# read getopt's output this way to handle the quoting right
eval set -- "$PARSED"
while true; do
case "$1" in
-h|--help)
print_help
exit
;;
-b|--binary)
BINARY="$2"
shift 2
;;
-t|--tarball)
TARBALL="$2"
shift 2
;;
--install-fpm)
INSTALL_FPM="1"
shift 1
;;
--)
shift
break
;;
*)
echo "argument parsing error"
print_help
exit 1
esac
done
case "${TARBALL}" in
*_Linux_amd64_*)
PKG_ARCH_DEB="amd64"
PKG_ARCH_RPM="x86_64"
;;
*_Linux_arm32v7_*)
PKG_ARCH_DEB="armhf"
PKG_ARCH_RPM="armv7hl"
;;
*_Linux_arm64v8_*)
PKG_ARCH_DEB="arm64"
PKG_ARCH_RPM="aarch64"
;;
*)
echo "unsupported tarball type"
exit 1
;;
esac
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
PKG_NAME="$(echo ${BINARY} | tr '_' '-')"
PKG_IMG_DIR="${SCRIPT_DIR}/package_image/${BINARY}"
PKG_SRC_DIR="${SCRIPT_DIR}/package_src/${BINARY}"
PKG_VERSION="$(echo "${TARBALL}" | sed 's/^.*_\([^_]\+\)_[^_]\+$/\1/')"
TARBALL_TOP_DIR="$(echo "${TARBALL}" | sed 's#^.*/\([^/]\+\)\.tar\.gz$#\1#')"
PKG_PATH_DEB="${SCRIPT_DIR}/../dist/${PKG_NAME}_${PKG_VERSION}_${PKG_ARCH_DEB}.deb"
PKG_PATH_RPM="${SCRIPT_DIR}/../dist/${PKG_NAME}_${PKG_VERSION}_${PKG_ARCH_RPM}.rpm"
[ -d $PKG_SRC_DIR ] || { echo Unsupported binary "${BINARY}"; exit 1; }
FPM_VERSION=1.14.2
if [[ "$(fpm -v)" != "$FPM_VERSION" ]] ; then
if [[ "$INSTALL_FPM" == "1" ]] ; then
gem install fpm -v $FPM_VERSION
else
cat << EOF
Please install FPM $FPM_VERSION (https://fpm.readthedocs.io/en/latest/installation.html):
gem install fpm -v $FPM_VERSION
EOF
exit 1
fi
fi
rm -rf "${PKG_IMG_DIR}"
BIN_DIR="${PKG_IMG_DIR}/usr/bin"
rm -rf "${BIN_DIR}"
mkdir -p "${BIN_DIR}"
tar -xzf "${TARBALL}" --strip-components 2 -C "${BIN_DIR}" "${TARBALL_TOP_DIR}/build/${BINARY}"
cp -ar ${PKG_SRC_DIR}/image/* ${PKG_IMG_DIR}
# delete existing packages
rm -f "${PKG_PATH_DEB}" "${PKG_PATH_RPM}"
fpm -s dir -t deb -n "${PKG_NAME}" \
--deb-no-default-config-files \
-v "${PKG_VERSION}" \
-C "${PKG_IMG_DIR}" \
-p "${PKG_PATH_DEB}" \
-a "${PKG_ARCH_DEB}" \
--depends lsb-release \
--after-install "${PKG_SRC_DIR}/after_install" \
--before-remove "${PKG_SRC_DIR}/before_remove" \
--after-remove "${PKG_SRC_DIR}/after_remove" \
--after-upgrade "${PKG_SRC_DIR}/after_upgrade" \
--deb-after-purge "${PKG_SRC_DIR}/deb_after_purge" \
--license "Apache 2.0 + MIT" \
--maintainer "The Nimbus Team" \
--description "$(cat ${PKG_SRC_DIR}/description)" \
--url "https://nimbus.team/" \
2>/dev/null
fpm -s dir -t rpm -n "${PKG_NAME}" \
-v "${PKG_VERSION}" \
-C "${PKG_IMG_DIR}" \
-p "${PKG_PATH_RPM}" \
-a "${PKG_ARCH_RPM}" \
--depends redhat-lsb-core \
--after-install "${PKG_SRC_DIR}/after_install" \
--before-remove "${PKG_SRC_DIR}/before_remove" \
--after-remove "${PKG_SRC_DIR}/after_remove" \
--after-upgrade "${PKG_SRC_DIR}/after_upgrade" \
--license "Apache 2.0 + MIT" \
--maintainer "The Nimbus Team" \
--description "$(cat ${PKG_SRC_DIR}/description)" \
--url "https://nimbus.team/" \
2>/dev/null
ls -l "${PKG_PATH_DEB}" "${PKG_PATH_RPM}"