Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
helpers.cc
1 #include "helpers.h"
2 
3 #include <boost/uuid/uuid_generators.hpp>
4 #include <boost/uuid/uuid_io.hpp>
5 
6 #include "package_manager/ostreemanager.h"
7 
8 static void finalizeIfNeeded(INvStorage &storage, PackageConfig &config) {
9  boost::optional<Uptane::Target> pending_version;
10  storage.loadInstalledVersions("", nullptr, &pending_version);
11 
12  if (!!pending_version) {
13  GObjectUniquePtr<OstreeSysroot> sysroot_smart = OstreeManager::LoadSysroot(config.sysroot);
14  OstreeDeployment *booted_deployment = ostree_sysroot_get_booted_deployment(sysroot_smart.get());
15  if (booted_deployment == nullptr) {
16  throw std::runtime_error("Could not get booted deployment in " + config.sysroot.string());
17  }
18  std::string current_hash = ostree_deployment_get_csum(booted_deployment);
19 
20  const Uptane::Target &target = *pending_version;
21  if (current_hash == target.sha256Hash()) {
22  LOG_INFO << "Marking target install complete for: " << target;
23  storage.saveInstalledVersion("", target, InstalledVersionUpdateMode::kCurrent);
24  }
25  }
26 }
27 
28 LiteClient::LiteClient(Config &config_in)
29  : config(std::move(config_in)), primary_ecu(Uptane::EcuSerial::Unknown(), "") {
30  std::string pkey;
31  storage = INvStorage::newStorage(config.storage);
32  storage->importData(config.import);
33 
34  EcuSerials ecu_serials;
35  if (!storage->loadEcuSerials(&ecu_serials)) {
36  // Set a "random" serial so we don't get warning messages.
37  std::string serial = config.provision.primary_ecu_serial;
38  std::string hwid = config.provision.primary_ecu_hardware_id;
39  if (hwid.empty()) {
40  hwid = Utils::getHostname();
41  }
42  if (serial.empty()) {
43  boost::uuids::uuid tmp = boost::uuids::random_generator()();
44  serial = boost::uuids::to_string(tmp);
45  }
46  ecu_serials.emplace_back(Uptane::EcuSerial(serial), Uptane::HardwareIdentifier(hwid));
47  storage->storeEcuSerials(ecu_serials);
48  }
49  primary_ecu = ecu_serials[0];
50 
51  auto http_client = std::make_shared<HttpClient>();
52 
53  KeyManager keys(storage, config.keymanagerConfig());
54  keys.copyCertsToCurl(*http_client);
55 
56  primary =
57  std::make_shared<SotaUptaneClient>(config, storage, http_client, nullptr, primary_ecu.first, primary_ecu.second);
58  finalizeIfNeeded(*storage, config.pacman);
59 }
KeyManager
Definition: keymanager.h:13
Uptane::HardwareIdentifier
Definition: tuf.h:143
Config
Configuration object for an aktualizr instance running on a primary ECU.
Definition: config.h:74
Uptane::EcuSerial
Definition: tuf.h:174
PackageConfig
Definition: packagemanagerconfig.h:24
Uptane::Target
Definition: tuf.h:238
Uptane
Base data types that are used in The Update Framework (TUF), part of UPTANE.
Definition: secondary_tcp_server.h:8
INvStorage
Definition: invstorage.h:126