All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Burton, Ross" <ross.burton@intel.com>
To: David Vincent <freesilicon@gmail.com>
Cc: "Plascencia, Daniela" <daniela.plascencia@intel.com>,
	OE-core <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH v5] rootfs: Modify RPM installation
Date: Tue, 20 Dec 2016 17:44:54 +0000	[thread overview]
Message-ID: <CAJTo0LY4H-09bkCySm_MajvxSqDEHpTUNTiQy4uOHxJjNQWNNA@mail.gmail.com> (raw)
In-Reply-To: <20161220095122.11831-1-freesilicon@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 7184 bytes --]

This breaks list_pkgs() for the RPM backend. Instead of returning a list of
packages, rpm just says "%dbpath is not defined" (or words to that effect,
as the log disappeared in 100 pages of errors).

Ross

On 20 December 2016 at 09:51, David Vincent <freesilicon@gmail.com> wrote:

> When using a custom RPM data directory instead of the default dir
> '/var/lib/rpm', the final image did not contain any of the database
> files in the expected location. This commit takes into account the
> 'rpmlibdir' variable set into 'rootfs_rpm.bbclass'.
>
> Changes since v4:
>     - Remove boolean in d.getVar() calls.
>
> Signed-off-by: David Vincent <freesilicon@gmail.com>
> ---
>  meta/lib/oe/package_manager.py | 23 +++++++++++++----------
>  meta/lib/oe/rootfs.py          |  3 ++-
>  2 files changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.
> py
> index e557473999..4299220eec 100644
> --- a/meta/lib/oe/package_manager.py
> +++ b/meta/lib/oe/package_manager.py
> @@ -356,7 +356,8 @@ class RpmPkgsList(PkgsList):
>          super(RpmPkgsList, self).__init__(d, rootfs_dir)
>
>          self.rpm_cmd = bb.utils.which(os.getenv('PATH'), "rpm")
> -        self.image_rpmlib = os.path.join(self.rootfs_dir, 'var/lib/rpm')
> +        self.rpm_libdir = self.d.getVar('rpmlibdir')
> +        self.image_rpmlib = os.path.join(self.rootfs_dir,
> self.rpm_libdir[1:])
>
>          self.ml_prefix_list, self.ml_os_list = \
>              RpmIndexer(d, rootfs_dir).get_ml_prefix_and_os_list(arch_var,
> os_var)
> @@ -416,7 +417,7 @@ class RpmPkgsList(PkgsList):
>
>      def list_pkgs(self):
>          cmd = [self.rpm_cmd, '--root', self.rootfs_dir]
> -        cmd.extend(['-D', '_dbpath /var/lib/rpm'])
> +        cmd.extend(['-D', '_dbpath', self.rpm_libdir])
>          cmd.extend(['-qa', '--qf', '[%{NAME} %{ARCH} %{VERSION}
> %{PACKAGEORIGIN}\n]'])
>
>          try:
> @@ -683,7 +684,8 @@ class RpmPM(PackageManager):
>          self.solution_manifest = self.d.expand('${T}/saved/%s_solution' %
>                                                 self.task_name)
>          self.saved_rpmlib = self.d.expand('${T}/saved/%s' %
> self.task_name)
> -        self.image_rpmlib = os.path.join(self.target_rootfs,
> 'var/lib/rpm')
> +        self.rpm_libdir = self.d.getVar('rpmlibdir')
> +        self.image_rpmlib = os.path.join(self.target_rootfs,
> self.rpm_libdir[1:])
>
>          if not os.path.exists(self.d.expand('${T}/saved')):
>              bb.utils.mkdirhier(self.d.expand('${T}/saved'))
> @@ -954,7 +956,7 @@ class RpmPM(PackageManager):
>              open(db_config_dir, 'w+').write(DB_CONFIG_CONTENT)
>
>          # Create database so that smart doesn't complain (lazy init)
> -        cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath',
> '/var/lib/rpm', '-qa']
> +        cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath',
> self.rpm_libdir, '-qa']
>          try:
>              subprocess.check_output(cmd, stderr=subprocess.STDOUT)
>          except subprocess.CalledProcessError as e:
> @@ -963,20 +965,19 @@ class RpmPM(PackageManager):
>          # Import GPG key to RPM database of the target system
>          if self.d.getVar('RPM_SIGN_PACKAGES') == '1':
>              pubkey_path = self.d.getVar('RPM_GPG_PUBKEY')
> -            cmd = [self.rpm_cmd, '--root', self.target_rootfs,
> '--dbpath', '/var/lib/rpm', '--import', pubkey_path]
> +            cmd = [self.rpm_cmd, '--root', self.target_rootfs,
> '--dbpath', self.rpm_libdir, '--import', pubkey_path]
>              try:
>                  subprocess.check_output(cmd, stderr=subprocess.STDOUT)
>              except subprocess.CalledProcessError as e:
>                  bb.fatal("Import GPG key failed. Command '%s' "
>                          "returned %d:\n%s" % (' '.join(cmd),
> e.returncode, e.output.decode("utf-8")))
>
> -
>          # Configure smart
>          bb.note("configuring Smart settings")
>          bb.utils.remove(os.path.join(self.target_rootfs,
> 'var/lib/smart'),
>                          True)
>          self._invoke_smart(['config', '--set', 'rpm-root=%s' %
> self.target_rootfs])
> -        self._invoke_smart(['config', '--set', 'rpm-dbpath=/var/lib/rpm'])
> +        self._invoke_smart(['config', '--set', 'rpm-dbpath=%s' %
> self.rpm_libdir])
>          self._invoke_smart(['config', '--set', 'rpm-extra-macros._var=%s'
> %
>                             self.d.getVar('localstatedir')])
>          cmd = ["config", "--set", "rpm-extra-macros._tmppath=/%s/tmp" %
> self.install_dir_name]
> @@ -1236,7 +1237,7 @@ class RpmPM(PackageManager):
>
>          if not with_dependencies:
>              cmd = [self.rpm_cmd] + ["-e", "--nodeps", "--root=%s" %
> -                    self.target_rootfs, "--dbpath=/var/lib/rpm",
> +                    self.target_rootfs, "--dbpath=%s" % self.rpm_libdir,
>                      "--define='_cross_scriptlet_wrapper %s'" %
>                      self.scriptlet_wrapper,
>                      "--define='_tmppath /%s/tmp'" %
> self.install_dir_name] + pkgs
> @@ -1384,7 +1385,8 @@ class RpmPM(PackageManager):
>          saved_dir = self.target_rootfs + self.d.expand('${sysconfdir}/rpm-postinsts/')
> + new_pkg
>
>          cmd = self.rpm_cmd + ' -q --scripts --root ' + self.target_rootfs
> -        cmd += ' --dbpath=/var/lib/rpm ' + new_pkg
> +        cmd += ' --dbpath=%s ' %  self.rpm_libdir
> +        cmd += new_pkg
>          cmd += ' | sed -n -e "/^postinstall scriptlet (using .*):$/,/^.*
> scriptlet (using .*):$/ {/.*/p}"'
>          cmd += ' | sed -e "/postinstall scriptlet (using \(.*\)):$/d"'
>          cmd += ' -e "/^.* scriptlet (using .*):$/d" > %s' % saved_dir
> @@ -1416,7 +1418,8 @@ class RpmPM(PackageManager):
>      '''
>      def unlock_rpm_db(self):
>          # Remove rpm db lock files
> -        rpm_db_locks = glob.glob('%s/var/lib/rpm/__db.*' %
> self.target_rootfs)
> +        rpm_db_locks = glob.glob('%s%s/__db.*' % (self.target_rootfs,
> +            self.rpm_libdir))
>          for f in rpm_db_locks:
>              bb.utils.remove(f, True)
>
> diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
> index d9a473006a..8730025816 100644
> --- a/meta/lib/oe/rootfs.py
> +++ b/meta/lib/oe/rootfs.py
> @@ -429,6 +429,7 @@ class RpmRootfs(Rootfs):
>
>      def _create(self):
>          pkgs_to_install = self.manifest.parse_initial_manifest()
> +        rpm_libdir = self.d.getVar('rpmlibdir')
>          rpm_pre_process_cmds = self.d.getVar('RPM_PREPROCESS_COMMANDS')
>          rpm_post_process_cmds = self.d.getVar('RPM_POSTPROCESS_COMMANDS')
>
> @@ -476,7 +477,7 @@ class RpmRootfs(Rootfs):
>          if self.progress_reporter:
>              self.progress_reporter.next_stage()
>
> -        self._setup_dbg_rootfs(['/etc/rpm', '/var/lib/rpm',
> '/var/lib/smart'])
> +        self._setup_dbg_rootfs(['/etc/rpm', rpm_libdir,
> '/var/lib/smart'])
>
>          execute_pre_post_process(self.d, rpm_post_process_cmds)
>
> --
> 2.11.0
>
>

[-- Attachment #2: Type: text/html, Size: 9548 bytes --]

  reply	other threads:[~2016-12-20 17:45 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-08  7:57 [PATCH][jethro] rootfs: Modify RPM installation David Vincent
2016-07-21 19:50 ` Burton, Ross
2016-09-30 20:03 ` Leonardo Sandoval
2016-11-24 10:49 ` [PATCH v3] " David Vincent
2016-11-25 18:17   ` Burton, Ross
2016-11-25 19:09     ` Mark Hatle
2016-11-28 10:59       ` David Vincent
2016-12-12 15:59   ` [PATCH v4] " David Vincent
2016-12-20  9:51     ` [PATCH v5] " David Vincent
2016-12-20 17:44       ` Burton, Ross [this message]
2016-12-22  8:22         ` David Vincent
2016-12-22 10:23       ` [PATCH v6] " David Vincent
2016-12-22 14:09         ` Burton, Ross
2016-12-22 14:45           ` David Vincent
2017-01-06 11:37             ` David Vincent
2017-01-06 14:46             ` Burton, Ross
2017-01-12  9:08         ` [PATCH v7] " David Vincent
2017-01-16 17:39           ` Burton, Ross
2017-01-17  9:00             ` David Vincent

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=CAJTo0LY4H-09bkCySm_MajvxSqDEHpTUNTiQy4uOHxJjNQWNNA@mail.gmail.com \
    --to=ross.burton@intel.com \
    --cc=daniela.plascencia@intel.com \
    --cc=freesilicon@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.