summaryrefslogtreecommitdiff
path: root/docs/client/dev-environment.md
blob: 37aefa61385fc1f388b156e6db9954f250837830 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
@nav_title = 'Hacking'
@title = 'Setting up a development environment'

Setting up a development environment
====================================

This document covers how to get an enviroment ready to contribute code
to Bitmask.

Cloning 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

Base Dependencies
-----------------

Bitmask depends on these libraries:

-   python 2.6 or 2.7
-   qt4 libraries (see also
    Troubleshooting PySide install \<pysidevirtualenv\> about how to
    install inside your virtualenv)
-   openssl
-   [openvpn](http://openvpn.net/index.php/open-source/345-openvpn-project.html)

### Debian

In debian-based systems:

    $ apt-get install openvpn python-pyside 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/).

> **note**
>
> this section could be completed with useful options that can be passed
> to the virtualenv command (e.g., to make portable paths,
> site-packages, ...). We also should document how to use
> virtualenvwrapper.

### Create and activate your dev environment

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

### 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 `--site-packages` option when you are creating
your virtualenv:

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

After that, you must export `LEAP_VENV_SKIP_PYSIDE` to skip the
isntallation:

    $ 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

Copy script files
-----------------

The openvpn invocation expects some files to be in place. If you have
not installed bitmask from a debian package, you must copy these files
manually by now:

    $ 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 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/net.openvpn.gui.leap.policy /usr/share/polkit-1/actions/

### Missing Authentication agent

If you are using linux and running a desktop other than unity or gnome,
you might get an error saying that you are not running the
authentication agent. For systems with gnome libraries installed you can
launch it like this:

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

or if you are a kde user:

    /usr/lib/kde4/libexec/polkit-kde-authentication-agent-1 &