734d82b22c57dbdb13992f14533dbc6b207ff6d6
[bitmask_bundler.git] / README.rst
1 Bundler
2 +++++++
3
4 This application is intended to create bundles for the platform in which its being run. This should eventually become the main tool in order to create reproducible builds.
5
6 How to use
7 ++++++++++
8
9 NOTE: Most of this will be done automatically in a while, but this is how it's done now.
10
11 - Install Xcode and command line tools (OSX only)
12 - Create a new virtualenv
13
14 ::
15   mkvirtualenv bundle
16
17 - Install bundler deps (OSX or Linux)
18
19 ::
20   pip install -r pkg/requirements.pip
21
22 - Install bundler deps (Windows)
23
24 ::
25   pip install pbs  # There's no sh in Windows
26   pip install modulegraph altgraph
27
28 - Install the needed dependencies
29
30 ::
31   # Linux
32   aptitude install libsqlite3-dev
33
34   # In Windows you'll need sqlite3 in your path
35
36 - psutils is a dependency for another dependency, it might get installed in a zip form, which we don't want, so we install it by hand for now
37
38 ::
39   pip install psutil
40
41 - We need a slightly different python-gnupg, so clone from a different repo
42
43 ::
44   git clone https://github.com/chiiph/python-gnupg
45   cd python-gnupg/
46   git checkout develop
47   git pull origin develop
48   python setup.py develop
49
50 - Same thing with protobuf.socketrpc
51
52 ::
53   git clone https://github.com/chiiph/protobuf-socket-rpc
54   cd protobuf-socket-rpc
55   python setup.py easy_install -Z .
56
57 - Install Qt 4.8 in whatever way you prefer.
58
59 - Build PySide:
60
61 ::
62   git clone git://gitorious.org/pyside/apiextractor.git
63   git clone git://gitorious.org/pyside/generatorrunner.git
64   git clone git://gitorious.org/pyside/shiboken.git
65   git clone git://gitorious.org/pyside/pyside.git
66   git clone git://gitorious.org/pyside/pyside-tools.git
67
68   # OSX
69   export PYSIDESANDBOXPATH=$HOME/Code/pyside/sandbox
70   export DYLD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$DYLD_LIBRARY_PATH
71
72   # Linux
73   export PYSIDESANDBOXPATH=$HOME/sandbox
74   export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH
75
76   export PATH=$PYSIDESANDBOXPATH/bin:$PATH
77   export PYTHONPATH=$PYSIDESANDBOXPATH/lib/python2.6/site-packages:$PYTHONPATH
78   export PKG_CONFIG_PATH=$PYSIDESANDBOXPATH/lib/pkgconfig:$PKG_CONFIG_PATH
79
80   alias runcmake='cmake .. -DCMAKE_INSTALL_PREFIX=$PYSIDESANDBOXPATH'
81
82   # In OSX, the paths may vary depending on the Qt installation
83   runcmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk .. -DQT_QMAKE_EXECUTABLE=/usr/local/bin/qmake -DQT_INCLUDE_DIR=/usr/local/include/ -DQT_INCLUDES=/usr/local/include/ -DALTERNATIVE_QT_INCLUDE_DIR=/usr/local/include/
84   # In Linux
85   runcmake ..
86
87   make install
88
89   # Make them available from the virtualenv
90   ln -s $PYSIDESANDBOXPATH/lib/python2.7/site-packages/PySide $VIRTUAL_ENV/lib/python2.7/site-packages/PySide
91   ln -s $PYSIDESANDBOXPATH/lib/python2.7/site-packages/pysideuic $VIRTUAL_ENV/lib/python2.7/site-packages/pysideuic
92
93 - Create a paths file: The problem is that inside a virtualenv we don't have access to the real distutils, so we'll need to look for it on the "original" (i.e. non-virtualenv) paths for python.
94
95 ::
96   python bundler/create_paths.py <paths file>
97
98 - Collect the binaries. We aren't building everything yet, so you'll need to collect the following files:
99
100 ::
101   # OSX
102   Bitmask <-- this is the bitmask_launcher
103   Python
104   QtCore
105   QtGui
106   cocoasudo
107   gpg
108   libboost_filesystem.dylib
109   libboost_python.dylib
110   libboost_system.dylib
111   libpng15.15.dylib
112   libpyside-python2.7.1.2.dylib
113   libshiboken-python2.7.1.2.dylib
114   openvpn.files
115   openvpn.leap
116   qt_menu.nib
117   tuntap-installer.app
118
119 - (Optional) Seed a configuration: You might want to create a bundle with a specific configuration pinned providers.
120
121 - Create the bundle:
122
123 ::
124   # On OSX and Linux
125   python bundler/main.py --workon <path/to/bundle/temp> --paths-file <paths file> --binaries <binaries dir> --seeded-config <seeded config> [--nightly] --do gitclone pythonsetup
126   python bundler/main.py --workon <path/to/bundle/temp> --paths-file <paths file> --binaries <binaries dir> --seeded-config <seeded config> [--nightly] --skip gitclone pythonsetup
127
128   # On Windows
129   python bundler/main.py --workon <path/to/bundle/temp> --paths-file <paths file> --binaries <binaries dir> --seeded-config <seeded config> [--nightly] --do gitclone
130   # Modify bitmask_client/pkg/requirements.pip, comment out python-daemon
131   python bundler/main.py --workon <path/to/bundle/temp> --paths-file <paths file> --binaries <binaries dir> --seeded-config <seeded config> [--nightly] --do pythonsetup
132   python bundler/main.py --workon <path/to/bundle/temp> --paths-file <paths file> --binaries <binaries dir> --seeded-config <seeded config> [--nightly] --skip gitclone pythonsetup