diff --git a/.spelling b/.spelling index 3926b6f90e..802cdb665f 100644 --- a/.spelling +++ b/.spelling @@ -406,11 +406,6 @@ u - demos/DSC/readme.md #endregion -#region demos/install/README.md Overrides - - demos/install/README.md -download.sh -#endregion - #region demos/python/README.md Overrides - demos/python/README.md _script.ps1 diff --git a/demos/install/README.md b/demos/install/README.md index 54049e0915..94a780644a 100644 --- a/demos/install/README.md +++ b/demos/install/README.md @@ -1,5 +1,5 @@ -## Install demo +# Install demo -For Windows refer to the [installation instructions](https://github.com/PowerShell/PowerShell/blob/master/docs/installation/windows.md) +For Windows refer to the [installation instructions](https://github.com/PowerShell/PowerShell/blob/master/docs/installation/windows.md). -For Linux, using [download.sh](https://github.com/PowerShell/PowerShell/blob/master/tools/download.sh) is the best way to deploy PowerShell bits \ No newline at end of file +For Linux, using [`install-powershell.sh`](https://github.com/PowerShell/PowerShell/blob/master/tools/install-powershell-readme.md) is the best way to deploy PowerShell bits. diff --git a/docs/building/linux.md b/docs/building/linux.md index 9b8ebb8a2c..5587098386 100644 --- a/docs/building/linux.md +++ b/docs/building/linux.md @@ -25,7 +25,7 @@ Installing the toolchain is as easy as running `Start-PSBootstrap` in PowerShell Of course, this requires a self-hosted copy of PowerShell on Linux. Fortunately, this is as easy as [downloading and installing the package](../installation/linux.md). -The `./tools/download.sh` script will also install the PowerShell package. +The `./tools/install-powershell.sh` script will also install the PowerShell package. In Bash: diff --git a/tools/download.sh b/tools/download.sh deleted file mode 100755 index 30230f97c9..0000000000 --- a/tools/download.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env bash - -# Let's quit on interrupt of subcommands -trap ' - trap - INT # restore default INT handler - echo "Interrupted" - kill -s INT "$$" -' INT - -get_url() { - fork=$2 - echo "https://github.com/$fork/PowerShell/releases/download/$3/$1" -} - -fork="PowerShell" -release=v6.0.0-beta.9 -# Get OS specific asset ID and package name -case "$OSTYPE" in - linux*) - source /etc/os-release - # Install curl and wget to download package - case "$ID" in - centos*) - if ! hash curl 2>/dev/null; then - echo "curl not found, installing..." - sudo yum install -y curl - fi - - powershell-6.0.0_beta.9-1.rhel.7.x86_64.rpm - ;; - ubuntu) - if ! hash curl 2>/dev/null; then - echo "curl not found, installing..." - sudo apt-get install -y curl - fi - - case "$VERSION_ID" in - 14.04) - package=powershell_6.0.0-beta.9-1.ubuntu.14.04_amd64.deb - ;; - 16.04) - package=powershell_6.0.0-beta.9-1.ubuntu.16.04_amd64.deb - ;; - *) - echo "Ubuntu $VERSION_ID is not supported!" >&2 - exit 2 - esac - ;; - opensuse) - if ! hash curl 2>/dev/null; then - echo "curl not found, installing..." - sudo zypper install -y curl - fi - - - case "$VERSION_ID" in - 42.1) - package=powershell-6.0.0_beta.6-1.suse.42.1.x86_64.rpm - release=v6.0.0-beta.6 - ;; - *) - echo "OpenSUSE $VERSION_ID is not supported!" >&2 - exit 2 - esac - ;; - *) - echo "$NAME is not supported!" >&2 - exit 2 - esac - ;; - darwin*) - # We don't check for curl as macOS should have a system version - package=powershell-6.0.0-beta.9-osx.10.12-x64.pkg - ;; - *) - echo "$OSTYPE is not supported!" >&2 - exit 2 - ;; -esac - -curl -L -o "$package" $(get_url "$package" "$fork" "$release") - -if [[ ! -r "$package" ]]; then - echo "ERROR: $package failed to download! Aborting..." >&2 - exit 1 -fi - -# Installs PowerShell package -case "$OSTYPE" in - linux*) - source /etc/os-release - # Install dependencies - echo "Installing PowerShell with sudo..." - case "$ID" in - centos) - # yum automatically resolves dependencies for local packages - sudo yum install "./$package" - ;; - ubuntu) - # dpkg does not automatically resolve dependencies, but spouts ugly errors - sudo dpkg -i "./$package" &> /dev/null - # Resolve dependencies - sudo apt-get install -f - ;; - opensuse) - # Install the Microsoft public key so that zypper trusts the package - sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc - # zypper automatically resolves dependencies for local packages - sudo zypper --non-interactive install "./$package" &> /dev/null - ;; - *) - esac - ;; - darwin*) - patched=0 - if hash brew 2>/dev/null; then - if [[ ! -d $(brew --prefix openssl) ]]; then - echo "Installing OpenSSL with brew..." - if ! brew install openssl; then - echo "ERROR: OpenSSL failed to install! Crypto functions will not work..." >&2 - # Don't abort because it is not fatal - elif ! brew install curl --with-openssl; then - echo "ERROR: curl failed to build against OpenSSL; SSL functions will not work..." >&2 - # Still not fatal - else - # OpenSSL installation succeeded; remember to patch System.Net.Http after PowerShell installation - patched=1 - fi - fi - - else - echo "ERROR: brew not found! OpenSSL may not be available..." >&2 - # Don't abort because it is not fatal - fi - - echo "Installing $package with sudo ..." - sudo installer -pkg "./$package" -target / - if [[ $patched -eq 1 ]]; then - echo "Patching System.Net.Http for libcurl and OpenSSL..." - find /usr/local/microsoft/powershell -name System.Net.Http.Native.dylib | xargs sudo install_name_tool -change /usr/lib/libcurl.4.dylib /usr/local/opt/curl/lib/libcurl.4.dylib - fi - ;; -esac - -powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"' -success=$? - -if [[ "$success" != 0 ]]; then - echo "ERROR: PowerShell failed to install!" >&2 - exit "$success" -fi diff --git a/tools/installpsh-debian.sh b/tools/installpsh-debian.sh index 2d82ff6009..23725a9a94 100755 --- a/tools/installpsh-debian.sh +++ b/tools/installpsh-debian.sh @@ -132,7 +132,9 @@ $SUDO apt-get update # Install PowerShell $SUDO apt-get install -y powershell -pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"' +pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME. +Run `"pwsh`" to start a PowerShell session."' + success=$? if [[ "$success" != 0 ]]; then diff --git a/tools/installpsh-osx.sh b/tools/installpsh-osx.sh index 7dc223b77e..62a6fca170 100755 --- a/tools/installpsh-osx.sh +++ b/tools/installpsh-osx.sh @@ -165,7 +165,9 @@ if [[ "'$*'" =~ includeide ]] ; then code --install-extension ms-vscode.PowerShell fi -pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"' +pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME. +Run `"pwsh`" to start a PowerShell session."' + success=$? if [[ "$success" != 0 ]]; then diff --git a/tools/installpsh-redhat.sh b/tools/installpsh-redhat.sh index 40e29844d1..d152dd0284 100755 --- a/tools/installpsh-redhat.sh +++ b/tools/installpsh-redhat.sh @@ -129,7 +129,9 @@ 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 -pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"' +pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME. +Run `"pwsh`" to start a PowerShell session."' + success=$? if [[ "$success" != 0 ]]; then diff --git a/tools/installpsh-suse.sh b/tools/installpsh-suse.sh index 067dea491b..12813fd5ab 100755 --- a/tools/installpsh-suse.sh +++ b/tools/installpsh-suse.sh @@ -22,7 +22,7 @@ VERSION="1.1.2" gitreposubpath="PowerShell/PowerShell/master" gitreposcriptroot="https://raw.githubusercontent.com/$gitreposubpath/tools" thisinstallerdistro=suse -repobased=true +repobased=false gitscriptname="installpsh-suse.psh" echo @@ -116,15 +116,22 @@ fi #END Verify The Installer Choice +echo +echo "*** Installing prerequisites for PowerShell Core..." +$SUDO zypper --non-interactive install \ + glibc-locale \ + glibc-i18ndata \ + tar \ + curl \ + libunwind \ + libicu \ + openssl \ + && zypper --non-interactive clean --all ##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) @@ -140,8 +147,8 @@ release=`curl https://api.github.com/repos/powershell/powershell/releases/latest #$SUDO zypper --non-interactive install powershell #DIRECT DOWNLOAD -packagerel=`echo $release | sed 's/-/_/'` -package=powershell-${packagerel}-1.suse.42.1.x86_64.rpm +pwshlink=/usr/bin/pwsh +package=powershell-${release}-linux-x64.tar.gz downloadurl=https://github.com/PowerShell/PowerShell/releases/download/v$release/$package echo "Destination file: $package" @@ -154,10 +161,29 @@ if [[ ! -r "$package" ]]; then exit 1 fi -sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc -sudo zypper --non-interactive install "./$package" +## Create the target folder where powershell will be placed +$SUDO mkdir -p /opt/microsoft/powershell/$release +## Expand powershell to the target folder +$SUDO tar zxf $package -C /opt/microsoft/powershell/$release + +## Change the mode of 'pwsh' to 'rwxr-xr-x' to allow execution +$SUDO chmod 755 /opt/microsoft/powershell/$release/pwsh +## Create the symbolic link that points to powershell +$SUDO ln -s /opt/microsoft/powershell/$release/pwsh $pwshlink + +## Add the symbolic link path to /etc/shells +if [ ! -f /etc/shells ] ; then + echo $pwshlink | $SUDO tee /etc/shells ; +else + grep -q "^${pwshlink}$" /etc/shells || echo $pwshlink | $SUDO tee --append /etc/shells > /dev/null ; +fi + +## Remove the downloaded package file +rm -f $package + +pwsh -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME. +Run `"pwsh`" to start a PowerShell session."' -powershell -noprofile -c '"Congratulations! PowerShell is installed at $PSHOME"' success=$? if [[ "$success" != 0 ]]; then