mirror of https://github.com/sfeakes/AqualinkD.git
235 lines
5.8 KiB
Bash
Executable File
235 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Run using
|
|
# curl -s https://raw.githubusercontent.com/sfeakes/AqualinkD/master/extras/aqua.sh | bash -s <script parms> --
|
|
#
|
|
# list latest release version (This is zip install)
|
|
# curl --silent "https://api.github.com/repos/sfeakes/AqualinkD/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")'
|
|
#
|
|
# list latest dev version
|
|
# curl --silent "https://raw.githubusercontent.com/sfeakes/AqualinkD/master/version.h" | grep AQUALINKD_VERSION | cut -d '"' -f 2
|
|
#
|
|
|
|
|
|
NAME="AqualinkD"
|
|
SOURCE_LOCATION="/extras/aqua.sh"
|
|
|
|
HOMEDIR=~
|
|
eval HOMEDIR=$HOMEDIR
|
|
|
|
BASE="$HOMEDIR/software/"
|
|
AQUA="$BASE/AqualinkD"
|
|
AQUA_GIT="$BASE/AqualinkD/.git"
|
|
|
|
echoerr() { printf "%s\n" "$*" >&2; }
|
|
|
|
function print_usage {
|
|
echoerr "No arguments supplied, please use use:-"
|
|
echoerr "$0 release <- Download & install latest $NAME stable release."
|
|
echoerr "$0 latest <- Download & install latest $NAME version. (development release)"
|
|
echoerr "$0 force_latest <- Force latest option (don't run any version checks)"
|
|
echoerr "$0 install <- Install to local filesystem, (config files will not be overwritten)"
|
|
echoerr "$0 clean <- Remove everything, including configuration files"
|
|
echoerr "$0 <option> downloadonly <- Download using one of above options, but don't unstall"
|
|
echoerr ""
|
|
}
|
|
|
|
function upgrade_self {
|
|
#echo "NOT UPGRADING SELF, MAKE SURE TO EDIT BEFORE COMMIT"
|
|
#return;
|
|
LOC=$(realpath $0)
|
|
if [ "$LOC" == "/nas/data/Development/Raspberry/AqualinkD/extras/aqua.sh" ]; then
|
|
echo "NOT UPGRADING SELF, (Development environment)"
|
|
return
|
|
elif [ "$0" == "bash" ] || "$0" == "$AQUA/$SOURCE_LOCATION" ]; then
|
|
return
|
|
fi
|
|
|
|
if [ -f "$AQUA/$SOURCE_LOCATION" ]; then
|
|
cp "$AQUA/$SOURCE_LOCATION" $0
|
|
fi
|
|
}
|
|
|
|
function git_install {
|
|
sudo apt-get install git
|
|
}
|
|
|
|
function local_version {
|
|
if [ -f $AQUA/version.h ]; then
|
|
echo `cat $AQUA/version.h | grep AQUALINKD_VERSION | cut -d '"' -f 2 | tr '\n' ' '`
|
|
else
|
|
echo 0
|
|
fi
|
|
}
|
|
|
|
function git_release_version {
|
|
echo `curl --silent "https://api.github.com/repos/sfeakes/AqualinkD/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")'`
|
|
}
|
|
|
|
function get_development_version {
|
|
echo `curl --silent "https://raw.githubusercontent.com/sfeakes/AqualinkD/master/version.h" | grep AQUALINKD_VERSION | cut -d '"' -f 2`
|
|
}
|
|
|
|
function remove {
|
|
#cd ~
|
|
|
|
if [ -d "$AQUA" ]; then
|
|
if [ -L "$AQUA" ]; then
|
|
unlink "$AQUA"
|
|
else
|
|
rm -rf "$AQUA"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function isvalid_gitinstall {
|
|
#cd "$AQUA"
|
|
isgit=$(git --git-dir "$AQUA_GIT" status 2>&1)
|
|
return $?
|
|
}
|
|
|
|
function development_version_download {
|
|
echo "Upgrading $NAME from $(local_version) to $(get_development_version)"
|
|
if isvalid_gitinstall; then
|
|
update
|
|
else
|
|
force_dev_download
|
|
fi
|
|
}
|
|
|
|
function force_dev_download {
|
|
remove
|
|
make-base
|
|
|
|
#cd $BASE
|
|
git clone "https://github.com/sfeakes/AqualinkD.git" "$AQUA"
|
|
}
|
|
|
|
function update {
|
|
#cd ~
|
|
#cd $AQUA
|
|
git --git-dir "$AQUA_GIT" pull
|
|
}
|
|
|
|
function clean {
|
|
#cd ~
|
|
sudo "$AQUA/release/install.sh" "clean"
|
|
remove
|
|
}
|
|
|
|
function install {
|
|
if [ ! -f "$AQUA/release/install.sh" ]; then
|
|
echo "ERROR Can not find install script, please download from git using either :-"
|
|
echo "$0 release"
|
|
echo "$0 latest"
|
|
exit 1
|
|
fi
|
|
echo "Installing $NAME"
|
|
#cd ~
|
|
sudo "$AQUA/release/install.sh"
|
|
}
|
|
|
|
function make-base {
|
|
if [ ! -d "$BASE" ]; then
|
|
mkdir -p $BASE
|
|
fi
|
|
if [ ! -d "$BASE" ]; then
|
|
echoerr "Error Can't create $BASE";
|
|
exit 1;
|
|
fi
|
|
}
|
|
|
|
function release_version_download {
|
|
version=$(local_version)
|
|
git_version=$(git_release_version)
|
|
|
|
if [ "v$version" != "$git_version" ]; then
|
|
echo "Installing $NAME $git_version"
|
|
|
|
make-base
|
|
#cd $BASE
|
|
# This is correct way, but tar is made with crap dir structure
|
|
#tar_url=$(curl --silent "https://api.github.com/repos/sfeakes/AqualinkD/releases/latest" | grep -Po '"tarball_url": "\K.*?(?=")')
|
|
#curl --silent -L "$tar_url" | tar xz
|
|
# Use this tar instead, it's correct dir structure
|
|
curl --silent -L "https://github.com/sfeakes/AqualinkD/archive/$git_version.tar.gz" | tar xz -C "$BASE"
|
|
|
|
ver=$(echo $git_version | sed 's/^[^0-9]*//' )
|
|
|
|
if [ -d "$AQUA" ]; then
|
|
if [ -d "$AQUA-$version" ]; then
|
|
mv "$AQUA" "$AQUA-$RANDOM"
|
|
else
|
|
mv "$AQUA" "$AQUA-$version"
|
|
fi
|
|
fi
|
|
if [ -L "$AQUA" ]; then
|
|
unlink "$AQUA"
|
|
fi
|
|
|
|
ln -s "$BASE/AqualinkD-$ver" "$AQUA"
|
|
else
|
|
echo "Local $NAME version $version is latest, not downloading"
|
|
fi
|
|
}
|
|
|
|
function check_git_installed {
|
|
# Check git is installed
|
|
command -v git >/dev/null 2>&1 || { echoerr "git is not installed. Installing"; git_install; }
|
|
command -v git >/dev/null 2>&1 || { echoerr "git is not installed. Aborting"; exit 1; }
|
|
}
|
|
|
|
function check_curl_installed {
|
|
command -v curl >/dev/null 2>&1 || { echoerr "curl is not installed. Installing"; exit 1; }
|
|
}
|
|
# Check something was passed
|
|
if [[ $# -eq 0 ]]; then
|
|
print_usage
|
|
exit
|
|
fi
|
|
|
|
# Pass command line
|
|
if [ "$1" == "release" ]; then
|
|
check_curl_installed
|
|
release_version_download
|
|
elif [ "$1" == "latest" ]; then
|
|
check_curl_installed
|
|
check_git_installed
|
|
development_version_download
|
|
elif [ "$1" == "force_latest" ]; then
|
|
check_curl_installed
|
|
check_git_installed
|
|
force_dev_download
|
|
elif [ "$1" == "install" ]; then
|
|
echo -n ""
|
|
# install
|
|
elif [ "$1" == "clean" ]; then
|
|
clean
|
|
exit
|
|
else
|
|
print_usage
|
|
exit;
|
|
fi
|
|
|
|
if [ "$2" == "downloadonly" ]; then
|
|
echo "No install, download only"
|
|
else
|
|
install
|
|
fi
|
|
|
|
echo "Installed "`cat $AQUA/version.h | cut -d '"' -f 2 | tr '\n' ' '`
|
|
|
|
upgrade_self
|
|
#cd $CWD
|
|
|
|
echo ""
|
|
echo "Please make sure to read release notes https://github.com/sfeakes/AqualinkD/blob/master/README.md#release"
|
|
|
|
if [ "$0" == "bash" ]; then
|
|
# Was probably run from curl
|
|
echo -n "Source directory "
|
|
echo $AQUA | tr -s '/' '/'
|
|
echo -n "To run this script in the future, "
|
|
echo $AQUA/$SOURCE_LOCATION | tr -s '/' '/'
|
|
fi
|