Add steps on rpk-installer
authorJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 14 Jan 2021 10:25:12 +0000 (19:25 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 14 Jan 2021 10:25:12 +0000 (19:25 +0900)
- Add StepKillRscApps.
- Remove steps from inherited steps.

Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
CMakeLists.txt
packaging/rpk-installer.spec
src/rpk/CMakeLists.txt
src/rpk/rpk_installer.cc
src/rpk/step/pkgmgr/step_kill_rscapps.cc [new file with mode: 0644]
src/rpk/step/pkgmgr/step_kill_rscapps.h [new file with mode: 0644]

index 43eeb22..3a923d9 100755 (executable)
@@ -34,6 +34,8 @@ PKG_CHECK_MODULES(GMOCK_DEPS REQUIRED gmock)
 PKG_CHECK_MODULES(PKGMGR_DEPS REQUIRED pkgmgr)
 PKG_CHECK_MODULES(MANIFEST_PARSER_DEPS REQUIRED manifest-parser)
 PKG_CHECK_MODULES(MANIFEST_PARSER_UTILS_DEPS REQUIRED manifest-parser-utils)
+PKG_CHECK_MODULES(LIBSYSTEMD_DEPS REQUIRED libsystemd)
+PKG_CHECK_MODULES(AUL_DEPS REQUIRED aul)
 
 FIND_PACKAGE(Boost REQUIRED COMPONENTS system filesystem)
 
index a9a3b25..a6f247d 100755 (executable)
@@ -13,6 +13,8 @@ BuildRequires:  pkgconfig(gmock)
 BuildRequires:  pkgconfig(app-installers)
 BuildRequires:  pkgconfig(manifest-parser)
 BuildRequires:  pkgconfig(pkgmgr)
+BuildRequires:  pkgconfig(libsystemd)
+BuildRequires:  pkgconfig(aul)
 
 %if 0%{?gcov:1}
 BuildRequires:  lcov
@@ -87,7 +89,7 @@ install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
 #%files -n rpk-installer-devel
 %files devel
 %{_includedir}/app-installers/rpk/*.h
-#%{_includedir}/app-installers/rpk/*/*/*.h
+%{_includedir}/app-installers/rpk/*/*/*.h
 %{_libdir}/pkgconfig/rpk-installer.pc
 
 
index 8920a25..68eb840 100644 (file)
@@ -18,6 +18,8 @@ TARGET_INCLUDE_DIRECTORIES(${TARGET_LIBNAME_RPK} PUBLIC "${CMAKE_CURRENT_SOURCE_
 APPLY_PKG_CONFIG(${TARGET_LIBNAME_RPK} PUBLIC
   APP_INSTALLERS_DEPS
   PKGMGR_DEPS
+  LIBSYSTEMD_DEPS
+  AUL_DEPS
 )
 
 INSTALL(TARGETS ${TARGET_LIBNAME_RPK} DESTINATION ${LIB_INSTALL_DIR})
index b9d28b5..4491906 100644 (file)
@@ -5,6 +5,8 @@
 
 //#include "lib/rpk_archive_info.h"
 
+#include "rpk/step/pkgmgr/step_kill_rscapps.h"
+
 namespace ci = common_installer;
 
 namespace {
@@ -28,50 +30,361 @@ std::unique_ptr<ci::ArchiveInfo> RpkInstaller::GetArchiveInfo() {
 
 void RpkInstaller::InstallSteps() {
   AppInstaller::InstallSteps();
+
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("AcquireExternalStorage");
+  RemoveStep("CopyTEP");
+  RemoveStep("CreateIcons");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("CreateStorageDirectories");
+  RemoveStep("CreateGlobalAppSymlinks");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::recovery::StepCreateRecoveryFile>();
+  AddStep<ci::filesystem::StepUnzip>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepCheckInstallLocation>();
+  AddStep<ci::pkgmgr::StepCheckInstallable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::pkgmgr::StepCheckRestriction>();
+  AddStep<ci::configuration::StepCheckTizenVersion>();
+  AddStep<ci::security::StepSignature>(true);
+  AddStep<ci::security::StepRollbackInstallationSecurity>();
+  AddStep<ci::filesystem::StepCopy>();
+  AddStep<ci::security::StepRegisterSecurity>();
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+  AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
+*/
 }
 
 void RpkInstaller::UpdateSteps() {
   AppInstaller::UpdateSteps();
+
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("BackupIcons");
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("AcquireExternalStorage");
+  RemoveStep("RevokeTrustAnchor");
+  RemoveStep("UpdateTep");
+  RemoveStep("CopyStorageDirectories");
+  RemoveStep("CreateIcons");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("UpdateStorageDirectories");
+  RemoveStep("CreateGlobalAppSymlinks");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::recovery::StepCreateRecoveryFile>();
+  AddStep<ci::filesystem::StepUnzip>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::BACKUP);
+  AddStep<ci::configuration::StepCheckInstallLocation>();
+  AddStep<ci::pkgmgr::StepCheckUpgradable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::configuration::StepCheckTizenVersion>();
+  AddStep<ci::security::StepSignature>(true);
+  AddStep<ci::security::StepCheckOldCertificate>();
+  AddStep<ci::configuration::StepBlockCrossUpdate>();
+  AddStep<ci::backup::StepBackupManifest>();
+  AddStep<ci::backup::StepCopyBackup>();
+  AddStep<ci::security::StepUpdateSecurity>();
+  AddStep<ci::pkgmgr::StepUpdateApplication>();
+  AddStep<ci::filesystem::StepUpdateStorageDirectories>();
+  AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
+*/
 }
 
 void RpkInstaller::UninstallSteps() {
   AppInstaller::UninstallSteps();
+
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("OptionalAcquireExternalStorage");
+  RemoveStep("RemovePerUserStorageDirectories");
+  RemoveStep("UnregisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RemoveZipImage");
+  RemoveStep("RemoveIcons");
+  RemoveStep("RemoveTep");
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::recovery::StepCreateRecoveryFile>();
+  AddStep<ci::pkgmgr::StepCheckRestriction>();
+  AddStep<ci::pkgmgr::StepCheckRemovable>();
+  AddStep<ci::pkgmgr::StepCheckForceClean>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepCheckInstallLocation>();
+  AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>();
+  AddStep<ci::pkgmgr::StepUnregisterApplication>();
+  AddStep<ci::filesystem::StepRemoveFiles>();
+  AddStep<ci::security::StepRevokeSecurity>();
+  AddStep<ci::pkgmgr::StepRemoveManifest>();
+*/
 }
 
 void RpkInstaller::RecoverySteps() {
   AppInstaller::RecoverySteps();
+
+  RemoveStep("RecoverIcons");
+  RemoveStep("RecoverParserPlugin");
+  RemoveStep("RecoverExternalStorage");
+  RemoveStep("RecoverGlobalAppSymlinks");
+  RemoveStep("MountRecover");
+  RemoveStep("RecoverTrustAnchor");
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::recovery::StepOpenRecoveryFile>();
+  AddStep<ci::filesystem::StepRemoveTemporaryDirectory>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::RECOVERY,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::filesystem::StepRecoverManifest>();
+  AddStep<ci::filesystem::StepRecoverStorageDirectories>();
+  AddStep<ci::filesystem::StepRecoverFiles>();
+  AddStep<ci::filesystem::StepRecoverChangeOwner>();
+  AddStep<ci::pkgmgr::StepRecoverApplication>();
+  AddStep<ci::security::StepRecoverSecurity>();
+*/
 }
 
 void RpkInstaller::ManifestDirectInstallSteps() {
   AppInstaller::ManifestDirectInstallSteps();
+
+  RemoveStep("CheckMountPath");
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("CreateStorageDirectories");
+  RemoveStep("GlobalAppSymlinks");
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::pkgmgr::StepCheckInstallable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::configuration::StepCheckTizenVersion>();
+  AddStep<ci::security::StepSignature>(true);
+  AddStep<ci::security::StepRollbackInstallationSecurity>();
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+  AddStep<ci::security::StepRegisterSecurity>();
+  AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
+*/
 }
 
 void RpkInstaller::ManifestDirectUpdateSteps() {
   AppInstaller::ManifestDirectUpdateSteps();
+
+  RemoveStep("CheckMountPath");
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("CreateGlobalAppSymlinks");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::pkgmgr::StepCheckUpgradable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::configuration::StepCheckTizenVersion>();
+  AddStep<ci::security::StepSignature>(true);
+  AddStep<ci::security::StepCheckOldCertificate>();
+  AddStep<ci::pkgmgr::StepUpdateApplication>();
+  AddStep<ci::security::StepRegisterSecurity>();
+  AddStep<ci::filesystem::StepUpdateStorageDirectories>();
+  AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
+*/
 }
 
 void RpkInstaller::ManifestPartialInstallSteps() {
   AppInstaller::ManifestPartialInstallSteps();
+
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("CreateStorageDirectories");
+  RemoveStep("CreateGlobalAppSymlinks");
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::security::StepSignature>(false);
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+  AddStep<ci::security::StepRegisterSecurity>();
+*/
 }
 
 void RpkInstaller::ManifestPartialUpdateSteps() {
   AppInstaller::ManifestPartialUpdateSteps();
+
+  RemoveStep("RemoveGlobalAppSymlinks");
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("UpdateStorageDirectories");
+  RemoveStep("CreateGlobalAppSymlinks");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::security::StepSignature>(false);
+  AddStep<ci::security::StepCheckOldCertificate>();
+  AddStep<ci::pkgmgr::StepUpdateApplication>();
+  AddStep<ci::security::StepRegisterSecurity>();
+*/
 }
 
 void RpkInstaller::PartialUninstallSteps() {
   AppInstaller::PartialUninstallSteps();
+
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("OptionalAcquireExternalStorage");
+  RemoveStep("RemovePerUserStorageDirectories");
+  RemoveStep("UnregisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RunParserPlugin");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::pkgmgr::StepCheckRemovable>();
+  AddStep<ci::pkgmgr::StepCheckForceClean>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepCheckInstallLocation>();
+  AddStep<ci::pkgmgr::StepUnregisterApplication>();
+  AddStep<ci::security::StepRevokeSecurity>();
+*/
 }
 
 void RpkInstaller::ReadonlyUpdateInstallSteps() {
   AppInstaller::ReadonlyUpdateInstallSteps();
+
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("StepRevokeTrustAnchor");
+  RemoveStep("StepCopyTep");
+  RemoveStep("StepCreateIcons");
+  RemoveStep("StepRegisterTrustAnchor");
+  RemoveStep("StepPrivacyPrivilege");
+  RemoveStep("StepRunParserPlugin");
+  RemoveStep("StepUpdateStorageDirectories");
+  RemoveStep("StepCreateGlobalAppSymlinks");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::recovery::StepCreateRecoveryFile>();
+  AddStep<ci::filesystem::StepUnzip>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::configuration::StepSwitchReadonlyMode>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::BACKUP);
+  AddStep<ci::configuration::StepSwitchReadonlyMode>();
+  AddStep<ci::configuration::StepCheckInstallLocation>();
+  AddStep<ci::pkgmgr::StepCheckUpgradable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::configuration::StepCheckTizenVersion>();
+  AddStep<ci::security::StepSignature>(true);
+  AddStep<ci::security::StepCheckOldCertificate>();
+  AddStep<ci::configuration::StepBlockCrossUpdate>();
+  AddStep<ci::filesystem::StepCopy>();
+  AddStep<ci::security::StepUpdateSecurity>();
+  AddStep<ci::pkgmgr::StepUpdateApplication>();
+  AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
+*/
 }
 
 void RpkInstaller::ReadonlyUpdateUninstallSteps() {
   AppInstaller::ReadonlyUpdateUninstallSteps();
+
+  ReplaceStep<rpk::pkgmgr::StepKillRscApps>("KillApps");
+  RemoveStep("RemoveGlobalAppSymlinks");
+  RemoveStep("RevokeTrustAnchor");
+  RemoveStep("RegisterTrustAnchor");
+  RemoveStep("PrivacyPrivilege");
+  RemoveStep("RemoveZipImage");
+  RemoveStep("RemoveIcons");
+  RemoveStep("RemoveTep");
+  RemoveStep("RemoveUserData");
+  RemoveStep("RunParserPlugin");
+  RemoveStep("UpdateStorageDirectories");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::BACKUP);
+  AddStep<ci::configuration::StepSwitchReadonlyMode>();
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::pkgmgr::StepCheckUpgradable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::security::StepSignature>(false);
+  AddStep<ci::configuration::StepSwitchReadonlyMode>();
+  AddStep<ci::filesystem::StepRemoveFiles>();
+  AddStep<ci::configuration::StepSwitchReadonlyMode>();
+  AddStep<ci::security::StepUpdateSecurity>();
+  AddStep<ci::pkgmgr::StepUpdateApplication>();
+  AddStep<ci::pkgmgr::StepRemoveManifest>();
+*/
 }
 
 void RpkInstaller::RecoverDBSteps() {
   AppInstaller::RecoverDBSteps();
+
+  RemoveStep("CheckMountPath");
+  RemoveStep("GetPrivilegeLevel");
+
+/*
+  Current step order :
+  AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+  AddStep<ci::configuration::StepParseManifest>(
+      ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+      ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+  AddStep<ci::pkgmgr::StepCheckInstallable>();
+  AddStep<ci::configuration::StepParsePreload>();
+  AddStep<ci::pkgmgr::StepRegisterApplication>();
+*/
 }
 
 }  // namespace rpk
diff --git a/src/rpk/step/pkgmgr/step_kill_rscapps.cc b/src/rpk/step/pkgmgr/step_kill_rscapps.cc
new file mode 100644 (file)
index 0000000..229a846
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache-2.0 license that can be
+// found in the LICENSE file.
+
+#include "step/pkgmgr/step_kill_rscapps.h"
+
+#include <sys/time.h>
+#include <systemd/sd-login.h>
+#include <aul.h>
+
+#include <chrono>
+#include <string>
+
+namespace rpk {
+namespace pkgmgr {
+
+common_installer::Step::Status StepKillRscApps::process() {
+
+  return common_installer::Step::Status::OK;
+}
+
+common_installer::Step::Status StepKillRscApps::precheck() {
+  return common_installer::Step::Status::OK;
+}
+
+}  // namespace pkgmgr
+}  // namespace rpk
diff --git a/src/rpk/step/pkgmgr/step_kill_rscapps.h b/src/rpk/step/pkgmgr/step_kill_rscapps.h
new file mode 100644 (file)
index 0000000..a21de2e
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache-2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef STEP_PKGMGR_STEP_KILL_RSCAPPS_H_
+#define STEP_PKGMGR_STEP_KILL_RSCAPPS_H_
+
+#include <manifest_parser/utils/logging.h>
+
+#include "common/installer_context.h"
+#include "common/step/step.h"
+
+namespace rpk {
+namespace pkgmgr {
+
+/**
+ * \brief Step responsible for killing applications which are
+ *        using resource package being updated
+ *
+ */
+class StepKillRscApps : public common_installer::Step {
+ public:
+  using Step::Step;
+
+  /**
+   * \brief main logic for killing applications
+   *
+   * \return Status::OK
+   */
+  Status process() override;
+  Status clean() override { return Status::OK; }
+  Status undo() override { return Status::OK; }
+
+  /**
+   * \brief checks if neccessary data is provided
+   *
+   * \return Status::OK if success, Status::ERROR otherwise
+   */
+  Status precheck() override;
+
+  STEP_NAME(KillRscApps)
+};
+
+}  // namespace pkgmgr
+}  // namespace rpk
+
+#endif  // STEP_PKGMGR_STEP_KILL_RSCAPPS_H_