summaryrefslogtreecommitdiffstats
path: root/documentation/dev-manual/hashequivserver.rst
blob: c866f5001f6d7548674c1f089583ae10487e9bc1 (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
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK

Setting up a Hash Equivalence Server
************************************

A :ref:`overview-manual/concepts:Hash Equivalence` server can help reduce build
times by using the mechanism described in the :ref:`overview-manual/concepts:Hash Equivalence`
section of the Yocto Project Overview and Concepts Manual.

This document will guide you through the steps required to set up the reference
Hash Equivalence server provided by the :oe_git:`bitbake-hashserv
</bitbake/tree/bin/bitbake-hashserv>` script in :term:`BitBake`.

This guide will explain how to setup a local Hash Equivalence server and does
not explain how to setup the surrounding infrastructure to secure this server.

Hash Equivalence Server Setup
=============================

From this point onwards, the commands displayed below are assumed to be run from
the :term:`BitBake` repository, which can be found :oe_git:`here </bitbake>`.

To start a basic Hash Equivalence server, one could simply run::

   ./bin/bitbake-hashserv

This will take all of the default options of the script, which are already
sufficient to start a local server.

Run ``./bin/bitbake-hashserv --help`` to see what options the script can take.
Some of the important ones are:

-  ``--database`` controls the location of the hash server database (default:
   ``./hashserver.db``).

-  ``--bind`` controls the bind address of the server (default:
   ``unix://./hashserver.sock``).

   You can specify three types of addresses:

   -  ``unix://PATH``: will bind to a Unix socket at ``PATH``.

   -  ``wss://ADDRESS:PORT``: will bind to a Websocket at ``ADDRESS:PORT``.

   -  ``ADDRESS:PORT``: will bind to a raw TCP socket at ``ADDRESS:PORT``.

-  ``--log`` can be used to control the logging level of the server (e.g.
   ``INFO`` will print information about clients connection to the server).

-  ``--upstream`` can be used to specify an upstream server to pull hashes from.
   This has no default value, meaning no upstream server is used.

-  ``--db-username`` and ``--db-password`` can be used to control the access to
   the database.

-  ``--read-only`` will disable hash reports from clients.

These variables can also be set from the environment from where it is being run.
Run ``./bin/bitbake-hashserv --help`` to get the variable names that you can
export.

.. warning::

   The shared Hash Equivalence server needs to be maintained together with the
   :ref:`Shared State <overview-manual/concepts:Shared State>` cache. Otherwise,
   the server could report Shared State hashes that only exist on specific
   clients.

   We therefore recommend that one Hash Equivalence server be set up to
   correspond with a given Shared State cache, and to start this server
   in *read-only mode* (``--read-only`` option), so that it doesn't store
   equivalences for Shared State caches that are local to clients.

   If there is no pre-existing Shared State Cache, the server should allow
   hashes to be reported (no ``--read-only`` option) to create the initial
   Hash Equivalence database.

Yocto Project Build Setup
=========================

To use the server started in the previous section, set the following variables
in a :term:`configuration file`::

   BB_HASHSERVE = "<bind address>"
   BB_SIGNATURE_HANDLER = "OEEquivHash"

The ``<bind address>`` value should be replaced to point to the server started
in the previous section.

See the documentation of :term:`BB_SIGNATURE_HANDLER` for more details on this
variable.

You can optionally specify an upstream server with :term:`BB_HASHSERVE_UPSTREAM`
variable. For example::

   BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws"

This will make the local server pull hashes from the upstream server. The
:term:`BB_HASHSERVE_UPSTREAM` only works when a server is running
(:term:`BB_HASHSERVE` is set).

To output debugging information on what is happening with Hash Equivalence when
builds are started, you can configure :term:`BitBake` logging as follows from a
:term:`configuration file`::

   BB_LOGCONFIG = "hashequiv.json"

With ``hashequiv.json`` containing the following content:

.. code-block:: json

   {
      "version": 1,
      "loggers": {
         "BitBake.SigGen.HashEquiv": {
            "level": "VERBOSE",
            "handlers": ["BitBake.verbconsole"]
         },
         "BitBake.RunQueue.HashEquiv": {
            "level": "VERBOSE",
            "handlers": ["BitBake.verbconsole"]
         }
      }
   }

This will make Hash Equivalence related changes be printed on the console, such
as::

   NOTE: Task <recipe.bb>:do_<task> unihash changed to dc0da29c62a2d78d8d853fbb9c173778fe7d6fa4a68c67494b17afffe8ca1894