From 08171f64ca2b0babaea713ac4d28c4687c17b55b Mon Sep 17 00:00:00 2001 From: bricerisingalgorand <60147418+bricerisingalgorand@users.noreply.github.com> Date: Thu, 29 Oct 2020 23:53:48 -0400 Subject: [PATCH 1/2] Fix RPM errors introduced in new pipeline (#1673) Fix issues that came up during betanet release - RPM/arch issue when installing yum - Missing genesisfiles for tarballs - missing algorand-devtools-beta package --- scripts/build_package.sh | 30 ++++++--------------- scripts/release/common/cpu_name.sh | 16 +++++++++++ scripts/release/mule/Makefile.mule | 2 +- scripts/release/mule/package/rpm/package.sh | 8 +++--- 4 files changed, 30 insertions(+), 26 deletions(-) create mode 100755 scripts/release/common/cpu_name.sh diff --git a/scripts/build_package.sh b/scripts/build_package.sh index 283bd0ed17..e3625917c9 100755 --- a/scripts/build_package.sh +++ b/scripts/build_package.sh @@ -88,29 +88,15 @@ done mkdir ${PKG_ROOT}/genesis -if [ ! -z "${RELEASE_GENESIS_PROCESS}" ]; then - genesis_dirs=("devnet" "testnet" "mainnet" "betanet") - for dir in "${genesis_dirs[@]}"; do - mkdir -p ${PKG_ROOT}/genesis/${dir} - cp ${REPO_DIR}/installer/genesis/${dir}/genesis.json ${PKG_ROOT}/genesis/${dir}/ - #${GOPATHBIN}/buildtools genesis ensure -n ${dir} --source ${REPO_DIR}/gen/${dir}/genesis.json --target ${PKG_ROOT}/genesis/${dir}/genesis.json --releasedir ${REPO_DIR}/installer/genesis - if [ $? -ne 0 ]; then exit 1; fi - done - # Copy the appropriate network genesis.json for our default (in root ./genesis folder) - cp ${PKG_ROOT}/genesis/${DEFAULT_RELEASE_NETWORK}/genesis.json ${PKG_ROOT}/genesis +genesis_dirs=("devnet" "testnet" "mainnet" "betanet") +for dir in "${genesis_dirs[@]}"; do + mkdir -p ${PKG_ROOT}/genesis/${dir} + cp ${REPO_DIR}/installer/genesis/${dir}/genesis.json ${PKG_ROOT}/genesis/${dir}/ if [ $? -ne 0 ]; then exit 1; fi -elif [[ "${CHANNEL}" == "dev" || "${CHANNEL}" == "stable" || "${CHANNEL}" == "nightly" || "${CHANNEL}" == "beta" ]]; then - cp ${REPO_DIR}/installer/genesis/${DEFAULTNETWORK}/genesis.json ${PKG_ROOT}/genesis/ - #${GOPATHBIN}/buildtools genesis ensure -n ${DEFAULTNETWORK} --source ${REPO_DIR}/gen/${DEFAULTNETWORK}/genesis.json --target ${PKG_ROOT}/genesis/genesis.json --releasedir ${REPO_DIR}/installer/genesis - if [ $? -ne 0 ]; then exit 1; fi -else - cp installer/genesis/${DEFAULTNETWORK}/genesis.json ${PKG_ROOT}/genesis - if [ $? -ne 0 ]; then exit 1; fi - #if [ -z "${TIMESTAMP}" ]; then - # TIMESTAMP=$(date +%s) - #fi - #${GOPATHBIN}/buildtools genesis timestamp -f ${PKG_ROOT}/genesis/genesis.json -t ${TIMESTAMP} -fi +done +# Copy the appropriate network genesis.json for our default (in root ./genesis folder) +cp ${PKG_ROOT}/genesis/${DEFAULT_RELEASE_NETWORK}/genesis.json ${PKG_ROOT}/genesis +if [ $? -ne 0 ]; then exit 1; fi TOOLS_ROOT=${PKG_ROOT}/tools diff --git a/scripts/release/common/cpu_name.sh b/scripts/release/common/cpu_name.sh new file mode 100755 index 0000000000..77d946baa2 --- /dev/null +++ b/scripts/release/common/cpu_name.sh @@ -0,0 +1,16 @@ +# Take common name (amd64, arm64, arm) and map to the unames (x86_64, aarch64) + +COMMON_NAME="${1}" + +if [ "amd64" == "${COMMON_NAME}" ]; then + echo "x86_64" +elif [ "arm64" == "${COMMON_NAME}" ]; then + echo "aarch64" +elif [ "arm32" == "${COMMON_NAME}" ]; then + echo "armv7l" +elif [ "arm" == "${COMMON_NAME}" ]; then + echo "armv7l" +else + echo "Unsupported cpu arch ${COMMON_NAME}" + exit 1 +fi diff --git a/scripts/release/mule/Makefile.mule b/scripts/release/mule/Makefile.mule index b3f5588c62..69f35d7dfd 100644 --- a/scripts/release/mule/Makefile.mule +++ b/scripts/release/mule/Makefile.mule @@ -51,7 +51,7 @@ mule-docker: mule-package-%: PKG_TYPE=$* mule-package-%: echo Building algorand package... - scripts/release/mule/package/$(PKG_TYPE)/package.sh + scripts/release/mule/package/$(PKG_TYPE)/package.sh algorand echo Building algorand-devtools package... scripts/release/mule/package/$(PKG_TYPE)/package.sh algorand-devtools diff --git a/scripts/release/mule/package/rpm/package.sh b/scripts/release/mule/package/rpm/package.sh index 7cb91775e9..8afa7f27d3 100755 --- a/scripts/release/mule/package/rpm/package.sh +++ b/scripts/release/mule/package/rpm/package.sh @@ -11,13 +11,15 @@ BRANCH=${BRANCH:-$(./scripts/compute_branch.sh)} CHANNEL=${CHANNEL:-$(./scripts/compute_branch_channel.sh "$BRANCH")} DEFAULTNETWORK=${DEFAULTNETWORK:-$(./scripts/compute_branch_network.sh "$BRANCH")} DEFAULT_RELEASE_NETWORK=$(./scripts/compute_branch_release_network.sh "$DEFAULTNETWORK") +PACKAGE_NAME="$1" find tmp/node_pkgs -name "*${CHANNEL}*linux*${FULLVERSION}*.tar.gz" | cut -d '/' -f3-4 | sort --unique | while read OS_ARCH; do OS_TYPE=$(echo "${OS_ARCH}" | cut -d '/' -f1) ARCH_TYPE=$(echo "${OS_ARCH}" | cut -d '/' -f2) + ARCH_UNAME=$(./scripts/release/common/cpu_name.sh ${ARCH_TYPE}) ALGO_BIN="$REPO_DIR/tmp/node_pkgs/$OS_TYPE/$ARCH_TYPE/$CHANNEL/$OS_TYPE-$ARCH_TYPE/bin" # A make target in Makefile.mule may pass the name as an argument. - ALGORAND_PACKAGE_NAME=${1:-$(./scripts/compute_package_name.sh "$CHANNEL")} + ALGORAND_PACKAGE_NAME=$(./scripts/compute_package_name.sh "$CHANNEL" "$PACKAGE_NAME") if [[ "$ALGORAND_PACKAGE_NAME" =~ devtools ]]; then REQUIRED_ALGORAND_PACKAGE=$(./scripts/compute_package_name.sh "$CHANNEL") @@ -42,11 +44,11 @@ find tmp/node_pkgs -name "*${CHANNEL}*linux*${FULLVERSION}*.tar.gz" | cut -d '/' < "./installer/rpm/$INSTALLER_DIR/$INSTALLER_DIR.spec" \ sed -e "s,@PKG_NAME@,$ALGORAND_PACKAGE_NAME," \ -e "s,@VER@,$FULLVERSION," \ - -e "s,@ARCH@,$ARCH_TYPE," \ + -e "s,@ARCH@,$ARCH_UNAME," \ -e "s,@REQUIRED_ALGORAND_PKG@,$REQUIRED_ALGORAND_PACKAGE," \ > "$TEMPDIR/$ALGORAND_PACKAGE_NAME.spec" - rpmbuild --buildroot "$HOME/foo" --define "_rpmdir $RPMTMP" --define "RELEASE_GENESIS_PROCESS x$RELEASE_GENESIS_PROCESS" --define "LICENSE_FILE ./COPYING" -bb "$TEMPDIR/$ALGORAND_PACKAGE_NAME.spec" --target $ARCH_TYPE + rpmbuild --buildroot "$HOME/foo" --define "_rpmdir $RPMTMP" --define "RELEASE_GENESIS_PROCESS x$RELEASE_GENESIS_PROCESS" --define "LICENSE_FILE ./COPYING" -bb "$TEMPDIR/$ALGORAND_PACKAGE_NAME.spec" --target $ARCH_UNAME cp -p "$RPMTMP"/*/*.rpm "./tmp/node_pkgs/$OS_TYPE/$ARCH_TYPE" echo "${RPMTMP}" From f8bdceb8dcd1e90cf2cb071edc52f758c258bdf1 Mon Sep 17 00:00:00 2001 From: John Lee Date: Thu, 29 Oct 2020 23:56:34 -0400 Subject: [PATCH 2/2] Revert "Change rpm package file to match rename (#1666)" (#1675) While we need to change the arch type for other reasons, we do not need to rename the RPM. A separate commit is reverting the name change, so this is reverting the related changes. --- scripts/release/mule/README.md | 2 ++ scripts/release/mule/sign/sign.sh | 12 ++++++++++-- scripts/release/mule/test/test.sh | 10 ++++++---- .../mule/test/tests/pre/verify_control_files.sh | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/scripts/release/mule/README.md b/scripts/release/mule/README.md index 90fc0b0ec1..0c2caf026f 100644 --- a/scripts/release/mule/README.md +++ b/scripts/release/mule/README.md @@ -72,6 +72,7 @@ In addition, make sure that the following AWS credentials are set in environment + `BRANCH` + `CHANNEL` + + `ARCH_BIT`, i.e., the value from `uname -m` + `NETWORK` + `S3_SOURCE`, i.e., the S3 bucket from which to download + `SHA`, i.e., the value from `git rev-parse HEAD` if not passed on CLI @@ -96,6 +97,7 @@ In addition, make sure that the following AWS credentials are set in environment + `BRANCH` + `CHANNEL` + + `ARCH_BIT`, i.e., the value from `uname -m` + `S3_SOURCE`, i.e., the S3 bucket from which to download + `VERSION` diff --git a/scripts/release/mule/sign/sign.sh b/scripts/release/mule/sign/sign.sh index 00b00dba5b..11ddaef0da 100755 --- a/scripts/release/mule/sign/sign.sh +++ b/scripts/release/mule/sign/sign.sh @@ -7,6 +7,7 @@ echo date "+build_release begin SIGN stage %Y%m%d_%H%M%S" echo +ARCH_BIT=$(uname -m) ARCH_TYPE=$(./scripts/archtype.sh) OS_TYPE=$(./scripts/ostype.sh) VERSION=${VERSION:-$(./scripts/compute_build_number.sh -f)} @@ -24,12 +25,19 @@ STATUSFILE="build_status_${CHANNEL}_${VERSION}" find /root/.gnupg -type d -exec chmod 700 {} \; find /root/.gnupg -type f -exec chmod 600 {} \; -mkdir -p "$PKG_DIR" cd "$PKG_DIR" if [ -n "$S3_SOURCE" ] then - aws s3 sync "s3://$S3_SOURCE/$CHANNEL/$VERSION/$OS_TYPE/$ARCH_TYPE/" . + PREFIX="$S3_SOURCE/$CHANNEL/$VERSION" + + # deb + aws s3 cp "s3://$PREFIX/algorand_${CHANNEL}_${OS_TYPE}-${ARCH_TYPE}_${VERSION}.deb" . + aws s3 cp "s3://$PREFIX/algorand-devtools_${CHANNEL}_${OS_TYPE}-${ARCH_TYPE}_${VERSION}.deb" . + + # rpm + aws s3 cp "s3://$PREFIX/algorand-${VERSION}-1.${ARCH_BIT}.rpm" . + aws s3 cp "s3://$PREFIX/algorand-devtools-${VERSION}-1.${ARCH_BIT}.rpm" . fi # TODO: "$PKG_TYPE" == "source" diff --git a/scripts/release/mule/test/test.sh b/scripts/release/mule/test/test.sh index ace0adb6c0..ff96ebe857 100755 --- a/scripts/release/mule/test/test.sh +++ b/scripts/release/mule/test/test.sh @@ -4,6 +4,8 @@ set -ex export PKG_TYPE="$1" +ARCH_BIT=$(uname -m) +export ARCH_BIT ARCH_TYPE=$(./scripts/archtype.sh) export ARCH_TYPE OS_TYPE=$(./scripts/ostype.sh) @@ -28,8 +30,8 @@ then aws s3 cp "s3://$PREFIX/algorand-devtools_${CHANNEL}_${OS_TYPE}-${ARCH_TYPE}_${VERSION}.deb" . # rpm - aws s3 cp "s3://$PREFIX/algorand-$CHANNEL-$VERSION-1.$ARCH_TYPE.rpm" . - aws s3 cp "s3://$PREFIX/algorand-devtools-$CHANNEL-$VERSION-1.$ARCH_TYPE.rpm" . + aws s3 cp "s3://$PREFIX/algorand-$VERSION-1.$ARCH_BIT.rpm" . + aws s3 cp "s3://$PREFIX/algorand-devtools-$VERSION-1.$ARCH_BIT.rpm" . fi popd @@ -50,8 +52,8 @@ else # Normally, this is installed for us b/c it's a dependency. # See `./installer/rpm/algorand/algorand.spec`. yum install yum-cron -y - rpm -i algorand-"$VERSION"-1."$ARCH_TYPE".rpm - rpm -i algorand-devtools-"$VERSION"-1."$ARCH_TYPE".rpm + rpm -i algorand-"$VERSION"-1."$ARCH_BIT".rpm + rpm -i algorand-devtools-"$VERSION"-1."$ARCH_BIT".rpm fi popd diff --git a/scripts/release/mule/test/tests/pre/verify_control_files.sh b/scripts/release/mule/test/tests/pre/verify_control_files.sh index 00fb48c944..adb7c98209 100755 --- a/scripts/release/mule/test/tests/pre/verify_control_files.sh +++ b/scripts/release/mule/test/tests/pre/verify_control_files.sh @@ -32,7 +32,7 @@ else # attempt to generate the .spec file, but it doesn't give us the info we need. # # Instead, we'll just install using `dpkg` and grep the error stream. - if ! rpm -i "./tmp/node_pkgs/$OS_TYPE/$ARCH_TYPE/algorand-devtools-$VERSION"*"$ARCH_TYPE".rpm 2> "$RPMTMP/rpm.install" + if ! rpm -i "./tmp/node_pkgs/$OS_TYPE/$ARCH_TYPE/algorand-devtools-$VERSION"*"$ARCH_BIT".rpm 2> "$RPMTMP/rpm.install" then # # We're looking for lines that looks like the following: