Add install script
This commit is contained in:
commit
db414cfcff
1 changed files with 548 additions and 0 deletions
548
Install Script.sh
Normal file
548
Install Script.sh
Normal file
|
@ -0,0 +1,548 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
#
|
||||
# Dinand's install script
|
||||
#
|
||||
# Assumptions:
|
||||
#
|
||||
# this script can be run on a linux mint installation with sudo, apt-get and zsh
|
||||
#
|
||||
# stdout is logged to install.log, stderr is shown in console
|
||||
# thus, look in the console for errors and find debugging info in install.log
|
||||
#
|
||||
# this install script is assumed to be idempotent
|
||||
# all subroutines must ensure their result is idempotent
|
||||
#
|
||||
# Usage:
|
||||
# ./install_script
|
||||
#
|
||||
|
||||
# Main procedure
|
||||
main() {
|
||||
prepare_log
|
||||
|
||||
empty_line
|
||||
print_info "Starting installation ..."
|
||||
empty_line
|
||||
empty_line
|
||||
print_info "Error messages should be visible in the console"
|
||||
print_info "Complete logs will be stored seperately in ~/install.log"
|
||||
empty_line
|
||||
print_error "This script is ALMOST (but not entirely) non-interactive."
|
||||
print_error "Please standby to re-enter sudo password. Also, fuck composer."
|
||||
empty_line
|
||||
|
||||
ensure_sudo
|
||||
|
||||
aptitude_update
|
||||
drivers
|
||||
gnome
|
||||
|
||||
install_external_repositories
|
||||
|
||||
utilities
|
||||
development_tools
|
||||
terminal
|
||||
networking
|
||||
graphical_tools
|
||||
|
||||
programming_dependencies
|
||||
php_development
|
||||
ruby_development
|
||||
node_development
|
||||
|
||||
docker_kubernetes
|
||||
aws
|
||||
|
||||
cleanup
|
||||
|
||||
empty_line
|
||||
print_success "Installation script succesfully completed!"
|
||||
print_info "You are awesome."
|
||||
empty_line
|
||||
}
|
||||
|
||||
#
|
||||
# Below here all methods describing software to be installed
|
||||
#
|
||||
|
||||
aptitude_update() {
|
||||
print_info "Updating aptitude"
|
||||
|
||||
sudo apt-get update 1>>~/install.log
|
||||
sudo apt-get upgrade -y 1>>~/install.log
|
||||
|
||||
print_success "Aptitude update complete"
|
||||
}
|
||||
|
||||
drivers() {
|
||||
aptitude_install \
|
||||
nvidia-driver-530
|
||||
|
||||
}
|
||||
|
||||
gnome() {
|
||||
aptitude_install \
|
||||
vanilla-gnome-desktop
|
||||
|
||||
}
|
||||
|
||||
install_external_repositories() {
|
||||
install_external_repository \
|
||||
lens \
|
||||
https://downloads.k8slens.dev/keys/gpg \
|
||||
https://downloads.k8slens.dev/apt/debian
|
||||
|
||||
install_external_repository \
|
||||
hashicorp \
|
||||
https://apt.releases.hashicorp.com/gpg \
|
||||
https://apt.releases.hashicorp.com/ \
|
||||
jammy
|
||||
|
||||
install_external_repository \
|
||||
vscodium \
|
||||
https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \
|
||||
https://download.vscodium.com/debs \
|
||||
vscodium
|
||||
|
||||
}
|
||||
|
||||
utilities() {
|
||||
aptitude_install \
|
||||
alacarte \
|
||||
barrier \
|
||||
blueman \
|
||||
butt \
|
||||
dconf-editor \
|
||||
default-jre \
|
||||
firefox \
|
||||
gparted \
|
||||
gpaste \
|
||||
gpick \
|
||||
hunspell-nl \
|
||||
keepassxc \
|
||||
libreoffice \
|
||||
nautilus-nextcloud \
|
||||
pavucontrol \
|
||||
rpi-imager \
|
||||
steam \
|
||||
totem \
|
||||
transmission-gtk \
|
||||
unison \
|
||||
unison-gtk \
|
||||
|
||||
flatpak_install \
|
||||
com.authy.Authy \
|
||||
com.discordapp.Discord \
|
||||
com.slack.Slack \
|
||||
com.spotify.Client \
|
||||
org.ferdium.Ferdium \
|
||||
|
||||
|
||||
install_from_seperate_repository thunderbird ppa:mozillateam/thunderbird-next
|
||||
|
||||
}
|
||||
|
||||
development_tools() {
|
||||
aptitude_install \
|
||||
codium \
|
||||
filezilla \
|
||||
lens \
|
||||
mysql-client \
|
||||
mysql-server \
|
||||
nomad \
|
||||
python3 \
|
||||
sublime-merge \
|
||||
sublime-text \
|
||||
|
||||
|
||||
flatpak_install \
|
||||
com.axosoft.GitKraken \
|
||||
io.dbeaver.DBeaverCommunity \
|
||||
|
||||
custom_install https://raw.githubusercontent.com/kamranahmedse/git-standup/master/installer.sh
|
||||
custom_install https://cli-assets.heroku.com/install-ubuntu.sh
|
||||
|
||||
}
|
||||
|
||||
networking() {
|
||||
aptitude_install \
|
||||
net-tools \
|
||||
openssh-server \
|
||||
resolvconf \
|
||||
wireguard \
|
||||
|
||||
}
|
||||
|
||||
terminal() {
|
||||
aptitude_install \
|
||||
aptitude \
|
||||
git-flow \
|
||||
htop \
|
||||
preload \
|
||||
tilix \
|
||||
tree \
|
||||
tty-clock \
|
||||
direnv \
|
||||
dkms \
|
||||
|
||||
}
|
||||
|
||||
graphical_tools() {
|
||||
aptitude_install \
|
||||
darktable \
|
||||
ffmpeg \
|
||||
gimp \
|
||||
inkscape \
|
||||
kazam \
|
||||
krita \
|
||||
obs-studio \
|
||||
|
||||
flatpak_install \
|
||||
com.ultimaker.cura \
|
||||
net.sourceforge.Hugin \
|
||||
org.blender.Blender \
|
||||
|
||||
}
|
||||
|
||||
programming_dependencies() {
|
||||
# libssl is for node
|
||||
# zlib1g-dev is for ruby
|
||||
|
||||
aptitude_install \
|
||||
libssl-dev \
|
||||
zlib1g-dev \
|
||||
libyaml-dev\
|
||||
|
||||
}
|
||||
|
||||
php_development() {
|
||||
print_info "Installing PHP"
|
||||
|
||||
add_apt_repository ppa:ondrej/php
|
||||
aptitude_install \
|
||||
php \
|
||||
php-bcmath \
|
||||
php-curl \
|
||||
php-gd \
|
||||
php-imagick \
|
||||
php-intl \
|
||||
php-mbstring \
|
||||
php-mysql \
|
||||
php-sqlite3 \
|
||||
php-xml \
|
||||
php-zip \
|
||||
composer \
|
||||
|
||||
{
|
||||
composer global require psy/psysh:@stable
|
||||
} 1>>~/install.log
|
||||
|
||||
ensure_sudo # Because composer breaks sudo
|
||||
|
||||
print_success "PHP Installed"
|
||||
}
|
||||
|
||||
ruby_development() {
|
||||
local RUBY_VERSION="3.2.0"
|
||||
|
||||
print_info "Preparing ruby development environment ..."
|
||||
|
||||
{
|
||||
rm -rf ~/.rbenv/
|
||||
git clone --depth=1 https://github.com/rbenv/rbenv.git ~/.rbenv
|
||||
|
||||
mkdir -p ~/.rbenv/plugins
|
||||
git clone --depth=1 https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
|
||||
git clone --depth=1 https://github.com/rbenv/rbenv-vars.git ~/.rbenv/plugins/rbenv-vars
|
||||
|
||||
export PATH="$HOME/.rbenv/bin:$PATH"
|
||||
eval "$(rbenv init -)"
|
||||
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
|
||||
|
||||
rbenv install "$RUBY_VERSION"
|
||||
rbenv global "$RUBY_VERSION"
|
||||
|
||||
ruby -v
|
||||
|
||||
gem install bundler dip
|
||||
|
||||
gem update
|
||||
gem update --system
|
||||
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "Ruby development environment done!"
|
||||
}
|
||||
|
||||
node_development() {
|
||||
print_info "Installing latest node ..."
|
||||
|
||||
{
|
||||
# Install nvm
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
|
||||
|
||||
# Install node
|
||||
nvm install node --latest-npm
|
||||
|
||||
nvm i -g npm
|
||||
|
||||
# Install npm packages
|
||||
npm install -g \
|
||||
prettier \
|
||||
yarn \
|
||||
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "Installed node, yarn and packages!"
|
||||
}
|
||||
|
||||
docker_kubernetes() {
|
||||
print_info "Installing docker, kubernetes, kubectl, flux ..."
|
||||
|
||||
{
|
||||
#
|
||||
# Docker
|
||||
#
|
||||
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo apt install docker-buildx-plugin
|
||||
|
||||
# Fix permissions
|
||||
sudo groupadd docker -f
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
#
|
||||
# kubectl 1.14
|
||||
#
|
||||
|
||||
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||
chmod +x ./kubectl
|
||||
sudo mv ./kubectl /usr/local/bin/kubectl
|
||||
|
||||
#
|
||||
# Flux
|
||||
#
|
||||
|
||||
curl -s https://toolkit.fluxcd.io/install.sh | sudo bash
|
||||
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "Docker, kubernetes installed!"
|
||||
}
|
||||
|
||||
aws() {
|
||||
print_info "AWS, awscli, ekstcl and aws-iam-authenticator ..."
|
||||
|
||||
{
|
||||
# awscli
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install
|
||||
rm -rf aws
|
||||
rm awscliv2.zip
|
||||
|
||||
# eksctl
|
||||
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
|
||||
sudo mv /tmp/eksctl /usr/local/bin
|
||||
|
||||
# aws-iam-authenticator
|
||||
curl -o aws-iam-authenticator https://s3.us-west-2.amazonaws.com/amazon-eks/1.21.2/2021-07-05/bin/linux/amd64/aws-iam-authenticator
|
||||
chmod +x ./aws-iam-authenticator
|
||||
sudo mv aws-iam-authenticator /usr/local/bin
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "AWS installed!"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
print_info "Performing cleanup tasks ..."
|
||||
|
||||
{
|
||||
# fix flatpak cursors
|
||||
flatpak --user override --filesystem=/home/$USER/.icons/:ro
|
||||
flatpak --user override --filesystem=/usr/share/icons/:ro
|
||||
|
||||
# Remove known_hosts
|
||||
rm ~/.ssh/known_hosts
|
||||
|
||||
# increase amount of inotify watchers
|
||||
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
|
||||
|
||||
# trying to fix automatically installed packages
|
||||
sudo apt-get -y --fix-broken install
|
||||
|
||||
# Cleanup aptitude
|
||||
sudo apt-get autoremove --purge -y
|
||||
sudo apt-get clean -y
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "Cleanup complete!"
|
||||
}
|
||||
|
||||
#
|
||||
# Subroutines for dealing with various tasks below here
|
||||
#
|
||||
|
||||
#
|
||||
# Aptitude
|
||||
#
|
||||
|
||||
# Download and install external deb
|
||||
install_external_deb() {
|
||||
print_info "Installing $1 from external location ..."
|
||||
print_info "Downloading from $2 ..."
|
||||
|
||||
{
|
||||
wget -nv -O "$1".deb $2
|
||||
sudo dpkg -i "$1".deb
|
||||
sudo apt-get -y --fix-broken install
|
||||
rm "$1".deb
|
||||
} 1>>~/install.log
|
||||
|
||||
print_success "$1 installed!"
|
||||
}
|
||||
|
||||
install_from_seperate_repository() {
|
||||
print_info "Installing $1 from $2"
|
||||
add_apt_repository $2
|
||||
aptitude_install $1
|
||||
}
|
||||
|
||||
install_external_repository() {
|
||||
local apt_name="$1"
|
||||
local gpg_url="$2"
|
||||
local apt_url="$3"
|
||||
local release="${4:-stable}"
|
||||
local line="${5:-non-free}"
|
||||
|
||||
local gpg_name="/usr/share/keyrings/$apt_name-archive-keyring.gpg"
|
||||
|
||||
{
|
||||
curl -fsSL $gpg_url | gpg --dearmor | \
|
||||
sudo tee $gpg_name > /dev/null
|
||||
|
||||
echo "deb [arch=amd64 signed-by=$gpg_name] $apt_url $release $line" | \
|
||||
sudo tee /etc/apt/sources.list.d/$apt_name.list > /dev/null
|
||||
|
||||
} 1>>~/install.log
|
||||
}
|
||||
|
||||
# Add apt repository
|
||||
add_apt_repository() {
|
||||
print_info "Adding repository $1"
|
||||
|
||||
# Remove the repository first, if it exists
|
||||
sudo add-apt-repository -r -y $1 1>>~/install.log
|
||||
|
||||
# Now create t
|
||||
sudo add-apt-repository -y $1 1>>~/install.log
|
||||
|
||||
aptitude_update
|
||||
|
||||
print_success "Added repository $1"
|
||||
}
|
||||
|
||||
# Remove aptitude software
|
||||
aptitude_remove() {
|
||||
print_info "Removing the following packages through aptitude ..."
|
||||
print_dump "$@"
|
||||
|
||||
sudo apt-get remove "$@" -y 1>>~/install.log
|
||||
|
||||
print_success "Aptitude removal succesful!"
|
||||
}
|
||||
|
||||
# Install software through aptitude
|
||||
aptitude_install() {
|
||||
print_info "Installing the following packages through aptitude ..."
|
||||
empty_line
|
||||
print_dump "$@"
|
||||
|
||||
sudo apt-get install "$@" -y 1>>~/install.log
|
||||
|
||||
print_success "Aptitude install succesful!"
|
||||
empty_line
|
||||
}
|
||||
|
||||
custom_install() {
|
||||
print_info "Installing custom sh from $@ ..."
|
||||
empty_line
|
||||
|
||||
curl -L $@ | sudo sh
|
||||
|
||||
print_success "Custom install finished!"
|
||||
empty_line
|
||||
}
|
||||
|
||||
# install flatpak software
|
||||
flatpak_install() {
|
||||
print_info "Installing the following packages through flatpak ..."
|
||||
empty_line
|
||||
print_dump "$@"
|
||||
|
||||
sudo flatpak install flathub "$@" --noninteractive >>~/install.log
|
||||
|
||||
print_success "Flatpak install succesful!"
|
||||
empty_line
|
||||
}
|
||||
|
||||
#
|
||||
# Printing messages
|
||||
#
|
||||
|
||||
# Used to print messages
|
||||
print_info() {
|
||||
echo -e "\e[43m\e[30m$@\e[0m"
|
||||
log $@
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "\e[42m\e[30m$@\e[0m"
|
||||
log $@
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "\e[41m$@\e[0m"
|
||||
log $@
|
||||
}
|
||||
|
||||
print_dump() {
|
||||
echo $@
|
||||
log $@
|
||||
}
|
||||
|
||||
empty_line() {
|
||||
echo ""
|
||||
log ""
|
||||
}
|
||||
|
||||
log() {
|
||||
echo "$@" >> ~/install.log
|
||||
}
|
||||
|
||||
#
|
||||
# Misc
|
||||
#
|
||||
|
||||
# Make sure we have root rights
|
||||
ensure_sudo() {
|
||||
print_info "Asking for root permission ..."
|
||||
|
||||
if ! sudo true;
|
||||
then
|
||||
print_error "Failed to attain root"
|
||||
exit 1
|
||||
else
|
||||
print_success "Attained root"
|
||||
fi
|
||||
}
|
||||
|
||||
prepare_log() {
|
||||
print_info "Creating logfile 'install.log'"
|
||||
rm ~/install.log
|
||||
touch ~/install.log
|
||||
}
|
||||
|
||||
# Entrypoint to main function
|
||||
main "$@"
|
Loading…
Reference in a new issue