package_deb: Fix rootfs generation in non Debian-based hosts
PATCH 1/1 package_deb: Fix rootfs generation in non Debian-based hosts
Since we have support of log checking in deb/ipk [1] rootfs generation in non Debian-based hosts fails because apt-ftparchive generates a warn when not find /etc/apt/apt.conf.d/ (available in Debian-based hosts).
In order to fix,
package_manager.py: DpkgPMIndexer add support for export APT_CONF to environment.
[1] http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=86aec93902af2e2d7d73ca9a643707fcca45055c
--- meta/lib/oe/package_manager.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
meta/lib/oe/package_manager.py +8 -1
@@ -169,7 +169,14 @@ class OpkgIndexer(Indexer): class DpkgIndexer(Indexer): + def __init__(self, d, deploy_dir, apt_conf_file=None): + self.apt_conf_file = apt_conf_file + Indexer.__init__(self, d, deploy_dir) + def write_index(self): + if not self.apt_conf_file is None: + os.environ['APT_CONFIG'] = self.apt_conf_file + pkg_archs = self.d.getVar('PACKAGE_ARCHS', True) if pkg_archs is not None: arch_list = pkg_archs.split()
@@ -1507,7 +1514,7 @@ class DpkgPM(PackageManager): self._create_configs(archs, base_archs) - self.indexer = DpkgIndexer(self.d, self.deploy_dir) + self.indexer = DpkgIndexer(self.d, self.deploy_dir, self.apt_conf_file) """ This function will change a package's status in /var/lib/dpkg/status file.
Signature · 1 line
1.8.4.5
PATCH 1/1 package_manager/deb: apt-ftparchive needs a valid config
Hello Aníbal,
Quoted 38 lines · Aníbal Limón
Since we have support of log checking in deb/ipk [1] rootfs generation in non Debian-based hosts fails because apt-ftparchive generates a warn when not find
/etc/apt/apt.conf.d/(available in Debian-based hosts).In order to fix,
package_manager.py: DpkgPMIndexer add support for exportAPT_CONFto environment.[1] http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=86aec93902af2e2d7d73ca9a643707fcca45055c
Signed-off-by Aníbal Limón <[email protected]>--- meta/lib/oe/package_manager.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)meta/lib/oe/package_manager.py +7
-0@@ -169,7 +169,14 @@ class OpkgIndexer(Indexer): class DpkgIndexer(Indexer): + def __init__(self, d, deploy_dir, apt_conf_file=None): + self.apt_conf_file = apt_conf_file + Indexer.__init__(self, d, deploy_dir) + def write_index(self): + if not self.apt_conf_file is None: + os.environ['APT_CONFIG'] = self.apt_conf_file + pkg_archs = self.d.getVar('PACKAGE_ARCHS', True) if pkg_archs is not None: arch_list = pkg_archs.split()
meta/lib/oe/package_manager.py class DpkgPM(PackageManager): · line 1520
Quoted 8 lines
meta/lib/oe/package_manager.py +1
-1@@ -1507,7 +1514,7 @@ class DpkgPM(PackageManager): self._create_configs(archs, base_archs) - self.indexer = DpkgIndexer(self.d, self.deploy_dir) + self.indexer = DpkgIndexer(self.d, self.deploy_dir, self.apt_conf_file) """ This function will change a package's status in /var/lib/dpkg/status file.
unfortunately, this approach doesn't work with "bitbake package-index", which calls generate_index_files() in package_manager.py. That's why I implemented a quite ugly solution covering all cases:
From 668fe52b58aba6ab47e4712ee460ed7dd06c948f Mon Sep 17 00:00:00 2001
From: Andreas Oberritter <[email protected]>
Date: Wed, 8 Oct 2014 15:52:22 +0200
Subject: [PATCH] package_manager/deb: apt-ftparchive needs a valid config
Without a valid config, apt-ftparchive aborts. Since apt-ftparchive defaults to /etc/apt if APT_CONFIG is unset, this is only an issue non non-Debian build hosts.
--- meta/lib/oe/package_manager.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
meta/lib/oe/package_manager.py +22 -0
@@ -182,6 +182,28 @@ class DpkgIndexer(Indexer): all_mlb_pkg_arch_list = (self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS', True) or "").replace('-', '_').split() arch_list.extend(arch for arch in all_mlb_pkg_arch_list if arch not in arch_list) + apt_conf_dir = self.d.expand("${APTCONF_TARGET}/apt-ftparchive") + apt_conf_file = os.path.join(apt_conf_dir, "apt.conf") + + bb.utils.mkdirhier(apt_conf_dir) + bb.utils.mkdirhier(apt_conf_dir + "/lists/partial/") + bb.utils.mkdirhier(apt_conf_dir + "/apt.conf.d/") + bb.utils.mkdirhier(apt_conf_dir + "/preferences.d/") + + with open(os.path.join(apt_conf_dir, "preferences"), "w") as prefs_file: + pass + with open(os.path.join(apt_conf_dir, "sources.list"), "w+") as sources_file: + pass + + with open(apt_conf_file, "w") as apt_conf: + with open(self.d.expand("${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample")) as apt_conf_sample: + for line in apt_conf_sample.read().split("\n"): + line = re.sub("#ROOTFS#", "/dev/null", line) + line = re.sub("#APTCONF#", apt_conf_dir, line) + apt_conf.write(line + "\n") + + os.environ['APT_CONFIG'] = apt_conf_file + apt_ftparchive = bb.utils.which(os.getenv('PATH'), "apt-ftparchive") gzip = bb.utils.which(os.getenv('PATH'), "gzip")
Signature · 1 line
1.9.1
Re: [PATCH] package_manager/deb: apt-ftparchive needs a valid config
Hi Andreas,
Your solution is better but i think we need to generalize the code in DpkgPM::_create_configs to avoid code duplicate.
Comments?
Cheers,
alimon
Quoted 101 lines · Andreas Oberritter
Hello Aníbal,
Quoted 38 lines · Aníbal Limón
Since we have support of log checking in deb/ipk [1] rootfs generation in non Debian-based hosts fails because apt-ftparchive generates a warn when not find
/etc/apt/apt.conf.d/(available in Debian-based hosts).In order to fix,
package_manager.py: DpkgPMIndexer add support for exportAPT_CONFto environment.[1] http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=86aec93902af2e2d7d73ca9a643707fcca45055c
Signed-off-by Aníbal Limón <[email protected]>--- meta/lib/oe/package_manager.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)meta/lib/oe/package_manager.py +7
-0@@ -169,7 +169,14 @@ class OpkgIndexer(Indexer): class DpkgIndexer(Indexer): + def __init__(self, d, deploy_dir, apt_conf_file=None): + self.apt_conf_file = apt_conf_file + Indexer.__init__(self, d, deploy_dir) + def write_index(self): + if not self.apt_conf_file is None: + os.environ['APT_CONFIG'] = self.apt_conf_file + pkg_archs = self.d.getVar('PACKAGE_ARCHS', True) if pkg_archs is not None: arch_list = pkg_archs.split()meta/lib/oe/package_manager.py class DpkgPM(PackageManager): · line 1520
Quoted 8 lines
meta/lib/oe/package_manager.py +1
-1@@ -1507,7 +1514,7 @@ class DpkgPM(PackageManager): self._create_configs(archs, base_archs) - self.indexer = DpkgIndexer(self.d, self.deploy_dir) + self.indexer = DpkgIndexer(self.d, self.deploy_dir, self.apt_conf_file) """ This function will change a package's status in /var/lib/dpkg/status file.unfortunately, this approach doesn't work with "bitbake package-index", which calls
generate_index_files()inpackage_manager.py. That's why I implemented a quite ugly solution covering all cases:From
668fe52b58aba6ab47e4712ee460ed7dd06c948fMon Sep 17 00:00:00 2001
From: Andreas Oberritter <[email protected]>
Date: Wed, 8 Oct 2014 15:52:22 +0200
Subject: [PATCH] package_manager/deb: apt-ftparchive needs a valid configWithout a valid config, apt-ftparchive aborts. Since apt-ftparchive defaults to
/etc/aptifAPT_CONFIGis unset, this is only an issue non non-Debian build hosts.Signed-off-by Andreas Oberritter <[email protected]>--- meta/lib/oe/package_manager.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)meta/lib/oe/package_manager.py +22
-0@@ -182,6 +182,28 @@ class DpkgIndexer(Indexer): all_mlb_pkg_arch_list = (self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS', True) or "").replace('-', '_').split() arch_list.extend(arch for arch in all_mlb_pkg_arch_list if arch not in arch_list) + apt_conf_dir = self.d.expand("${APTCONF_TARGET}/apt-ftparchive") + apt_conf_file = os.path.join(apt_conf_dir, "apt.conf") + + bb.utils.mkdirhier(apt_conf_dir) + bb.utils.mkdirhier(apt_conf_dir + "/lists/partial/") + bb.utils.mkdirhier(apt_conf_dir + "/apt.conf.d/") + bb.utils.mkdirhier(apt_conf_dir + "/preferences.d/") + + with open(os.path.join(apt_conf_dir, "preferences"), "w") as prefs_file: + pass + with open(os.path.join(apt_conf_dir, "sources.list"), "w+") as sources_file: + pass + + with open(apt_conf_file, "w") as apt_conf: + with open(self.d.expand("${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample")) as apt_conf_sample: + for line in apt_conf_sample.read().split("\n"): + line = re.sub("#ROOTFS#", "/dev/null", line) + line = re.sub("#APTCONF#", apt_conf_dir, line) + apt_conf.write(line + "\n") + + os.environ['APT_CONFIG'] = apt_conf_file + apt_ftparchive = bb.utils.which(os.getenv('PATH'), "apt-ftparchive") gzip = bb.utils.which(os.getenv('PATH'), "gzip")
Re: [PATCH] package_manager/deb: apt-ftparchive needs a valid config
Hi again,
Quoted 3 lines · Aníbal Limón
Hi Andreas,
Your solution is better but i think we need to generalize the code in
DpkgPM::_create_configsto avoid code duplicate.
I reviewed the code and the issue is why PM's and Indexer's are different classes i think they need to share common information. For now your patch is the best solution, now i'm doing a little improvements and i'll send v2 with your signature.
Cheers,
alimon
Quoted 111 lines
Comments?
Cheers,
alimonQuoted 103 lines · Andreas Oberritter
Hello Aníbal,
Quoted 41 lines · Aníbal Limón
Since we have support of log checking in deb/ipk [1] rootfs generation in non Debian-based hosts fails because apt-ftparchive generates a warn when not find
/etc/apt/apt.conf.d/(available in Debian-based hosts).In order to fix,
package_manager.py: DpkgPMIndexer add support for exportAPT_CONFto environment.[1] http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=86aec93902af2e2d7d73ca9a643707fcca45055c
Signed-off-by Aníbal Limón <[email protected]>--- meta/lib/oe/package_manager.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)meta/lib/oe/package_manager.py +8
-0@@ -169,7 +169,14 @@ class OpkgIndexer(Indexer): class DpkgIndexer(Indexer): + def __init__(self, d, deploy_dir, apt_conf_file=None): + self.apt_conf_file = apt_conf_file + Indexer.__init__(self, d, deploy_dir) + def write_index(self): + if not self.apt_conf_file is None: + os.environ['APT_CONFIG'] = self.apt_conf_file + pkg_archs = self.d.getVar('PACKAGE_ARCHS', True) if pkg_archs is not None: arch_list = pkg_archs.split()@@ -1507,7 +1514,7 @@ class DpkgPM(PackageManager): self._create_configs(archs, base_archs) - self.indexer = DpkgIndexer(self.d, self.deploy_dir) + self.indexer = DpkgIndexer(self.d, self.deploy_dir, self.apt_conf_file) """ This function will change a package's status inQuoted 2 lines
/var/lib/dpkg/statusfile.unfortunately, this approach doesn't work with "bitbake package-index", which calls
generate_index_files()inpackage_manager.py. That's why I implemented a quite ugly solution covering all cases:From
668fe52b58aba6ab47e4712ee460ed7dd06c948fMon Sep 17 00:00:00 2001
From: Andreas Oberritter <[email protected]>
Date: Wed, 8 Oct 2014 15:52:22 +0200
Subject: [PATCH] package_manager/deb: apt-ftparchive needs a valid configWithout a valid config, apt-ftparchive aborts. Since apt-ftparchive defaults to
/etc/aptifAPT_CONFIGis unset, this is only an issue non non-Debian build hosts.Signed-off-by Andreas Oberritter <[email protected]>--- meta/lib/oe/package_manager.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)meta/lib/oe/package_manager.py +8
-0@@ -182,6 +182,28 @@ class DpkgIndexer(Indexer): all_mlb_pkg_arch_list = (self.d.getVar('ALL_MULTILIB_PACKAGE_ARCHS', True) or "").replace('-', '_').split() arch_list.extend(arch for arch in all_mlb_pkg_arch_list if arch not in arch_list) + apt_conf_dir = self.d.expand("${APTCONF_TARGET}/apt-ftparchive") + apt_conf_file = os.path.join(apt_conf_dir, "apt.conf") + + bb.utils.mkdirhier(apt_conf_dir) + bb.utils.mkdirhier(apt_conf_dir + "/lists/partial/") + bb.utils.mkdirhier(apt_conf_dir + "/apt.conf.d/") + bb.utils.mkdirhier(apt_conf_dir + "/preferences.d/") + + with open(os.path.join(apt_conf_dir, "preferences"), "w") as
prefs_file:meta/lib/oe/package_manager.py +2
-0+ pass + with open(os.path.join(apt_conf_dir, "sources.list"), "w+")as
sources_file:meta/lib/oe/package_manager.py +4
-0+ pass + + with open(apt_conf_file, "w") as apt_conf: + withopen(self.d.expand("${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample")) as
apt_conf_sample:meta/lib/oe/package_manager.py +7
-0+ for line in apt_conf_sample.read().split("\n"): + line = re.sub("#ROOTFS#", "/dev/null", line) + line = re.sub("#APTCONF#", apt_conf_dir, line) + apt_conf.write(line + "\n") + + os.environ['APT_CONFIG'] = apt_conf_file + apt_ftparchive = bb.utils.which(os.getenv('PATH'),"apt-ftparchive")
gzip = bb.utils.which(os.getenv('PATH'), "gzip")
Re: [PATCH] package_manager/deb: apt-ftparchive needs a valid config
Quoted 4 lines · Aníbal Limón
I reviewed the code and the issue is why PM's and Indexer's are different classes i think they need to share common information. For now your patch is the best solution, now i'm doing a little improvements and i'll send v2 with your signature.
Thank you, Aníbal!
Btw., I think your development machine has a wrong timezone setting. Your patches appear to have a time offset of about seven hours.
Regards,
Andreas