scripts/install-dotnet-ubuntu-22.sh

246 lines
8.4 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
#############################################################
# Author: Taryel Hlontsi, 2024
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>
#############################################################
doc=$(cat <<'EOF'
NOTES:
1) In fact, Emacs has a built-in feature to autoinstall LSP (OmniSharp or csharp_ls) and DAP (netcoredbg)
2) Different versions of .NET can be extracted to the same directory, which coexist side-by-side
3) If something else than $HOME/.dontet is specified, you would need to install the dotnet tools with --tool-path option
4) OmniSharp is a golden standard but it may not work with the latest dotnet SDK, in this case prefer csharp-ls
5) For debugging a debug profile is needed, example:
(dap-register-debug-template
"NetCoreDbg::Launch"
(list :type "coreclr"
:request "launch"
:program "/home/zed/Documents/dotnet-console-games/Projects/2048/bin/Debug/2048.dll"
:cwd "/home/zed/Documents/dotnet-console-games/Projects/2048/"
:mode "launch"
:name "NetCoreDbg::Launch"
:dap-compilation "dotnet build"))
Then evaluate this snippet, M+x dap-debug and finally select that profile
6) Debugger can also be run as a console app, example:
netcoredbg --interpreter=cli -- dotnet 2048.dll
In this case, for priting out the code lines in console, this has to be included in csproj:
<EmbedAllSources>true</EmbedAllSources>
Docs are there: https://github.com/Samsung/netcoredbg/blob/master/docs/cli.md
7) To start a PowerShell session just type: pwsh
EOF
)
#############################################################
# SETUP SECTION, do NOT use "sudo" or "./" to run the script. Source it!
#############################################################
LINK_SDK6="https://download.visualstudio.microsoft.com/download/pr/19144d78-6f95-4810-a9f6-3bf86035a244/23f4654fc5352e049b517937f94be839/dotnet-sdk-6.0.421-linux-x64.tar.gz"
LINK_SDK8="https://download.visualstudio.microsoft.com/download/pr/0a1b3cbd-b4af-4d0d-9ed7-0054f0e200b4/4bcc533c66379caaa91770236667aacb/dotnet-sdk-8.0.204-linux-x64.tar.gz"
LINK_OMNI="https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.39.11/omnisharp-linux-x64-net6.0.tar.gz"
LINK_DEBUGGER="https://github.com/Samsung/netcoredbg/releases/download/3.1.0-1031/netcoredbg-linux-amd64.tar.gz"
INSTALL_DIR=$HOME/.dotnet
LOG_DIR="${INSTALL_DIR}/logs"
LOG="${LOG_DIR}/log.txt"
BASHRC="$HOME/.bashrc"
#############################################################
# HELPER FUNCTIONS
#############################################################
info() {
GREEN='\033[1;32m'
NC='\033[0m'
echo -e "${GREEN}$1${NC}"
echo -e "INFO:\t$1" >> $LOG
}
trace() {
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}$1${NC}"
echo -e "TRACE:\t$1" >> $LOG
}
warn() {
PURPLE='\033[1;35m'
NC='\033[0m'
echo -e "${PURPLE}$1${NC}"
echo -e "WARN:\t$1" >> $LOG
}
error() {
RED='\033[1;31m'
NC='\033[0m'
echo -e "${RED}$1${NC}"
echo -e "ERROR:\t$1" >> $LOG
}
#############################################################
# 1 - DOWNLOAD SDK
#############################################################
download_sdk() {
local step_name='STEP 1 Downloading the SDK'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
if [[ -z "$1" ]]; then
error "The URL link to SDK archive is expected as argument for this function!"
return 1
fi
local link="$1"
local archive=$INSTALL_DIR/dotnet.tar.gz
export DOTNET_CLI_TELEMETRY_OPTOUT=1
wget --continue $link --output-document $archive && \
tar zxf $archive -C $INSTALL_DIR && \
rm $archive
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
info "done"
}
#############################################################
# 2 - SET UP BASH PROFILE
#############################################################
setup_bash_profile() {
local step_name='STEP 2 Setup bash profile'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
echo :$PATH: | grep -q -E ":$HOME/.local/bin:" || echo 'export PATH=$PATH:$HOME/.local/bin' >> $BASHRC && \
sed -i '/export DOTNET_ROOT=\$HOME\/.dotnet/d' $BASHRC > /dev/null 2>&1 && \
sed -i '/export PATH=\$PATH:\$HOME\/.dotnet/d' $BASHRC > /dev/null 2>&1 && \
sed -i '/export DOTNET_CLI_TELEMETRY_OPTOUT=1/d' $BASHRC > /dev/null 2>&1 && \
echo 'export DOTNET_ROOT=$HOME/.dotnet' >> $BASHRC && \
echo 'export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools' >> $BASHRC && \
echo 'export DOTNET_CLI_TELEMETRY_OPTOUT=1' >> $BASHRC
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
source "$BASHRC"
info "done"
}
#############################################################
# 3 - INSTALL POWERSHELL
#############################################################
install_powershell() {
local step_name='STEP 3 Installing powershell'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
dotnet tool install --global PowerShell
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
info "done"
}
#############################################################
# 4 - DOWNLOAD NETCOREDBG
#############################################################
download_netcoredbg() {
local step_name='STEP 4 Downloading netcoredbg'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
local archive=$INSTALL_DIR/netcoredbg.tar.gz
local target=$INSTALL_DIR
wget --continue $LINK_DEBUGGER --output-document $archive && \
mkdir -p $target && \
tar zxf $archive -C $target && \
rm $archive && \
mkdir -p $HOME/.local/bin && \
ln -s $target/netcoredbg/netcoredbg $HOME/.local/bin/netcoredbg
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
info "done"
}
#############################################################
# 5 - DOWNLOAD OMNISHARP
#############################################################
download_omnisharp() {
local step_name='STEP 5 Downloading Omnisharp'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
local archive=$INSTALL_DIR/omnisharp.tar.gz
local target=$INSTALL_DIR/omnisharp
wget --continue $LINK_OMNI --output-document $archive && \
mkdir -p $target && \
tar zxf $archive -C $target && \
rm $archive && \
mkdir -p $HOME/.local/bin && \
ln -s $target/OmniSharp $HOME/.local/bin/OmniSharp
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
info "done"
}
#############################################################
# 6 - INSTALL CSHARP-LS (OPTIONAL)
#############################################################
install_csharp_ls() {
local step_name='STEP 6 Installing csharp-ls'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
dotnet tool install --global csharp-ls
[[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; return 1; }
info "done"
}
#############################################################
# RUN SECTION
#############################################################
if [ $0 == $BASH_SOURCE ]; then
error "Do not run the script in a subshell via ./ Instead you should 'source' it!"
exit 1
fi
user=$(whoami)
if [ $user == root ]; then
error "You should NOT be using a root account"
return 1
fi
mkdir -p $INSTALL_DIR
mkdir -p $LOG_DIR
echo $(date +'%Y-%m-%d %H:%M') > $LOG
info "$doc"
download_sdk $LINK_SDK6 && \
download_sdk $LINK_SDK8 && \
setup_bash_profile && \
install_powershell && \
download_netcoredbg && \
download_omnisharp && \
#install_csharp_ls && \
dotnet --list-sdks
info "Bye!"
info "PS. Log is here: ${LOG}"
return 0