Skip to content

Instantly share code, notes, and snippets.

@danielalvarenga
Last active February 9, 2017 14:52
Show Gist options
  • Save danielalvarenga/5febb210c1d999f760a162666382a0d6 to your computer and use it in GitHub Desktop.
Save danielalvarenga/5febb210c1d999f760a162666382a0d6 to your computer and use it in GitHub Desktop.
Shell Script Configure Ubuntu 16.04 LTS (customizable for vagrant provision)
#!/bin/bash
# Autor: Daniel Alvarenga Lima
# Versão do Ubuntu suportada: 16.04 64Bit
# Versão deste Script: 2016-12-17
# EXECUTE
# sudo chmod +x script-install-all-ubuntu.sh
# ./script-install-all-ubuntu.sh
#INSTRUCTIONS
# Change "true" por "false" to ignore software setup
# Required only in the first time to execute this script
UPDATE_REPOSITORIES=true
# build-essential, git, curl, libs, zip, rar, nodejs
ESSENCIALS=true
# Add color for user, host, folder and git branch
COLORIZE_TERMINAL=true
# Configure GIT
CONFIGURE_GITHUB=true
GITHUB_NAME="YOUR_NAME"
GITHUB_MAIL="YOUR_GITHUB_EMAIL"
GITHUB_USER="YOUR_USERNAME"
CONFIGURE_GITLAB=true
GITLAB_HOSTNAME="YOUR_GITLAB_DOMAIN"
GITLAB_MAIL="YOUR_GITLAB_EMAIL"
# java
JAVA_ORACLE=true
JAVA_VERSION=8
# if true force not install gimp, vlc, wine, torrent, spotify, filezilla, avanced_apps, google chrome, sublime text, team viewer, eclipse and resolve touchpad
VAGRANT_PROVISION=false
VAGRANT_USER=vagrant
VAGRANT_SYNCED_FOLDER=/vagrant
# image editor
GIMP=true
# player and codecs
VLC=true
# webcam
CHEESE=true
# storage
DROPBOX=true
# manage windows programs
WINE=true
# qBitTorrent
TORRENT=false
# online musics
SPOTIFY=true
# client FTP
FILEZILLA=false
# vagrant rpogram
VAGRANT=true
# synaptic, gparted, terminator
ADVANCED_APPS=true
# google chrome
GOOGLE_CHROME=true
# sublime text
SUBLIME_TEXT=true
# remote control
TEAM_VIEWER=true
# database sqlite
SQLITE=true
# database postgresql, pg admin
POSTGRESQL=true
# database manager postgresql
PGADMIN=true
# database mysql
MYSQL=true
MYSQL_USER=root
MYSQL_PASSWORD=root
# database manager mysql
WORKBENCH=true
# ruby
RUBY_WITH_RVM=false
RUBY_WITH_RBENV=true # only install if RUBY_WITH_RVM is false
RUBY_WITHOUT_VERSION_MANAGER=false # only install if RUBY_WITH_RVM and RUBY_WITH_RBENV is false
RUBY_VERSION=2.3.3
RUBY_VERSION_PATH=2.3
#rails
RAILS=false
RAILS_VERSION=5.0.0.1
# memcached, redis, rabbit, imagemagick
DEV_EXTRAS=true
# resolve specific touchpad problem in DELL Inspiron 13 7000
RESOLVE_TOUCHPAD=false
# paths
LOG_SCRIPT=./log_script.txt
GITCONFIG=/etc/gitconfig
SSH_FOLDER=~/.ssh
SSHCONFIG="$SSH_FOLDER/config"
DOWNLOADS=~/Downloads
BASHRC=~/.bashrc
MOUSE_CONFIG=/usr/share/X11/xorg.conf.d/52-mymods.conf
RBENV_DIR=~/.rbenv
RUBY_BUILD_DIR="$RBENV_DIR/plugins/ruby-build"
REHASH_DIR="$RBENV_DIR/plugins/rbenv-gem-rehash"
if $VAGRANT_PROVISION
then
GIMP=false
VLC=false
CHEESE=false
DROPBOX=false
WINE=false
TORRENT=false
SPOTIFY=false
FILEZILLA=false
VAGRANT=false
ADVANCED_APPS=false
GOOGLE_CHROME=false
SUBLIME_TEXT=false
TEAM_VIEWER=false
RESOLVE_TOUCHPAD=false
PGADMIN=false
WORKBENCH=false
#paths
LOG_SCRIPT=$VAGRANT_SYNCED_FOLDER/log_script.txt
DOWNLOADS=$VAGRANT_SYNCED_FOLDER
BASHRC=/home/$VAGRANT_USER/.bashrc
SSH_FOLDER=/home/$VAGRANT_USER/.ssh
RBENV_DIR=/home/$VAGRANT_USER/.rbenv
RUBY_BUILD_DIR=$RBENV_DIR/plugins/ruby-build
REHASH_DIR=$RBENV_DIR/plugins/rbenv-gem-rehash
fi
function install {
echo installing $1
shift
sudo apt-get -y -f install "$@" >$LOG_SCRIPT 2>$LOG_SCRIPT
}
if $UPDATE_REPOSITORIES
then
echo "*** Add repositories"
sudo add-apt-repository -y ppa:chris-lea/node.js
sudo add-apt-repository -y ppa:webupd8team/java
echo "*** Add the Spotify repository"
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list
echo "*** Update and upgrade"
sudo apt-get update
sudo apt-get -y upgrade
fi
if $ESSENCIALS
then
install "Build Essencial" build-essential
install Git git-core
install CURL curl
install DevLibs zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev python-software-properties
install "Nokogiri gem dependencies" libxml2 libxml2-dev libxslt1-dev
install 7zip p7zip-full
install RAR p7zip-rar
install NodeJS nodejs
install Vim vim
fi
if $JAVA_ORACLE
then
sudo apt-get -y remove --purge openjdk-*
echo oracle-java$JAVA_VERSION-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
install "Java $JAVA_VERSION" oracle-java$JAVA_VERSION-installer
install SetDefaultJava$JAVA_VERSION oracle-java$JAVA_VERSION-set-default
install Maven maven
fi
if $GIMP
then
install Gimp gimp
fi
if $VLC
then
install VLC vlc
fi
if $CHEESE
then
install Cheese cheese
fi
if $DROPBOX
then
install Dropbox nautilus-dropbox
fi
if $WINE
then
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
install Wine wine
fi
if $TORRENT
then
install qBitTorrent qbittorrent
fi
if $SPOTIFY
then
install Spotify spotify-client
fi
if $FILEZILLA
then
install FileZilla filezilla
fi
if $VAGRANT
then
install VirtualBox virtualbox
echo "*** installing Vagrant"
VAGRANT_FILE=$DOWNLOADS/vagrant_1.9.1_x86_64.deb
if [ -f $VAGRANT_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://releases.hashicorp.com/vagrant/1.9.1/vagrant_1.9.1_x86_64.deb
fi
sudo dpkg -i $VAGRANT_FILE
install "Vagrant extras" nfs-kernel-server nfs-common portmap
echo "*** installing Vagrant plugins"
vagrant plugin install vagrant-omnibus >$LOG_SCRIPT 2>$LOG_SCRIPT
vagrant plugin install vagrant-berkshelf
echo "*** installing CHEF-DK 64bits"
CHEF_FILE=$DOWNLOADS/chefdk_1.0.3-1_amd64.deb
if [ -f $CHEF_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://packages.chef.io/files/stable/chefdk/1.0.3/ubuntu/16.04/chefdk_1.0.3-1_amd64.deb
fi
sudo dpkg -i $CHEF_FILE
fi
if $ADVANCED_APPS
then
install Synaptic synaptic # gerenciador de pacotes do linux
install GParted gparted # gerenciador de dicos avançado
install Terminator terminator # terminal
fi
if $GOOGLE_CHROME
then
echo "*** installing Google Chrome 64bits"
install "Google chrome dependencies" libindicator7 libappindicator1 gconf2-common gconf-service-backend libasound2-data libasound2 libgconf-2-4 libnspr4 libnss3-nssdb libnss3 libxft2 libpangox-1.0-0 libpangoxft-1.0-0 libpango1.0-0 libxss1 fonts-liberation xdg-utils gconf-service
CHROME_FILE=$DOWNLOADS/google-chrome-stable_current_amd64.deb
if [ -f $CHROME_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
fi
sudo dpkg -i $CHROME_FILE
fi
if $SUBLIME_TEXT
then
echo "*** installing Sublime Text 3 64bits"
SUBLIME_FILE=$DOWNLOADS/sublime-text_build-3126_amd64.deb
if [ -f $SUBLIME_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://download.sublimetext.com/sublime-text_build-3126_amd64.deb
fi
sudo dpkg -i $SUBLIME_FILE
fi
if $TEAM_VIEWER
then
echo "*** installing Team Viewer"
install "Team Viewer dpendencies" libjpeg62 libxtst6 libjpeg62:i386 libxtst6:i386
TEAM_VIEWER_FILE=$DOWNLOADS/teamviewer_i386.deb
if [ -f $TEAM_VIEWER_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://download.teamviewer.com/download/teamviewer_i386.deb
fi
sudo dpkg -i $TEAM_VIEWER_FILE
fi
if $SQLITE
then
install SQLite sqlite3 libsqlite3-dev
fi
if $POSTGRESQL
then
install PostgreSQL postgresql postgresql-contrib libpq-dev
fi
if $PGADMIN
then
install "PG Admin" pgadmin3
fi
if $MYSQL
then
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $MYSQL_USER"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $MYSQL_PASSWORD"
install MySQL mysql-server mysql-client libmysqlclient-dev
mysql -uroot -proot <<SQL
CREATE USER 'rails'@'localhost';
CREATE DATABASE activerecord_unittest DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE activerecord_unittest2 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON activerecord_unittest.* to 'rails'@'localhost';
GRANT ALL PRIVILEGES ON activerecord_unittest2.* to 'rails'@'localhost';
GRANT ALL PRIVILEGES ON inexistent_activerecord_unittest.* to 'rails'@'localhost';
SQL
fi
if $WORKBENCH
then
echo "*** installing Workbench"
install "Workbench dependeencies" libctemplate2v5 libgeos-3.5.0 libgeos-c1v5 libhdf4-0-alt libaec0 libsz2 libhdf5-10 libnetcdf11 libpcrecpp0v5 libpq5 libtinyxml2.6.2v5 libzip4 python-crypto python-six python-ecdsa python-paramiko
WORKBENCH_FILE=$DOWNLOADS/mysql-workbench-community-6.3.8-1ubu1604-amd64.deb
if [ -f $WORKBENCH_FILE ]
then
echo ""
else
cd $DOWNLOADS
wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-6.3.8-1ubu1604-amd64.deb
fi
sudo dpkg -i $WORKBENCH_FILE
fi
if $RUBY_WITH_RVM
then
echo "installing RVM with RUBY $RUBY_VERSION"
if ! type rvm >$LOG_SCRIPT 2>$LOG_SCRIPT; then
cd
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
install "RVM dependencies" gawk libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
fi
rvm requirements
rvm install ruby-$RUBY_VERSION
rvm use $RUBY_VERSION --default
gem install bundler -N >$LOG_SCRIPT 2>$LOG_SCRIPT
elif $RUBY_WITH_RBENV
then
echo "installing Rbenv with Ruby $RUBY_VERSION"
install "Rbenv dependencies" autoconf bison libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
if [ -d $RBENV_DIR ]
then
cd $RBENV_DIR
git pull
else
git clone https://github.com/rbenv/rbenv.git $RBENV_DIR
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
fi
if [ -d $RUBY_BUILD_DIR ]
then
cd $RUBY_BUILD_DIR
git pull
else
git clone https://github.com/rbenv/ruby-build.git $RUBY_BUILD_DIR
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
cd $RUBY_BUILD_DIR
./install.sh
fi
rbenv install $RUBY_VERSION -s
rbenv global $RUBY_VERSION
rbenv rehash
echo installing Bundler
echo "gem: --no-ri --no-rdoc" > ~/.gemrc
gem install bundler -N >$LOG_SCRIPT 2>$LOG_SCRIPT
rbenv rehash
elif $RUBY_WITHOUT_VERSION_MANAGER
then
install Ruby ruby$RUBY_VERSION_PATH ruby$RUBY_VERSION_PATH-dev
update-alternatives --set ruby /usr/bin/ruby$RUBY_VERSION_PATH >$LOG_SCRIPT 2>$LOG_SCRIPT
update-alternatives --set gem /usr/bin/gem$RUBY_VERSION_PATH >$LOG_SCRIPT 2>$LOG_SCRIPT
echo "installing Bundler"
gem install bundler -N >$LOG_SCRIPT 2>$LOG_SCRIPT
fi
if $RAILS
then
echo "installing Rails $RAILS_VERSION"
gem install rails -v $RAILS_VERSION -N >$LOG_SCRIPT 2>$LOG_SCRIPT
fi
if $DEV_EXTRAS
then
install memcached memcached
install Redis redis-server
install RabbitMQ rabbitmq-server
install ImageMagick imagemagick
cd
fi
if $RESOLVE_TOUCHPAD
then
sudo touch $MOUSE_CONFIG
sudo chmod 777 $MOUSE_CONFIG
echo -e Section \"InputClass\" > $MOUSE_CONFIG
echo -e Identifier \"Force Clickpad Config\" >> $MOUSE_CONFIG
echo -e MatchDriver \"synaptics\" >> $MOUSE_CONFIG
echo -e Option \"ClickPad\" \"true\" >> $MOUSE_CONFIG
echo -e Option \"EmulateMidButtonTime\" \"0\" >> $MOUSE_CONFIG
echo -e Option \"SoftButtonAreas\" \"50% 0 82% 0 0 0 0 0\" >> $MOUSE_CONFIG
echo -e Option \"SecondarySoftButtonAreas\" \"58% 0 0 15% 42% 58% 0 15%\" >> $MOUSE_CONFIG
echo -e EndSection >> $MOUSE_CONFIG
fi
if $COLORIZE_TERMINAL
then
echo -e "function parse_git_branch () {" >> $BASHRC
echo -e " git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'" >> $BASHRC
echo -e "}" >> $BASHRC
echo -e 'RED="\[\033[01;31m\]"' >> $BASHRC
echo -e 'YELLOW="\[\033[01;33m\]"' >> $BASHRC
echo -e 'GREEN="\[\033[01;32m\]"' >> $BASHRC
echo -e 'BLUE="\[\033[01;34m\]"' >> $BASHRC
echo -e 'NO_COLOR="\[\033[00m\]"' >> $BASHRC
echo -e 'PS1="$GREEN\u@\h$NO_COLOR:$BLUE\w$YELLOW\$(parse_git_branch)$NO_COLOR\$ "' >> $BASHRC
source $BASHRC
fi
echo "*** remove packages"
sudo apt-get clean
if $CONFIGURE_GITHUB
then
sudo rm $GITCONFIG
sudo touch $GITCONFIG
sudo chmod 777 $GITCONFIG
echo -e "[user]" >> $GITCONFIG
echo -e " name = $GITHUB_NAME" >> $GITCONFIG
echo -e " email = $GITHUB_MAIL" >> $GITCONFIG
echo -e "[core]" >> $GITCONFIG
echo -e " editor = vim -f" >> $GITCONFIG
echo -e "[alias]" >> $GITCONFIG
echo -e " df = diff" >> $GITCONFIG
echo -e " st = status" >> $GITCONFIG
echo -e " cm = commit" >> $GITCONFIG
echo -e " ch = checkout" >> $GITCONFIG
echo -e " br = branch" >> $GITCONFIG
echo -e " lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative" >> $GITCONFIG
echo -e " ctags = !.git/hooks/ctags" >> $GITCONFIG
echo -e "[color]" >> $GITCONFIG
echo -e " branch = auto" >> $GITCONFIG
echo -e " diff = auto" >> $GITCONFIG
echo -e " grep = auto" >> $GITCONFIG
echo -e " interactive = auto" >> $GITCONFIG
echo -e " status = auto" >> $GITCONFIG
echo -e " ui = 1" >> $GITCONFIG
echo -e "[branch]" >> $GITCONFIG
echo -e " autosetuprebase = always" >> $GITCONFIG
echo -e "[github]" >> $GITCONFIG
echo -e " user = $GITHUB_USER" >> $GITCONFIG
ssh-keygen -t rsa -b 4096 -C "$GITHUB_MAIL" -N "" -f $SSH_FOLDER/id_rsa_github
echo ""
echo ""
echo "**********************"
echo "CONFIGURE GIT USER"
echo ""
echo "Adicione a public ssh key em 'https://github.com/settings/ssh':"
echo ""
cat $SSH_FOLDER/id_rsa_github.pub
echo ""
echo "**********************"
touch $SSHCONFIG
echo -e "#Github (default)" >> $SSHCONFIG
echo -e " Host github" >> $SSHCONFIG
echo -e " HostName github.com" >> $SSHCONFIG
echo -e " User git" >> $SSHCONFIG
echo -e " IdentityFile $SSH_FOLDER/id_rsa_github" >> $SSHCONFIG
fi
if $CONFIGURE_GITLAB
then
ssh-keygen -t rsa -b 4096 -C "$GITLAB_MAIL" -N "" -f $SSH_FOLDER/id_rsa_gitlab
echo ""
echo ""
echo "**********************"
echo "CONFIGURE GITLAB USER"
echo ""
echo "Adicione a public ssh key ao GitLab:"
echo ""
cat $SSH_FOLDER/id_rsa_gitlab.pub
echo ""
echo "**********************"
touch $SSHCONFIG
echo -e "#Gitlab" >> $SSHCONFIG
echo -e " Host gitlab" >> $SSHCONFIG
echo -e " HostName $GITLAB_HOSTNAME" >> $SSHCONFIG
echo -e " User git" >> $SSHCONFIG
echo -e " IdentityFile $SSH_FOLDER/id_rsa_gitlab" >> $SSHCONFIG
fi
if $POSTGRESQL
then
echo ""
echo ""
echo "**********************"
echo "CONFIGURE O POSTGRES"
echo ""
echo "Para definir usuário e senha no PostgreSQL, execute manualmente os seguintes comandos:"
echo "sudo -u postgres createuser NOME_DO_USUARIO -s"
echo "sudo -u postgres psql"
echo "\password NOME_DO_USUARIO"
echo "**********************"
fi
if $SUBLIME_TEXT
then
echo ""
echo ""
echo "**********************"
echo "MELHORE O SUBLIME TEXT"
echo ""
echo "Abra o Sublime Text 3 e exiba o terminal em View > Show Console"
echo "Copie e cole o código abaixo no terminal do Sublime Text 3 e pressione enter:"
echo ""
echo "import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)"
echo ""
echo "Reinicie o Sublime Text 3"
echo "**********************"
fi
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment