From: Andreas Oberritter <obi@opendreambox.org>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH 20/33] package_manager/deb: let apt-get handle postinst scripts
Date: Tue, 6 Dec 2016 12:49:38 +0100 [thread overview]
Message-ID: <1481024991-5882-21-git-send-email-obi@opendreambox.org> (raw)
In-Reply-To: <1481024991-5882-1-git-send-email-obi@opendreambox.org>
Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
---
meta/lib/oe/package_manager.py | 86 ++++--------------------------------------
meta/lib/oe/rootfs.py | 6 +--
2 files changed, 9 insertions(+), 83 deletions(-)
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 4ef4f6d..12dff20 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -1959,84 +1959,6 @@ class DpkgPM(OpkgDpkgPM):
self.indexer = DpkgIndexer(self.d, self.deploy_dir)
- """
- This function will change a package's status in /var/lib/dpkg/status file.
- If 'packages' is None then the new_status will be applied to all
- packages
- """
- def mark_packages(self, status_tag, packages=None):
- status_file = self.target_rootfs + "/var/lib/dpkg/status"
-
- with open(status_file, "r") as sf:
- with open(status_file + ".tmp", "w+") as tmp_sf:
- if packages is None:
- tmp_sf.write(re.sub(r"Package: (.*?)\n((?:[^\n]+\n)*?)Status: (.*)(?:unpacked|installed)",
- r"Package: \1\n\2Status: \3%s" % status_tag,
- sf.read()))
- else:
- if type(packages).__name__ != "list":
- raise TypeError("'packages' should be a list object")
-
- status = sf.read()
- for pkg in packages:
- status = re.sub(r"Package: %s\n((?:[^\n]+\n)*?)Status: (.*)(?:unpacked|installed)" % pkg,
- r"Package: %s\n\1Status: \2%s" % (pkg, status_tag),
- status)
-
- tmp_sf.write(status)
-
- os.rename(status_file + ".tmp", status_file)
-
- """
- Run the pre/post installs for package "package_name". If package_name is
- None, then run all pre/post install scriptlets.
- """
- def run_pre_post_installs(self, package_name=None):
- info_dir = self.target_rootfs + "/var/lib/dpkg/info"
- ControlScript = collections.namedtuple("ControlScript", ["suffix", "name", "argument"])
- control_scripts = [
- ControlScript(".preinst", "Preinstall", "install"),
- ControlScript(".postinst", "Postinstall", "configure")]
- status_file = self.target_rootfs + "/var/lib/dpkg/status"
- installed_pkgs = []
-
- with open(status_file, "r") as status:
- for line in status.read().split('\n'):
- m = re.match("^Package: (.*)", line)
- if m is not None:
- installed_pkgs.append(m.group(1))
-
- if package_name is not None and not package_name in installed_pkgs:
- return
-
- os.environ['D'] = self.target_rootfs
- os.environ['OFFLINE_ROOT'] = self.target_rootfs
- os.environ['IPKG_OFFLINE_ROOT'] = self.target_rootfs
- os.environ['OPKG_OFFLINE_ROOT'] = self.target_rootfs
- os.environ['INTERCEPT_DIR'] = os.path.join(self.d.getVar('WORKDIR', True),
- "intercept_scripts")
- os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE', True)
-
- failed_pkgs = []
- for pkg_name in installed_pkgs:
- for control_script in control_scripts:
- p_full = os.path.join(info_dir, pkg_name + control_script.suffix)
- if os.path.exists(p_full):
- try:
- bb.note("Executing %s for package: %s ..." %
- (control_script.name.lower(), pkg_name))
- subprocess.check_output([p_full, control_script.argument],
- stderr=subprocess.STDOUT)
- except subprocess.CalledProcessError as e:
- bb.note("%s for package %s failed with %d:\n%s" %
- (control_script.name, pkg_name, e.returncode,
- e.output.decode("utf-8")))
- failed_pkgs.append(pkg_name)
- break
-
- if len(failed_pkgs):
- self.mark_packages("unpacked", failed_pkgs)
-
def update(self):
os.environ['APT_CONFIG'] = self.apt_conf_file
@@ -2058,6 +1980,14 @@ class DpkgPM(OpkgDpkgPM):
os.environ['APT_CONFIG'] = self.apt_conf_file
+ os.environ['D'] = self.target_rootfs
+ os.environ['OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['IPKG_OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['OPKG_OFFLINE_ROOT'] = self.target_rootfs
+ os.environ['INTERCEPT_DIR'] = os.path.join(self.d.getVar('WORKDIR', True),
+ "intercept_scripts")
+ os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE', True)
+
cmd = "%s %s install --force-yes --allow-unauthenticated %s" % \
(self.apt_get_cmd, self.apt_args, ' '.join(pkgs))
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index a348b97..4c82456 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -685,10 +685,6 @@ class DpkgRootfs(DpkgOpkgRootfs):
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:
@@ -708,7 +704,7 @@ class DpkgRootfs(DpkgOpkgRootfs):
return self._save_postinsts_common(dst_postinst_dir, src_postinst_dir)
def _handle_intercept_failure(self, registered_pkgs):
- self.pm.mark_packages("unpacked", registered_pkgs.split())
+ pass
def _log_check(self):
self._log_check_warn()
--
2.7.4
next prev parent reply other threads:[~2016-12-06 11:50 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-06 11:49 [PATCH 00/33] Accumulated patches for deb packaging Andreas Oberritter
2016-12-06 11:49 ` [PATCH 01/33] dpkg: implement offline mode for update-alternatives Andreas Oberritter
2016-12-06 18:31 ` Burton, Ross
2016-12-06 11:49 ` [PATCH 02/33] dpkg: update-alternatives-dpkg should conflict with other providers Andreas Oberritter
2016-12-06 19:52 ` Burton, Ross
2016-12-07 1:30 ` Andreas Oberritter
2016-12-08 16:16 ` Burton, Ross
2016-12-08 19:22 ` Andreas Oberritter
2016-12-22 13:37 ` Andreas Oberritter
2016-12-06 11:49 ` [PATCH 03/33] dpkg-native: hardcode SYSCONFDIR to /etc in update-alternatives Andreas Oberritter
2016-12-06 15:39 ` Burton, Ross
2016-12-06 16:08 ` Andreas Oberritter
2016-12-06 16:12 ` Burton, Ross
2016-12-06 16:37 ` Andreas Oberritter
2016-12-06 17:07 ` Burton, Ross
2016-12-06 11:49 ` [PATCH 04/33] apt-native: Use option --force-script-chrootless for rootfs Andreas Oberritter
2016-12-06 11:49 ` [PATCH 05/33] package_manager/deb: pass option --force-script-chrootless to dpkg Andreas Oberritter
2016-12-06 11:49 ` [PATCH 06/33] debianutils: Allow native builds Andreas Oberritter
2016-12-06 11:49 ` [PATCH 07/33] apt-native: merge apt-native.inc into .bb Andreas Oberritter
2016-12-06 11:49 ` [PATCH 08/33] apt: merge apt-package.inc " Andreas Oberritter
2016-12-06 11:49 ` [PATCH 09/33] apt-native: use sed to prepare apt.conf.sample Andreas Oberritter
2016-12-06 11:49 ` [PATCH 10/33] apt: use default packaging rules for manpages Andreas Oberritter
2016-12-06 11:49 ` [PATCH 11/33] apt: use default packaging rules for base package, prepend apt-utils Andreas Oberritter
2016-12-06 11:49 ` [PATCH 12/33] apt: use default packaging rules for -dev package Andreas Oberritter
2016-12-06 11:49 ` [PATCH 13/33] apt: rewrite do_install Andreas Oberritter
2016-12-06 11:49 ` [PATCH 14/33] apt-native: drop obsolete patches Andreas Oberritter
2016-12-06 11:49 ` [PATCH 15/33] apt: merge with apt-native Andreas Oberritter
2016-12-06 11:49 ` [PATCH 16/33] apt: merge apt.inc into .bb Andreas Oberritter
2016-12-06 11:49 ` [PATCH 17/33] apt: group variables (license, configuration, packaging) Andreas Oberritter
2016-12-06 11:49 ` [PATCH 18/33] apt: more fine-grained packaging Andreas Oberritter
2016-12-06 11:49 ` [PATCH 19/33] apt: recommend gnupg Andreas Oberritter
2016-12-06 11:49 ` Andreas Oberritter [this message]
2016-12-06 17:26 ` [PATCH 20/33] package_manager/deb: let apt-get handle postinst scripts Burton, Ross
2016-12-06 18:20 ` Andreas Oberritter
2016-12-06 18:24 ` Burton, Ross
2016-12-06 11:49 ` [PATCH 21/33] package_manager/deb: create Packages.xz Andreas Oberritter
2016-12-06 17:22 ` Burton, Ross
2016-12-06 18:41 ` Andreas Oberritter
2016-12-06 18:46 ` Burton, Ross
2016-12-07 1:24 ` Andreas Oberritter
2016-12-06 11:49 ` [PATCH 22/33] package_manager/deb: implement BAD_RECOMMENDATIONS Andreas Oberritter
2016-12-06 11:49 ` [PATCH 23/33] dpkg: use PACKAGECONFIG Andreas Oberritter
2016-12-06 11:49 ` [PATCH 24/33] dpkg: set license field to more common "GPLv2+" Andreas Oberritter
2016-12-06 11:49 ` [PATCH 25/33] dpkg: clean-up packaging of start-stop-daemon Andreas Oberritter
2016-12-06 11:49 ` [PATCH 26/33] dpkg: remove unneeded do_configure override Andreas Oberritter
2016-12-06 11:49 ` [PATCH 27/33] dpkg: simplify replacing perl interpreter in scripts Andreas Oberritter
2016-12-06 11:49 ` [PATCH 28/33] dpkg: update packages and files to match Debian more closely Andreas Oberritter
2016-12-06 20:13 ` Burton, Ross
2016-12-07 1:41 ` Andreas Oberritter
2016-12-06 11:49 ` [PATCH 29/33] dpkg: always install dpkg-configure.service Andreas Oberritter
2016-12-06 11:49 ` [PATCH 30/33] dpkg: use correct path for perl libraries Andreas Oberritter
2016-12-06 11:49 ` [PATCH 31/33] package_deb.bbclass: compress control.tar with the same algorithm as data.tar Andreas Oberritter
2016-12-06 11:49 ` [PATCH 32/33] apt: fix rpath error during configure Andreas Oberritter
2016-12-06 11:49 ` [PATCH 33/33] apt: dselect depends on perl Andreas Oberritter
2016-12-06 14:36 ` [PATCH 00/33] Accumulated patches for deb packaging Burton, Ross
2016-12-06 16:00 ` Andreas Oberritter
2016-12-07 12:25 ` Alexander Kanavin
2016-12-07 15:30 ` Andreas Oberritter
2016-12-07 16:02 ` Alexander Kanavin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1481024991-5882-21-git-send-email-obi@opendreambox.org \
--to=obi@opendreambox.org \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox