commit 5782f32621369af476657ab128d1f63ad9b8e06a Author: Arturo Filastò art@fuffa.org Date: Sun May 5 17:28:31 2013 +0200
Implement Vagrant file for running ooniprobe on any platform
* Update setup.py and README.md to work with Vagrant * Update inputs makefile to fetch from ooni.tpo/inputs --- README.md | 33 ++++++++---- Vagrantfile | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ inputs/Makefile | 3 +- setup.py | 4 +- 4 files changed, 180 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md index 75095ad..eb9ab68 100644 --- a/README.md +++ b/README.md @@ -16,15 +16,30 @@ with others, so that you and others may better understand your network? If so, please read this document and we hope ooniprobe will help you to gather network data that will assist you with your endeavors!
-## Getting started with ooniprobe is easy - - 0) Open your favorite terminal - - 1) Grab the source and install the dependencies - - 2) Run ooniprobe! - - 3) ... There is no step three ... +## Getting started with ooniprobe is easy (with Vagrant) + +0) [Install Vagrant](http://downloads.vagrantup.com/) + +1) Open a Terminal and run: + +``` +vagrant up +``` + +2) Login to the box with: + +``` +vagrant ssh +``` + +ooniprobe will be installed in `/data/ooniprobe`. + +3) You can run tests with: + +``` +cd /data/ooniprobe/ +./bin/ooniprobe nettests/blocking/http_requests.py -f /data/ooniprobe/inputs/input-pack/alexa-top-1k.txt +```
## The easy way to prep your system for running ooniprobe
diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..52107e8 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,153 @@ +# -*- 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 = "precise32" + + # 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/precise32.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 ".", "/data/ooniprobe" + + # 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 base.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 + +$script = <<SCRIPT +apt-get -y install curl python-setuptools python-dev + +echo "Updating to the latest version of PIP" +cd /tmp/ + +curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py +python ./get-pip.py ## pip (>=1.3.0) is recommended for security reasons + +sudo update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip 0 + +echo "Installing Tor..." + +echo "deb http://deb.torproject.org/torproject.org precise main" >> /etc/apt/source.list + +gpg --keyserver keys.gnupg.net --recv 886DDD89 +gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add - + +apt-get update +apt-get -y install deb.torproject.org-keyring tor tor-geoipdb + +apt-get -y install git-core python python-pip python-dev build-essential libdumbnet1 python-dumbnet python-libpcap python-pypcap python-dnspython python-virtualenv virtualenvwrapper tor tor-geoipdb libpcap-dev + +cd /data/ooniprobe + +echo "Installing dependencies" +pip install pyrex +pip install -r requirements.txt + +echo "Installing ooniprobe" +python setup.py install + +echo "Fetching all inputs" +cd /data/ooniprobe/inputs +make lists + +SCRIPT + +Vagrant.configure("2") do |config| + config.vm.provision :shell, :inline => $script +end diff --git a/inputs/Makefile b/inputs/Makefile index 42ae1f6..015a991 100644 --- a/inputs/Makefile +++ b/inputs/Makefile @@ -2,7 +2,8 @@ all: whatheaders lists
lists: - git clone https://github.com/hellais/ooni-inputs.git ooni-inputs + curl -O https://ooni.torproject.org/inputs/input-pack.tar.gz + tar xzf input-pack.tar.gz
whatheaders: wget http://s3.amazonaws.com/data.whatheaders.com/whatheaders-latest.xml.zip diff --git a/setup.py b/setup.py index 41b9050..e336e08 100644 --- a/setup.py +++ b/setup.py @@ -8,12 +8,10 @@ install_requires = [ 'scapy>=2.2.0', 'dnspython>=1.10.0', 'parsley>1.0', - 'pypcap>=1.1.1' ]
dependency_links = [ - 'https://people.torproject.org/~ioerror/src/mirrors/ooniprobe', - 'https://github.com/hellais/pypcap/archive/v1.1.1.tar.gz#egg=pypcap-1.1.1' + 'https://people.torproject.org/~ioerror/src/mirrors/ooniprobe' ]
with open('requirements.txt') as f: