Aktualizr
C++ SOTA Client
ostreemanager.h
1 #ifndef OSTREE_H_
2 #define OSTREE_H_
3 
4 #include <memory>
5 #include <string>
6 
7 #include <glib/gi18n.h>
8 #include <ostree.h>
9 
10 #include "libaktualizr/packagemanagerinterface.h"
11 
12 #include "crypto/keymanager.h"
13 #include "utilities/apiqueue.h"
14 
15 constexpr const char *remote = "aktualizr-remote";
16 
17 template <typename T>
19  void operator()(T *e) const { g_object_unref(reinterpret_cast<gpointer>(e)); }
20 };
21 
22 template <typename T>
23 using GObjectUniquePtr = std::unique_ptr<T, GObjectFinalizer<T>>;
24 using OstreeProgressCb = std::function<void(const Uptane::Target &, const std::string &, unsigned int)>;
25 
27  PullMetaStruct(Uptane::Target target_in, const api::FlowControlToken *token_in, GCancellable *cancellable_in,
28  OstreeProgressCb progress_cb_in)
29  : target{std::move(target_in)},
30  percent_complete{0},
31  token{token_in},
32  cancellable{cancellable_in},
33  progress_cb{std::move(progress_cb_in)} {}
34  Uptane::Target target;
35  unsigned int percent_complete;
36  const api::FlowControlToken *token;
37  GObjectUniquePtr<GCancellable> cancellable;
38  OstreeProgressCb progress_cb;
39 };
40 
42  public:
43  OstreeManager(const PackageConfig &pconfig, const BootloaderConfig &bconfig,
44  const std::shared_ptr<INvStorage> &storage, const std::shared_ptr<HttpInterface> &http);
45  ~OstreeManager() override;
46  std::string name() const override { return "ostree"; }
47  Json::Value getInstalledPackages() const override;
48  std::string getCurrentHash() const;
49  Uptane::Target getCurrent() const override;
50  bool imageUpdated();
51  data::InstallationResult install(const Uptane::Target &target) const override;
52  void completeInstall() const override;
53  data::InstallationResult finalizeInstall(const Uptane::Target &target) override;
54  void updateNotify() override;
55  bool fetchTarget(const Uptane::Target &target, Uptane::Fetcher &fetcher, const KeyManager &keys,
56  const FetcherProgressCb &progress_cb, const api::FlowControlToken *token) override;
57  TargetStatus verifyTarget(const Uptane::Target &target) const override;
58 
59  GObjectUniquePtr<OstreeDeployment> getStagedDeployment() const;
60  static GObjectUniquePtr<OstreeSysroot> LoadSysroot(const boost::filesystem::path &path);
61  static GObjectUniquePtr<OstreeRepo> LoadRepo(OstreeSysroot *sysroot, GError **error);
62  static bool addRemote(OstreeRepo *repo, const std::string &url, const KeyManager &keys);
63  static data::InstallationResult pull(const boost::filesystem::path &sysroot_path, const std::string &ostree_server,
64  const KeyManager &keys, const Uptane::Target &target,
65  const api::FlowControlToken *token = nullptr,
66  OstreeProgressCb progress_cb = nullptr);
67 
68  private:
69  TargetStatus verifyTargetInternal(const Uptane::Target &target) const;
70 
71  private:
72  std::unique_ptr<Bootloader> bootloader_;
73 };
74 
75 #endif // OSTREE_H_
Uptane::Fetcher
Definition: fetcher.h:33
PackageManagerInterface
Definition: packagemanagerinterface.h:42
GObjectFinalizer
Definition: ostreemanager.h:18
KeyManager
Definition: keymanager.h:13
data::InstallationResult
Definition: types.h:277
OstreeManager
Definition: ostreemanager.h:41
api::FlowControlToken
Provides a thread-safe way to pause and terminate task execution.
Definition: apiqueue.h:19
PackageConfig
Definition: config.h:91
Uptane::Target
Definition: types.h:379
BootloaderConfig
Definition: config.h:156
PullMetaStruct
Definition: ostreemanager.h:26