diff options
| author | Mircea Moise <mmoise@thoughtworks.com> | 2014-11-19 20:31:04 +0000 | 
|---|---|---|
| committer | Mircea Moise <mmoise@thoughtworks.com> | 2014-11-19 20:31:04 +0000 | 
| commit | 5d6b14b54fb69c3a611cf1f03d9e8bf2d76a2cad (patch) | |
| tree | aa078297d619bfe34b7fa7681aacdb7d1372022c | |
| parent | f202ed1c57d5a727dbcc6d10d6a669d363639ab3 (diff) | |
Added vagrantfile and provisioning scripts so the service can be run inside a vagrant box
| -rw-r--r-- | Vagrantfile | 119 | ||||
| -rw-r--r-- | provisioning/README.md | 22 | ||||
| -rwxr-xr-x | provisioning/bootstrap.sh | 61 | ||||
| -rw-r--r-- | provisioning/provision.sh | 13 | 
4 files changed, 215 insertions, 0 deletions
| diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000..66fada32 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,119 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! +VAGRANTFILE_API_VERSION = "2" + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| +  # All Vagrant configuration is done here. The most common configuration +  # options are documented and commented below. For a complete reference, +  # please see the online documentation at vagrantup.com. + +  # Every Vagrant virtual environment requires a box to build off of. +  config.vm.box = "ubuntu/trusty64" + +  # The url from where the 'config.vm.box' box will be fetched if it +  # doesn't already exist on the user's system. +  # config.vm.box_url = "http://domain.com/path/to/above.box" + +  # Create a forwarded port mapping which allows access to a specific port +  # within the machine from a port on the host machine. In the example below, +  # accessing "localhost:8080" will access port 80 on the guest machine. +  config.vm.network :forwarded_port, guest: 3333, host: 3333 + +  config.vm.provision :shell, path: "provisioning/provision.sh" +  # Create a private network, which allows host-only access to the machine +  # using a specific IP. +  # config.vm.network :private_network, ip: "192.168.33.10" + +  # Create a public network, which generally matched to bridged network. +  # Bridged networks make the machine appear as another physical device on +  # your network. +  # config.vm.network :public_network + +  # If true, then any SSH connections made will enable agent forwarding. +  # Default value: false +  # config.ssh.forward_agent = true + +  # Share an additional folder to the guest VM. The first argument is +  # the path on the host to the actual folder. The second argument is +  # the path on the guest to mount the folder. And the optional third +  # argument is a set of non-required options. +  # config.vm.synced_folder "../data", "/vagrant_data" + +  # Provider-specific configuration so you can fine-tune various +  # backing providers for Vagrant. These expose provider-specific options. +  # Example for VirtualBox: +  # +  # config.vm.provider :virtualbox do |vb| +  #   # Don't boot with headless mode +  #   vb.gui = true +  # +  #   # Use VBoxManage to customize the VM. For example to change memory: +  #   vb.customize ["modifyvm", :id, "--memory", "1024"] +  # end +  # +  # View the documentation for the provider you're using for more +  # information on available options. + +  # Enable provisioning with Puppet stand alone.  Puppet manifests +  # are contained in a directory path relative to this Vagrantfile. +  # You will need to create the manifests directory and a manifest in +  # the file precise64.pp in the manifests_path directory. +  # +  # An example Puppet manifest to provision the message of the day: +  # +  # # group { "puppet": +  # #   ensure => "present", +  # # } +  # # +  # # File { owner => 0, group => 0, mode => 0644 } +  # # +  # # file { '/etc/motd': +  # #   content => "Welcome to your Vagrant-built virtual machine! +  # #               Managed by Puppet.\n" +  # # } +  # +  # config.vm.provision :puppet do |puppet| +  #   puppet.manifests_path = "manifests" +  #   puppet.manifest_file  = "init.pp" +  # end + +  # Enable provisioning with chef solo, specifying a cookbooks path, roles +  # path, and data_bags path (all relative to this Vagrantfile), and adding +  # some recipes and/or roles. +  # +  # config.vm.provision :chef_solo do |chef| +  #   chef.cookbooks_path = "../my-recipes/cookbooks" +  #   chef.roles_path = "../my-recipes/roles" +  #   chef.data_bags_path = "../my-recipes/data_bags" +  #   chef.add_recipe "mysql" +  #   chef.add_role "web" +  # +  #   # You may also specify custom JSON attributes: +  #   chef.json = { :mysql_password => "foo" } +  # end + +  # Enable provisioning with chef server, specifying the chef server URL, +  # and the path to the validation key (relative to this Vagrantfile). +  # +  # The Opscode Platform uses HTTPS. Substitute your organization for +  # ORGNAME in the URL and validation key. +  # +  # If you have your own Chef Server, use the appropriate URL, which may be +  # HTTP instead of HTTPS depending on your configuration. Also change the +  # validation key to validation.pem. +  # +  # config.vm.provision :chef_client do |chef| +  #   chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" +  #   chef.validation_key_path = "ORGNAME-validator.pem" +  # end +  # +  # If you're using the Opscode platform, your validator client is +  # ORGNAME-validator, replacing ORGNAME with your organization name. +  # +  # If you have your own Chef Server, the default validation client name is +  # chef-validator, unless you changed the configuration. +  # +  #   chef.validation_client_name = "ORGNAME-validator" +end diff --git a/provisioning/README.md b/provisioning/README.md new file mode 100644 index 00000000..46acbf0b --- /dev/null +++ b/provisioning/README.md @@ -0,0 +1,22 @@ + Setup for developers +===================== +The following instructions describe how to setup a Vagrant box for development. You need to have Vagrant installed on your system. + +# Vagrant setup + +Create and provision Vagrant box +```sh +$ vagrant up +``` + +# Running the server +Activate virtualenv and run Pixelated server +```sh +$ cd /vagrant/service +$ source .virtualenv/bin/activate +$ pixelated-user-agent --host 0.0.0.0 +``` + +After this you will be asked to setup a LEAP provider. Once entering valid LEAP credentials, you should have the server running. + +You should now be able to access the web app by typing localhost:3333 on any browser running on your host machine. diff --git a/provisioning/bootstrap.sh b/provisioning/bootstrap.sh new file mode 100755 index 00000000..eb444382 --- /dev/null +++ b/provisioning/bootstrap.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + +# test dependencies +function check_installed() { +        which $1 +        if [ $? -ne 0 ]; then +                echo "## You must have ${1} installed and in the PATH to run Pixelated-User-Agent" +                echo "## exiting..." +                exit 1 +        fi +} + +for dependency in node npm ruby bundle virtualenv git gpg; do +        check_installed $dependency +done + +# install web-ui dependencies +cd /vagrant/web-ui +npm install +node_modules/bower/bin/bower install --config.interactive=false +bundle install +LC_ALL=en_US.UTF-8 ./go build + +# install service dependencies +cd ../service +virtualenv .virtualenv +source .virtualenv/bin/activate +./go develop --always-unzip +pip uninstall -y gnupg; pip install gnupg + +# print usage +cat <<EOF + +############### + +## You will need an account in a LEAP provider. You may find some at http://bitmask.net/ + +## Once you have it, modify the service/pixelated.example file and move it to ~/.pixelated + +## You might also need to add your LEAP provider ssl certificate to the pixelated/certificates folder, named as your provider domain name (in case it uses TLS): +##      - example: your.leapprovider.org.crt + +## Once you are done, just run: +##        pixelated-user-agent + +EOF diff --git a/provisioning/provision.sh b/provisioning/provision.sh new file mode 100644 index 00000000..e130e34a --- /dev/null +++ b/provisioning/provision.sh @@ -0,0 +1,13 @@ +sudo apt-get update +sudo apt-get install -y git +sudo apt-get install -y nodejs-legacy +sudo apt-get install -y npm +sudo apt-get install -y python-setuptools +sudo easy_install pip +sudo pip install virtualenv +sudo apt-get install -y python-dev +sudo apt-get install -y libffi-dev +sudo apt-get install -y g++ +sudo gem install bundler + +/vagrant/provisioning/bootstrap.sh | 
