PowerShell/demos/install/install.sh
2016-07-21 13:32:47 -07:00

103 lines
2.8 KiB
Bash

#!/usr/bin/env bash
clear
echo "Script to download latest release of PowerShell on *nix platforms"
echo "Verify if GITHUB_TOKEN variable is defined"
[[ -n $GITHUB_TOKEN ]] || { echo >&2 "GITHUB_TOKEN variable is undefined, Generate one using https://help.github.com/articles/creating-an-access-token-for-command-line-use/"; exit 1; }
# Authorizes with read-only access to GitHub API
curl_() {
curl -s -i -H "Authorization: token $GITHUB_TOKEN" "$@"
}
# Retrieves asset ID and package name of asset ending in argument
# $info looks like: "id": 1698239, "name": "powershell_0.4.0-1_amd64.deb",
get_info() {
curl_ https://api.github.com/repos/PowerShell/PowerShell/releases/latest | grep -B 1 "name.*$1"
}
echo "Get OS specific asset ID and package name"
case "$OSTYPE" in
linux*)
source /etc/os-release
echo $ID
# Install curl and wget to download package
case "$ID" in
centos*)
sudo yum install -y curl wget
info=$(get_info rpm)
;;
ubuntu)
sudo apt-get install -y curl wget
info=$(get_info deb)
;;
*)
exit 2 >&2 "Package $NAME is not supported on $OSTYPE!"
esac
;;
darwin*)
info=$(get_info pkg)
;;
*)
exit 2 >&2 "$OSTYPE is not supported!"
;;
esac
# Parses $info for asset ID and package name
read asset package <<< $(echo $info | sed 's/[,"]//g' | awk '{ print $2; print $4 }')
# Downloads asset to file
curl_ -H 'Accept: application/octet-stream' https://api.github.com/repos/PowerShell/PowerShell/releases/assets/$asset |
grep location | sed 's/location: //g' | wget -i - -O $package
# Installs PowerShell package
case "$OSTYPE" in
linux*)
source /etc/os-release
# Install dependencies
case "$ID" in
centos)
sudo yum install -y libicu libunwind
sudo yum install "./$package"
;;
ubuntu)
sudo apt-get install -y libunwind8 libicu52
sudo dpkg -i "./$package"
;;
*)
esac
;;
darwin*)
sudo installer -pkg ./$package -target /
;;
esac
get_smadll_location() {
dpkg-query --listfiles PowerShell | grep "System.Management.Automation.dll"
}
get_powershell_location() {
dirname $(get_smadll_location)
}
get_powershell_symlink() {
dir /usr/bin/powershell
}
install_location=$(get_powershell_location)
powershell_symlink=$(get_powershell_symlink)
if [ $install_location ]
then
echo "Congratulations! PowerShell \"$package\" is installed @ \"$install_location\""
fi
if [ $powershell_symlink ]
then
echo "Symlink is available @ \"$powershell_symlink\""
else
echo "PowerShell install failed! Check this script's output for information"
exit -1
fi