mirror of
https://github.com/PowerShell/PowerShell.git
synced 2024-11-27 20:05:34 +08:00
Merge pull request #3608 from DarwinJS/feature/install-powershell.sh
create script to install latest powershell from repositories
This commit is contained in:
commit
f3dd2f0414
@ -889,6 +889,10 @@ WebRequest
|
||||
win7-x86
|
||||
WindowsVersion
|
||||
XPath
|
||||
alpha.18
|
||||
behavioral
|
||||
MiaRomero
|
||||
TheFlyingCorpse
|
||||
Youtube
|
||||
- test/tools/CodeCoverageAutomation/README.md
|
||||
CodeCoverage.zip
|
||||
@ -914,3 +918,6 @@ post-6
|
||||
- CODE_OF_CONDUCT.md
|
||||
opencode
|
||||
microsoft.com
|
||||
- ./tools/install-powershell.readme.md
|
||||
includeide
|
||||
sed
|
||||
|
@ -21,7 +21,7 @@ addons:
|
||||
|
||||
install:
|
||||
- pushd tools
|
||||
- ./download.sh
|
||||
- ./install-powershell.sh
|
||||
- popd
|
||||
# Default 2.0.0 Ruby is buggy
|
||||
# Default bundler version is buggy
|
||||
|
@ -78,6 +78,7 @@ Describe 'Common Tests - Validate Markdown Files' -Tag 'CI' {
|
||||
'./docs/maintainers/README.md'
|
||||
'./demos/SSHRemoting/*.md'
|
||||
'./docker/*.md'
|
||||
'./tools/*.md'
|
||||
)
|
||||
$filter = ($docsToTest -join ',')
|
||||
&"gulp" test-mdsyntax --silent `
|
||||
|
66
tools/install-powershell-readme.md
Normal file
66
tools/install-powershell-readme.md
Normal file
@ -0,0 +1,66 @@
|
||||
# install-powershell.sh
|
||||
|
||||
## Features of install-powershell.sh
|
||||
|
||||
* can be called directly from git
|
||||
* optionally installs vs code and vs powershell extension (aka PowerShell IDE) using optional `-includeide` switch
|
||||
* defaults to completely automated operation (if appropriate permissions are available)
|
||||
* automatically looks up latest version via git tags
|
||||
* automatic selection of appropriate install sub-script
|
||||
* configures software installs for repositories when repositories are in place, otherwise pulls files from git releases. As repository versions are made available, script will be updated to take advantage.
|
||||
* user permission checking
|
||||
* sub-installers called from local file system if they exist, otherwise pulled from git
|
||||
* sub-installers can be called directly if auto-selection is not needed
|
||||
|
||||
## Minimum Requirements for install-powershell.sh
|
||||
|
||||
* bash shell
|
||||
* `sed`
|
||||
* native package manager available
|
||||
* `curl` (auto-installed if missing)
|
||||
|
||||
## Usage
|
||||
|
||||
### Direct from Github
|
||||
|
||||
```bash
|
||||
bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh | bash -s <ARGUMENTS>
|
||||
```
|
||||
|
||||
### Local Copy
|
||||
|
||||
```bash
|
||||
bash install-powershell.sh <ARGUMENTS>
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Only Install PowerShell Core
|
||||
|
||||
```bash
|
||||
bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh)
|
||||
```
|
||||
|
||||
### Install PowerShell Core with IDE
|
||||
|
||||
```bash
|
||||
bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) -includeide
|
||||
```
|
||||
|
||||
### Install PowerShell Core with IDE and do tests that require a human to interact with the installation process
|
||||
|
||||
```bash
|
||||
bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) -includeide -interactivetesting
|
||||
```
|
||||
|
||||
### Install AppImage
|
||||
|
||||
```bash
|
||||
bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) -appimage
|
||||
```
|
||||
|
||||
### Installation To do list
|
||||
|
||||
* Detect and wait when package manager is busy/locked? - at least Ubuntu (CentOS does this internally)
|
141
tools/install-powershell.sh
Executable file
141
tools/install-powershell.sh
Executable file
@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Companion code for the blog https://cloudywindows.com
|
||||
|
||||
#call this code direction from the web with:
|
||||
#bash <(wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
#wget -O - https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh | bash -s <ARGUMENTS>
|
||||
#bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
|
||||
#Usage - if you do not have the ability to run scripts directly from the web,
|
||||
# pull all files in this repo folder and execute, this script
|
||||
# automatically prefers local copies of sub-scripts
|
||||
|
||||
#Completely automated install requires a root account or sudo with a password requirement
|
||||
|
||||
#Switches
|
||||
# -includeide - the script is being run headless, do not perform actions that require response from the console
|
||||
# -interactivetesting - requires a human user in front of the machine - loads a script into the ide to test with F5 to ensure the IDE can run scripts
|
||||
# -appimage - does appimage instead of native install
|
||||
|
||||
#gitrepo paths are overrideable to run from your own fork or branch for testing or private distribution
|
||||
|
||||
VERSION="1.1.0"
|
||||
gitreposubpath="PowerShell/PowerShell/master"
|
||||
gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools"
|
||||
gitscriptname="install-powershell.psh"
|
||||
|
||||
echo "Get-PowerShell Core MASTER Installer Version $VERSION"
|
||||
echo "Installs PowerShell Core and Optional The Development Environment"
|
||||
echo " Original script is at: $gitreposcriptroot\$gitscriptname"
|
||||
|
||||
echo "Arguments used: $*"
|
||||
echo ""
|
||||
|
||||
# Let's quit on interrupt of subcommands
|
||||
trap '
|
||||
trap - INT # restore default INT handler
|
||||
echo "Interrupted"
|
||||
kill -s INT "$$"
|
||||
' INT
|
||||
|
||||
lowercase(){
|
||||
echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
|
||||
}
|
||||
|
||||
OS=`lowercase \`uname\``
|
||||
KERNEL=`uname -r`
|
||||
MACH=`uname -m`
|
||||
|
||||
if [ "${OS}" == "windowsnt" ]; then
|
||||
OS=windows
|
||||
DistroBasedOn=windows
|
||||
SCRIPTFOLDER=$(dirname $(readlink -f $0))
|
||||
elif [ "${OS}" == "darwin" ]; then
|
||||
OS=osx
|
||||
DistroBasedOn=osx
|
||||
# readlink doesn't work the same on macOS
|
||||
SCRIPTFOLDER=$(dirname $0)
|
||||
else
|
||||
SCRIPTFOLDER=$(dirname $(readlink -f $0))
|
||||
OS=`uname`
|
||||
if [ "${OS}" == "SunOS" ] ; then
|
||||
OS=solaris
|
||||
ARCH=`uname -p`
|
||||
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||
DistroBasedOn=sunos
|
||||
elif [ "${OS}" == "AIX" ] ; then
|
||||
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||
DistroBasedOn=aix
|
||||
elif [ "${OS}" == "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DistroBasedOn='redhat'
|
||||
DIST=`cat /etc/redhat-release |sed s/\ release.*//`
|
||||
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
|
||||
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DistroBasedOn='suse'
|
||||
PSUEDONAME=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
|
||||
REV=`cat /etc/SuSE-release | grep 'VERSION' | sed s/.*=\ //`
|
||||
elif [ -f /etc/mandrake-release ] ; then
|
||||
DistroBasedOn='mandrake'
|
||||
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
|
||||
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DistroBasedOn='debian'
|
||||
DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'`
|
||||
PSUEDONAME=`cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }'`
|
||||
REV=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
|
||||
fi
|
||||
OS=`lowercase $OS`
|
||||
DistroBasedOn=`lowercase $DistroBasedOn`
|
||||
readonly OS
|
||||
readonly DIST
|
||||
readonly DistroBasedOn
|
||||
readonly PSUEDONAME
|
||||
readonly REV
|
||||
readonly KERNEL
|
||||
readonly MACH
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo "Operating System Details:"
|
||||
echo " OS: $OS"
|
||||
echo " DIST: $DIST"
|
||||
echo " DistroBasedOn: $DistroBasedOn"
|
||||
echo " PSUEDONAME: $PSUEDONAME"
|
||||
echo " REV: $REV"
|
||||
echo " KERNEL: $KERNEL"
|
||||
echo " MACH: $MACH"
|
||||
|
||||
|
||||
|
||||
if [[ "'$*'" =~ appimage ]] ; then
|
||||
if [ -f $SCRIPTFOLDER/appimage.sh ]; then
|
||||
#Script files were copied local - use them
|
||||
. $SCRIPTFOLDER/appimage.sh
|
||||
else
|
||||
#Script files are not local - pull from remote
|
||||
echo "Could not find \"appimage.sh\" next to this script..."
|
||||
echo "Pulling it from \"$gitreposcriptroot/appimage.sh\""
|
||||
bash <(wget -qO- $gitreposcriptroot/appimage.sh) $@
|
||||
fi
|
||||
elif [ "$DistroBasedOn" == "redhat" ] || [ "$DistroBasedOn" == "debian" ] || [ "$DistroBasedOn" == "osx" ] || [ "$DistroBasedOn" == "suse" ]; then
|
||||
echo "Configuring PowerShell Core Enviornment for: $DistroBasedOn $DIST $REV"
|
||||
if [ -f $SCRIPTFOLDER/installpsh-$DistroBasedOn.sh ]; then
|
||||
#Script files were copied local - use them
|
||||
. $SCRIPTFOLDER/installpsh-$DistroBasedOn.sh
|
||||
else
|
||||
#Script files are not local - pull from remote
|
||||
echo "Could not find \"installpsh-$DistroBasedOn.sh\" next to this script..."
|
||||
echo "Pulling it from \"$gitreposcriptroot/installpsh-$DistroBasedOn.sh\""
|
||||
bash <(wget -qO- $gitreposcriptroot/installpsh-$DistroBasedOn.sh) $@
|
||||
fi
|
||||
else
|
||||
echo "Sorry, your operating system is based on $DistroBasedOn and is not supported by PowerShell Core or this installer at this time."
|
||||
fi
|
168
tools/installpsh-debian.sh
Executable file
168
tools/installpsh-debian.sh
Executable file
@ -0,0 +1,168 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Companion code for the blog https://cloudywindows.com
|
||||
#call this code direction from the web with:
|
||||
#bash <(wget -O - https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/pshcoredevenv-debian.sh) ARGUMENTS
|
||||
#bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
#Usage - if you do not have the ability to run scripts directly from the web,
|
||||
# pull all files in this repo folder and execute, this script
|
||||
# automatically prefers local copies of sub-scripts
|
||||
|
||||
#Completely automated install requires a root account or sudo with a password requirement
|
||||
|
||||
#Switches
|
||||
# -includeide - the script is being run headless, do not perform actions that require response from the console
|
||||
# -interactivetests - requires a human user in front of the machine - loads a script into the ide to test with F5 to ensure the IDE can run scripts
|
||||
|
||||
#gitrepo paths are overrideable to run from your own fork or branch for testing or private distribution
|
||||
|
||||
|
||||
VERSION="1.1.2"
|
||||
gitreposubpath="PowerShell/PowerShell/master"
|
||||
gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools"
|
||||
thisinstallerdistro=debian
|
||||
repobased=true
|
||||
gitscriptname="installpsh-debian.psh"
|
||||
|
||||
echo ;
|
||||
echo "*** PowerShell Core Development Environment Installer $VERSION for $thisinstallerdistro"
|
||||
echo "*** Current PowerShell Core Version: $currentpshversion"
|
||||
echo "*** Original script is at: $gitreposcriptroot/$gitscriptname"
|
||||
echo
|
||||
echo "*** Arguments used: $*"
|
||||
|
||||
#Verify The Installer Choice (for direct runs of this script)
|
||||
lowercase(){
|
||||
#echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
|
||||
echo "$1" | tr [A-Z] [a-z]
|
||||
}
|
||||
|
||||
# Let's quit on interrupt of subcommands
|
||||
trap '
|
||||
trap - INT # restore default INT handler
|
||||
echo "Interrupted"
|
||||
kill -s INT "$$"
|
||||
' INT
|
||||
|
||||
if [ "${OS}" == "windowsnt" ]; then
|
||||
OS=windows
|
||||
DistroBasedOn=windows
|
||||
elif [ "${OS}" == "darwin" ]; then
|
||||
OS=osx
|
||||
DistroBasedOn=osx
|
||||
else
|
||||
OS=`uname`
|
||||
if [ "${OS}" == "SunOS" ] ; then
|
||||
OS=solaris
|
||||
ARCH=`uname -p`
|
||||
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||
DistroBasedOn=sunos
|
||||
elif [ "${OS}" == "AIX" ] ; then
|
||||
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||
DistroBasedOn=aix
|
||||
elif [ "${OS}" == "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DistroBasedOn='redhat'
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DistroBasedOn='suse'
|
||||
elif [ -f /etc/mandrake-release ] ; then
|
||||
DistroBasedOn='mandrake'
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DistroBasedOn='debian'
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
|
||||
DistroBasedOn=unitedlinux
|
||||
fi
|
||||
OS=`lowercase $OS`
|
||||
DistroBasedOn=`lowercase $DistroBasedOn`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$DistroBasedOn" != "$thisinstallerdistro" ]; then
|
||||
echo "*** This installer is only for $thisinstallerdistro and you are running $DistroBasedOn, please run \"$gitreporoot\install-powershell.sh\" to see if your distro is supported AND to auto-select the appropriate installer if it is."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## Check requirements and prerequisites
|
||||
|
||||
#Only do SUDO if we are not root
|
||||
SUDO=''
|
||||
if (( $EUID != 0 )); then
|
||||
SUDO='sudo'
|
||||
fi
|
||||
|
||||
#Check that sudo is available
|
||||
if [[ "$SUDO" -eq "sudo" ]]; then
|
||||
|
||||
$SUDO -v
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: You must either be root or be able to use sudo" >&2
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
#Collect any variation details if required for this distro
|
||||
REV=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
|
||||
#END Collect any variation details if required for this distro
|
||||
|
||||
#If there are known incompatible versions of this distro, put the test, message and script exit here:
|
||||
|
||||
#END Verify The Installer Choice
|
||||
|
||||
##END Check requirements and prerequisites
|
||||
|
||||
echo
|
||||
echo "*** Installing PowerShell Core for $DistroBasedOn..."
|
||||
if ! hash curl 2>/dev/null; then
|
||||
echo "curl not found, installing..."
|
||||
$SUDO apt-get install -y curl
|
||||
fi
|
||||
release=`curl https://api.github.com/repos/powershell/powershell/releases/latest | sed '/tag_name/!d' | sed s/\"tag_name\"://g | sed s/\"//g | sed s/v//g | sed s/,//g | sed s/\ //g`
|
||||
|
||||
echo "*** Current version on git is: $currentversion, repo version may differ slightly..."
|
||||
echo "*** Setting up PowerShell Core repo..."
|
||||
# Import the public repository GPG keys
|
||||
curl https://packages.microsoft.com/keys/microsoft.asc | $SUDO apt-key add -
|
||||
#Add the Repo
|
||||
curl https://packages.microsoft.com/config/ubuntu/$REV/prod.list | $SUDO tee /etc/apt/sources.list.d/microsoft.list
|
||||
# Update apt-get
|
||||
$SUDO apt-get update
|
||||
# Install PowerShell
|
||||
$SUDO apt-get install -y powershell
|
||||
|
||||
powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"'
|
||||
success=$?
|
||||
|
||||
if [[ "$success" != 0 ]]; then
|
||||
echo "ERROR: PowerShell failed to install!" >&2
|
||||
exit "$success"
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ includeide ]] ; then
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell IDE..."
|
||||
echo "*** Setting up VS Code repo..."
|
||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
|
||||
$SUDO mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
|
||||
$SUDO sh -c 'echo "deb [arch=amd64] http://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
|
||||
$SUDO apt-get update
|
||||
$SUDO apt-get install -y code
|
||||
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell Extension"
|
||||
code --install-extension ms-vscode.PowerShell
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ -interactivetesting ]] ; then
|
||||
echo "*** Loading test code in VS Code"
|
||||
curl -O ./testpowershell.ps1 https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/testpowershell.ps1
|
||||
code ./testpowershell.ps1
|
||||
fi
|
||||
|
||||
if [[ "$repobased" == true ]] ; then
|
||||
echo
|
||||
echo "*** NOTE: Run your regular package manager update cycle to update PowerShell Core\n"
|
||||
fi
|
||||
echo "*** Install Complete"
|
178
tools/installpsh-osx.sh
Executable file
178
tools/installpsh-osx.sh
Executable file
@ -0,0 +1,178 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Companion code for the blog https://cloudywindows.com
|
||||
#call this code direction from the web with:
|
||||
#bash <(wget -O - https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/pshcoredevenv-debian.sh) ARGUMENTS
|
||||
#bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
#Usage - if you do not have the ability to run scripts directly from the web,
|
||||
# pull all files in this repo folder and execute, this script
|
||||
# automatically prefers local copies of sub-scripts
|
||||
|
||||
#Completely automated install requires a root account or sudo with a password requirement
|
||||
|
||||
#Switches
|
||||
# -includeide - the script is being run headless, do not perform actions that require response from the console
|
||||
# -interactivetests - requires a human user in front of the machine - loads a script into the ide to test with F5 to ensure the IDE can run scripts
|
||||
|
||||
#gitrepo paths are overrideable to run from your own fork or branch for testing or private distribution
|
||||
|
||||
|
||||
VERSION="1.1.2"
|
||||
gitreposubpath="PowerShell/PowerShell/master"
|
||||
gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools"
|
||||
thisinstallerdistro=osx
|
||||
repobased=true
|
||||
gitscriptname="installpsh-osx.sh"
|
||||
|
||||
echo "\n*** PowerShell Core Development Environment Installer $VERSION for $thisinstallerdistro"
|
||||
echo "*** Current PowerShell Core Version: $currentpshversion"
|
||||
echo "*** Original script is at: $gitreposcriptroot/$gitscriptname"
|
||||
echo "\n*** Arguments used: $* \n\n"
|
||||
|
||||
# Let's quit on interrupt of subcommands
|
||||
trap '
|
||||
trap - INT # restore default INT handler
|
||||
echo "Interrupted"
|
||||
kill -s INT "$$"
|
||||
' INT
|
||||
|
||||
#Verify The Installer Choice (for direct runs of this script)
|
||||
lowercase(){
|
||||
echo "$1" | tr [A-Z] [a-z]
|
||||
}
|
||||
|
||||
OS=`lowercase \`uname\``
|
||||
|
||||
if [ "${OS}" == "windowsnt" ]; then
|
||||
OS=windows
|
||||
DistroBasedOn=windows
|
||||
elif [ "${OS}" == "darwin" ]; then
|
||||
OS=osx
|
||||
DistroBasedOn=osx
|
||||
else
|
||||
OS=`uname`
|
||||
if [ "${OS}" == "SunOS" ] ; then
|
||||
OS=solaris
|
||||
ARCH=`uname -p`
|
||||
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||
DistroBasedOn=sunos
|
||||
elif [ "${OS}" == "AIX" ] ; then
|
||||
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||
DistroBasedOn=aix
|
||||
elif [ "${OS}" == "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DistroBasedOn='redhat'
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DistroBasedOn='suse'
|
||||
elif [ -f /etc/mandrake-release ] ; then
|
||||
DistroBasedOn='mandrake'
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DistroBasedOn='debian'
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
|
||||
DistroBasedOn=unitedlinux
|
||||
fi
|
||||
OS=`lowercase $OS`
|
||||
DistroBasedOn=`lowercase $DistroBasedOn`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$DistroBasedOn" != "$thisinstallerdistro" ]; then
|
||||
echo "*** This installer is only for $thisinstallerdistro and you are running $DistroBasedOn, please run \"$gitreporoot\install-powershell.sh\" to see if your distro is supported AND to auto-select the appropriate installer if it is."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## Check requirements and prerequisites
|
||||
|
||||
#Only do SUDO if we are not root
|
||||
SUDO=''
|
||||
if (( $EUID != 0 )); then
|
||||
SUDO='sudo'
|
||||
fi
|
||||
|
||||
#Check that sudo is available
|
||||
if [[ "$SUDO" -eq "sudo" ]]; then
|
||||
|
||||
$SUDO -v
|
||||
if [ $? -ne 0]; then
|
||||
echo "ERROR: You must either be root or be able to use sudo" >&2
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
#END Collect any variation details if required for this distro
|
||||
|
||||
#If there are known incompatible versions of this distro, put the test, message and script exit here:
|
||||
|
||||
#END Verify The Installer Choice
|
||||
|
||||
##END Check requirements and prerequisites
|
||||
|
||||
echo "\n*** Installing PowerShell Core for $DistroBasedOn..."
|
||||
|
||||
#release=`curl https://api.github.com/repos/powershell/powershell/releases/latest | sed '/tag_name/!d' | sed s/\"tag_name\"://g | sed s/\"//g | sed s/v//g | sed s/,//g | sed s/\ //g`
|
||||
|
||||
if ! hash brew 2>/dev/null; then
|
||||
echo "Homebrew is not found, installing..."
|
||||
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
|
||||
else
|
||||
echo "Howebrew is already installed, skipping..."
|
||||
fi
|
||||
|
||||
if ! hash brew 2>/dev/null; then
|
||||
echo "ERROR: brew did not install correctly, exiting..." >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# Suppress output, it's very noisy on travis-ci
|
||||
if [[ ! -d $(brew --prefix cask) ]]; then
|
||||
echo "Installing cask..."
|
||||
if ! brew tap caskroom/cask >/dev/null; then
|
||||
echo "ERROR: Cask failed to install! Cannot install powershell..." >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! hash powershell 2>/dev/null; then
|
||||
echo "Installing PowerShell..."
|
||||
if ! brew cask install powershell; then
|
||||
echo "ERROR: PowerShell failed to install! Cannot install powershell..." >&2
|
||||
fi
|
||||
else
|
||||
echo "PowerShell is already installed, skipping..."
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ includeide ]] ; then
|
||||
echo "\n*** Installing VS Code PowerShell IDE..."
|
||||
if [[ ! -d $(brew --prefix visual-studio-code) ]]; then
|
||||
if ! brew install visual-studio-code; then
|
||||
echo "ERROR: Visual Studio Code failed to install..." >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
brew upgrade visual-studio-code
|
||||
fi
|
||||
|
||||
echo "\n*** Installing VS Code PowerShell Extension"
|
||||
code --install-extension ms-vscode.PowerShell
|
||||
fi
|
||||
|
||||
powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"'
|
||||
success=$?
|
||||
|
||||
if [[ "$success" != 0 ]]; then
|
||||
echo "ERROR: PowerShell failed to install!" >&2
|
||||
exit "$success"
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ -interactivetesting ]] ; then
|
||||
echo "*** Loading test code in VS Code"
|
||||
$SUDO curl -O ./testpowershell.ps1 https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/testpowershell.ps1
|
||||
code ./testpowershell.ps1
|
||||
fi
|
||||
|
||||
if [[ "$repobased" == true ]] ; then
|
||||
echo "*** NOTE: Run your regular package manager update cycle to update PowerShell Core"
|
||||
fi
|
||||
echo "*** Install Complete"
|
161
tools/installpsh-redhat.sh
Executable file
161
tools/installpsh-redhat.sh
Executable file
@ -0,0 +1,161 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Companion code for the blog https://cloudywindows.com
|
||||
#call this code direction from the web with:
|
||||
#bash <(wget -O - https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/pshcoredevenv-debian.sh) ARGUMENTS
|
||||
#bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
#Usage - if you do not have the ability to run scripts directly from the web,
|
||||
# pull all files in this repo folder and execute, this script
|
||||
# automatically prefers local copies of sub-scripts
|
||||
|
||||
#Completely automated install requires a root account or sudo with a password requirement
|
||||
|
||||
#Switches
|
||||
# -includeide - the script is being run headless, do not perform actions that require response from the console
|
||||
# -interactivetests - requires a human user in front of the machine - loads a script into the ide to test with F5 to ensure the IDE can run scripts
|
||||
|
||||
#gitrepo paths are overrideable to run from your own fork or branch for testing or private distribution
|
||||
|
||||
|
||||
VERSION="1.1.2"
|
||||
gitreposubpath="PowerShell/PowerShell/master"
|
||||
gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools"
|
||||
thisinstallerdistro=redhat
|
||||
repobased=true
|
||||
gitscriptname="installpsh-redhat.psh"
|
||||
|
||||
echo
|
||||
echo "*** PowerShell Core Development Environment Installer $VERSION for $thisinstallerdistro"
|
||||
echo "*** Current PowerShell Core Version: $currentpshversion"
|
||||
echo "*** Original script is at: $gitreposcriptroot/$gitscriptname"
|
||||
echo
|
||||
echo "*** Arguments used: $* "
|
||||
echo
|
||||
|
||||
# Let's quit on interrupt of subcommands
|
||||
trap '
|
||||
trap - INT # restore default INT handler
|
||||
echo "Interrupted"
|
||||
kill -s INT "$$"
|
||||
' INT
|
||||
|
||||
#Verify The Installer Choice (for direct runs of this script)
|
||||
lowercase(){
|
||||
#echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
|
||||
echo "$1" | tr [A-Z] [a-z]
|
||||
}
|
||||
if [ "${OS}" == "windowsnt" ]; then
|
||||
OS=windows
|
||||
DistroBasedOn=windows
|
||||
elif [ "${OS}" == "darwin" ]; then
|
||||
OS=osx
|
||||
DistroBasedOn=osx
|
||||
else
|
||||
OS=`uname`
|
||||
if [ "${OS}" == "SunOS" ] ; then
|
||||
OS=solaris
|
||||
ARCH=`uname -p`
|
||||
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||
DistroBasedOn=sunos
|
||||
elif [ "${OS}" == "AIX" ] ; then
|
||||
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||
DistroBasedOn=aix
|
||||
elif [ "${OS}" == "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DistroBasedOn='redhat'
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DistroBasedOn='suse'
|
||||
elif [ -f /etc/mandrake-release ] ; then
|
||||
DistroBasedOn='mandrake'
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DistroBasedOn='debian'
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
|
||||
DistroBasedOn=unitedlinux
|
||||
fi
|
||||
OS=`lowercase $OS`
|
||||
DistroBasedOn=`lowercase $DistroBasedOn`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$DistroBasedOn" != "$thisinstallerdistro" ]; then
|
||||
echo "*** This installer is only for $thisinstallerdistro and you are running $DistroBasedOn, please run \"$gitreporoot\install-powershell.sh\" to see if your distro is supported AND to auto-select the appropriate installer if it is."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## Check requirements and prerequisites
|
||||
|
||||
#Only do SUDO if we are not root
|
||||
SUDO=''
|
||||
if (( $EUID != 0 )); then
|
||||
SUDO='sudo'
|
||||
fi
|
||||
|
||||
#Check that sudo is available
|
||||
if [[ "$SUDO" -eq "sudo" ]]; then
|
||||
|
||||
$SUDO -v
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: You must either be root or be able to use sudo" >&2
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
#Collect any variation details if required for this distro
|
||||
|
||||
#END Collect any variation details if required for this distro
|
||||
|
||||
#If there are known incompatible versions of this distro, put the test, message and script exit here:
|
||||
|
||||
#END Verify The Installer Choice
|
||||
|
||||
##END Check requirements and prerequisites
|
||||
|
||||
echo
|
||||
echo "*** Installing PowerShell Core for $DistroBasedOn..."
|
||||
if ! hash curl 2>/dev/null; then
|
||||
echo "curl not found, installing..."
|
||||
$SUDO yum install -y curl
|
||||
fi
|
||||
release=`curl https://api.github.com/repos/powershell/powershell/releases/latest | sed '/tag_name/!d' | sed s/\"tag_name\"://g | sed s/\"//g | sed s/v//g | sed s/,//g | sed s/\ //g`
|
||||
|
||||
echo "*** Current version on git is: $release, repo version may differ slightly..."
|
||||
|
||||
echo "*** Setting up PowerShell Core repo..."
|
||||
$SUDO curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/microsoft.repo
|
||||
$SUDO yum install -y powershell
|
||||
|
||||
powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"'
|
||||
success=$?
|
||||
|
||||
if [[ "$success" != 0 ]]; then
|
||||
echo "ERROR: PowerShell failed to install!" >&2
|
||||
exit "$success"
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ includeide ]] ; then
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell IDE..."
|
||||
echo "*** Setting up VS Code repo..."
|
||||
$SUDO rpm --import https://packages.microsoft.com/keys/microsoft.asc
|
||||
$SUDO sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
|
||||
yum check-update
|
||||
$SUDO yum install -y code
|
||||
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell Extension"
|
||||
code --install-extension ms-vscode.PowerShell
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ -interactivetesting ]] ; then
|
||||
echo "*** Loading test code in VS Code"
|
||||
curl -O ./testpowershell.ps1 https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/testpowershell.ps1
|
||||
code ./testpowershell.ps1
|
||||
fi
|
||||
|
||||
if [[ "$repobased" == true ]] ; then
|
||||
echo "*** NOTE: Run your regular package manager update cycle to update PowerShell Core"
|
||||
fi
|
||||
echo "*** Install Complete"
|
191
tools/installpsh-suse.sh
Executable file
191
tools/installpsh-suse.sh
Executable file
@ -0,0 +1,191 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Companion code for the blog https://cloudywindows.com
|
||||
#call this code direction from the web with:
|
||||
#bash <(wget -O - https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/pshcoredevenv-debian.sh) ARGUMENTS
|
||||
#bash <(curl -s https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.sh) <ARGUMENTS>
|
||||
|
||||
#Usage - if you do not have the ability to run scripts directly from the web,
|
||||
# pull all files in this repo folder and execute, this script
|
||||
# automatically prefers local copies of sub-scripts
|
||||
|
||||
#Completely automated install requires a root account or sudo with a password requirement
|
||||
|
||||
#Switches
|
||||
# -includeide - the script is being run headless, do not perform actions that require response from the console
|
||||
# -interactivetests - requires a human user in front of the machine - loads a script into the ide to test with F5 to ensure the IDE can run scripts
|
||||
|
||||
#gitrepo paths are overrideable to run from your own fork or branch for testing or private distribution
|
||||
|
||||
|
||||
VERSION="1.1.2"
|
||||
gitreposubpath="PowerShell/PowerShell/master"
|
||||
gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools"
|
||||
thisinstallerdistro=suse
|
||||
repobased=true
|
||||
gitscriptname="installpsh-suse.psh"
|
||||
|
||||
echo
|
||||
echo "*** PowerShell Core Development Environment Installer $VERSION for $thisinstallerdistro"
|
||||
echo "*** Current PowerShell Core Version: $currentpshversion"
|
||||
echo "*** Original script is at: $gitreposcriptroot/$gitscriptname"
|
||||
echo
|
||||
echo "*** Arguments used: $*"
|
||||
echo
|
||||
|
||||
# Let's quit on interrupt of subcommands
|
||||
trap '
|
||||
trap - INT # restore default INT handler
|
||||
echo "Interrupted"
|
||||
kill -s INT "$$"
|
||||
' INT
|
||||
|
||||
#Verify The Installer Choice (for direct runs of this script)
|
||||
lowercase(){
|
||||
#echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
|
||||
echo "$1" | tr [A-Z] [a-z]
|
||||
}
|
||||
if [ "${OS}" == "windowsnt" ]; then
|
||||
OS=windows
|
||||
DistroBasedOn=windows
|
||||
elif [ "${OS}" == "darwin" ]; then
|
||||
OS=osx
|
||||
DistroBasedOn=osx
|
||||
else
|
||||
OS=`uname`
|
||||
if [ "${OS}" == "SunOS" ] ; then
|
||||
OS=solaris
|
||||
ARCH=`uname -p`
|
||||
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
|
||||
DistroBasedOn=sunos
|
||||
elif [ "${OS}" == "AIX" ] ; then
|
||||
OSSTR="${OS} `oslevel` (`oslevel -r`)"
|
||||
DistroBasedOn=aix
|
||||
elif [ "${OS}" == "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DistroBasedOn='redhat'
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DistroBasedOn='suse'
|
||||
elif [ -f /etc/mandrake-release ] ; then
|
||||
DistroBasedOn='mandrake'
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DistroBasedOn='debian'
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION//`]"
|
||||
DistroBasedOn=unitedlinux
|
||||
fi
|
||||
OS=`lowercase $OS`
|
||||
DistroBasedOn=`lowercase $DistroBasedOn`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$DistroBasedOn" != "$thisinstallerdistro" ]; then
|
||||
echo "*** This installer is only for $thisinstallerdistro and you are running $DistroBasedOn, please run \"$gitreporoot\install-powershell.sh\" to see if your distro is supported AND to auto-select the appropriate installer if it is."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## Check requirements and prerequisites
|
||||
|
||||
#Only do SUDO if we are not root
|
||||
SUDO=''
|
||||
if (( $EUID != 0 )); then
|
||||
SUDO='sudo'
|
||||
fi
|
||||
|
||||
#Check that sudo is available
|
||||
if [[ "$SUDO" -eq "sudo" ]]; then
|
||||
|
||||
$SUDO -v
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: You must either be root or be able to use sudo" >&2
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
#Collect any variation details if required for this distro
|
||||
REV=`cat /etc/SuSE-release | grep 'VERSION' | sed s/.*=\ //`
|
||||
MAJORREV=`echo $REV | sed 's/\..*//'`
|
||||
#END Collect any variation details if required for this distro
|
||||
|
||||
#If there are known incompatible versions of this distro, put the test, message and script exit here:
|
||||
if [[ $MAJORREV < 42 ]]; then
|
||||
echo "OpenSUSE $VERSION_ID is not supported!" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
#END Verify The Installer Choice
|
||||
|
||||
|
||||
##END Check requirements and prerequisites
|
||||
|
||||
echo
|
||||
echo "*** Installing PowerShell Core for $DistroBasedOn..."
|
||||
if ! hash curl 2>/dev/null; then
|
||||
echo "curl not found, installing..."
|
||||
$SUDO zypper install -y curl
|
||||
fi
|
||||
release=`curl https://api.github.com/repos/powershell/powershell/releases/latest | sed '/tag_name/!d' | sed s/\"tag_name\"://g | sed s/\"//g | sed s/v//g | sed s/,//g | sed s/\ //g`
|
||||
|
||||
#REPO BASED (Not ready yet)
|
||||
#echo "*** Setting up PowerShell Core repo..."
|
||||
#echo "*** Current version on git is: $release, repo version may differ slightly..."
|
||||
## Install the Microsoft public key so that zypper trusts the package
|
||||
#sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
|
||||
##Add the Repo
|
||||
#$SUDO sh -c 'echo -e "[code]\nname=PowerShell Core\nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-sles12-prod\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/zypp/repos.d/powershellcore.repo'
|
||||
## Update zypper
|
||||
#$SUDO zypper refresh
|
||||
## Install PowerShell
|
||||
#$SUDO zypper --non-interactive install powershell
|
||||
|
||||
#DIRECT DOWNLOAD
|
||||
packagerel=`echo $release | sed 's/-/_/'`
|
||||
package=powershell-${packagerel}-1.suse.42.1.x86_64.rpm
|
||||
downloadurl=https://github.com/PowerShell/PowerShell/releases/download/v$release/$package
|
||||
|
||||
echo "Destination file: $package"
|
||||
echo "Source URL: $downloadurl"
|
||||
|
||||
curl -L -o "$package" "$downloadurl"
|
||||
|
||||
if [[ ! -r "$package" ]]; then
|
||||
echo "ERROR: $package failed to download! Aborting..." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
|
||||
sudo zypper --non-interactive install "./$package"
|
||||
|
||||
powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"'
|
||||
success=$?
|
||||
|
||||
if [[ "$success" != 0 ]]; then
|
||||
echo "ERROR: PowerShell failed to install!" >&2
|
||||
exit "$success"
|
||||
fi
|
||||
|
||||
if [[ "'$*'" =~ includeide ]] ; then
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell IDE..."
|
||||
echo "*** Setting up VS Code repo..."
|
||||
$SUDO sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/zypp/repos.d/vscode.repo'
|
||||
$SUDO zypper refresh
|
||||
$SUDO zypper --non-interactive install code
|
||||
|
||||
echo
|
||||
echo "*** Installing VS Code PowerShell Extension"
|
||||
code --install-extension ms-vscode.PowerShell
|
||||
fi
|
||||
|
||||
|
||||
if [[ "'$*'" =~ -interactivetesting ]] ; then
|
||||
echo "*** Loading test code in VS Code"
|
||||
curl -O ./testpowershell.ps1 https://raw.githubusercontent.com/DarwinJS/CloudyWindowsAutomationCode/master/pshcoredevenv/testpowershell.ps1
|
||||
code ./testpowershell.ps1
|
||||
fi
|
||||
|
||||
if [[ "$repobased" == true ]] ; then
|
||||
echo "*** NOTE: Run your regular package manager update cycle to update PowerShell Core"
|
||||
fi
|
||||
echo "*** Install Complete"
|
Loading…
Reference in New Issue
Block a user