summaryrefslogtreecommitdiff
path: root/pages/docs/client/dev-environment.md
diff options
context:
space:
mode:
Diffstat (limited to 'pages/docs/client/dev-environment.md')
-rw-r--r--pages/docs/client/dev-environment.md200
1 files changed, 200 insertions, 0 deletions
diff --git a/pages/docs/client/dev-environment.md b/pages/docs/client/dev-environment.md
new file mode 100644
index 0000000..b41e7af
--- /dev/null
+++ b/pages/docs/client/dev-environment.md
@@ -0,0 +1,200 @@
+@nav_title = 'Hacking'
+@title = 'Setting up a development environment'
+
+Quick start
+===========
+
+This document will guide you to get an environment ready to contribute code to
+Bitmask.
+
+Using an automagic script
+=========================
+
+You can use a helper script that will get you started with bitmask and all the
+related repos.
+
+1. download automagic script
+2. run it :)
+
+Commands so you can copy/paste:
+
+ $ mkdir bitmask && cd bitmask
+ $ wget https://raw.githubusercontent.com/leapcode/bitmask_client/develop/pkg/scripts/bootstrap_develop.sh
+ $ chmod +x bootstrap_develop.sh
+ $ ./bootstrap_develop.sh help # check out the options :)
+ $ ./bootstrap_develop.sh deps # requires sudo
+ $ ./bootstrap_develop.sh init ro
+ $ ./bootstrap_develop.sh helpers # requires sudo
+ $ ./bootstrap_develop.sh run
+
+This script allows you to get started, update and run the bitmask app with all
+its repositories.
+
+Note: the `deps` option is meant to be used in a Debian based Linux distro.
+
+
+Doing the work manually
+=======================
+
+Clone the repo
+--------------
+
+> **note**
+>
+> Stable releases are in *master* branch. Development code lives in
+> *develop* branch.
+
+ git clone https://leap.se/git/bitmask_client
+ git checkout develop
+
+Install Dependencies
+--------------------
+
+Bitmask depends on these libraries:
+
+- python 2.6 or 2.7
+- qt4 libraries
+- openssl
+- [openvpn](http://openvpn.net/index.php/open-source/345-openvpn-project.html)
+
+### Install dependencies in a Debian based distro
+
+In debian-based systems:
+
+ $ sudo apt-get install git python-dev python-setuptools python-virtualenv python-pip libssl-dev python-openssl libsqlite3-dev g++ openvpn pyside-tools python-pyside libffi-dev
+
+
+Working with virtualenv
+-----------------------
+
+### Intro
+
+*Virtualenv* is the *Virtual Python Environment builder*.
+
+It is a tool to create isolated Python environments.
+
+> The basic problem being addressed is one of dependencies and versions,
+and indirectly permissions. Imagine you have an application that needs
+version 1 of LibFoo, but another application requires version 2. How can
+you use both these applications? If you install everything into
+`/usr/lib/python2.7/site-packages` (or whatever your platform's standard
+location is), it's easy to end up in a situation where you
+unintentionally upgrade an application that shouldn't be upgraded.
+
+Read more about it in the [project documentation
+page](http://www.virtualenv.org/en/latest/virtualenv.html).
+
+### Create and activate your dev environment
+
+You first create a virtualenv in any directory that you like:
+
+ $ mkdir ~/Virtualenvs
+ $ virtualenv ~/Virtualenvs/bitmask
+ $ source ~/Virtualenvs/bitmask/bin/activate
+ (bitmask)$
+
+Note the change in the prompt.
+
+### Avoid compiling PySide inside a virtualenv
+
+If you attempt to install PySide inside a virtualenv as part of the rest
+of the dependencies using pip, basically it will take ages to compile.
+
+As a workaround, you can run the following script after creating your
+virtualenv. It will symlink to your global PySide installation (*this is
+the recommended way if you are running a debian-based system*):
+
+ $ pkg/postmkvenv.sh
+
+A second option if that does not work for you would be to install PySide
+globally and pass the `--system-site-packages` option when you are creating
+your virtualenv:
+
+ $ apt-get install python-pyside
+ $ virtualenv --system-site-packages .
+
+After that, you must export `LEAP_VENV_SKIP_PYSIDE` to skip the
+installation:
+
+ $ export LEAP_VENV_SKIP_PYSIDE=1
+
+And now you are ready to proceed with the next section.
+
+### Install python dependencies
+
+You can install python dependencies with `pip`. If you do it inside your
+working environment, they will be installed avoiding the need for
+administrative permissions:
+
+ $ pip install -r pkg/requirements.pip
+
+This step is not strictly needed, since the `setup.py develop` in the next
+paragraph with also fetch the needed dependencies. But you need to know abou it:
+when you or any person in the development team will be adding a new dependency,
+you will have to repeat this command so that the new dependencies are installed
+inside your virtualenv.
+
+Install Bitmask
+---------------
+
+Normally we would install the `leap.bitmask` package as any other package
+inside the virtualenv.
+But, instead, we will be using setuptools **development mode**. The difference
+is that, instead of installing the package in a permanent location in your
+regular installed packages path, it will create a link from the local
+site-packages to your working directory. In this way, your changes will always
+be in the installation path without need to install the package you are working
+on.::
+
+ (bitmask)$ python2 setup.py develop --always-unzip
+
+After this step, your Bitmask launcher will be located at
+`~/Virtualenvs/bitmask/bin/bitmask`, and it will be in the path as long as you
+have sourced your virtualenv.
+
+Note: the `--always-unzip` option prevents some dependencies to be installed in
+a zip/egg, which causes some issues with libraries like 'scrypt' that needs to
+access to the files directly from the filesystem.
+
+Compile Qt resources
+--------------------
+
+We also need to compile the resource files:
+
+ (bitmask)$ make
+
+Note: you need to repeat this step each time you change a `.ui` file.
+
+Running openvpn without root privileges
+---------------------------------------
+
+In linux, we are using `policykit` to be able to run openvpn without root
+privileges, and a policy file is needed to be installed for that to be
+possible.
+The setup script tries to install the policy file when installing bitmask
+system-wide, so if you have installed bitmask in your global site-packages at
+least once it should have copied this file for you.
+
+If you *only* are running bitmask from inside a virtualenv, you will need to
+copy this file by hand:
+
+ $ sudo cp pkg/linux/polkit/se.leap.bitmask.policy /usr/share/polkit-1/actions/
+
+Installing the bitmask EIP helper
+---------------------------------
+
+In linux, we have a `openvpn` and `firewall` helper that is needed to run EIP.
+You need to manually copy it from `bitmask_client/pkg/linux/bitmask-root`.
+Use the following command to do so:
+
+ $ sudo cp bitmask_client/pkg/linux/bitmask-root /usr/sbin/
+
+
+Running!
+--------
+
+If everything went well, you should be able to run your client by invoking
+`bitmask`. If it does not get launched, or you just want to see more verbose
+output, try the debug mode:
+
+ (bitmask)$ bitmask --debug