def __init__(self, d, manifest_dir=None): super(PkgSdk, self).__init__(d, manifest_dir) self.target_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt") self.host_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt-sdk") self.target_manifest = PkgManifest(d, self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_TARGET) self.host_manifest = PkgManifest(d, self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_HOST) deb_repo_workdir = "oe-sdk-repo" if "sdk_ext" in d.getVar("BB_RUNTASK"): deb_repo_workdir = "oe-sdk-ext-repo" self.target_pm = DpkgPM(d, self.sdk_target_sysroot, self.d.getVar("PACKAGE_ARCHS"), self.d.getVar("DPKG_ARCH"), self.target_conf_dir, deb_repo_workdir=deb_repo_workdir) self.host_pm = DpkgPM(d, self.sdk_host_sysroot, self.d.getVar("SDK_PACKAGE_ARCHS"), self.d.getVar("DEB_SDK_ARCH"), self.host_conf_dir, deb_repo_workdir=deb_repo_workdir)
def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None): super(PkgRootfs, self).__init__(d, progress_reporter, logcatcher) self.log_check_regex = '^E:' self.log_check_expected_regexes = \ [ "^E: Unmet dependencies." ] bb.utils.remove(self.image_rootfs, True) bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True) self.manifest = PkgManifest(d, manifest_dir) self.pm = DpkgPM(d, d.getVar('IMAGE_ROOTFS'), d.getVar('PACKAGE_ARCHS'), d.getVar('DPKG_ARCH'))
def get_package_manager(d, root_path): """ Returns an OE package manager that can install packages in root_path. """ from oe.package_manager.rpm import RpmPM from oe.package_manager.ipk import OpkgPM from oe.package_manager.deb import DpkgPM pkg_class = d.getVar("IMAGE_PKGTYPE") if pkg_class == "rpm": pm = RpmPM(d, root_path, d.getVar('TARGET_VENDOR'), filterbydependencies=False) pm.create_configs() elif pkg_class == "ipk": pm = OpkgPM(d, root_path, d.getVar("IPKGCONF_TARGET"), d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"), filterbydependencies=False) elif pkg_class == "deb": pm = DpkgPM(d, root_path, d.getVar('PACKAGE_ARCHS'), d.getVar('DPKG_ARCH'), filterbydependencies=False) pm.write_index() pm.update() return pm
class PkgSdk(Sdk): def __init__(self, d, manifest_dir=None): super(PkgSdk, self).__init__(d, manifest_dir) self.target_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt") self.host_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), "apt-sdk") self.target_manifest = PkgManifest(d, self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_TARGET) self.host_manifest = PkgManifest(d, self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_HOST) deb_repo_workdir = "oe-sdk-repo" if "sdk_ext" in d.getVar("BB_RUNTASK"): deb_repo_workdir = "oe-sdk-ext-repo" self.target_pm = DpkgPM(d, self.sdk_target_sysroot, self.d.getVar("PACKAGE_ARCHS"), self.d.getVar("DPKG_ARCH"), self.target_conf_dir, deb_repo_workdir=deb_repo_workdir) self.host_pm = DpkgPM(d, self.sdk_host_sysroot, self.d.getVar("SDK_PACKAGE_ARCHS"), self.d.getVar("DEB_SDK_ARCH"), self.host_conf_dir, deb_repo_workdir=deb_repo_workdir) def _copy_apt_dir_to(self, dst_dir): staging_etcdir_native = self.d.getVar("STAGING_ETCDIR_NATIVE") self.remove(dst_dir, True) shutil.copytree(os.path.join(staging_etcdir_native, "apt"), dst_dir) def _populate_sysroot(self, pm, manifest): pkgs_to_install = manifest.parse_initial_manifest() pm.write_index() pm.update() for pkg_type in self.install_order: if pkg_type in pkgs_to_install: pm.install(pkgs_to_install[pkg_type], [False, True][pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY]) def _populate(self): execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_PRE_TARGET_COMMAND")) bb.note("Installing TARGET packages") self._populate_sysroot(self.target_pm, self.target_manifest) self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) self.target_pm.run_intercepts(populate_sdk='target') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) self._copy_apt_dir_to(os.path.join(self.sdk_target_sysroot, "etc", "apt")) if not bb.utils.contains("SDKIMAGE_FEATURES", "package-management", True, False, self.d): self.target_pm.remove_packaging_data() bb.note("Installing NATIVESDK packages") self._populate_sysroot(self.host_pm, self.host_manifest) self.install_locales(self.host_pm) self.host_pm.run_intercepts(populate_sdk='host') execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_HOST_COMMAND")) self._copy_apt_dir_to(os.path.join(self.sdk_output, self.sdk_native_path, "etc", "apt")) if not bb.utils.contains("SDKIMAGE_FEATURES", "package-management", True, False, self.d): self.host_pm.remove_packaging_data() native_dpkg_state_dir = os.path.join(self.sdk_output, self.sdk_native_path, "var", "lib", "dpkg") self.mkdirhier(native_dpkg_state_dir) for f in glob.glob(os.path.join(self.sdk_output, "var", "lib", "dpkg", "*")): self.movefile(f, native_dpkg_state_dir) self.remove(os.path.join(self.sdk_output, "var"), True)
class PkgRootfs(DpkgOpkgRootfs): def __init__(self, d, manifest_dir, progress_reporter=None, logcatcher=None): super(PkgRootfs, self).__init__(d, progress_reporter, logcatcher) self.log_check_regex = '^E:' self.log_check_expected_regexes = \ [ "^E: Unmet dependencies." ] bb.utils.remove(self.image_rootfs, True) bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True) self.manifest = PkgManifest(d, manifest_dir) self.pm = DpkgPM(d, d.getVar('IMAGE_ROOTFS'), d.getVar('PACKAGE_ARCHS'), d.getVar('DPKG_ARCH')) def _create(self): pkgs_to_install = self.manifest.parse_initial_manifest() deb_pre_process_cmds = self.d.getVar('DEB_PREPROCESS_COMMANDS') deb_post_process_cmds = self.d.getVar('DEB_POSTPROCESS_COMMANDS') alt_dir = self.d.expand("${IMAGE_ROOTFS}/var/lib/dpkg/alternatives") bb.utils.mkdirhier(alt_dir) # update PM index files self.pm.write_index() execute_pre_post_process(self.d, deb_pre_process_cmds) if self.progress_reporter: self.progress_reporter.next_stage() # Don't support incremental, so skip that self.progress_reporter.next_stage() self.pm.update() if self.progress_reporter: self.progress_reporter.next_stage() for pkg_type in self.install_order: if pkg_type in pkgs_to_install: self.pm.install(pkgs_to_install[pkg_type], [False, True][pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY]) self.pm.fix_broken_dependencies() if self.progress_reporter: # Don't support attemptonly, so skip that self.progress_reporter.next_stage() self.progress_reporter.next_stage() self.pm.install_complementary() if self.progress_reporter: self.progress_reporter.next_stage() self._setup_dbg_rootfs(['/var/lib/dpkg']) self.pm.fix_broken_dependencies() self.pm.mark_packages("installed") self.pm.run_pre_post_installs() execute_pre_post_process(self.d, deb_post_process_cmds) if self.progress_reporter: self.progress_reporter.next_stage() @staticmethod def _depends_list(): return ['DEPLOY_DIR_DEB', 'DEB_SDK_ARCH', 'APTCONF_TARGET', 'APT_ARGS', 'DPKG_ARCH', 'DEB_PREPROCESS_COMMANDS', 'DEB_POSTPROCESS_COMMANDS'] def _get_delayed_postinsts(self): status_file = self.image_rootfs + "/var/lib/dpkg/status" return self._get_delayed_postinsts_common(status_file) def _save_postinsts(self): dst_postinst_dir = self.d.expand("${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts") src_postinst_dir = self.d.expand("${IMAGE_ROOTFS}/var/lib/dpkg/info") return self._save_postinsts_common(dst_postinst_dir, src_postinst_dir) def _log_check(self): self._log_check_warn() self._log_check_error() def _cleanup(self): pass