@ -23,12 +23,19 @@ _init() {
GIT_VERSION = "1.0"
GIT_VERSION = "1.0"
GO_VERSION = "1.7.1"
GO_VERSION = "1.7.1"
OSX_VERSION = "10.8"
OSX_VERSION = "10.8"
UNAME = $( uname -sm)
KNAME = $( uname -s)
ARCH = $( uname -m)
## Check all dependencies are present
MISSING = ""
}
}
## FIXME:
## In OSX, 'readlink -f' option does not exist, hence
## we have our own readlink -f behaviour here.
## Once OSX has the option, below function is good enough.
##
## readlink() {
## return /bin/readlink -f "$1"
## }
##
readlink( ) {
readlink( ) {
TARGET_FILE = $1
TARGET_FILE = $1
@ -50,152 +57,114 @@ readlink() {
echo $RESULT
echo $RESULT
}
}
###
## FIXME:
#
## In OSX, 'sort -V' option does not exist, hence
# Takes two arguments
## we have our own version compare function.
# arg1: version number in `x.x.x` format
## Once OSX has the option, below function is good enough.
# arg2: version number in `x.x.x` format
##
#
## check_minimum_version() {
# example: check_version "$version1" "$version2"
## versions=($(echo -e "$1\n$2" | sort -V))
#
## return [ "$1" == "${versions[0]}" ]
# returns:
## }
# 0 - Installed version is equal to required
##
# 1 - Installed version is greater than required
check_minimum_version( ) {
# 2 - Installed version is lesser than required
IFS = '.' read -r -a varray1 <<< " $1 "
# 3 - If args have length zero
IFS = '.' read -r -a varray2 <<< " $2 "
#
####
for i in " ${ !varray1[@] } " ; do
check_version( ) {
if [ [ ${ varray1 [i] } < ${ varray2 [i] } ] ] ; then
## validate args
return 0
[ [ -z " $1 " ] ] && return 3
elif [ [ ${ varray1 [i] } > ${ varray2 [i] } ] ] ; then
[ [ -z " $2 " ] ] && return 3
if [ [ $1 = = $2 ] ] ; then
return 0
fi
local IFS = .
local i ver1 = ( $1 ) ver2 = ( $2 )
# fill empty fields in ver1 with zeros
for ( ( i = ${# ver1 [@] } ; i<${# ver2 [@] } ; i++) ) ; do
ver1[ i] = 0
done
for ( ( i = 0; i<${# ver1 [@] } ; i++) ) ; do
if [ [ -z ${ ver2 [i] } ] ] ; then
# fill empty fields in ver2 with zeros
ver2[ i] = 0
fi
if ( ( 10#${ ver1 [i] } > 10#${ ver2 [i] } ) ) ; then
return 1
return 1
fi
fi
if ( ( 10#${ ver1 [i] } < 10#${ ver2 [i] } ) ) ; then
## Installed version is lesser than required - Bad condition
return 2
fi
done
done
return 0
}
check_golang_env( ) {
echo ${ GOPATH : ? } 2>& 1 >/dev/null
if [ $? -eq 1 ] ; then
echo "ERROR"
echo "GOPATH environment variable missing, please refer to Go installation document"
echo "https://github.com/minio/minio/blob/master/INSTALLGO.md#install-go-13"
exit 1
fi
local go_binary_path = $( which go)
return 0
if [ -z " ${ go_binary_path } " ] ; then
echo "Cannot find go binary in your PATH configuration, please refer to Go installation document"
echo "https://github.com/minio/minio/blob/master/INSTALLGO.md#install-go-13"
exit -1
fi
}
}
is_supported_os( ) {
assert_is_supported_arch( ) {
case ${ UNAME %% * } in
case " ${ ARCH } " in
"Linux" )
x86_64 | amd64 | aarch64 | arm* )
os = "linux"
return
; ;
"FreeBSD" )
os = "freebsd"
; ;
; ;
"Darwin" )
*)
osx_host_version = $( env sw_vers -productVersion)
echo "ERROR"
check_version " ${ osx_host_version } " " ${ OSX_VERSION } "
echo " Arch ' ${ ARCH } ' not supported. "
[ [ $? -ge 2 ] ] && die " Minimum OSX version supported is ${ OSX_VERSION } "
echo "Supported Arch: [x86_64, amd64, aarch64, arm*]"
; ;
exit 1
"*" )
echo "Exiting.. unsupported operating system found"
exit 1;
esac
esac
}
}
is_supported_arch( ) {
assert_is_supported_os( ) {
local supported
case " ${ KNAME } " in
case ${ UNAME ##* } in
Linux | FreeBSD )
"x86_64" | "amd64" )
return
supported = 1
; ;
; ;
"arm" *)
Darwin )
supported = 1
osx_host_version = $( env sw_vers -productVersion)
if ! check_minimum_version " ${ OSX_VERSION } " " ${ osx_host_version } " ; then
echo "ERROR"
echo " OSX version ' ${ osx_host_version } ' not supported. "
echo " Minimum supported version: ${ OSX_VERSION } "
exit 1
fi
return
; ;
; ;
*)
*)
supported = 0
echo "ERROR"
; ;
echo " OS ' ${ KNAME } ' is not supported. "
echo "Supported OS: [Linux, FreeBSD, Darwin]"
exit 1
esac
esac
if [ $supported -eq 0 ] ; then
echo " Invalid arch: ${ UNAME } not supported, please use x86_64/amd64 "
exit 1;
fi
}
}
check_deps( ) {
assert_check_golang_env( ) {
go_version = $( env go version 2>/dev/null)
if ! which go >/dev/null 2>& 1; then
check_version " $( echo ${ go_version } | sed 's/^.* go\([0-9.]*\).*$/\1/' ) " " ${ GO_VERSION } "
echo "ERROR"
if [ $? -ge 2 ] ; then
echo "Cannot find go binary in your PATH configuration, please refer to Go installation document at"
MISSING = " ${ MISSING } golang( ${ GO_VERSION } ) "
echo "https://docs.minio.io/docs/how-to-install-golang"
exit 1
fi
fi
check_version " $( env git --version 2>/dev/null | sed -e 's/^.* \([0-9.\].*\).*$/\1/' -e 's/^\([0-9.\]*\).*/\1/g' ) " " ${ GIT_VERSION } "
installed_go_version = $( go version | sed 's/^.* go\([0-9.]*\).*$/\1/' )
if [ $? -ge 2 ] ; then
if ! check_minimum_version " ${ GO_VERSION } " " ${ installed_go_version } " ; then
MISSING = " ${ MISSING } git "
echo "ERROR"
echo " Go version ' ${ installed_go_version } ' not supported. "
echo " Minimum supported version: ${ GO_VERSION } "
exit 1
fi
fi
}
main( ) {
echo -n "Check for supported arch.. "
is_supported_arch
echo -n "Check for supported os.. "
is_supported_os
echo -n "Checking if proper environment variables are set.. "
check_golang_env
echo "Done"
if [ -z " ${ GOPATH } " ] ; then
echo " Using GOPATH= ${ GOPATH } "
echo "ERROR"
echo "GOPATH environment variable missing, please refer to Go installation document"
echo "https://docs.minio.io/docs/how-to-install-golang"
exit 1
fi
echo -n "Checking dependencies for Minio.. "
}
check_deps
## If dependencies are missing, warn the user and abort
assert_check_deps( ) {
if [ " x ${ MISSING } " != "x" ] ; then
installed_git_version = $( git version | awk '{print $NF}' )
if ! check_minimum_version " ${ GIT_VERSION } " " ${ installed_git_version } " ; then
echo "ERROR"
echo "ERROR"
echo
echo " Git version ' ${ installed_git_version } ' not supported. "
echo "The following build tools are missing:"
echo " Minimum supported version: ${ GIT_VERSION } "
echo
echo " ** ${ MISSING } ** "
echo
echo "Please install them "
echo " ${ MISSING } "
echo
echo "Follow https://docs.minio.io/docs/how-to-install-golang for further instructions"
exit 1
exit 1
fi
fi
echo "Done"
}
main( ) {
## Check for supported arch
assert_is_supported_arch
## Check for supported os
assert_is_supported_os
## Check for Go environment
assert_check_golang_env
## Check for dependencies
assert_check_deps
}
}
_init && main " $@ "
_init && main " $@ "