1 /* Copyright 2020 Samsung Electronics, license APACHE-2.0, see LICENSE file */
2 #include "rpk/rpk_installer.h"
4 #include <common/installer/app_installer.h>
8 #include "lib/rpk_archive_info.h"
9 #include "rpk/step/configuration/step_parse_rpk_manifest.h"
10 #include "rpk/step/pkgmgr/step_rpk_manifest_adjustment.h"
11 #include "rpk/step/security/step_rpk_signature.h"
13 namespace ci = common_installer;
17 constexpr const char kPkgType[] = "rpk";
23 RpkInstaller::RpkInstaller(common_installer::PkgMgrPtr pkgmgr)
24 : AppInstaller(kPkgType, pkgmgr) {
27 std::unique_ptr<ci::ArchiveInfo> RpkInstaller::GetArchiveInfo() {
28 return std::make_unique<RpkArchiveInfo>(pkgmgr_->GetRequestInfo(GetIndex()));
31 void RpkInstaller::InstallSteps() {
32 AppInstaller::InstallSteps();
34 RemoveStep("RemoveGlobalAppSymlinks");
35 RemoveStep("AcquireExternalStorage");
36 RemoveStep("CopyTep");
37 RemoveStep("CreateIcons");
38 RemoveStep("CreateResControlDirectories");
39 RemoveStep("RegisterTrustAnchor");
40 RemoveStep("PrivacyPrivilege");
41 RemoveStep("RunParserPlugin");
42 RemoveStep("CreateStorageDirectories");
43 RemoveStep("CreateGlobalAppSymlinks");
45 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
46 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
47 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
48 ReplaceStep<rpk::security::StepRpkSignature>("Signature", true);
49 AddStepAfter<rpk::pkgmgr::StepRpkManifestAdjustment>("Copy");
53 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
54 AddStep<ci::recovery::StepCreateRecoveryFile>();
55 AddStep<ci::filesystem::StepUnzip>();
56 AddStep<rpk::configuration::StepParseRpkManifest>(
57 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
58 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
59 AddStep<ci::configuration::StepCheckInstallLocation>();
60 AddStep<ci::pkgmgr::StepCheckInstallable>();
61 AddStep<ci::configuration::StepParsePreload>();
62 AddStep<ci::pkgmgr::StepCheckRestriction>();
63 AddStep<ci::configuration::StepCheckTizenVersion>();
64 AddStep<rpk::security::StepRpkSignature>();
65 AddStep<ci::security::StepRollbackInstallationSecurity>();
66 AddStep<ci::filesystem::StepCopy>();
67 AddStep<rpk::pkgmgr::StepRpkManifestAdjustment>();
68 AddStep<ci::security::StepRegisterSecurity>();
69 AddStep<ci::pkgmgr::StepRegisterApplication>();
70 AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
74 void RpkInstaller::UpdateSteps() {
75 AppInstaller::UpdateSteps();
77 RemoveStep("KillApps");
78 RemoveStep("BackupIcons");
79 RemoveStep("RemoveGlobalAppSymlinks");
80 RemoveStep("AcquireExternalStorage");
81 RemoveStep("RevokeTrustAnchor");
82 RemoveStep("UpdateTep");
83 RemoveStep("CopyStorageDirectories");
84 RemoveStep("CreateIcons");
85 RemoveStep("CreateResControlDirectories");
86 RemoveStep("RegisterTrustAnchor");
87 RemoveStep("PrivacyPrivilege");
88 RemoveStep("RunParserPlugin");
89 RemoveStep("UpdateStorageDirectories");
90 RemoveStep("CreateGlobalAppSymlinks");
92 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
93 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
94 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
96 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
97 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
98 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
99 ReplaceStep<rpk::security::StepRpkSignature>("Signature", true);
101 AddStepAfter<rpk::pkgmgr::StepRpkManifestAdjustment>("CopyBackup");
105 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
106 AddStep<ci::recovery::StepCreateRecoveryFile>();
107 AddStep<ci::filesystem::StepUnzip>();
108 AddStep<rpk::configuration::StepParseRpkManifest>(
109 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
110 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
111 AddStep<ci::configuration::StepParseRpkManifest>(
112 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
113 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
114 AddStep<ci::configuration::StepCheckInstallLocation>();
115 AddStep<ci::pkgmgr::StepCheckUpgradable>();
116 AddStep<ci::configuration::StepParsePreload>();
117 AddStep<ci::configuration::StepCheckTizenVersion>();
118 AddStep<rpk::security::StepRpkSignature>(true);
119 AddStep<ci::security::StepCheckOldCertificate>();
120 AddStep<ci::configuration::StepBlockCrossUpdate>();
121 AddStep<ci::backup::StepBackupManifest>();
122 AddStep<ci::backup::StepCopyBackup>();
123 AddStep<rpk::pkgmgr::StepRpkManifestAdjustment>();
124 AddStep<ci::security::StepUpdateSecurity>();
125 AddStep<ci::pkgmgr::StepUpdateApplication>();
126 AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
130 void RpkInstaller::UninstallSteps() {
131 AppInstaller::UninstallSteps();
133 RemoveStep("KillApps");
134 RemoveStep("RunParserPlugin");
135 RemoveStep("RemoveGlobalAppSymlinks");
136 RemoveStep("OptionalAcquireExternalStorage");
137 RemoveStep("RemovePerUserStorageDirectories");
138 RemoveStep("UnregisterTrustAnchor");
139 RemoveStep("PrivacyPrivilege");
140 RemoveStep("RemoveZipImage");
141 RemoveStep("RemoveIcons");
142 RemoveStep("RemoveTep");
144 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
145 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
146 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
150 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
151 AddStep<ci::recovery::StepCreateRecoveryFile>();
152 AddStep<ci::pkgmgr::StepCheckRestriction>();
153 AddStep<ci::pkgmgr::StepCheckRemovable>();
154 AddStep<ci::pkgmgr::StepCheckForceClean>();
155 AddStep<rpk::configuration::StepParseRpkManifest>(
156 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
157 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
158 AddStep<ci::configuration::StepCheckInstallLocation>();
159 AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>();
160 AddStep<ci::pkgmgr::StepUnregisterApplication>();
161 AddStep<ci::filesystem::StepRemoveFiles>();
162 AddStep<ci::security::StepRevokeSecurity>();
163 AddStep<ci::pkgmgr::StepRemoveManifest>();
167 void RpkInstaller::RecoverySteps() {
168 AppInstaller::RecoverySteps();
170 RemoveStep("RecoverIcons");
171 RemoveStep("RecoverParserPlugin");
172 RemoveStep("RecoverExternalStorage");
173 RemoveStep("RecoverGlobalAppSymlinks");
174 RemoveStep("MountRecover");
175 RemoveStep("RecoverTrustAnchor");
177 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
178 rpk::configuration::StepParseRpkManifest::ManifestLocation::RECOVERY,
179 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
182 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
183 AddStep<ci::recovery::StepOpenRecoveryFile>();
184 AddStep<ci::filesystem::StepRemoveTemporaryDirectory>();
185 AddStep<rpk::configuration::StepParseRpkManifest>(
186 rpk::configuration::StepParseRpkManifest::ManifestLocation::RECOVERY,
187 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
188 AddStep<ci::filesystem::StepRecoverManifest>();
189 AddStep<ci::filesystem::StepRecoverStorageDirectories>();
190 AddStep<ci::filesystem::StepRecoverFiles>();
191 AddStep<ci::filesystem::StepRecoverChangeOwner>();
192 AddStep<ci::pkgmgr::StepRecoverApplication>();
193 AddStep<ci::security::StepRecoverSecurity>();
197 void RpkInstaller::ManifestDirectInstallSteps() {
198 AppInstaller::ManifestDirectInstallSteps();
200 RemoveStep("CheckMountPath");
201 RemoveStep("RemoveGlobalAppSymlinks");
202 RemoveStep("CreateResControlDirectories");
203 RemoveStep("RegisterTrustAnchor");
204 RemoveStep("PrivacyPrivilege");
205 RemoveStep("RunParserPlugin");
206 RemoveStep("CreateStorageDirectories");
207 RemoveStep("CreateGlobalAppSymlinks");
209 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
210 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
211 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
212 ReplaceStep<rpk::security::StepRpkSignature>("Signature", true);
214 AddStepAfter<rpk::pkgmgr::StepRpkManifestAdjustment>("RpkSignature");
218 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
219 AddStep<rpk::configuration::StepParseRpkManifest>(
220 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
221 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
222 AddStep<ci::pkgmgr::StepCheckInstallable>();
223 AddStep<ci::configuration::StepParsePreload>();
224 AddStep<ci::configuration::StepCheckTizenVersion>();
225 AddStep<rpk::security::StepRpkSignature>(true);
226 AddStep<rpk::pkgmgr::StepRpkManifestAdjustment>();
227 AddStep<ci::security::StepRollbackInstallationSecurity>();
228 AddStep<ci::pkgmgr::StepRegisterApplication>();
229 AddStep<ci::security::StepRegisterSecurity>();
230 AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
234 void RpkInstaller::ManifestDirectUpdateSteps() {
235 AppInstaller::ManifestDirectUpdateSteps();
237 RemoveStep("CheckMountPath");
238 RemoveStep("KillApps");
239 RemoveStep("RemoveGlobalAppSymlinks");
240 RemoveStep("CreateResControlDirectories");
241 RemoveStep("RegisterTrustAnchor");
242 RemoveStep("PrivacyPrivilege");
243 RemoveStep("RunParserPlugin");
244 RemoveStep("UpdateStorageDirectories");
245 RemoveStep("CreateGlobalAppSymlinks");
247 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
248 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
249 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
250 ReplaceStep<rpk::security::StepRpkSignature>("Signature", true);
252 AddStepAfter<rpk::pkgmgr::StepRpkManifestAdjustment>("RpkSignature");
256 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
257 AddStep<rpk::configuration::StepParseRpkManifest>(
258 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
259 rpkci::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
260 AddStep<ci::pkgmgr::StepCheckUpgradable>();
261 AddStep<ci::configuration::StepParsePreload>();
262 AddStep<ci::configuration::StepCheckTizenVersion>();
263 AddStep<rpk::security::StepRpkSignature>(true);
264 AddStep<rpk::pkgmgr::StepRpkManifestAdjustment>();
265 AddStep<ci::security::StepCheckOldCertificate>();
266 AddStep<ci::pkgmgr::StepUpdateApplication>();
267 AddStep<ci::security::StepRegisterSecurity>();
268 AddStep<ci::filesystem::StepUpdateStorageDirectories>();
269 AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
273 void RpkInstaller::ManifestPartialInstallSteps() {
274 AppInstaller::ManifestPartialInstallSteps();
276 RemoveStep("RemoveGlobalAppSymlinks");
277 RemoveStep("RegisterTrustAnchor");
278 RemoveStep("PrivacyPrivilege");
279 RemoveStep("RunParserPlugin");
280 RemoveStep("CreateStorageDirectories");
281 RemoveStep("CreateGlobalAppSymlinks");
283 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
284 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
285 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
286 ReplaceStep<rpk::security::StepRpkSignature>("Signature", false);
290 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
291 AddStep<rpk::configuration::StepParseRpkManifest>(
292 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
293 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
294 AddStep<ci::configuration::StepParsePreload>();
295 AddStep<rpk::security::StepRpkSignature>(false);
296 AddStep<ci::pkgmgr::StepRegisterApplication>();
297 AddStep<ci::security::StepRegisterSecurity>();
301 void RpkInstaller::ManifestPartialUpdateSteps() {
302 AppInstaller::ManifestPartialUpdateSteps();
304 RemoveStep("RemoveGlobalAppSymlinks");
305 RemoveStep("KillApps");
306 RemoveStep("RegisterTrustAnchor");
307 RemoveStep("PrivacyPrivilege");
308 RemoveStep("RunParserPlugin");
309 RemoveStep("UpdateStorageDirectories");
310 RemoveStep("CreateGlobalAppSymlinks");
312 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
313 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
314 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
315 ReplaceStep<rpk::security::StepRpkSignature>("Signature", false);
319 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
320 AddStep<rpk::configuration::StepParseRpkManifest>(
321 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
322 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
323 AddStep<ci::configuration::StepParsePreload>();
324 AddStep<rpk::security::StepRpkSignature>(false);
325 AddStep<ci::security::StepCheckOldCertificate>();
326 AddStep<ci::pkgmgr::StepUpdateApplication>();
327 AddStep<ci::security::StepRegisterSecurity>();
331 void RpkInstaller::PartialUninstallSteps() {
332 AppInstaller::PartialUninstallSteps();
334 RemoveStep("RemoveGlobalAppSymlinks");
335 RemoveStep("OptionalAcquireExternalStorage");
336 RemoveStep("RemovePerUserStorageDirectories");
337 RemoveStep("UnregisterTrustAnchor");
338 RemoveStep("PrivacyPrivilege");
339 RemoveStep("RunParserPlugin");
341 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
342 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
343 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
347 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
348 AddStep<ci::pkgmgr::StepCheckRemovable>();
349 AddStep<ci::pkgmgr::StepCheckForceClean>();
350 AddStep<rpk::configuration::StepParseRpkManifest>(
351 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
352 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
353 AddStep<ci::configuration::StepCheckInstallLocation>();
354 AddStep<ci::pkgmgr::StepUnregisterApplication>();
355 AddStep<ci::security::StepRevokeSecurity>();
359 void RpkInstaller::ReadonlyUpdateInstallSteps() {
360 AppInstaller::ReadonlyUpdateInstallSteps();
362 RemoveStep("KillApps");
363 RemoveStep("RevokeTrustAnchor");
364 RemoveStep("CopyTep");
365 RemoveStep("CreateIcons");
366 RemoveStep("CreateResControlDirectories");
367 RemoveStep("RegisterTrustAnchor");
368 RemoveStep("PrivacyPrivilege");
369 RemoveStep("RunParserPlugin");
370 RemoveStep("UpdateStorageDirectories");
371 RemoveStep("CreateGlobalAppSymlinks");
373 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
374 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
375 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
377 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
378 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
379 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
380 ReplaceStep<rpk::security::StepRpkSignature>("Signature", true);
382 AddStepAfter<rpk::pkgmgr::StepRpkManifestAdjustment>("Copy");
386 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
387 AddStep<ci::recovery::StepCreateRecoveryFile>();
388 AddStep<ci::filesystem::StepUnzip>();
389 AddStep<rpk::configuration::StepParseRpkManifest>(
390 rpk::configuration::StepParseRpkManifest::ManifestLocation::PACKAGE,
391 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
392 AddStep<ci::configuration::StepParseRpkManifest>(
393 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
394 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
395 AddStep<ci::configuration::StepSwitchReadonlyMode>();
396 AddStep<ci::configuration::StepCheckInstallLocation>();
397 AddStep<ci::pkgmgr::StepCheckUpgradable>();
398 AddStep<ci::configuration::StepParsePreload>();
399 AddStep<ci::configuration::StepCheckTizenVersion>();
400 AddStep<rpk::security::StepRpkSignature>(true);
401 AddStep<rpk::pkgmgr::StepRpkManifestAdjustment>();
402 AddStep<ci::security::StepCheckOldCertificate>();
403 AddStep<ci::configuration::StepBlockCrossUpdate>();
404 AddStep<ci::filesystem::StepCopy>();
405 AddStep<ci::security::StepUpdateSecurity>();
406 AddStep<ci::pkgmgr::StepUpdateApplication>();
407 AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
411 void RpkInstaller::ReadonlyUpdateUninstallSteps() {
412 AppInstaller::ReadonlyUpdateUninstallSteps();
414 RemoveStep("KillApps");
415 RemoveStep("RemoveGlobalAppSymlinks");
416 RemoveStep("RevokeTrustAnchor");
417 RemoveStep("RegisterTrustAnchor");
418 RemoveStep("PrivacyPrivilege");
419 RemoveStep("RemoveZipImage");
420 RemoveStep("RemoveIcons");
421 RemoveStep("RemoveTep");
422 RemoveStep("RemoveUserData");
423 RemoveStep("RunParserPlugin");
424 RemoveStep("UpdateStorageDirectories");
426 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
427 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
428 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
430 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
431 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
432 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
433 ReplaceStep<rpk::security::StepRpkSignature>("Signature", false);
437 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
438 AddStep<rpk::configuration::StepParseRpkManifest>(
439 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
440 rpk::configuration::StepParseRpkManifest::StoreLocation::BACKUP);
441 AddStep<ci::configuration::StepParseRpkManifest>(
442 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
443 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
444 AddStep<ci::pkgmgr::StepCheckUpgradable>();
445 AddStep<ci::configuration::StepParsePreload>();
446 AddStep<rpk::security::StepRpkSignature>(false);
447 AddStep<ci::configuration::StepSwitchReadonlyMode>();
448 AddStep<ci::filesystem::StepRemoveFiles>();
449 AddStep<ci::configuration::StepSwitchReadonlyMode>();
450 AddStep<ci::security::StepUpdateSecurity>();
451 AddStep<ci::pkgmgr::StepUpdateApplication>();
452 AddStep<ci::pkgmgr::StepRemoveManifest>();
456 void RpkInstaller::RecoverDBSteps() {
457 AppInstaller::RecoverDBSteps();
459 RemoveStep("CheckMountPath");
460 RemoveStep("GetPrivilegeLevel");
462 ReplaceStep<rpk::configuration::StepParseRpkManifest>("ParseManifest",
463 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
464 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
467 AddStep<ci::configuration::StepConfigure>(pkgmgr_);
468 AddStep<rpk::configuration::StepParseRpkManifest>(
469 rpk::configuration::StepParseRpkManifest::ManifestLocation::INSTALLED,
470 rpk::configuration::StepParseRpkManifest::StoreLocation::NORMAL);
471 AddStep<ci::pkgmgr::StepCheckInstallable>();
472 AddStep<ci::configuration::StepParsePreload>();
473 AddStep<ci::pkgmgr::StepRegisterApplication>();