On Thu, Nov 05, 2015 at 11:39:41AM -0500, Brian Reichert wrote:
> So, given the knowledge of what RPMs are currently installed, is
> there a way to invent a new transaction incorporating them, without
> reinstalling the RPMs in question?
> 
> I feel I've come close, with this methodology, basically coercing
> yum to rebuild a database in a private directory:

So, I'm closer, but I'm getting a new symptom.  My test setup:

First: to replicate the effect of not using yum consistently:

Install server from CentOS-6.7-x86_64-minimal.iso

Install repoquery, etc.:

        yum -y install yum-utils rsync

Install GCC and dependencies, but do so with the rpm utility:

        yum --setopt=keepcache=1 --downloadonly -y install gcc
        find /var/cache/yum/ -name \*.rpm | xargs rpm -U

This has the side effect of updating glibc, but yum doesn't have a
transaction related to that:

        [root@localhost ~]# rpm -q glibc
        glibc-2.12-1.166.el6_7.3.x86_64
        [root@localhost ~]# yum history package glibc
        Loaded plugins: fastestmirror
        ID     | Action(s)      | Package
        ---------------------------------------------------------
                 1 | Install        | glibc-2.12-1.166.el6.x86_64
        Warning: RPMDB altered outside of yum.
        history package

The question is: how can I invent an additonal yum transaction such
that I can roll back to tid 1?

This looks like it works, up to a point, in terms of creating a new
transaction:

        workdir=/home/yum-hack
        rm -rf ${workdir}
        mkdir -p ${workdir}
        cd ${workdir}
        
        # Dup repos and rpm/yum databases
        for tree in /var/lib/rpm/ /var/cache/yum/ /var/lib/yum/ 
/etc/yum.repos.d/;
        do
          mkdir -p ./${tree}
          cp -pr ${tree}/* ./${tree}
        done

        # Reinstall new RPMs, via yum, in private work directory
        # Avoid scriplets; we don't want to depend on other RPMs

        find /var/cache/yum/ -name \*.rpm | xargs rpm -q -p | \
          xargs /usr/bin/yum -y -C --nogpgcheck --installroot=${workdir} \
          --setopt=tsflags=noscripts reinstall

        # sync the private yum/rpm databases back out
        rsync -av --delete ${workdir}/var/lib/yum/ /var/lib/yum/
        rsync -av --delete ${workdir}/var/lib/rpm/ /var/lib/rpm/

Now, I see another transaction ID:

        [root@localhost ~]# yum history list
        Loaded plugins: fastestmirror
        ID     | Login user               | Date and time    | Action(s)      |
        Altered
        -------------------------------------------------------------------
        3 | root <root>              | 2015-11-05 11:37 | Reinstall      |   11
        <
        2 | root <root>              | 2015-11-05 10:36 | Install        |    2
        >
        1 | System <unset>           | 2015-11-05 10:21 | Install        |  205
        history list

Looks like I'm full of win, right?

However, when I then try a rollback to tid 1, it does undo the
yum-utils+ rsync transaction (tid 2), but then decides it's going
to reinstall everything from tid 3, for some reason.

        [root@localhost ~]# yum  history rollback force 1
        ...
        Transaction Summary
        ==========================================================
        Remove        2 Package(s)
        Reinstall    11 Package(s)
        ...

Obviously, I'm way off into uncharted/unsupported territory, but
if anyone has a more clue about what yum is doing here; I'd be
thrilled to hear from you...

-- 
Brian Reichert                          <reich...@numachi.com>
BSD admin/developer at large    
_______________________________________________
CentOS mailing list
CentOS@centos.org
https://lists.centos.org/mailman/listinfo/centos

Reply via email to