ceph-csi/scripts/check-env.sh
John Mulligan e111f2b613 scripts: add -mod=vendor to go run in check-env.sh
Without -mod=vendor running go run in this script may take more
resources than needed to execute. This also makes it consistent go build
(and alike) are invoked in the other scripts and the Makefile.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
2020-06-17 04:58:32 +00:00

92 lines
2.4 KiB
Bash
Executable File

#!/bin/sh
#
# Check the environment for dependencies and configuration
#
# check appropriate package installer to recommend corresponding packages
RPM_CMD=$(command -v rpm)
DPKG_CMD=$(command -v dpkg)
# count errors, run script to the end before exiting
ERRORS=0
fail() {
echo "${*}" > /dev/stderr
ERRORS=$((ERRORS+1))
}
# create a temp go file
LIBCHECK=$(mktemp)
mv "${LIBCHECK}" "${LIBCHECK}".go
LIBCHECK=${LIBCHECK}.go
# check for packages using a compile test
cat << EOF > "${LIBCHECK}"
package main
/*
#include <rados/librados.h>
#include <rbd/librbd.h>
*/
import "C"
func main() {
_ = C.LIBRADOS_VERSION_CODE
_ = C.LIBRBD_VER_MAJOR
_ = C.RBD_MAX_IMAGE_NAME_SIZE
}
EOF
# check if 'go' is available
if [ -n "$(command -v go)" ]; then
# in case of a failed execution, the user will be informed about
# the missing packages based on whether they are on rpm or debian
# based systems.
if ! go run -mod=vendor "${LIBCHECK}" > /dev/null; then
if [ -n "${RPM_CMD}" ]; then
echo "Packages libcephfs-devel librbd-devel librados-devel need to be installed"
elif [ -n "${DPKG_CMD}" ]; then
echo "Packages libcephfs-dev librbd-dev librados-dev need to be installed"
else
fail "error can't verify Ceph development headers"
fi
echo "To build ceph-csi in a container: $ make containerized-build"
fi
# remove the temp file
rm -f "${LIBCHECK}"
else
fail "could not find 'go' executable"
echo "To build ceph-csi in a container: $ make containerized-build"
fi
# parse the Golang version, return the digit passed as argument
# 1.13.9 -> go_version 1 -> 1
# 1.13.9 -> go_version 2 -> 13
# 1.13.9 -> go_version 3 -> 9
go_version() {
go version | cut -d' ' -f3 | sed 's/^go//' | cut -d'.' -f"${1}"
}
# Golang needs to be > 1.13
GO_MAJOR=$(go_version 1)
GO_MINOR=$(go_version 2)
if ! [ "${GO_MAJOR}" -gt 1 ]
then
if ! { [ "${GO_MAJOR}" -eq 1 ] && [ "${GO_MINOR}" -ge 13 ]; }
then
fail "go version needs to be >= 1.13"
fi
fi
# we're building with modules, so GO111MODULE needs to be 'on' or 'auto'
# some versions of Go return nothing when GO111MODULE is not explicitly
# configured
[ "$(go env GO111MODULE 2>&1)" = '' ] || [ "$(go env GO111MODULE)" = 'on' ] || [ "$(go env GO111MODULE)" = 'auto' ] \
|| fail "GO111MODULE should be set to 'on' or 'auto'"
# CGO needs to be enabled, we build with go-ceph language bindings
[ "$(go env CGO_ENABLED)" = '1' ] \
|| fail "CGO_ENABLED should be set to '1'"
exit ${ERRORS}