diff --git a/scripts/ssm-build-dual.sh b/scripts/ssm-build-dual.sh new file mode 100755 index 00000000..fe697f54 --- /dev/null +++ b/scripts/ssm-build-dual.sh @@ -0,0 +1,165 @@ +#!/bin/bash + +# Apel-SSM Build Script 2.0: FPM edition +# Adapted from the Debian only build script, now with RPM! +# @Author: Nicholas Whyatt (RedProkofiev@github.com) + +# Script runs well with FPM 1.14.2 on ruby 2.7.1, setuptools 51.3.3 on RHEL and Deb platforms +# Download ruby (if you're locked to 2.5, use RVM) and then run: +# sudo gem install fpm -v 1.14.2 +# ./ssm-build-dual.sh (deb | rpm) e.g. +# ./ssm-build.dual.sh deb 3.4.0 1 /usr/lib/python3.6 +# For SSM 3.4.0 and up. Versions before that would technically work, but the changelog +# then was in a Debian format that doesn't parse and fails hard if you want to build RPM. + +set -e + +usage() { + echo "Usage: $0 [options] (deb | rpm) " + echo -e "Build script for Apel-SSM.\n" + echo " -h Displays help." + echo " -v Verbose FPM output." + echo " -s Directory of source files. Defaults to /debbuild/source or SOME RPM DIR." + echo -e " -b Directory of build files. Defaults to /debbuild/build or SOME RPM DIR.\n" 1>&2; + exit 1; +} + +# Bool flags to prevent automatic overwrite of input +SOURCE_ASSIGNED=0 +BUILD_ASSIGNED=0 + +# Configurable options +while getopts ":hs:b:v" o; do + case "${o}" in + h) echo "SSM Help" + usage; + ;; + s) s=${OPTARG} + SOURCE_DIR=$s + SOURCE_ASSIGNED=1 + ;; + b) b=${OPTARG} + BUILD_DIR=$b + BUILD_ASSIGNED=1 + ;; + v) VERBOSE="--verbose " + ;; + *) usage; + ;; + esac +done +shift $((OPTIND-1)) + +# Check how any arguments there are +if [ "$#" -ne 4 ]; then + echo "Expected 4 arguments, $# given." + usage; +fi + +PACK_TYPE=$1 +VERSION=$2 +ITERATION=$3 +PYTHON_ROOT_DIR=$4 # i.e. /usr/lib/python3.6 + +# Alter library, build and source directories depending on the package +if [[ "$PACK_TYPE" = "deb" ]]; then + LIB_EXTENSION="/dist-packages" + if [[ "$SOURCE_ASSIGNED" = 0 ]]; then + SOURCE_DIR=~/debbuild/source + fi + if [[ "$BUILD_ASSIGNED" = 0 ]]; then + BUILD_DIR=~/debbuild/build + fi +elif [[ "$PACK_TYPE" = "rpm" ]]; then + LIB_EXTENSION="/site-packages" + if [[ "$SOURCE_ASSIGNED" = 0 ]]; then + SOURCE_DIR=~/rpmbuild/SOURCES + fi + if [[ "$BUILD_ASSIGNED" = 0 ]]; then + BUILD_DIR=~/rpmbuild/BUILD + fi +else # If package type is neither deb nor rpm, show an error message and exit + echo "$0 currently only supports 'deb' and 'rpm' packages." + usage; +fi + +# Directory cleaning and repository management +# Create SSM and DEB dir (if not present) +mkdir -p "$SOURCE_DIR" +mkdir -p "$BUILD_DIR" + +# Clean up any previous build +rm -rf "${SOURCE_DIR:?}"/* +rm -rf "${BUILD_DIR:?}"/* + +# Get and extract the source +TAR_FILE=${VERSION}-${ITERATION}.tar.gz +TAR_URL=https://github.com/apel/ssm/archive/$TAR_FILE +wget --no-check-certificate "$TAR_URL" -O "$TAR_FILE" +tar xvf "$TAR_FILE" -C "$SOURCE_DIR" +rm -f "$TAR_FILE" + +# Get supplied Python version +PY_VERSION="$(basename "$PYTHON_ROOT_DIR")" +PY_NUM=${PY_VERSION#python} + +# Universal FPM Call +FPM_CORE="fpm -s python \ + -t $PACK_TYPE \ + -n apel-ssm \ + -v $VERSION \ + --iteration $ITERATION \ + -m \"Apel Administrators \" \ + --description \"Secure Stomp Messenger (SSM).\" \ + --no-auto-depends " + +# Simple Python filter for version specific FPM +if [[ ${PY_NUM:0:1} == "3" ]]; then + echo "Building $VERSION iteration $ITERATION for Python $PY_NUM as $PACK_TYPE." + + # python-stomp < 5.0.0 to python-stomp, python to python3/pip3 + # edited python-pip3 to python-pip + FPM_PYTHON="--depends python3 \ + --depends python-pip3 \ + --depends 'python-stomp' \ + --depends python-ldap \ + --depends libssl-dev \ + --depends libsasl2-dev \ + --depends openssl " + +elif [[ ${PY_NUM:0:1} == "2" ]]; then + echo "Building $VERSION iteration $ITERATION for Python $PY_NUM as $PACK_TYPE." + + FPM_PYTHON="--depends python2.7 \ + --depends python-pip \ + --depends 'python-stomp < 5.0.0' \ + --depends python-ldap \ + --depends libssl-dev \ + --depends libsasl2-dev \ + --depends openssl " +fi + +# python-bin must always be specified in modern linux +PACKAGE_VERSION="--$PACK_TYPE-changelog $SOURCE_DIR/ssm-$VERSION-$ITERATION/CHANGELOG \ + --python-bin /usr/bin/$PY_VERSION \ + --python-install-lib $PYTHON_ROOT_DIR$LIB_EXTENSION \ + --exclude *.pyc \ + --package $BUILD_DIR \ + $SOURCE_DIR/ssm-$VERSION-$ITERATION/setup.py" + +# Construct and evaluate the primary FPM call +BUILD_PACKAGE_COMMAND=${FPM_CORE}${FPM_PYTHON}${VERBOSE}${PACKAGE_VERSION} +eval "$BUILD_PACKAGE_COMMAND" + +# When installed, use pleaserun to perform system specific service setup +fpm -s pleaserun -t "$PACK_TYPE" \ +-n apel-ssm-service \ +-v "$VERSION" \ +--iteration "$ITERATION" \ +-m "Apel Administrators " \ +--description "Secure Stomp Messenger (SSM) Service Daemon files." \ +--architecture all \ +--no-auto-depends \ +--depends apel-ssm \ +--package "$BUILD_DIR" \ +/usr/bin/ssmreceive diff --git a/setup.py b/setup.py index 8c5f84d1..a495ca0c 100644 --- a/setup.py +++ b/setup.py @@ -51,11 +51,15 @@ def main(): download_url='https://github.com/apel/ssm/releases', license='Apache License, Version 2.0', install_requires=[ - 'stomp.py<5.0.0', 'python-ldap<3.4.0', 'setuptools', + 'cryptography==3.3.0', + 'stomp.py<5.0.0', + 'python-ldap<3.4.0', + 'setuptools', + 'pyopenssl<=21.0.0', ], extras_require={ - 'AMS': ['argo-ams-library'], - 'daemon': ['python-daemon<=2.3.0'], + 'AMS': ['argo-ams-library', 'certifi<2020.4.5.2', ], + 'daemon': ['python-daemon<=2.3.0', ], 'dirq': ['dirq'], }, packages=find_packages(exclude=['bin', 'test']),