summaryrefslogtreecommitdiff
path: root/docs/client/dev-guide.md
blob: fb7f0ba3b60a4d34a316bcaab6be1941900e2620 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
@nav_title = 'Development Guide'
@title = 'Setting up a development environment'

This document covers how to get an enviroment ready to contribute code to the LEAP Client.

Cloning the repo
==========================

> Stable releases will be in *master* branch (nothing there yet, move on!). Development code lives in *develop* branch.

    git clone https://leap.se/git/bitmask_client

Base Dependencies
=========================

Leap client depends on these libraries:

* `python 2.6 or 2.7`
* `qt4` libraries (see below for how to install under virtualenv)
* `openssl`
* [openvpn](http://openvpn.net/index.php/open-source/345-openvpn-project.html)

Debian
-------------

In debian-based systems:

    $ apt-get install openvpn python-qt4 python-crypto python-openssl

To install the software from sources:

    $ apt-get install python-pip python-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://pypi.python.org/pypi/virtualenv/).

Create and activate your dev environment
-------------------------------------------------

    $ virtualenv </path/to/new/environment>
    $ source </path/to/new/environment>/bin/activate

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

Troubleshooting PyQt install inside a virtualenv
---------------------------------------------------------------

If you attempt to install PyQt inside a virtualenv using pip, it will fail because PyQt4 does not use the standard setup.py mechanism.

As a workaround, you can run the following script after creating your virtualenv. It will symlink to your global PyQt 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 PyQt globally and pass the `--site-packages` option when you are creating your virtualenv:

    $ apt-get install python-qt4
    $ virtualenv --site-packages .

Or, if you prefer, you can also `download the official PyQt tarball http://www.riverbankcomputing.com/software/pyqt/download and execute `configure.py` in the root folder of their distribution, which generates a `Makefile`:

    $ python configure.py
    $ make && make install

> this section could be completed with useful options that can be passed to the virtualenv command (e.g., to make portable paths, site-packages, ...).


Copy script files
==========================

The openvpn invocation expects some files to be in place. If you have not installed `leap-client` from a debian package, you must copy these files manually:

    $ sudo mkdir -p /etc/leap
    $ sudo cp pkg/linux/resolv-update /etc/leap

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 the client system-wide, so if you have installed the client in your global site-packages at least once it should have copied this file for you.

If you *only* are running the client from inside a virtualenv, you will need to copy this file by hand:

    $ sudo cp pkg/linux/polkit/net.openvpn.gui.leap.policy /usr/share/polkit-1/actions/


Missing Authentication agent
--------------------------------------

If you are running a desktop other than gnome or unity, you might get an error saying that you are not running the authentication agent. You can launch it like this:

    /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 &