From: Andreas Oberritter <obi@opendreambox.org>
To: "Burton, Ross" <ross.burton@intel.com>
Cc: OE-core <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 20/33] package_manager/deb: let apt-get handle postinst scripts
Date: Tue, 6 Dec 2016 19:20:55 +0100 [thread overview]
Message-ID: <e18eec82-26dc-3e09-74ea-82e1dcae8fea@opendreambox.org> (raw)
In-Reply-To: <CAJTo0Lbx_TKJgWRnYGHHAja2uT8CNG+d=wyFJ-aBiZJ3zmWyFg@mail.gmail.com>
On 06.12.2016 18:26, Burton, Ross wrote:
> Can you elaborate on why the old code can be deleted?
With all required environment variables and configuration options in
apt.conf in place, apt-get is able to install packages offline, i.e.
when creating the rootfs, including the execution of postinst scripts
and updating the package database. This is new behaviour.
At the time the deleted code would have executed, its work was already
done by apt-get.
>
> Ross
>
> On 6 December 2016 at 11:49, Andreas Oberritter <obi@opendreambox.org
> <mailto:obi@opendreambox.org>> wrote:
>
> Signed-off-by: Andreas Oberritter <obi@opendreambox.org
> <mailto: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
> <http://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
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> <mailto:Openembedded-core@lists.openembedded.org>
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
> <http://lists.openembedded.org/mailman/listinfo/openembedded-core>
>
>
next prev parent reply other threads:[~2016-12-06 18:20 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 ` [PATCH 20/33] package_manager/deb: let apt-get handle postinst scripts Andreas Oberritter
2016-12-06 17:26 ` Burton, Ross
2016-12-06 18:20 ` Andreas Oberritter [this message]
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=e18eec82-26dc-3e09-74ea-82e1dcae8fea@opendreambox.org \
--to=obi@opendreambox.org \
--cc=openembedded-core@lists.openembedded.org \
--cc=ross.burton@intel.com \
/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