From 6f622fb7c9a532ed0f54e24916de9a579d84fff9 Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Thu, 18 Feb 2016 11:44:05 +1100 Subject: [PATCH] yum-minimal: clear our rpm/dnf/yum data in chroot I have seem some occasional odd failures coming from the "dnf -y update" done by elements/base/install.d/00-up-to-date. dnf seems to sometimes think a package is not installed when it really is. It then seems to try and re-install them, but notices they are installed, and then bails with a failure exit [1]. The packages that seem to cause this vary, but the common thread is that they seem to have all been installed during the initial phase of installing the package manager in the chroot. I suspect that when we are building the chroot, we do our initial install with the "external" yum & rpm. Then we start using the dnf/yum in the chroot, but we're actually using meta-data created by the *external* tools -- which could be vastly different versions or who-knows-what. While I honestly I don't have an exact root cause, empirically I've found rebuilding the rpm db always seems to fix things up. So this change takes care to rebuild the rpm db with the chroot version of rpm, and clear out the package metadata for a refresh with "update". This should hopefully put us in a consistent state. [1] http://paste.openstack.org/show/487356/ Change-Id: I565df23897ae511356c4861fdbe63823fa6b6ff9 --- elements/yum-minimal/root.d/08-yum-chroot | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/elements/yum-minimal/root.d/08-yum-chroot b/elements/yum-minimal/root.d/08-yum-chroot index 8ac2d106..2d085081 100755 --- a/elements/yum-minimal/root.d/08-yum-chroot +++ b/elements/yum-minimal/root.d/08-yum-chroot @@ -177,8 +177,15 @@ else _install_pkg_manager yum fi - # bootstrap the environment within the chroot - sudo -E chroot $TARGET_ROOT ${YUM} makecache + # we just installed yum/dnf with "outside" tools (yum/rpm) which + # might have created /var/lib/[yum|rpm] (etc) that are slighlty + # incompatible. Refresh everything with the in-chroot tools + sudo -E chroot $TARGET_ROOT rpm --rebuilddb + sudo -E chroot $TARGET_ROOT ${YUM} clean all + + # bootstrap the environment within the chroot; bring in new + # metadata with an update and install some base packages we need. + sudo -E chroot $TARGET_ROOT ${YUM} -y update sudo -E chroot $TARGET_ROOT ${YUM} -y \ --setopt=cachedir=/tmp/yum/$ARCH/$DIB_RELEASE \ install passwd findutils sudo util-linux-ng