172 lines
4.5 KiB
Bash
Executable File
172 lines
4.5 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}" \
|
|
--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}" \
|
|
--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}"
|