summaryrefslogtreecommitdiffstats
path: root/meta/lib/oe/rootfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oe/rootfs.py')
-rw-r--r--meta/lib/oe/rootfs.py142
1 files changed, 2 insertions, 140 deletions
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 876e13079c..4895f1ebb9 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -355,146 +355,6 @@ class Rootfs(object, metaclass=ABCMeta):
355 self.image_rootfs, "-D", devtable]) 355 self.image_rootfs, "-D", devtable])
356 356
357 357
358class RpmRootfs(Rootfs):
359 def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None):
360 super(RpmRootfs, self).__init__(d, progress_reporter, logcatcher)
361 self.log_check_regex = r'(unpacking of archive failed|Cannot find package'\
362 r'|exit 1|ERROR: |Error: |Error |ERROR '\
363 r'|Failed |Failed: |Failed$|Failed\(\d+\):)'
364
365 self.manifest = RpmManifest(d, manifest_dir)
366
367 self.pm = RpmPM(d,
368 d.getVar('IMAGE_ROOTFS'),
369 self.d.getVar('TARGET_VENDOR')
370 )
371
372 self.inc_rpm_image_gen = self.d.getVar('INC_RPM_IMAGE_GEN')
373 if self.inc_rpm_image_gen != "1":
374 bb.utils.remove(self.image_rootfs, True)
375 else:
376 self.pm.recovery_packaging_data()
377 bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True)
378
379 self.pm.create_configs()
380
381 '''
382 While rpm incremental image generation is enabled, it will remove the
383 unneeded pkgs by comparing the new install solution manifest and the
384 old installed manifest.
385 '''
386 def _create_incremental(self, pkgs_initial_install):
387 if self.inc_rpm_image_gen == "1":
388
389 pkgs_to_install = list()
390 for pkg_type in pkgs_initial_install:
391 pkgs_to_install += pkgs_initial_install[pkg_type]
392
393 installed_manifest = self.pm.load_old_install_solution()
394 solution_manifest = self.pm.dump_install_solution(pkgs_to_install)
395
396 pkg_to_remove = list()
397 for pkg in installed_manifest:
398 if pkg not in solution_manifest:
399 pkg_to_remove.append(pkg)
400
401 self.pm.update()
402
403 bb.note('incremental update -- upgrade packages in place ')
404 self.pm.upgrade()
405 if pkg_to_remove != []:
406 bb.note('incremental removed: %s' % ' '.join(pkg_to_remove))
407 self.pm.remove(pkg_to_remove)
408
409 self.pm.autoremove()
410
411 def _create(self):
412 pkgs_to_install = self.manifest.parse_initial_manifest()
413 rpm_pre_process_cmds = self.d.getVar('RPM_PREPROCESS_COMMANDS')
414 rpm_post_process_cmds = self.d.getVar('RPM_POSTPROCESS_COMMANDS')
415
416 # update PM index files
417 self.pm.write_index()
418
419 execute_pre_post_process(self.d, rpm_pre_process_cmds)
420
421 if self.progress_reporter:
422 self.progress_reporter.next_stage()
423
424 if self.inc_rpm_image_gen == "1":
425 self._create_incremental(pkgs_to_install)
426
427 if self.progress_reporter:
428 self.progress_reporter.next_stage()
429
430 self.pm.update()
431
432 pkgs = []
433 pkgs_attempt = []
434 for pkg_type in pkgs_to_install:
435 if pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY:
436 pkgs_attempt += pkgs_to_install[pkg_type]
437 else:
438 pkgs += pkgs_to_install[pkg_type]
439
440 if self.progress_reporter:
441 self.progress_reporter.next_stage()
442
443 self.pm.install(pkgs)
444
445 if self.progress_reporter:
446 self.progress_reporter.next_stage()
447
448 self.pm.install(pkgs_attempt, True)
449
450 if self.progress_reporter:
451 self.progress_reporter.next_stage()
452
453 self.pm.install_complementary()
454
455 if self.progress_reporter:
456 self.progress_reporter.next_stage()
457
458 self._setup_dbg_rootfs(['/etc', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf'])
459
460 execute_pre_post_process(self.d, rpm_post_process_cmds)
461
462 if self.inc_rpm_image_gen == "1":
463 self.pm.backup_packaging_data()
464
465 if self.progress_reporter:
466 self.progress_reporter.next_stage()
467
468
469 @staticmethod
470 def _depends_list():
471 return ['DEPLOY_DIR_RPM', 'INC_RPM_IMAGE_GEN', 'RPM_PREPROCESS_COMMANDS',
472 'RPM_POSTPROCESS_COMMANDS', 'RPM_PREFER_ELF_ARCH']
473
474 def _get_delayed_postinsts(self):
475 postinst_dir = self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/rpm-postinsts")
476 if os.path.isdir(postinst_dir):
477 files = os.listdir(postinst_dir)
478 for f in files:
479 bb.note('Delayed package scriptlet: %s' % f)
480 return files
481
482 return None
483
484 def _save_postinsts(self):
485 # this is just a stub. For RPM, the failed postinstalls are
486 # already saved in /etc/rpm-postinsts
487 pass
488
489 def _log_check(self):
490 self._log_check_warn()
491 self._log_check_error()
492
493 def _cleanup(self):
494 if bb.utils.contains("IMAGE_FEATURES", "package-management", True, False, self.d):
495 self.pm._invoke_dnf(["clean", "all"])
496
497
498class DpkgOpkgRootfs(Rootfs): 358class DpkgOpkgRootfs(Rootfs):
499 def __init__(self, d, progress_reporter=None, logcatcher=None): 359 def __init__(self, d, progress_reporter=None, logcatcher=None):
500 super(DpkgOpkgRootfs, self).__init__(d, progress_reporter, logcatcher) 360 super(DpkgOpkgRootfs, self).__init__(d, progress_reporter, logcatcher)
@@ -961,6 +821,7 @@ class OpkgRootfs(DpkgOpkgRootfs):
961 self.pm.remove_lists() 821 self.pm.remove_lists()
962 822
963def get_class_for_type(imgtype): 823def get_class_for_type(imgtype):
824 from oe.package_manager.rpm.rootfs import RpmRootfs
964 return {"rpm": RpmRootfs, 825 return {"rpm": RpmRootfs,
965 "ipk": OpkgRootfs, 826 "ipk": OpkgRootfs,
966 "deb": DpkgRootfs}[imgtype] 827 "deb": DpkgRootfs}[imgtype]
@@ -973,6 +834,7 @@ def variable_depends(d, manifest_dir=None):
973def create_rootfs(d, manifest_dir=None, progress_reporter=None, logcatcher=None): 834def create_rootfs(d, manifest_dir=None, progress_reporter=None, logcatcher=None):
974 env_bkp = os.environ.copy() 835 env_bkp = os.environ.copy()
975 836
837 from oe.package_manager.rpm.rootfs import RpmRootfs
976 img_type = d.getVar('IMAGE_PKGTYPE') 838 img_type = d.getVar('IMAGE_PKGTYPE')
977 if img_type == "rpm": 839 if img_type == "rpm":
978 RpmRootfs(d, manifest_dir, progress_reporter, logcatcher).create() 840 RpmRootfs(d, manifest_dir, progress_reporter, logcatcher).create()