[WBEL-devel] file by file check, RC2 vs 3WS

David Cox david.e.cox@nasa.gov
Thu, 04 Dec 2003 12:25:14 -0500


--=-zamxxvRkTXK3GsrSbw+8
Content-Type: text/plain
Content-Transfer-Encoding: 7bit


I ran a check on whitebox rpm's  vs RedHat-3WS looking for missing
files, executables with different dynamic links and different file
sizes.  

The whitebox rpms look pretty good on completeness and library links. An
error log is attached. Tora is the only package with different linking. 
emacs,grub and filesystem rpms can be fixed with

emacs and grub:
  rpmbuild --define "_host i386-redhat-linux" --rebuild 

filesystem:
  rpmbuild --define "__debug_package 0" --rebuild 

as pointed out by Michael Redinger on the rhel-rebuild mailing list.  

File size differences, however, are pretty common.  With a 10% threshold
there are about 3200 file size differences.  About 2900 of them end with
.gz, and are mostly multi-language man pages.

But there are some larger binaries in /bin and /sbin that deserve a
closer look, e.g. /usr/sbin/kppp is 5 times larger in whitebox and has 
suid root permissions, in RHEL the suid bit is not set.  

Does anyone know if ownership/permissions are ever adjusted on an rpm
install, or are they always set correctly in the rpm file itself?

dave

PS. I've also attached the perl script that runs the check.



-------------------------------------------------------------------
   David E. Cox        david.e.cox@nasa.gov      (757) 864-6658
-------------------------------------------------------------------

--=-zamxxvRkTXK3GsrSbw+8
Content-Disposition: attachment; filename=wblogs_nosize.txt
Content-Type: text/plain; name=wblogs_nosize.txt; charset=UTF-8
Content-Transfer-Encoding: 7bit

GConf2-devel-2.2.1-1.i386.rpm                     	
	Package contains extra file:  ./usr/share/gtk-doc/html/gconf/left.png
	Package contains extra file:  ./usr/share/gtk-doc/html/gconf/up.png
	Package contains extra file:  ./usr/share/gtk-doc/html/gconf/right.png
	Package contains extra file:  ./usr/share/gtk-doc/html/gconf/home.png

coreutils-4.5.3-26.i386.rpm                       	
	Package contains extra file:  ./usr/bin/su

emacs-21.3-4.i386.rpm                             	
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/emacsserver
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/fns-21.3.1.el
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/fakemail
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/emacsserver
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/sorted-doc
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/movemail
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/rcs2log
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/hexl
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/fns-21.3.1.el
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/profile
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/fakemail
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/yow
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/vcdiff
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/movemail
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/cvtmail
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/rcs2log
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/vcdiff
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/yow
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/cvtmail
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/profile
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/hexl
	Package contains extra file:  ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/digest-doc
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/digest-doc
	Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/sorted-doc

festival-1.4.2-18.i386.rpm                        	
	Package is missing file: ./usr/share/festival/etc/unknown_RedHatLinux
	Package contains extra file:  ./usr/share/festival/etc/unknown_Linux/audsp
	Package contains extra file:  ./usr/share/festival/etc/unknown_Linux
	Package contains extra file:  ./usr/share/festival/etc/unknown_Linux/.made
	Package is missing file: ./usr/share/festival/etc/unknown_RedHatLinux/audsp

filesystem-2.2.1-3.i386.rpm                       	
	Package is missing file: ./usr/src/debug

foomatic-2.0.2-15.1.1.i386.rpm                    	
	Package contains extra file:  ./usr/share/foomatic/db/source/printer/Dell-M5200.xml.dell
	Package contains extra file:  ./usr/share/foomatic/db/source/printer/Dell-S2500.xml.dell

grub-0.93-4.i386.rpm                              	
	Package is missing file: ./usr/share/grub/i386-redhat/e2fs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/vstafs_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/stage1
	Package is missing file: ./usr/share/grub/i386-redhat/xfs_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/ffs_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/reiserfs_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/minix_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/fat_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/stage2
	Package contains extra file:  ./usr/share/grub/i386-pc/stage1
	Package contains extra file:  ./usr/share/grub/i386-pc/jfs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/reiserfs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/ffs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/xfs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/e2fs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc/minix_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/jfs_stage1_5
	Package is missing file: ./usr/share/grub/i386-redhat/stage2
	Package is missing file: ./usr/share/grub/i386-redhat
	Package is missing file: ./usr/share/grub/i386-redhat/vstafs_stage1_5
	Package contains extra file:  ./usr/share/grub/i386-pc
	Package contains extra file:  ./usr/share/grub/i386-pc/fat_stage1_5

tora-1.3.9.2-1.i386.rpm                           	
	Missing link in ./usr/lib/tora/toanalyze.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toanalyze.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toanalyze.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/tobrowser.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/tobrowser.tso:	libm.so.6
	Missing link in ./usr/lib/tora/tobrowser.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/tochart.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/tochart.tso:	libm.so.6
	Missing link in ./usr/lib/tora/tochart.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toeditextensions.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toeditextensions.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toeditextensions.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toextract.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toextract.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toextract.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toproject.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toproject.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toproject.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toqsqlconnection.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toqsqlconnection.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toqsqlconnection.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toresult.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toresult.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toresult.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/tosqledit.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/tosqledit.tso:	libm.so.6
	Missing link in ./usr/lib/tora/tosqledit.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/totemplate.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/totemplate.tso:	libm.so.6
	Missing link in ./usr/lib/tora/totemplate.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/towidget.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/towidget.tso:	libm.so.6
	Missing link in ./usr/lib/tora/towidget.tso:	libstdc++.so.5
	Missing link in ./usr/lib/tora/toworksheet.tso:	libgcc_s.so.1
	Missing link in ./usr/lib/tora/toworksheet.tso:	libm.so.6
	Missing link in ./usr/lib/tora/toworksheet.tso:	libstdc++.so.5

xemacs-21.4.13-2.ent.i386.rpm                     	
	Package contains extra file:  ./usr/bin/xemacs-21.4.13-3fb307ff.dmp
	Package is missing file: ./usr/bin/xemacs-21.4.13-3f6f23d8.dmp


--=-zamxxvRkTXK3GsrSbw+8
Content-Disposition: attachment; filename=testrebuild.pl
Content-Type: text/x-perl; name=testrebuild.pl; charset=UTF-8
Content-Transfer-Encoding: 7bit

#!/usr/bin/perl -w

# Directories of binary rpm files:
$RH_RPMS = "/usr/local/rhel-3ws/RPMS/";
$WB_RPMS = "/usr/local/whitebox-rc2/RPMS/";

# Size difference to trigger error, .1 = plus/minus 10%
$SizeError=.10;

# Temporary working directories
# Careful where these point, they get a "rm -rf" cleaning!
$RHTMP="/tmp/RH-$$";
$WBTMP="/tmp/WB-$$";

# Grab filenames on all the redhat rpms
opendir(DIR,$RH_RPMS);
@allrpms= grep (/rpm$/, readdir(DIR) );
closedir(DIR);

foreach $rpm (sort @allrpms){
    if (! (-e "$WB_RPMS/$rpm") ) {
	print " No equivalent rebuild for $rpm \t Skipping\n";
	next;
    }
    # Initialize
    %allfiles=(); %RHhash=(); %WBhash=();
    $fileproblems=0; $libproblems=0;
    system("rm -rf $RHTMP;mkdir $RHTMP");
    system("rm -rf $WBTMP;mkdir $WBTMP");
    # Extract RPMS
    system("cd $RHTMP/; rpm2cpio $RH_RPMS/$rpm | cpio -id --no-absolute-filenames --quiet");
    system("cd $WBTMP/; rpm2cpio $WB_RPMS/$rpm | cpio -id --no-absolute-filenames --quiet");

    # Parse name/size info
    @RHnamesize=`cd $RHTMP/; find ./ -printf "%p:_:%s\n"`;
    @WBnamesize=`cd $WBTMP/; find ./ -printf "%p:_:%s\n"`;
    for ($i=0;$i<@RHnamesize;$i++){
	($file,$size)=split(/:_:/,$RHnamesize[$i]);
	$RHhash{"$file"}=$size;
	$allfiles{"$file"}=1;
    }
    for ($i=0;$i<@WBnamesize;$i++){
	($file,$size)=split(/:_:/,$WBnamesize[$i]);
	$WBhash{"$file"}=$size;
	$allfiles{"$file"}=1;
    }

    
    # Print and tag file errors if appropraite
    printf ("%-50s\t", $rpm);
    foreach $file (keys %allfiles){
	if (!(exists $RHhash{"$file"})){
	    print "\n\tPackage contains extra file:  $file";
	    $fileproblems=1;
	}
	elsif (!(exists $WBhash{"$file"})){
	    print "\n\tPackage is missing file: $file";
	    $fileproblems=1;
	}
	else {
	    if ($RHhash{"$file"}>0){
		$ratio=($WBhash{"$file"})/($RHhash{"$file"})}
	    else{
		$ratio=1-$WBhash{"$file"};  # Negative ratios indicate filesize vs. zero in RedHat
	    }
	    if (($ratio-1)*($ratio-1)>($SizeError*$SizeError)) {
		printf("\n\tSize Ratio: %3.2f on file:%s",$ratio,$file);
		$fileproblems=1;
	    };
	}
    }

    
    # Select executable files
    @RHexec=`cd $RHTMP/; find ./ -perm +111 -type f -print`; 

    # Check library dependencies
    foreach $executable (@RHexec) {
	chop $executable;
	#  Move on if no equivalent binary exists in rebuild
	if (! (-e "$WBTMP/$executable") ) {next;}

	# Get shared libs
	@RHlibs=`ldd $RHTMP/$executable`;
	@WBlibs=`ldd $WBTMP/$executable`;

        # Clean up ldd output
	$RHlibline=join('',(sort @RHlibs)); 
	$WBlibline=join('',(sort @WBlibs)); 
	$RHlibline=~ s/=>(.*)(\n)/\n/g; $RHlibline=~ s/(\s+)/ /g; 
	$WBlibline=~ s/=>(.*)(\n)/\n/g; $WBlibline=~ s/(\s+)/ /g;
	@RHlibs=split(/ /,$RHlibline);
	@WBlibs=split(/ /,$WBlibline);

        # Print and tag library errors
	foreach $lib (@RHlibs){
	    $searchpat=$lib;
	    $searchpat =~ s/\+/\\\+/g;
	    $searchpat =~ s/\./\\\./g;
	    unless ($WBlibline =~ (/$searchpat/)){
		print "\n\tMissing link in $executable:\t$lib";$libproblems=1;
	    }
	}
	    
	foreach $lib (@WBlibs){
	    $searchpat=$lib;
	    $searchpat =~ s/\+/\\\+/g;
	    $searchpat =~ s/\./\\\./g;
	    unless ($RHlibline =~ (/$searchpat/)){
		print "\n\tExtra link in $executable:\t$lib";$libproblems=1;
	    }
	}
    }
    if ($fileproblems || $libproblems) { print "\n\n";} else {print "MATCH\n";} 
}


--=-zamxxvRkTXK3GsrSbw+8--