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