[tor-commits] [tor-browser-bundle/master] Gitian builds in VirtualBox with Vagrant

mikeperry at torproject.org mikeperry at torproject.org
Tue Jul 16 00:51:16 UTC 2013


commit 88f6c9e6d6530690de52ffb4186b8531a04e39bd
Author: Arlo Breault <arlolra at gmail.com>
Date:   Sat Jun 22 17:06:07 2013 -0700

    Gitian builds in VirtualBox with Vagrant
---
 .gitignore             |    1 +
 gitian/README.build    |    2 +-
 gitian/gpg/openssl.gpg |   94 -----------------------------------------
 vagrant/Makefile       |   50 ++++++++++++++++++++++
 vagrant/README.md      |   12 ++++++
 vagrant/Vagrantfile    |  108 ++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 172 insertions(+), 95 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..54e0741
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+vagrant/.vagrant
diff --git a/gitian/README.build b/gitian/README.build
index 41d0494..2cfd53f 100644
--- a/gitian/README.build
+++ b/gitian/README.build
@@ -90,7 +90,7 @@ Partial Rebuilds:
   the bundles using the addons and localization packs.
 
   The Tor and Firefox stages end up as a *gbuilt*.zip files in
-  ../gitian-builder/inputs/, and those zip files are used as inputs into
+  ../../gitian-builder/inputs/, and those zip files are used as inputs into
   the final bundling and localization stage. If those files exist in that
   directory, the corresponding bundle will *not* be built.
 
diff --git a/gitian/gpg/openssl.gpg b/gitian/gpg/openssl.gpg
deleted file mode 100644
index 6c9aeb8..0000000
--- a/gitian/gpg/openssl.gpg
+++ /dev/null
@@ -1,94 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.11 (GNU/Linux)
-
-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
-/rWmQcrFK8Q7YRLSjSmTQqWeeNRCBb8x
-=AtEC
------END PGP PUBLIC KEY BLOCK-----
diff --git a/vagrant/Makefile b/vagrant/Makefile
new file mode 100644
index 0000000..d4cfc38
--- /dev/null
+++ b/vagrant/Makefile
@@ -0,0 +1,50 @@
+REQS = git apache2 python-vm-builder ruby debootstrap lxc apt-cacher-ng \
+	virt-what lxctl fakeroot faketime zip unzip subversion bridge-utils
+
+# remove torsocks to speed up testing
+TORSOCKS = torsocks
+
+.PHONY: hostvm
+hostvm:
+	vagrant destroy --force
+	vagrant up
+	vagrant ssh --command "sudo apt-get install -y tor torsocks"
+	vagrant ssh --command "sudo $(TORSOCKS) apt-get update"
+	
+	# https://github.com/mitchellh/vagrant/issues/289
+	vagrant ssh --command "sudo DEBIAN_FRONTEND=noninteractive $(TORSOCKS) \
+		apt-get upgrade -y"
+	
+	vagrant reload
+	vagrant ssh --command "sudo $(TORSOCKS) apt-get install -y $(REQS)"
+	vagrant halt
+
+.PHONY: tbb
+tbb:
+	vagrant up
+	vagrant ssh --command "\
+		if [ -d ~/gitian-builder ]; then \
+			rm -rf ~/gitian-builder; \
+		fi"
+	
+	vagrant ssh --command "$(TORSOCKS) \
+		git clone -b tor-browser-builder-2 \
+		'https://git.torproject.org/builders/gitian-builder.git' ~/gitian-builder"
+	
+	vagrant ssh --command "\
+		if [ -d ~/tor-browser-bundle ]; then \
+			rm -rf ~/tor-browser-bundle; \
+		fi"
+	
+	vagrant ssh --command "\
+		rsync -r --exclude=.git --exclude=.vagrant \
+		/tor-browser-bundle/ ~/tor-browser-bundle"
+	
+	vagrant ssh --command "cd ~/tor-browser-bundle/gitian && USE_LXC=1 make"
+	
+	vagrant ssh --command "cd ~/tor-browser-bundle/gitian && \
+		cp -R 3.* /vagrant/"
+	
+	vagrant halt
+
+all: hostvm tbb
\ No newline at end of file
diff --git a/vagrant/README.md b/vagrant/README.md
new file mode 100644
index 0000000..6873a42
--- /dev/null
+++ b/vagrant/README.md
@@ -0,0 +1,12 @@
+Automated Gitian builds with Vagrant
+====================================
+
+Install VirtualBox and Vagrant,
+
+    https://www.virtualbox.org/wiki/Downloads
+    http://vagrantup.com/
+
+Then,
+
+    cd vagrant/
+    make
\ No newline at end of file
diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile
new file mode 100644
index 0000000..af16469
--- /dev/null
+++ b/vagrant/Vagrantfile
@@ -0,0 +1,108 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") 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 12.04 (x86_64)"
+
+  # 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://files.vagrantup.com/precise64.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: 80, host: 8080
+
+  # 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
+
+  # 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 "../.", "/tor-browser-bundle"
+
+  # 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|
+    # Use VBoxManage to customize the VM. For example to change memory:
+    vb.customize ["modifyvm", :id, "--memory", "1280"]
+  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 Ubuntu 12.04 (x86_64).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





More information about the tor-commits mailing list