Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
debianmanager.cc
1 #include "debianmanager.h"
2 #include "packagemanagerfactory.h"
3 
4 #include <stdio.h>
5 #include <unistd.h>
6 
7 AUTO_REGISTER_PACKAGE_MANAGER(PACKAGE_MANAGER_DEBIAN, DebianManager);
8 
9 Json::Value DebianManager::getInstalledPackages() const {
10  // Currently not implemented
11  return Json::Value(Json::arrayValue);
12 }
13 
14 data::InstallationResult DebianManager::install(const Uptane::Target &target) const {
15  std::lock_guard<std::mutex> guard(mutex_);
16  LOG_INFO << "Installing " << target.filename() << " as Debian package...";
17  std::string cmd = "dpkg -i ";
18  std::string output;
19  TemporaryDirectory package_dir("deb_dir");
20  auto target_file = storage_->openTargetFile(target);
21 
22  boost::filesystem::path deb_path = package_dir / target.filename();
23  target_file->writeToFile(deb_path);
24  target_file->rclose();
25 
26  int status = Utils::shell(cmd + deb_path.string(), &output, true);
27  if (status == 0) {
28  LOG_INFO << "... Installation of Debian package successful";
29  storage_->savePrimaryInstalledVersion(target, InstalledVersionUpdateMode::kCurrent);
30  return data::InstallationResult(data::ResultCode::Numeric::kOk, "Installing debian package was successful");
31  }
32  LOG_ERROR << "... Installation of Debian package failed";
34 }
35 
36 Uptane::Target DebianManager::getCurrent() const {
37  boost::optional<Uptane::Target> current_version;
38  storage_->loadPrimaryInstalledVersions(&current_version, nullptr);
39 
40  if (!!current_version) {
41  return *current_version;
42  }
43 
44  return Uptane::Target::Unknown();
45 }
data::InstallationResult
Definition: types.h:182
DebianManager
Definition: debianmanager.h:10
TemporaryDirectory
Definition: utils.h:82
Uptane::Target
Definition: tuf.h:238
data::ResultCode::Numeric::kInstallFailed
Package installation failed.