mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
package_manager/sdk: Use filtered copies of the deploy ipk/deb directories
Similar to rpm, use copies of the ipk/deb directories for rootfs construction. This means the image creation code can no longer "see" recipes wich aren't in its dependency chain which is good for a variety of reasons including determinism, incompatible recipe (e.g. systemd/sysvinit) package conflicts and locking performance. (From OE-Core rev: c7c5f4065c102fde4e11d138fb0b6e25bffe0379) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -1124,19 +1124,22 @@ class OpkgDpkgPM(PackageManager):
|
||||
self.mark_packages("unpacked", registered_pkgs.split())
|
||||
|
||||
class OpkgPM(OpkgDpkgPM):
|
||||
def __init__(self, d, target_rootfs, config_file, archs, task_name='target'):
|
||||
def __init__(self, d, target_rootfs, config_file, archs, task_name='target', ipk_repo_workdir="oe-rootfs-repo", filterbydependencies=True, prepare_index=True):
|
||||
super(OpkgPM, self).__init__(d, target_rootfs)
|
||||
|
||||
self.config_file = config_file
|
||||
self.pkg_archs = archs
|
||||
self.task_name = task_name
|
||||
|
||||
self.deploy_dir = self.d.getVar("DEPLOY_DIR_IPK")
|
||||
self.deploy_dir = oe.path.join(self.d.getVar('WORKDIR'), ipk_repo_workdir)
|
||||
self.deploy_lock_file = os.path.join(self.deploy_dir, "deploy.lock")
|
||||
self.opkg_cmd = bb.utils.which(os.getenv('PATH'), "opkg")
|
||||
self.opkg_args = "--volatile-cache -f %s -t %s -o %s " % (self.config_file, self.d.expand('${T}/ipktemp/') ,target_rootfs)
|
||||
self.opkg_args += self.d.getVar("OPKG_ARGS")
|
||||
|
||||
if prepare_index:
|
||||
create_packages_dir(self.d, self.deploy_dir, d.getVar("DEPLOY_DIR_IPK"), "package_write_ipk", filterbydependencies)
|
||||
|
||||
opkg_lib_dir = self.d.getVar('OPKGLIBDIR')
|
||||
if opkg_lib_dir[0] == "/":
|
||||
opkg_lib_dir = opkg_lib_dir[1:]
|
||||
@@ -1501,9 +1504,12 @@ class OpkgPM(OpkgDpkgPM):
|
||||
return tmp_dir
|
||||
|
||||
class DpkgPM(OpkgDpkgPM):
|
||||
def __init__(self, d, target_rootfs, archs, base_archs, apt_conf_dir=None):
|
||||
def __init__(self, d, target_rootfs, archs, base_archs, apt_conf_dir=None, deb_repo_workdir="oe-rootfs-repo", filterbydependencies=True):
|
||||
super(DpkgPM, self).__init__(d, target_rootfs)
|
||||
self.deploy_dir = self.d.getVar('DEPLOY_DIR_DEB')
|
||||
self.deploy_dir = oe.path.join(self.d.getVar('WORKDIR'), deb_repo_workdir)
|
||||
|
||||
create_packages_dir(self.d, self.deploy_dir, d.getVar("DEPLOY_DIR_DEB"), "package_write_deb", filterbydependencies)
|
||||
|
||||
if apt_conf_dir is None:
|
||||
self.apt_conf_dir = self.d.expand("${APTCONF_TARGET}/apt")
|
||||
else:
|
||||
|
||||
@@ -786,7 +786,7 @@ class OpkgRootfs(DpkgOpkgRootfs):
|
||||
ml_opkg_conf = os.path.join(ml_temp,
|
||||
variant + "-" + os.path.basename(self.opkg_conf))
|
||||
|
||||
ml_pm = OpkgPM(self.d, ml_target_rootfs, ml_opkg_conf, self.pkg_archs)
|
||||
ml_pm = OpkgPM(self.d, ml_target_rootfs, ml_opkg_conf, self.pkg_archs, prepare_index=False)
|
||||
|
||||
ml_pm.update()
|
||||
ml_pm.install(pkgs)
|
||||
|
||||
@@ -227,11 +227,17 @@ class OpkgSdk(Sdk):
|
||||
self.host_manifest = OpkgManifest(d, self.manifest_dir,
|
||||
Manifest.MANIFEST_TYPE_SDK_HOST)
|
||||
|
||||
ipk_repo_workdir = "oe-sdk-repo"
|
||||
if "sdk_ext" in d.getVar("BB_RUNTASK"):
|
||||
ipk_repo_workdir = "oe-sdk-ext-repo"
|
||||
|
||||
self.target_pm = OpkgPM(d, self.sdk_target_sysroot, self.target_conf,
|
||||
self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"))
|
||||
self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"),
|
||||
ipk_repo_workdir=ipk_repo_workdir)
|
||||
|
||||
self.host_pm = OpkgPM(d, self.sdk_host_sysroot, self.host_conf,
|
||||
self.d.getVar("SDK_PACKAGE_ARCHS"))
|
||||
self.d.getVar("SDK_PACKAGE_ARCHS"),
|
||||
ipk_repo_workdir=ipk_repo_workdir)
|
||||
|
||||
def _populate_sysroot(self, pm, manifest):
|
||||
pkgs_to_install = manifest.parse_initial_manifest()
|
||||
@@ -307,15 +313,21 @@ class DpkgSdk(Sdk):
|
||||
self.host_manifest = DpkgManifest(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)
|
||||
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)
|
||||
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")
|
||||
|
||||
@@ -22,13 +22,15 @@ def get_package_manager(d, root_path):
|
||||
pm = OpkgPM(d,
|
||||
root_path,
|
||||
d.getVar("IPKGCONF_TARGET"),
|
||||
d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"))
|
||||
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'))
|
||||
d.getVar('DPKG_ARCH'),
|
||||
filterbydependencies=False)
|
||||
|
||||
pm.write_index()
|
||||
pm.update()
|
||||
|
||||
Reference in New Issue
Block a user