| # Missive Daemon |
| |
| The Missive Daemon is part of the Encrypted Reporting Pipeline (ERP). It |
| encrypts, stores, and forwards reporting records enqueued on its DBus interface. |
| The interface allows other CrOS daemons and Chrome to enqueue records which are |
| then encrypted and stored on disk. Records are enqueued in different priority |
| queues, which have different upload periods. Once the storage daemon determines |
| that a queue is ready for upload (i.e. the requisite period has elapsed), it |
| sends records to Chrome to be uploaded to the Reporting Server. On successful |
| upload, records are deleted from disk. |
| |
| Note: This is a complementary daemon to the |
| `//chrome/browser/policy/messaging_layer` package in chromium. |
| |
| ## Build and Deploy |
| |
| ``` |
| # HOST (inside chroot) |
| ~$ cros-workon-${BOARD} start missive |
| ~$ emerge-${BOARD} missive |
| ~$ cros deploy ssh://localhost:9222 missive |
| |
| # DUT |
| ~# start missived |
| ``` |
| |
| To build the package that works with a non-debug image, such as one from |
| GoldenEye, the debug feature must be disabled: |
| |
| ``` |
| # HOST (inside chroot) |
| ~$ USE=-cros-debug emerge-${BOARD} missive |
| ``` |
| |
| If there are errors on conflicting USE flags, rebuild the dependencies with |
| |
| ``` |
| # HOST (inside chroot) |
| ~$ build_packages --board=${BOARD} --no-withdebug |
| ``` |
| |
| For convenience, if you always work with a non-debug image, consider disabling |
| debug builds by default by adding `USE="${USE} -cros-debug"` to |
| `/etc/make.conf.user` (inside chroot). |
| |
| ## Original design docs |
| |
| Note that aspects of the design may have evolved since the original design docs |
| were written. |
| |
| * [Daemon Design](http://go/cros-reporting-daemon) |
| * [Messaging Layer](http://go/chrome-reporting-messaging-layer) |
| |
| ## Updating From Chromium |
| |
| ### General Guidelines |
| |
| The code in the following folders originally comes from |
| chromium://components/reporting: |
| |
| - compression |
| - encryption |
| - proto |
| - storage |
| - util |
| |
| When importing updates from the chromium code you will encounter the following |
| issues: |
| |
| 1. #include statements in chromium for //base need to be converted as follows: |
| #include "base/example.h" -> #include <base/example.h> |
| 2. Protobuf include directory can be converted from chromium as follows: |
| "third_party/protobuf/src/google/protobuf/..." -> <google/protobuf/...> |
| 3. ChromeOS doesn't need to worry about worrying on multiple operating systems, |
| so doesn't require FILE_PATH_LITERAL, base::FilePath::CharType, or |
| base::FilePath::StringType. It can be assumed that these are simple char or |
| std::strings. |
| 4. Files that end with `_unittest.cc` should be renamed to end with `_test.cc`. |
| |
| ### Specific Files |
| |
| - chromium://components/reporting/util/status.proto has been moved to |
| .../missive/proto/status.proto. This is due to difficulties in including |
| protos within protos on ChromeOS. |
| |
| ### Test tool for manual Enqueue and Flush operations. |
| |
| The tool is built as part of missive when running tests. |
| |
| ``` |
| # HOST (inside chroot) |
| ~$ FEATURES=test emerge-${BOARD} missive |
| ~$ scp -P 9222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ |
| /build/${BOARD}/var/cache/portage/chromeos-base/missive/out/Default/missive_testing_tool \ |
| root@localhost:/usr/bin/missive_testing_tool |
| ``` |
| |
| (If targeting DUT, replace port in -P parameter - usually with 2222) |
| |
| ``` |
| # VM/DUT |
| To enqueue event: |
| ~# sudo -u chronos /usr/bin/missive_testing_tool --enqueue="Some record data..." \ |
| --priority=SLOW_BATCH --destination=HEARTBEAT_EVENTS |
| To flush all events in a queue: |
| ~# sudo -u chronos /usr/bin/missive_testing_tool --flush \ |
| --priority=SLOW_BATCH |
| ``` |