Last active
October 22, 2016 15:57
-
-
Save dmarquezbh/526335184cdcd2abb5b2 to your computer and use it in GitHub Desktop.
Fancybox DAAS - Devbox As A Service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
require 'vagrant' | |
# Monkey patch VirtualBox provider to be able to remap shared folders after reboot. | |
module VagrantPlugins | |
module ProviderVirtualBox | |
module Action | |
class RemountSyncedFolders < SyncedFolders | |
def initialize(app,env) | |
super(app, env) | |
end | |
def call(env) | |
@env = env | |
@app.call(env) | |
folders = synced_folders(env[:machine]) | |
folders.each do |impl_name, fs| | |
plugins[impl_name.to_sym][0].new.enable(env[:machine], fs, impl_opts(impl_name, env)) | |
end | |
end | |
end | |
def self.action_remount_synced_folders | |
Vagrant::Action::Builder.new.tap do |b| | |
b.use RemountSyncedFolders | |
end | |
end | |
end | |
end | |
end | |
class RebootPlugin < Vagrant.plugin("2") | |
name "Reboot Plugin" | |
provisioner "reboot" do | |
class RebootProvisioner < Vagrant.plugin("2", :provisioner) | |
def initialize(machine, config) | |
super | |
end | |
def configure(root_config) | |
super(root_config) | |
end | |
def provision | |
command = 'shutdown -r now' | |
@machine.ui.info("Issuing command: #{command}") | |
@machine.communicate.sudo(command) do |type, data| | |
if type == :stderr | |
@machine.ui.error(data); | |
end | |
end | |
begin | |
sleep 10 | |
end until @machine.communicate.ready? | |
@machine.action('remount_synced_folders') | |
end | |
def cleanup | |
super | |
end | |
end | |
RebootProvisioner | |
end | |
end | |
unless Vagrant.has_plugin?("vagrant-docker-compose") | |
puts "Install plugin vagrant-docker-compose first: vagrant plugin install vagrant-docker-compose" | |
exit | |
end | |
Vagrant.configure(2) do |config| | |
config.vm.box = "ubuntu/trusty64" | |
#config.vm.hostname = "fancybox" | |
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'" # fix for warning messages | |
config.vm.synced_folder "../data", "/vagrant_data", create: true | |
config.ssh.forward_agent = true | |
config.ssh.forward_x11 = true | |
config.vm.provider "virtualbox" do |vb| | |
host = RbConfig::CONFIG['host_os'] | |
# Give VM 1/2 system memory & access to all cpu cores on the host | |
if host =~ /darwin/ | |
cpus = `sysctl -n hw.ncpu`.to_i | |
# sysctl returns Bytes and we need to convert to MB | |
mem = `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 2 | |
vb.customize ["modifyvm", :id, '--audio', 'coreaudio', '--audiocontroller', 'hda'] | |
elsif host =~ /linux/ | |
cpus = `nproc`.to_i | |
# meminfo shows KB and we need to convert to MB | |
mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 4 | |
else | |
cpus = 2 | |
mem = 1024 | |
end | |
vb.memory = mem | |
vb.gui = true if ENV['GUI'] | |
vb.cpus = cpus | |
vb.customize ['modifyvm', :id, '--usb', 'on'] | |
vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"] | |
vb.customize ["modifyvm", :id, "--accelerate3d", "on"] | |
vb.customize ["modifyvm", :id, "--ioapic", "on"] | |
vb.customize ["modifyvm", :id, "--vram", "128"] | |
vb.customize ["modifyvm", :id, "--pae", "on"] | |
vb.customize ["modifyvm", :id, "--chipset", "ich9"] | |
vb.customize ["modifyvm", :id, "--hwvirtex", "on"] | |
end | |
for i in 3000..3010 | |
config.vm.network "forwarded_port", guest: i, host: i, auto_correct: true | |
end | |
config.vm.network "forwarded_port", guest: 5000, host: 3011, auto_correct: true | |
config.vm.network "forwarded_port", guest: 8888, host: 3012, auto_correct: true | |
config.vm.network "forwarded_port", guest: 8080, host: 3013, auto_correct: true | |
config.vm.network "forwarded_port", guest: 9000, host: 3014, auto_correct: true | |
config.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true | |
$swap = <<-SCRIPT | |
dd if=/dev/zero of=/swapfile bs=1024 count=2097152 | |
mkswap /swapfile | |
swapon /swapfile | |
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab | |
SCRIPT | |
$packages = <<-SCRIPT | |
HOST=`hostname` | |
key=`perl -e 'srand; printf int(rand(100000000000000000))'` | |
key=$key$key | |
xauth add ${HOST}/unix:0 . $key | |
sudo apt-get update | |
sudo apt-get -y install curl git wget tmux unzip build-essential | |
sudo apt-get -y autoremove | |
git config --global url."https://".insteadOf git:// | |
git config --global url."https://github.com/".insteadOf git@github.com: | |
test -f /vagrant/apps && exit | |
mkdir -p /vagrant/apps | |
SCRIPT | |
$vim = <<-SCRIPT | |
sudo apt-get -y install vim | |
test -f ~/.vimrc && exit | |
mkdir -p ~/.vim/autoload ~/.vim/bundle | |
curl -LSso ~/.vim/autoload/pathogen.vim https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim | |
echo "execute pathogen#infect() | |
syntax on | |
filetype plugin indent on | |
Helptags | |
set autoindent | |
set smartindent | |
set expandtab | |
set shiftwidth=2 | |
set softtabstop=2 | |
set nu | |
set background=dark | |
" > ~/.vimrc | |
cd ~/.vim/bundle | |
git clone https://github.com/tpope/vim-rails | |
git clone https://github.com/tpope/vim-bundler | |
git clone https://github.com/vim-scripts/dbext.vim | |
git clone https://github.com/elixir-lang/vim-elixir.git ~/.vim/bundle/vim-elixir | |
git clone https://github.com/lambdatoast/elm.vim.git | |
SCRIPT | |
$nodejs = <<-SCRIPT | |
curl -so- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash | |
echo "source /home/vagrant/.nvm/nvm.sh" >> /home/vagrant/.profile | |
source /home/vagrant/.profile | |
nvm install stable | |
nvm alias default stable | |
sudo apt-get -y install libfontconfig | |
if [ -z ${http_proxy+x} ]; then echo "proxy is unset"; else npm config set proxy $http_proxy; fi | |
if [ -z ${http_proxy+x} ]; then echo "proxy is unset"; else npm config set https-proxy $http_proxy; fi | |
npm install -g phantomjs | |
npm install -g yo | |
npm install -g bower | |
npm install -g grunt-cli | |
npm install -g gulp | |
npm install -g brunch | |
npm install -g generator-polymer | |
npm install -g elm | |
SCRIPT | |
$java = <<-SCRIPT | |
sudo apt-get -y install python-software-properties | |
sudo add-apt-repository ppa:webupd8team/java | |
sudo apt-get update | |
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections | |
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections | |
sudo apt-get -qq install oracle-java8-installer | |
sudo sh -c 'echo "export JAVA_HOME=/usr/lib/jvm/java-8-oracle" >> /etc/environment' | |
sudo -E apt-get -qq install ant | |
sudo sh -c 'echo "export ANT_HOME=/usr/share/ant/bin" >> /etc/environment' | |
SCRIPT | |
$docker = <<-SCRIPT | |
usermod -aG docker vagrant | |
if [ -z "$(grep "cgroup_enable=memory swapaccount=1" /etc/default/grub)" ]; then | |
sed -Ei \'s/^(GRUB_CMDLINE_LINUX)=.+/\\1="cgroup_enable=memory swapaccount=1 quiet"/\' /etc/default/grub | |
fi | |
update-grub | |
SCRIPT | |
$heroku = <<-SCRIPT | |
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh | |
SCRIPT | |
$rails = <<-SCRIPT | |
echo "gem: --no-document" > /home/vagrant/.gemrc | |
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 | |
curl -sSL https://get.rvm.io | bash -s stable --rails | |
source /home/vagrant/.rvm/scripts/rvm | |
gem install cucumber rspec em-proxy volt | |
SCRIPT | |
$meteor = <<-SCRIPT | |
curl -s https://install.meteor.com/ | sh | |
SCRIPT | |
$aspnet = <<-SCRIPT | |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF | |
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list | |
sudo apt-get update | |
sudo apt-get -y install automake libtool mono-complete | |
curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src > /dev/null 2>&1 | |
cd /usr/local/src/libuv-1.4.2 | |
sudo sh autogen.sh | |
sudo ./configure | |
sudo make | |
sudo make install | |
sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/ | |
sudo ldconfig | |
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh | |
yes | certmgr -ssl -m https://go.microsoft.com https://myget.org https://nuget.org | |
mozroots --import --sync --quiet | |
dnvm upgrade | |
SCRIPT | |
$welcome = <<-SCRIPT | |
echo cd \/vagrant\/apps > /home/vagrant/.bashrc | |
rm -rf /etc/motd | |
echo Fancybox DAAS - Devbox As A Service >> /etc/motd | |
echo +++++++++++++++++++++++++++++++++++ >> /etc/motd | |
echo Refactor thy programming skills! >> /etc/motd | |
echo >> /etc/motd | |
SCRIPT | |
$timezone = <<-SCRIPT | |
area="America" | |
zone="Sao_Paulo" | |
sudo echo "$area/$zone" > /tmp/timezone | |
sudo cp -f /tmp/timezone /etc/timezone | |
sudo cp -f /usr/share/zoneinfo/$area/$zone /etc/localtime | |
SCRIPT | |
$play = <<-SCRIPT | |
echo "var page = require('webpage').create(); | |
page.onConsoleMessage = function(msg) { | |
console.log(msg); | |
}; | |
page.open('http://www.typesafe.com/get-started', function(status) { | |
page.evaluate(function() { | |
console.log(document.getElementById('top').getElementsByClassName('minimal')[0].href); | |
}); | |
phantom.exit(); | |
});" > scrape.js | |
source .profile | |
url=$(phantomjs scrape.js) | |
zip=$(basename $url) | |
folder=$(grep -o 'activator-[0-9].[0-9].[0-9]-minimal' <<< $zip) | |
rm $zip & rm -rf $folder | |
wget $url | |
unzip $zip | |
echo "export PATH=$PATH:/home/vagrant/$folder" >> ~/.bashrc | |
sudo chmod a+x $folder/activator | |
rm $zip & rm scrape.js | |
unset url & unset zip & unset folder | |
SCRIPT | |
$elixir = <<-SCRIPT | |
locale-gen en_US.UTF-8 | |
update-locale LANG=en_US.UTF-8 | |
sed -ie 's/LC_ALL="en_US"/LC_ALL="en_US.UTF-8"/' /etc/default/locale | |
export LANG="en_US.UTF-8" | |
export LC_ALL="en_US.UTF-8" | |
wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb | |
sudo apt-get update | |
sudo apt-get -y install elixir | |
yes Y | mix local.hex | |
yes Y | mix archive.install "https://github.com/phoenixframework/phoenix/releases/download/v1.2.1/phoenix_new-1.2.1.ez" | |
SCRIPT | |
$laravel = <<-SCRIPT | |
sudo apt-get -y install php5 php5-mcrypt | |
curl -sS https://getcomposer.org/installer | php | |
sudo mv composer.phar /usr/local/bin/composer | |
echo "export PATH=$PATH:/usr/local/bin/composer" >> ~/.bashrc | |
source ~/.bashrc | |
composer global require "laravel/installer=~1.1" | |
echo "export PATH=$PATH:export PATH=$PATH:~/.composer/vendor/bin" >> ~/.bashrc | |
SCRIPT | |
$laravel = <<-SCRIPT | |
sudo apt-get -y install erlang erlang-doc | |
SCRIPT | |
$mobile = <<-SCRIPT | |
sudo apt-get -y install lib32z1 lib32ncurses5 lib32stdc++6 expect | |
echo "var page = require('webpage').create(); | |
page.onConsoleMessage = function(msg) { | |
console.log(msg); | |
}; | |
page.onError = function(msg) { | |
} | |
page.open('https://developer.android.com/sdk/index.html#Other', function(status) { | |
page.evaluate(function() { | |
console.log(document.getElementsByClassName('download')[0].childNodes[1].childNodes[8].childNodes[3].childNodes[1].href); | |
}); | |
phantom.exit(); | |
});" > scrape.js | |
source .profile | |
ANDROID_SDK=$(phantomjs scrape.js) | |
ANDROID_SDK_FILENAME=$(basename $ANDROID_SDK) | |
curl -O $ANDROID_SDK | |
tar -xzvf $ANDROID_SDK_FILENAME | |
rm $ANDROID_SDK_FILENAME & rm scrape.js | |
unset ANDROID_SDK & unset ANDROID_SDDK_FILENAME | |
sudo chown -R vagrant android-sdk-linux/ | |
echo 'export ANDROID_HOME=/home/vagrant/android-sdk-linux' >> /home/vagrant/.bashrc | |
echo 'export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools' >> /home/vagrant/.bashrc | |
expect -c ' | |
set timeout -1 ; | |
spawn /home/vagrant/android-sdk-linux/tools/android update sdk -u --all --filter tools,platform-tools,build-tools-22.0.1,android-22,android-19,sys-img-armeabi-v7a-android-19 | |
expect { | |
"Do you accept the license" { exp_send "y\r" ; exp_continue } | |
eof | |
} | |
' | |
expect -c ' | |
set timeout -1 ; | |
spawn /home/vagrant/android-sdk-linux/tools/android create avd --name cordovakitkat --target android-19 --abi default/armeabi-v7a | |
expect { | |
"Do you wish to create a custom hardware profile" { exp_send "no\r" ; exp_continue } | |
eof | |
} | |
' | |
npm install -g cordova | |
npm install -g phonegap | |
npm install -g ionic | |
SCRIPT | |
$desktop = <<-SCRIPT | |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - | |
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' | |
sudo apt-get update | |
#sudo apt-get -y install xfce4 | |
sudo apt-get -y install lubuntu-core | |
sudo apt-get -y install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11 | |
#sudo apt-get -y install --no-install-recommends xubuntu-desktop | |
sudo apt-get -y install google-chrome-stable firefox | |
VBoxClient --seamless | |
SCRIPT | |
debug = "> /dev/null 2>&1" unless ENV['DEBUG'] | |
config.vm.provision "shell", inline: $timezone, privileged: false | |
config.vm.provision "shell", inline: $swap, args: debug | |
config.vm.provision "shell", inline: $packages, privileged: false, args: debug | |
config.vm.provision "shell", inline: $vim, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $desktop, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $aspnet, privileged: false, args: debug | |
config.vm.provision "shell", inline: $nodejs, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $java, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $mobile, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $play, privileged: false, args: debug | |
config.vm.provision :docker | |
config.vm.provision :docker_compose | |
config.vm.provision "shell", inline: $docker, args: debug | |
config.vm.provision "shell", inline: $rails, privileged: false, args: debug | |
config.vm.provision "shell", inline: $elixir, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $laravel, privileged: false, args: debug | |
#config.vm.provision "shell", inline: $meteor, privileged: false, args: debug | |
config.vm.provision "shell", inline: $heroku, args: debug | |
config.vm.provision "shell", inline: $welcome | |
config.vm.provision :reboot | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment