RPM Community Forums

Mailing List Message of <rpm-devel>

Re: Strange config file handling on some package upgrades with RPM 5

From: Jeff Johnson <n3npq@mac.com>
Date: Sun 13 Apr 2008 - 15:33:40 CEST
Message-Id: <602E4942-5D0B-4336-9B03-02B8373D1225@mac.com>

On Apr 13, 2008, at 8:16 AM, Ralf S. Engelschall wrote:

> I cannot really provide a generic reproducer, but I'm these days
> upgrading lots of servers and I now the third time observed something
> strange:
>

Without a reproducer, generic or otherwise, don't expect a fix or a  
change.
I'm an engineer, not a "strange" exorcist.

Meanwhile, the strongest clue is the ".rpmorig" suffix that  
predominates.

A .rpmorig suffix is added in lib/fsm.c under these conditions:

         case FA_BACKUP:
             if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if % 
ghost file. */
                 fsm->osuffix = (teAdding ? SUFFIX_RPMORIG :  
SUFFIX_RPMSAVE);
             break;

The FA_BACKUP state is reached in lib/transaction.c in 2 places. The  
first
place for FA_BACKUP is more typical in my experience, unpackaged files
that differ, and is also the case for a file in a TR_ADDED package:

                 if ((FFlags & RPMFILE_CONFIG) && (FFlags &  
RPMFILE_EXISTS)) {
                     /* Here is a non-overlapped pre-existing config  
file. */
                     fi->actions[i] = (FFlags & RPMFILE_NOREPLACE)
                         ? FA_ALTNAME : FA_BACKUP;

There's a similar analysis for .rpmnew, only slightly harder.

> |    warning: /usr/opkg/.bash_login created as /usr/ 
> opkg/.bash_login.rpmnew
> |    warning: /usr/opkg/.bashrc created as /usr/opkg/.bashrc.rpmnew
> |    warning: /usr/opkg/etc/openpkg/managers saved as /usr/opkg/etc/ 
> openpkg/managers.rpmorig
> |    warning: /usr/opkg/etc/openpkg/platform saved as /usr/opkg/etc/ 
> openpkg/platform.rpmorig
> |    warning: /usr/opkg/etc/openpkg/release saved as /usr/opkg/etc/ 
> openpkg/release.rpmorig
> |    warning: /usr/opkg/etc/openpkg/rpmlua saved as /usr/opkg/etc/ 
> openpkg/rpmlua.rpmorig
> |    warning: /usr/opkg/etc/openpkg/rpmmacros saved as /usr/opkg/ 
> etc/openpkg/rpmmacros.rpmorig
> |    warning: /usr/opkg/etc/openpkg/rpmpopt saved as /usr/opkg/etc/ 
> openpkg/rpmpopt.rpmorig
> |    warning: /usr/opkg/etc/rc.conf created as /usr/opkg/etc/ 
> rc.conf.rpmnew
>
> This is during e.g. upgrading the RPM 5 package  
> "openpkg-4.0a0-20080412"
> to "openpkg-4.0a0-20080413" (the difference is just a small typo fix,
> everything else is the same in the package!). And now let's look at  
> the
> %config files which produced the warnings:
>
> | # cd /usr/opkg/etc/openpkg/
> | # ls -l
> | total 401
> | -rw-r--r--  1 root  opkg      6 Apr 12 17:01 license
> | drwxr-xr-x  2 opkg  opkg      6 Apr 13 13:30 license.d
> | -rw-rw-r--  1 opkg  opkg     60 Apr 13 13:30 managers
> | -rw-rw-r--  1 opkg  opkg     60 Apr 12 17:46 managers.rpmorig
> | -rw-r--r--  1 opkg  opkg   1837 Apr 13 13:30 openpkg.com.pgp
> | -rw-r--r--  1 opkg  opkg   1860 Apr 13 13:30 openpkg.net.pgp
> | -rw-r--r--  1 opkg  opkg   1807 Apr 13 13:30 openpkg.org.pgp
> | -rw-r--r--  1 opkg  opkg     20 Apr 13 13:30 platform
> | -rw-r--r--  1 opkg  opkg     20 Apr 12 17:46 platform.rpmorig
> | -rw-r--r--  1 opkg  opkg    488 Apr 13 13:31 register.conf
> | -rw-r--r--  1 opkg  opkg  22005 Apr 13 13:31 register.prep
> | -rw-r--r--  1 opkg  opkg    322 Apr 13 13:31 register.tran
> | -rw-r--r--  1 opkg  opkg    128 Apr 13 13:31 register.util
> | -rw-r--r--  1 opkg  opkg     61 Apr 13 13:30 release
> | -rw-r--r--  1 opkg  opkg     61 Apr 12 17:46 release.rpmorig
> | -rw-r--r--  1 opkg  opkg   6428 Apr 13 13:30 rpmlua
> | drwxr-xr-x  2 opkg  opkg      2 Apr 13 13:30 rpmlua.d
> | -rw-r--r--  1 opkg  opkg   6428 Apr 12 17:46 rpmlua.rpmorig
> | -rw-r--r--  1 opkg  opkg  46317 Apr 13 13:30 rpmmacros
> | drwxr-xr-x  2 opkg  opkg      2 Apr 13 13:30 rpmmacros.d
> | -rw-r--r--  1 opkg  opkg  46317 Apr 12 17:46 rpmmacros.rpmorig
> | -rw-r--r--  1 opkg  opkg   7537 Apr 13 13:30 rpmpopt
> | drwxr-xr-x  2 opkg  opkg      2 Apr 13 13:30 rpmpopt.d
> | -rw-r--r--  1 opkg  opkg   7537 Apr 12 17:46 rpmpopt.rpmorig
> | -rw-r--r--  1 opkg  opkg    159 Nov  8 18:52 uuid
>
> As you can see, no content change, no permission changes, nothing  
> (sure,
> as I said, only a typo in a completely different edge of the packaging
> was fixed, everything else remained the same). Nevertheless RPM 5
> thought there was a conflict and produced .rpmorig or .rpmnew files  
> for
> all(!) %config files in the package. The first time I observed this, I
> still thought: "well, strange, but perhaps there was really a  
> conflict".
> But now I'm not than surprised: there is really no difference, but
> nevertheless RPM 5 thinks it is.
>

The file action state also involves values in the old/new Headers. That
information needs to be displayed as well as the file attributes in  
order
to understand the behavior.

> Does anybody has a clue what happened here?
>
> All this is with RPM 5.1b2, BTW!
>
> For one installation I currently even can reproduce the problem:
>
> | # /usr/opkg/bin/openpkg rpm -V openpkg
> | S.5....T  c /usr/opkg/etc/rc.conf
> | # /usr/opkg/bin/openpkg rpm -Uvh /usr/opkg/RPM/PKG/ 
> openpkg-4.0a0-20080413.amd64-freebsd7.0-opkg.rpm --replacepkgs
> | Preparing...                 
> ########################################### [100%]
> |    1:openpkg                warning: /usr/opkg/.bash_login  
> created as /usr/opkg/.bash_login.rpmnew
> | warning: /usr/opkg/.bashrc created as /usr/opkg/.bashrc.rpmnew
> | warning: /usr/opkg/etc/openpkg/managers saved as /usr/opkg/etc/ 
> openpkg/managers.rpmorig
> | warning: /usr/opkg/etc/openpkg/platform saved as /usr/opkg/etc/ 
> openpkg/platform.rpmorig
> | warning: /usr/opkg/etc/openpkg/release saved as /usr/opkg/etc/ 
> openpkg/release.rpmorig
> | warning: /usr/opkg/etc/openpkg/rpmlua saved as /usr/opkg/etc/ 
> openpkg/rpmlua.rpmorig
> | warning: /usr/opkg/etc/openpkg/rpmmacros saved as /usr/opkg/etc/ 
> openpkg/rpmmacros.rpmorig
> | warning: /usr/opkg/etc/openpkg/rpmpopt saved as /usr/opkg/etc/ 
> openpkg/rpmpopt.rpmorig
> | warning: /usr/opkg/etc/rc.conf created as /usr/opkg/etc/ 
> rc.conf.rpmnew
> | ########################################### [100%]
>

If you add -Uvv instead of -Uvh, the FA_BACKUP and/or other elements
necessary to diagnose the behavior are displayed.

73 de Jeff
Received on Sun Apr 13 15:34:29 2008
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.