SCIENTIFIC-LINUX-USERS Archives

April 2005

SCIENTIFIC-LINUX-USERS@LISTSERV.FNAL.GOV

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Jon Peatfield <[log in to unmask]>
Reply To:
Jon Peatfield <[log in to unmask]>
Date:
Wed, 13 Apr 2005 01:42:08 +0100
Content-Type:
TEXT/PLAIN
Parts/Attachments:
TEXT/PLAIN (48 lines)
On Tue, 12 Apr 2005, Steve Traylen wrote:

> On Tue, Apr 12, 2005 at 02:13:58PM +0100 or thereabouts, Mark Nelson wrote:
> > Wouldn't it be better to have one behaviour or the other, my personal
> > one is for .rpmnew config files as this cuts down on the configuration
> > files having to be touched manually by the upgrade process. 
> 
> Hi Mark,
> 
> This depends on the individual .spec file. 
> 
> If it has 
> 
> %config(noreplace) /etc/ssh/sshd_config
<snip> 
> There is a very good summary of the different cases here:
> 
> http://www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html

In case it isn't obvious to anyone, you can pick out the status for each 
file (the %{FILEFLAGS} option on rpmquery) to see if the file is a 
%config(noreplace) or not.  Just and the flag with 0x11 I think (I know I 
found a table of the values at one point).

e.g. the following perl fragment is what we 
use to test if an rpm would clash with changes we have made...

  <snip>
    open (IN, "rpmquery -p --qf '[P=%{FILENAMES} FL=%{FILEFLAGS} M=%{FILEMODES:octal} SL=\"%{FILELINKTOS}\"\n]' $i|") || die "Can't run rpmquery -lp $i\n";
    while (<IN>) {
	chomp;
	if (/^P=(.+)\s+FL=(\d+)\s+M=(\d+)\s+SL="(.*)"/) {
	    my $path=$1, $flags=$2, $pmode=$3, $syml=$4;
	    if (defined($danger{$path})) {
		if (($flags & 17) == 17) {
		    dprin(1, "$path overlaps but is listed as %config(noreplace) (fflags=$flags)");
		} else {
		    $danger{$path}++;
		    $overlaps++;
		...
  <snip out more tests on the files from a potential package upgrade...>

We also check for things like matching some patterns, some permissions
changes, shared-libs, init files, and kernel files/modules then later the
code uses that info to decide if we need to take any special actions.

 -- Jon

ATOM RSS1 RSS2