├── LICENSE ├── README.md ├── add-vagrant-key.sh ├── base.sh ├── capistrano.sh ├── desktop.sh ├── docker.sh ├── ec2-api-tools.sh ├── etcd.sh ├── fleetctl.sh ├── go-lang.sh ├── imagemagick.sh ├── install-virtualbox-guest-additions.sh ├── java.sh ├── logrotate.sh ├── memcached.sh ├── mysql-server.sh ├── nagios.sh ├── nginx.sh ├── node.sh ├── openvpn.sh ├── packer.sh ├── postfix.sh ├── postgresql-production-server.sh ├── postgresql-server.sh ├── redis.sh ├── riak.sh ├── ros-indigo.sh ├── ruby.sh ├── sphinx.sh ├── sudoers-nopasswd.sh ├── upgrade.sh └── yeoman.sh /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 cloudspace-devops 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | packer-shell-scripts 2 | ==================== 3 | 4 | Cloudspace DevOps shell scripts for configuring packer builds. These shell scripts are designed to work with https://github.com/cloudspace-devops/packer-image-scripts packer image building scripts. 5 | -------------------------------------------------------------------------------- /add-vagrant-key.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | mkdir ~/.ssh 4 | chmod 700 ~/.ssh 5 | cd ~/.ssh 6 | wget --no-check-certificate 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' -O authorized_keys 7 | chmod 600 ~/.ssh/authorized_keys 8 | -------------------------------------------------------------------------------- /base.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | sudo apt-get update 4 | sudo apt-get install -y build-essential 5 | sudo apt-get install -y linux-headers-$(uname -r) dkms nfs-common git-core whois traceroute htop unzip sysstat vim libmysqlclient-dev postgresql-server-dev-9.3 wget screen 6 | sudo apt-mark hold grub grub-common grub-pc grub-pc-bin grub2-common grub-legacy-ec2 7 | sudo apt-get -y upgrade 8 | 9 | 10 | -------------------------------------------------------------------------------- /capistrano.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # capistrano 4 | cap install 5 | 6 | # Capfile 7 | sed -i "1s/^/Dotenv.load\n/" Capfile 8 | sed -i "1s/^/require 'dotenv'\n/" Capfile 9 | sed -i "s/# require 'capistrano\/bundler'/require 'capistrano\/bundler'/g" Capfile 10 | sed -i "s/# require 'capistrano\/rails\/assets'/require 'capistrano\/rails\/assets'/g" Capfile 11 | sed -i "s/# require 'capistrano\/rails\/migrations'/require 'capistrano\/rails\/migrations'/g" Capfile 12 | sed -i "s/tasks\/\*\.cap')\.each/tasks\/\*\.rake')\.each/g" Capfile 13 | 14 | # config/deploy.rb 15 | sed -i "s/set :application, 'my_app_name'//g" config/deploy.rb 16 | sed -i "s/lock '3.1.0'/#lock '3.1.0'/g" config/deploy.rb 17 | sed -i "s/set :repo_url, 'git@example.com:me\/my_repo.git'/set :repo_url, #{ENV['REPOSITORY_URL']}/g" config/deploy.rb 18 | sed -i "s/# set :scm, :git/set :scm, :git/g" config/deploy.rb 19 | sed -i "s/# set :format, :pretty/set :format, :pretty/g" config/deploy.rb 20 | sed -i "s/# set :log_level, :debug/set :log_level, :debug/g" config/deploy.rb 21 | sed -i "s/# set :linked_files, %w{config\/database.yml}/set :linked_files, %w{.env}/g" config/deploy.rb 22 | sed -i "s/# set :linked_dirs, %w{bin log tmp\/pids tmp\/cache tmp\/sockets vendor\/bundle public\/system}/set :linked_dirs, %w{log}/g" config/deploy.rb 23 | sed -i "s/# set :keep_releases, 5/set :keep_releases, 5/g" config/deploy.rb 24 | sed -i "s/after :restart, :clear_cache do/# after :restart, :clear_cache do/g" config/deploy.rb 25 | sed -i "s/on roles\(:web\), in: :groups, limit: 3, wait: 10 do/# on roles\(:web\), in: :groups, limit: 3, wait: 10 do/g" config/deploy.rb 26 | sed -i '55s/end/# end/' config/deploy.rb 27 | sed -i '56s/end/# end/' config/deploy.rb 28 | sed -i '3i set :stages, %w(staging production)' config/deploy.rb 29 | sed -i "4i set :default_stage, 'staging'" config/deploy.rb 30 | sed -i "5i set :ssh_options, keys: ['~/.ssh/id_rsa'], forward_agent: true, user: 'app'" config/deploy.rb 31 | 32 | # config/deploy/production.rb 33 | cat < 'production' 42 | 43 | set :application, "#{ENV['STAGING_URL']}" 44 | 45 | set :deploy_to, "/srv/www/#{ENV['STAGING_URL']}" 46 | 47 | namespace :deploy do 48 | task :start do 49 | on roles(:app) do 50 | execute "cd /srv/www/#{ENV['STAGING_URL']}/current && "\ 51 | "sudo bundle exec unicorn -E production -c /etc/unicorn/#{ENV['STAGING_URL']}.rb -D" 52 | end 53 | end 54 | 55 | task :stop do 56 | on roles(:app) do 57 | execute "sudo kill -QUIT $(cat /srv/www/#{ENV['STAGING_URL']}/unicorn.pid)" 58 | end 59 | end 60 | 61 | task :restart do 62 | on roles(:app) do 63 | execute "sudo kill -USR2 $(cat /srv/www/#{ENV['STAGING_URL']}/unicorn.pid)" 64 | end 65 | end 66 | end 67 | EOF 68 | 69 | #oconfig/deploy/staging.rb 70 | cat < 'staging' 79 | 80 | set :application, "#{ENV['STAGING_URL']}" 81 | 82 | set :deploy_to, "/srv/www/#{ENV['STAGING_URL']}" 83 | 84 | namespace :deploy do 85 | task :start do 86 | on roles(:app) do 87 | execute "cd /srv/www/#{ENV['STAGING_URL']}/current && "\ 88 | "sudo bundle exec unicorn -E staging -c /etc/unicorn/#{ENV['STAGING_URL']}.rb -D" 89 | end 90 | end 91 | 92 | task :stop do 93 | on roles(:app) do 94 | execute "sudo kill -QUIT $(cat /srv/www/#{ENV['STAGING_URL']}/unicorn.pid)" 95 | end 96 | end 97 | 98 | task :restart do 99 | on roles(:app) do 100 | execute "sudo kill -USR2 $(cat /srv/www/#{ENV['STAGING_URL']}/unicorn.pid)" 101 | end 102 | end 103 | end 104 | EOF 105 | -------------------------------------------------------------------------------- /desktop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | sudo apt-get update 4 | sudo apt-get install -y ubuntu-desktop 5 | -------------------------------------------------------------------------------- /docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | curl -sSL https://get.docker.com/ubuntu/ | sudo sh 4 | 5 | # Add user to docker group 6 | sudo usermod -a -G docker `eval whoami` 7 | 8 | # Setup access for the docker group 9 | sudo chgrp docker /usr/bin/docker 10 | sudo rm -f /usr/local/bin/docker 11 | sudo ln -s /usr/bin/docker /usr/local/bin/docker 12 | 13 | # Confirm install worked 14 | docker -v 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /ec2-api-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Install Java 4 | sudo apt-get install -y openjdk-7-jdk 5 | echo -e "export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/" | tee ~/.bash_profile ~/.bashrc 6 | . ~/.bash_profile 7 | 8 | # Install EC2 API Tools 9 | sudo apt-get install -y ec2-api-tools 10 | -------------------------------------------------------------------------------- /etcd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Set etcd version 4 | ETCD="v0.4.2" 5 | 6 | # Install etcd 7 | cd /usr/local/src/ 8 | sudo wget https://github.com/coreos/etcd/releases/download/$ETCD/etcd-$ETCD-linux-amd64.tar.gz 9 | sudo tar -xzf etcd-$ETCD-linux-amd64.tar.gz && cd etcd-$ETCD-linux-amd64/ && sudo cp etc* /usr/bin 10 | 11 | # Setup user-data config 12 | RES=$(curl https://discovery.etcd.io/new) && TOKEN=${RES##*/} 13 | cat > /home/vagrant/user-data << "EOF" 14 | #cloud-config 15 | coreos: 16 | etcd: 17 | #generate a new token for each unique cluster from https://discovery.etcd.io/new 18 | discovery: https://discovery.etcd.io/$TOKEN 19 | addr: $public_ipv4:4001 20 | peer-addr: $public_ipv4:7001 21 | units: 22 | - name: etcd.service 23 | command: start 24 | - name: fleet.service 25 | command: start 26 | runtime: no 27 | content: | 28 | [Unit] 29 | Description=fleet 30 | 31 | [Service] 32 | Environment=FLEET_PUBLIC_IP=$public_ipv4 33 | ExecStart=/usr/bin/fleet 34 | - name: docker-tcp.socket 35 | command: start 36 | enable: true 37 | content: | 38 | [Unit] 39 | Description=Docker Socket for the API 40 | 41 | [Socket] 42 | ListenStream=4243 43 | Service=docker.service 44 | BindIPv6Only=both 45 | 46 | [Install] 47 | WantedBy=sockets.target 48 | EOF 49 | 50 | # Setup vagrant ssh config 51 | cat > /home/vagrant/.ssh/config << "EOF" 52 | StrictHostKeyChecking no 53 | UserKnownHostsFile=/dev/null 54 | EOF 55 | 56 | # Setup root ssh config 57 | sudo mkdir -p /home/root/.ssh 58 | sudo cp /home/vagrant/.ssh/config /home/root/.ssh/ 59 | -------------------------------------------------------------------------------- /fleetctl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Set fleet version 4 | FLEET="v0.8.3" 5 | 6 | # Install fleet 7 | sudo wget https://github.com/coreos/fleet/releases/download/$FLEET/fleet-$FLEET-linux-amd64.tar.gz 8 | tar -xf fleet-$FLEET-linux-amd64.tar.gz && cd fleet-$FLEET-linux-amd64/ && sudo cp flee* /usr/bin 9 | -------------------------------------------------------------------------------- /go-lang.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Install Go 4 | #sudo apt-get install -y golang 5 | 6 | # Install Mercurial, Subversion, Git, Bzr, and CVS Version Control Systems 7 | sudo apt-get install -y mercurial 8 | sudo apt-get install -y subversion 9 | sudo apt-get install -y git 10 | sudo apt-get install -y bzr 11 | sudo apt-get install -y cvs 12 | 13 | curl -O https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz 14 | sudo tar -C /usr/local -xzf go1.4.1.linux-amd64.tar.gz 15 | rm go1.4.1.linux-amd64.tar.gz 16 | 17 | # Setup Go Path 18 | echo -e "export GOPATH=/srv/go\nexport PATH=$PATH:/srv/go/bin:/usr/local/go/bin" | tee ~/.bash_profile ~/.bashrc 19 | . ~/.bash_profile 20 | 21 | # Uncomment below to create local workspace directories 22 | # I prefer to launch the devops box with vagrant at /srv/devops 23 | # and mount a separate go directory structure at /srv/go 24 | # go get github.com/mattn/gom 25 | # mkdir -p $GOPATH/bin 26 | # mkdir -p $GOPATH/pkg 27 | # mkdir -p $GOPATH/src 28 | # mkdir -p $GOPATH/src/github.com 29 | -------------------------------------------------------------------------------- /imagemagick.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | sudo apt-get install -y imagemagick 4 | sudo apt-get install -y libmagickcore-dev 5 | sudo apt-get install -y libmagickwand-dev -------------------------------------------------------------------------------- /install-virtualbox-guest-additions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Install Module Assistant 4 | sudo apt-get install -y build-essential 5 | sudo apt-get install -y module-assistant 6 | sudo apt-get install -y linux-headers-generic 7 | sudo m-a prepare 8 | 9 | # Install guest additions 10 | sudo apt-get install -y virtualbox-guest-utils 11 | 12 | 13 | -------------------------------------------------------------------------------- /java.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # # Install Java 7 4 | # sudo apt-get install -y openjdk-7-jdk 5 | # echo -e "export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/" | tee ~/.bash_profile ~/.bashrc 6 | # . ~/.bash_profile 7 | 8 | # Install Java 8 9 | sudo apt-get install -y software-properties-common 10 | sudo add-apt-repository -y ppa:webupd8team/java 11 | sudo apt-get update 12 | echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections 13 | echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections 14 | sudo apt-get install -y oracle-java8-installer 15 | # Set default java 16 | sudo apt-get install oracle-java8-set-default 17 | 18 | -------------------------------------------------------------------------------- /logrotate.sh: -------------------------------------------------------------------------------- 1 | cat < /etc/apt/sources.list.d/basho.list" 24 | # sudo apt-get update 25 | 26 | # # Install Riak 27 | # sudo apt-get install riak -------------------------------------------------------------------------------- /ros-indigo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Setup sources.list 4 | sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list' 5 | 6 | # Add ROS keys 7 | wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add - 8 | 9 | # Install ROS 10 | sudo apt-get update 11 | sudo apt-get install -y ros-indigo-desktop-full 12 | 13 | # Initialize rosdep 14 | sudo rosdep init 15 | rosdep update 16 | 17 | # Setup environment 18 | echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc 19 | source ~/.bashrc 20 | 21 | # export | grep ROS 22 | 23 | # Setup rosinstall 24 | sudo apt-get install -y python-rosinstall 25 | 26 | # Setup ROS Workspace 27 | # mkdir -p ~/catkin_ws/src 28 | # cd ~/catkin_ws/src 29 | # catkin_init_workspace 30 | # cd ~/catkin_ws/ 31 | # catkin_make 32 | # source devel/setup.bash 33 | -------------------------------------------------------------------------------- /ruby.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Install ruby and rails 4 | sudo apt-get install -y git-core curl zlib1g-dev libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties make libv8-dev libqt4-dev 5 | 6 | # Install rbenv 7 | git clone git://github.com/sstephenson/rbenv.git ~/.rbenv 8 | 9 | echo $PATH 10 | 11 | # Add rbenv paths and eval to .bashrc and .bash_profile (needed in login/non-login shells) 12 | echo -e 'export PATH="./bin:$HOME/.rbenv/bin:$PATH"\neval "$(rbenv init -)"' | tee ~/.bash_profile ~/.bashrc 13 | . ~/.bash_profile 14 | 15 | echo $PATH 16 | 17 | # Install rbenv plugns 18 | git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build 19 | git clone git://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash 20 | git clone git://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update 21 | git clone git://github.com/dcarley/rbenv-sudo.git ~/.rbenv/plugins/rbenv-sudo 22 | 23 | # Install and set default ruby version 24 | cd ~/.rbenv 25 | #rbenv install --keep 1.9.3-p547 26 | #rbenv install --keep 2.0.0-p481 27 | #rbenv install --keep 2.1.0 28 | #rbenv install --keep 2.1.1 29 | #rbenv install --keep 2.1.2 30 | rbenv install --keep 2.1.4 31 | rbenv global 2.1.4 32 | ruby -v 33 | echo -e "install: --no-ri --no-rdoc\nupdate: --no-ri --no-rdoc" > ~/.gemrc 34 | 35 | # Install bundler 36 | gem install bundler 37 | 38 | # Install common gems 39 | gem install ancestry 40 | gem install annotate 41 | gem install awesome_print 42 | gem install aws-sdk 43 | gem install bcrypt 44 | gem install bcrypt-ruby 45 | gem install binding_of_caller 46 | gem install breadcrumbs_on_rails 47 | gem install bullet 48 | gem install cancan 49 | gem install capistrano 50 | gem install capistrano-rails 51 | gem install capistrano-resque 52 | gem install capybara 53 | gem install carrierwave 54 | gem install chronic 55 | gem install clint_eastwood 56 | gem install coffee-rails 57 | gem install countries 58 | gem install css3-progress-bar-rails 59 | gem install dalli 60 | gem install database_cleaner 61 | gem install devise 62 | gem install exception_notification 63 | gem install execjs 64 | gem install factory_girl 65 | gem install factory_girl_rails 66 | gem install faker 67 | gem install faraday 68 | gem install github-markup 69 | gem install guard-bundler 70 | gem install guard-rails 71 | gem install guard-rspec 72 | gem install haml 73 | gem install hirb 74 | gem install ice_cube 75 | gem install jbuilder 76 | gem install jquery-modal-rails 77 | gem install jquery-rails 78 | gem install jquery-timepicker-rails 79 | gem install jquery-turbolinks 80 | gem install jquery-ui-rails 81 | gem install kaminari 82 | gem install less-rails 83 | gem install librarian-chef 84 | gem install libv8 85 | gem install metric_fu 86 | gem install minitest-matchers 87 | gem install minitest-rails 88 | gem install minitest-reporters 89 | gem install modernizr-rails 90 | gem install mysql2 91 | gem install net-ssh 92 | gem install nokogiri 93 | gem install omniauth-github 94 | gem install paperclip 95 | gem install pdfkit 96 | gem install pg 97 | gem install prawn 98 | gem install private_pub 99 | gem install pry-byebug 100 | gem install pry-rails 101 | gem install pry-stack_explorer 102 | gem install rack-rewrite 103 | gem install rails 104 | gem install rails_best_practices 105 | gem install redcarpet 106 | gem install resque 107 | gem install rest-client 108 | gem install rolify 109 | gem install rspec 110 | gem install rspec-rails 111 | gem install rubocop 112 | gem install ruby-progressbar 113 | gem install sass-rails 114 | gem install sdoc 115 | gem install shoulda 116 | gem install sidekiq 117 | gem install sidekiq-cron 118 | gem install sinatra 119 | gem install slim 120 | gem install sshkey 121 | gem install therubyracer 122 | gem install thin 123 | gem install thinking-sphinx 124 | gem install thread_safe 125 | gem install turbolinks 126 | gem install twitter-bootstrap-rails 127 | gem install uglifier 128 | gem install unicorn 129 | gem install whenever 130 | gem install wice_grid 131 | gem install wkhtmltopdf-binary 132 | gem install yajl-ruby 133 | gem install yard 134 | gem install yard-activerecord 135 | -------------------------------------------------------------------------------- /sphinx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # Install Sphinx 4 | sudo apt-get install -y python-sphinx 5 | 6 | -------------------------------------------------------------------------------- /sudoers-nopasswd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | echo 'vagrant' | sudo -S sed -i 's/^%sudo\s\+ALL=(ALL:ALL)\s\+ALL/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/' /etc/sudoers 4 | -------------------------------------------------------------------------------- /upgrade.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | sudo apt-get update 4 | sudo apt-get -y upgrade 5 | -------------------------------------------------------------------------------- /yeoman.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eux 2 | 3 | # npm has issues if you don't reset eth0 4 | sudo ifdown eth0 5 | sudo ifup eth0 6 | 7 | # Install yeoman, grunt and bower 8 | npm install yo -g --no-insight 9 | --------------------------------------------------------------------------------